Apk反编译&回编译(一)

本文介绍如何使用ApkTool、Smali2Java等工具进行未加固型APK的反编译与回编译过程。涵盖基本操作步骤、smali代码的理解与转换,以及如何注入自定义代码实现功能扩展。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


本篇主要讲解未加固型(纯混淆+签名)apk反编译和回编译方法

  1. 主要使用工具:ApkTool , Smali2Java , apk签名工具

  2. Apk反编译之使用姿势
    这里使用demo.apk 作为反编译文件

a.安装ApkTool, 将demo.apk放入ApkTool所在文件夹,打开Terminal终端,使用cd命令进入ApkTool所在路径。 示例:
如ApkTool安装在D:\ApkTool 下,则将demo.apk放入该文件夹下,打开Terminal终端,依次输入 D:回车 –> cd ApkTool 回车 即可进入ApkTool所在路径

b.此时Terminal定位在D:\ApkTool> , 输入 apktool d demo.apk 回车, 稍等几秒即会在D:\ApkTool下生成demo文件夹,该demo文件夹即是demo.apk反编译后的内容

c.demo文件夹文件分析

这里比较关键的文件(夹): smali 和 AndroidManifest.xml res主要是该apk文件所用到的资源(图片,文字等)文件
smali : 里面放置了许多smali文件,这里就是整个apk的核心逻辑代码,但是smali语言极难看懂,类似汇编语言(网上都这样说,哈哈),不过一般的方法(函数)的开始和结束以及调用能看懂一二,对于我们这种smali渣渣来说就足够用了。
AndroidManifest.xml : 所谓的清单文件,主要配置了该apk版本,编译版本,包名,权限以及组件的声明等重要信息.下面的回编译注入自己的代码时需要对该文件进行写操作。

d.上面说到smali比较难看懂,Smali2Java这个工具即可将smali转为java,这就能看懂了,也就能分析别人的逻辑代码了,当然只能是部分,因为有代码混淆。
到此,Apk反编译也就结束了,反编译的作用主要是分析别人的逻辑代码,或者偷res的资源文件,再一个就是注入自己的逻辑代码回编译…

  1. Apk回编译之使用姿势

a. 简单回编译: 对于这种替换个App名称,版本号,换个图片什么的,图片可通过替换res下对应的图片(名字大小格式确保一样),App名称,版本号什么的可直接修改上面提到的AndroidManifest.xml清单文件,保存。 打开Terminal终端,使用cd命令进入ApkTool所在路径。 此时Terminal定位在D:\ApkTool> 输入 apktool b demo 回车, 稍等几秒即会在demo文件夹下生成dist和build文件夹(不用管build文件夹),dist里面就是回编译生成的apk文件


但是该apk不能安装使用,需要对其重新签名即可安装使用,签名步骤略去

b. 注入自己的逻辑代码回编译: 这里以嵌入有米广告积分墙SDK为例
在正常的项目开发中嵌入此SDK需要配置这些信息–> 1.在AndroidManifest.xml 清单文件中配置有米积分墙SDK所需的权限,组件声明等信息; 2.在项目中引入有米SDK所需的jar包; 3.在代码中添加打开有米积分墙的逻辑代码
现在换成回编译又怎么处理呢? 下面来分析思路: 1. 配置清单这一步骤和简单回编译一样的,直接在清单文件中添加权限,组件声明代码即可 2. 引入jar包, 回编译的时候怎么引入jar包呢, 查看反编译后的smali文件夹就会发现,项目依赖的所有jar包都被反编译到smali文件夹下面了,这样一来,我们只需自己撸个简单的集成了有米SDK的项目生成release版本的test.apk文件,反编译即可在smali文件夹下获得有米sdk的smali文件,放在了 smali/net/youmi/android这个文件夹下,如图:

复制net文件夹到demo/smali 文件夹下即可

3.在代码中添加打开有米积分墙的逻辑代码, 回编译是把smali文件转为dex文件, 嵌入的逻辑代码又是java代码,这时候只需要上一步的test.apk生成的smali文件中的逻辑代码复制到demo/smali文件夹下对应的smali文件中。
下面是打开有米积分墙的smali代码,写成了一个方法,
调用的时候 invoke-virtual {p0}, Lcom/jeffer/ym/MainActivity;->showYM()V,其中的com/jeffer/ym/MainActivity换成你需要注入代码所在的Activity的全类名。 最后在Terminal定位到D:\ApkTool> 输入 apktool b demo 回车, 稍等几秒即会在demo文件夹下生成dist和build文件夹(不用管build文件夹),dist里面就是回编译生成的apk文件,重新签名后安装,打开APP即可在你注入代码处打开有米积分墙。

