首页
社区
课程
招聘
[旧帖] [讨论][分享]android 反编译初次尝试! 0.00雪花
发表于: 2012-12-11 22:50 1449

[旧帖] [讨论][分享]android 反编译初次尝试! 0.00雪花

2012-12-11 22:50
1449
在论坛上看了几篇相关的帖子,google搜索了一下相关的主题。初级入门不外乎下面基本方面,做一个基本的总结:
1. 安装 JAVA 和 apktool

    1).首先安装需要JAVA环境,先下载JDK/JRE,点击下载,已经有JAVA环境的可跳过此步


    3).解压apktool-install-windows-r04-brut1.tar.bz到任意文件夹,然后解压apktool.jar 到apktool-install-windows-r04-brut1.tar.bz所在的文件夹下。

    4).打开cmd,用cd命令转到刚刚解压apktool-install-windows-r04-brut1.tar.bz所在的文件夹,输入apktool,出现一些命令说明即成功安装。


2. 下载dex2jar 
http://code.google.com/p/dex2jar/downloads/list 

3. 下载JD-GUI
http://java.decompiler.free.fr/?q=jdgui

经过上面三部,基本环境已经OK。 下面以Hello World 为例说明基本的操作。

4. 使用apktool 解压Apk ,以weixin为例,执行下面命令后,apk中的资源等文件将解压至mm.weixin 目录下了。
C:\apktool>apktool\apktool.bat d com.tencent.mm.weixin.apk mm.weixin

I: Baksmaling...
I: Loading resource table...
I: Loaded.
I: Decoding AndroidManifest.xml with resources...
I: Loading resource table from file: C:\Documents and Settings\ZhangWJ\apktool\
ramework\1.apk
I: Loaded.
I: Decoding file-resources...
I: Decoding values */* XMLs...
I: Done.
I: Copying assets and libs...


5. 解压出来的目录中,res 目录中的字符串肯能会是我们非常关心的部分, 对于修改code直接暴力破解,就是要修改smali 目录下对应的反编译文件。  
另外单独提一下lib 目录,如果软件有使用到动态链接库,则解压后会出现在这个目录。这里面可能会有一些很重要的东东哦! C++不过需要反汇编.

6. 到上面的步骤,我们仍然未看到Java源码,实际上,从dex 到 Java的过程是dex2jar 及 JD-GUI 的功劳。

7. dex2jar 过程。这次的输入文件,并不是我们上面apktool的产出。 而是,我们直接使用7z之类的解压软件从apk中提取的dex文件(classes.dex)。
C:\apktool>dex2jar-0.0.9.12\dex2jar.bat classes.dex

this cmd is deprecated, use the d2j-dex2jar if possible
dex2jar version: translator-0.0.9.12
[COLOR="Red"]dex2jar classes.dex -> classes_dex2jar.jar[/COLOR]
Done.


8. 得到classes_dex2jar.jar 后,我们使用jd-gui 打开它即可看到Java源码。

9. 无论是我们使用修改第四步中得到的smali 文件 还是修改第八步中得到的Java源码,我们最终的目的还是要重新打包成apk,重新打包的过程,则是第四步的逆过程。
C:\apktool>apktool\apktool.bat b mm.weixin my_weixin.apk


但是最后,很不幸,打包的过程失败了, 原因我还在查找中.... 也请高人指导!
(PS: 但是如果你是使用hello world 来做实验,肯定是成功的)
ion, 7, -F, C:\DOCUME~1\ZhangWJ\LOCALS~1\Temp\APKTOOL7685035221103364315.tmp, -I
, C:\Documents and Settings\ZhangWJ\apktool\framework\1.apk, -S, C:\apktool\mm.w
eixin\res, -M, C:\apktool\mm.weixin\AndroidManifest.xml]
        at brut.androlib.res.AndrolibResources.aaptPackage(AndrolibResources.jav
a:255)
        at brut.androlib.Androlib.buildResourcesFull(Androlib.java:324)
        at brut.androlib.Androlib.buildResources(Androlib.java:269)
        at brut.androlib.Androlib.build(Androlib.java:192)
        at brut.androlib.Androlib.build(Androlib.java:174)
        at brut.apktool.Main.cmdBuild(Main.java:188)
        at brut.apktool.Main.main(Main.java:70)
Caused by: brut.common.BrutException: could not exec command: [aapt, p, --min-sd
k-version, 7, --target-sdk-version, 7, -F, C:\DOCUME~1\ZhangWJ\LOCALS~1\Temp\APK
TOOL7685035221103364315.tmp, -I, C:\Documents and Settings\ZhangWJ\apktool\frame
work\1.apk, -S, C:\apktool\mm.weixin\res, -M, C:\apktool\mm.weixin\AndroidManife
st.xml]
        at brut.util.OS.exec(OS.java:83)
        at brut.androlib.res.AndrolibResources.aaptPackage(AndrolibResources.jav
a:253)
        ... 6 more


10. 假设,我们想要修改的部分都已修改好,并且打包成功,是不是就可以使用这个apk了呢?其实还有一步,签名!
签名其实现在都有比较傻瓜的工具了,我就不在多说了。

另外,我发现其实已经有很多朋友将上面的工具集成到一个傻瓜工具包了,看大家的喜欢了。

其实我个人是比较推荐前期一步步的来做,这样才能更加立即原理,如果碰到什么问题,也好深入的去查。

[课程]Linux pwn 探索篇!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 34
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
写得很详细,
2012-12-11 23:13
0
雪    币: 67
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
关于帖子最后的编译问题,我已经找到答案,请参看:
http://bbs.pediy.com/showthread.php?p=1126734#post1126734

在看雪的第一贴,也算是个圆满的结束了。

手动反编译/编译操作起来确实不太方便,但是GUI 的tool好像很慢,不明白原因... 后面准备写个脚本来处理,不知道是否会好很多!

如果好用,再share给大家!
2012-12-19 01:15
0
雪    币: 122
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
挺好的,好好学习中!
2012-12-19 08:05
0
游客
登录 | 注册 方可回帖
返回
//