标签:
反编译
apktool
这是一个可以对apk进行反编译和重打包的工具。
反编译apk
1.把apk文件放到apktool解压目录下。
2.打开命令行,cd到工具解压缩目录,使用“apktool d apk文件路径”命令反编译apk。
apktool反编译命令辅助脚本代码(windows)
3.反编译生成的文件就在工具解压缩目录下,可以看到apk中所有的资源文件、库文件、smali文件(java字节码的反汇编代码文件)。
smali2java是一个可以将smali代码反编译成java代码的工具。
重打包
1.使用“apktool b 文件夹路径”命令重新打包apk。
apktool重打包命令辅助脚本代码(windows)
2.打包完成后,在目标文件夹下会多出两个文件夹build和dist,其中dist文件夹中的apk就是重打包后的apk。
dex2jar
这个工具用于反编译dex文件,并导出jar。
1.使用解压缩工具打开apk,把classes.dex文件放到dex2jar的解压缩目录下
2.打开命令行,在dex2jar解压缩目录下执行“dex2jar classes.dex”命令,反编译dex文件并生成jar。
jd-gui
这个工具用于查看jar文件中的所有class的源码。
打开jd-gui.exe,直接把jar文件拖到工具里就可以了。
点击在File—Save All Sources(Ctrl + Alt + S)可以保存java源码。
防止反编译
加壳说明
加壳的全称应该是可执行程序资源压缩,是保护文件的常用手段。 加壳过的程序可以直接运行,但是不能查看源代码.要经过脱壳才可以查看源代码。
加壳的另一种常用的方式是在二进制的程序中植入一段代码,在运行的时候优先取得程序的控制权,做一些额外的工作。大多数病毒就是基于此原理。
apk加壳
1.打开加壳工具(我这里使用的是windows版的),选择apk,点击加密。
2.等待下方提示“加密成功”,会在apk所在目录生成xx.apk.dexcrypt.apk(加密但未签名的apk)和dg.apk.dexcrypt.signed.apk(加密并使用默认签名的apk)。
3.一般情况下,我们还需要使用自定义的.keystore文件对apk进行重签名。
可以使用命令“jarsigner -keystore .keystore文件路径 -storepass 别名 -keypass 密码 -signedjar 签名apk生成路径 未签名apk路径 别名”对apk进行签名(需要java环境)
示例:
jarsigner -keystore release.keystore -storepass linchaolong -keypass xxx -signedjar dg-final.apk dg.apk.dexcrypt.apk linchaolong
4.对签名后的dg-final.apk进行反编译。可以看到并没有反编译成功。
【Android】apk反编译与防止反编译
标签:
原文地址:http://blog.csdn.net/linchaolong/article/details/44080051