作者:Yogi
原理
利用解压缩工具获得源码的classes.dex文件;
通过dex2jar工具将classes.dex文件转换成jar包,并用jd_gui工具查看源码;
确定要改的位置后,在对应的smali文件中做修改;
修改完smali文件后再把smali文件打包成classes.dex,并通过压缩工具将原apk的classes.dex替换;
最后通过签名工具,重新生成新的可用的apk。
下面我们以y2.apk为apk名举例进行具体步骤的说明
步骤说明
通过解压缩工具获得源码的classes.dex文件
复制y2.apk文件,将复制的文件改名为y2.rar,通过Windows的WinRar工具,解压缩到y2文件夹,即可看到classes.dex文件
通过dex2jar工具将classes.dex文件转换成jar包
将上述的classes.dex文件拷贝到dex2jar.bat所在的文件夹,启动cmd命令行,执行如下操作
即可将classes.dex文件转换成jar包。如下图
通过jd_gui工具查看jar包,分析要修改的位置
如图
可以看到源码,虽然源码经过混淆有些难读,但是类名以及基本的函数,如onCreate\onDestroy等方法没有被混淆。在此处确定要修改的类以及函数之后,进入下一步。
获取源码的smali文件
启动cmd命令行,执行如下操作
就会在D盘根路径下生成一个out文件夹,里面就是y2.apk源码的smali文件。
修改对应的smali文件
根据第3步分析得到的要修改的位置,找到对应的smali文件,进行修改与保存即可。
将修改后的smali文件转换成classes.dex文件
启动cmd命令行,执行如下操作
通过smali-2.0.3.jar工具就能把smali文件所在的out文件夹转换成classes.dex文件。
替换classes.dex文件
如下图,通过winrar工具将y2.apk打开后,直接第6步生成的classes.dex拖到里面进行替换。
签名打包,生成新的可运行的apk
启动cmd命令行,执行如下操作
这样,就利用signapk.jar这个工具,以及密钥,就把y2.apk重新签名打包成了yy2.apk,至此符合我们要求的,可运行的apk就做好了。
使用工具下载
过程中用到的工具包:工具包下载