c. 注入逻辑代码和控件回编译: 下回分解

APK+Dex文件反编译回编译工具》 简称:APKDB 是款,针对Android OS系统的APK程序,直接反编译修改的工具。 APKDB集合了当今最强悍,最犀利的APK及Dex文件编译工具; 正常安装后,它直接在【鼠标右键】创建快捷菜单; 非常方便汉化工作者,对APK或Dex文件进行简易的反编译回编译操作; ___________________________________________________________________ 功能特性 · 对*.Apk 文件 反编译回编译 用于汉化修改 · 对*.Dex 文件 反编译回编译 或查看详细源代码 · 对*.Apk 文件 批量反编译回编译 · 对*.Apk、*.Zip 文件执行签名 · Windows下直示Apk件自身图标 声明 1.本工具必须先安装JAVA7; 2.如需显示APK自身图标必须先安装.NET Framework4。 ___________________________________________________________________________________________ 下载地址 百度云下载:http://idoog.cn/apkdb | http://pan.baidu.com/s/1eQoZtmE MEGA下载: http://idoog.me/apkdb 谷歌云端硬盘:http://goo.gl/IUzIlW 官方网站:http://www.idoog.me 嵌入式汉化教程:http://idoog.cn/apk_hh/ 或 http://idoog.me/apk_hh/ ____________________________________________________________________________________________ 使用说明: 本工具执行安装后,直接在【鼠标右键】生成快捷键,自动关联APK、DEX、 Odex、Zip文件。只要在电脑任意非C盘根目录,【鼠标右键】点击相关文件,即 可编译操作。如,反编译APK及DEX文件,反编译后生成可编译的同名文件夹, 汉化修改完成后,对文件夹点击【鼠标右键】根据文件夹反编译前的文件类, 现在【回编译XXX文件】即可! 同时,针对apkzip文件增加签名操作,只要【鼠标右键】点击,选择 【签名XX文件】即可!签名前无需删除原来的【META-INF】签名数据。本工具会 判别apk还是zip并自动删除签名数据。 ____________________________________________________________________________________________ 常见问题: 1、被杀毒软件拦截误杀(安装前,关闭杀毒软件) 2、没有管理员权限(右键以管理员身份运行C:\Apkdb\安装.exe) 或者,使用兼容模式 (右键-属性-兼容性-兼容模式[Windows XP SP3]) 以及 特权等级 勾选“以管理员身份运行此程序” 3、UAC限制 安装过程没有写入注册表提示,直接显示安装完成 (右键 我的电脑-管理-本地用户-用户-Administrator(√ 密码永不过期) 4、安装成功,安装过程有写入注册表提示,但是右键APK 没有菜单 (检查是不是安装了PC版的手机管理工具,关联了APK文件) 5、安装后无法编译文件,提示JAVA 错误 (未安装JAVA平台,或安装错误。请卸载后重启电脑,重装再次重启电脑) 6、安装成功后,编译文件提示 “Can’t create the output directory\\****\smali” (这是文件夹 没有写入权限。检查是否直接在硬盘分区根目录编译了? Apktool不能在磁盘分区。如:C盘 D盘 根目录! 如果不是根目录,请检查apk文件名称是不是有问题。如,文件名结尾空格。) 7、能反编译,但无法回编译 (可能是被旧版本的Apktool编译过,试试用旧版的反编译,用新版的回编译) 8、回编译出错问题: (1.提示 strings.xml 最后行错误,检查是否符号错误; (2.提示 strings.xml 最顶部含中文代码首行错误,编码格式不对,转换成 UTF-8; (3.提示 public.xml 出错,检查改动过的 arrays.xml 是否代码有错误的地方; (4.其他错误,检查是否复制aapt.exe 文件到系统目录如:C:\Windows\System32\aapt.exe 9、安装过程提示 systeminfo 提示“不是内部或外部命令” 请在系统变量【path
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值