Android反编译之反编译源码

以微信安装包为例讲解:

右击APK文件,以压缩包方式打开,截图如下:

  
源码存放在classes.dex文件中。我们可以直接查看res下面的图片文件,但对于源代码无法查看,AndroidManifest.xml清单等xml文件打开也是乱码。
 
需要用到的工具包dex2jar、jd-gui、apktool。
 

1、 查看源码

(1) 修改安装包文件.apk为.zip后缀解压,记录classes.dex的路径。
(2)cmd定位至工具包中的dex2jar,在命令行运行如下:
结果会在classes.dex所在目录下生成classes_dex2jar.jar,用jd-gui.exe打开此文件,如下: 
从中我们可以大致了解代码结构,虽然源码经过proguard混淆后可读性很差,但还是可以通过关键字(不可混淆的类名等)查找获取到一定的信息。不过jd-gui无法通过源码查找,只支持查找类型、构造函数、常量、属性、方法。 
 

2、查看资源文件和xml文件

(1)下载apktool及对应平台的依赖包,解压后将平台依赖包中的apktool.jar复制到apktool目录下),在命令行运行 命令行: apktool . bat d - f xxx . apk  xxx
其中d表示解包,xxx.apk为待反编译apk路径,xxx为目标文件夹名,(apktool不支持中文目录),如下:
结果会在apktool.bat所在目录下生成weixin文件夹,现在就可以正确的查看xml资源(包括res下的所有资源,如点9图片、drawable、layout、value、menu等等)了,比如AndroidManifest.xml 
 

3、修改后重新打包成APK 

依然使用步骤2中的apktool,命令如下 : apktool . bat b xxx
其中b表示build,xxx表示步骤2中解包出来的文件夹,我们可以对某一文件进行修改,重新打包
打包完成后会在xxx目录下生成build和dist两个文件夹,dist存放重新生成的APK,build存放该APK的具体组成信息。
 

小Tips

1. 利用图片的名称对apk破解后的资源文件进行整体搜索。通过Apktool可以得到一堆资源文件。然后Copy到Eclipse的某个工程中。进行搜索,最最有效率的方式(还记得快捷键吧Ctr+H)。
2.  利用R.java文件中的id号, 将得到的源文件进行搜索. 这个时候, 基本上所使用的元素的位置基本上清楚了。
3. 当无法定位Activity对应的Layout在哪里时, 这个时候需要用到hierarchyViewer去查看布局。然后结合1和2的信息做交叉理解。(很有必要提及的问题, hierarchyViewer里面涉及的布局, 并非跟Layout的xml完全一致,  在hierarchyViewer中,很容易看到GridView中居然可以包含一个LinearLayout, 这个实际上在XML中,是不允许这样描述的。一般Android是在源码中实现一个GridView包含一个LinearLayout的, 这个时候,不得不利用到上文1和2描述的方法交叉定位).





转载于:https://www.cnblogs.com/linux007/p/5782663.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值