ysrb

如何反编译、修改、重新打包APK

Java语言特性注定了轻松被爆菊的命运,虽然有代码混淆,反编译后的代码还是具备一定的可读性,为反编译、修改代码提供了便利,下面祭出完爆APK的几大神器:

  1. Apktool,将APK里的资源和代码解压出来,将Binary XML还原成可读XML文件,class反编译成smali,连9.png也能还原;
  2. dex2jar,smali代码一样很难看懂,此神器将APK里的dex还原成jar,便于用JD GUI查看,如果你能牛到直接看懂smali代码,请忽略;
  3. JD GUI,反编译class的神器,也支持jar,没有混淆的代码几乎能直接编译,混淆后的代码,慢慢看也能看懂,用于找要修改的地方;
  4. Eclipse + ADT,这个就不介绍了,当然Android Studio也可以;
  5. APK签名工具,签名后的APK才能安装到Android系统。

 反编译代码

命令行如下:

apktool d -d xxx.apk

-d是指输出为debug版本,重新打包后,可以打印出各种日志。

修改smali代码

apktool将apk反编译的结果输出在当前文件夹下,smali代码可读性不强,尤其是混淆后的代码更加难以看懂,smali语法的介绍请参考,http://blog.csdn.net/wdaming1986/article/details/8299996

为了更快找到要修改的代码在哪,需要使用dex2jar将apk里的dex转成jar,命令行如下:

dex2jar xxx.apk

在当前文件生成了xxx.jar文件,用JD GUI打开jar文件,就直接能看到java代码了,没有混淆的代码能很好的还原,混淆后的代码只是把命名打乱,耐着性子看,也能看懂。

看完代码后,找到要修改的代码行,对照着找到smali文件所对应的行,简单的修改可以直接参考smali语法介绍进行修改,如:bypass某个函数之类。

复杂的修改建议用Eclipse新建一个Android工程,把要注入的代码实现,打包成apk,再用apktool反编译后,直接将smali代码copy到对应的地方,并做简单的调用即可。

打包并签名

输入命令行

apktool b -d xxx

重新签名

java -Xmx512m -jar signapk.jar -w testkey.x509.pem testkey.pk8 xxx.apk xxx-unaligned.apk
zipalign -f 4 xxx-unaligned.apk xxx-signed.apk

xxx-signed.apk就能在手机上安装了。

2 thoughts on “如何反编译、修改、重新打包APK

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

This site uses Akismet to reduce spam. Learn how your comment data is processed.