赞
踩
最近一周时间,在学习和研究Android逆向,接下来一段时间,写一系列Android逆向的博客,来总结和记录自己所掌握的知识,也希望为正在学习Android逆向的朋友带来一点帮助。
目录
首先,简单说一下自己对Android逆向的理解。Android逆向,就是把已经编译好的apk,通过使用一系列的工具,获取到“源代码”。获取到源代码后,我们可以替代和修改其中的一些代码,重新打包,生成新的apk。我们可以借鉴大牛的一些实现方式,也可以拿来干一些“有趣”的事情。当然,作为一名Android开发工程师,我还是不希望自己的app被别人反编译,被改的面目全非。因此,接下来的这一系列博客,仅作为自己的学习笔记吧。
工欲善其事,必先利其器。想要做好一件事,必须使用好的工具,android逆向也是如此。这篇博客总结三款常用的android逆向工具,通过使用这三款android逆向工具,可以轻松实现反编译获取源码。
apktool是一款反编译工具。通过使用apktool,可以获取apk源代码(smali代码)。修改smali代后,可以回编译生成新的apk。然后生成签名文件打包签名。apktool具体使用如下:
(1)下载apktool.jar。建议去官网下载最新的jar,官网下载地址:iBotPeaches / Apktool / Downloads — Bitbucket。下载最新的版本,apktool_2.4.0.jar,下载完成后命名为akptool。我的apk路径为:D:\ApkReverseTool\apktool.jar
(2)把需要反编译的apk放在某一目录下,例如:F:\testapk\test.apk
(3)打开cmd,进入apktool所在目录:
(4)输入命令java -jar apktool.jar d apk路径,例如:
java -jar apktool.jar d F:\testapk\test.apk
默认在apktool所在目录下,生成反编译后的文件夹:
(1)输入命令java -jar apktool.jar b apk反编译后的路径,例如:
java -jar apktool.jar b D:\ApkReverseTool\test
重新编译成apk。新生成的apk默认位置:D:\ApkReverseTool\test\dist
(2)生成keystore。输入如下命令:
keytool -genkey -keystore F:\keystore\test.keystore -alias test -keyalg RSA -validity 10000
输入口令,再次输入口令,接下来输入一系列东西。最后输入Y,确认两次口令,生成test.keystore。
-keystore:生成keystore的路径
-alias:keystor的名字
-keyalg:加密方式
-validity:证书有效天数
(3)签名。输入如下命令:
jarsigner -verbose -keystore F:\keystore\test.keystore -signed jar F:\testapk\test2.apk D:\ApkReverseTool\test\dist\test.apk test
-keystore:keystore路径
-signedjar:签名后生成apk路径
回编译后apk路径
keystore的名称
dex2jar是将classes.dex转jar的工具。apk其实一种压缩文件,把apk修改zip或者rar并且压缩后,可以获取到classes.dex。classes.dex文件我们不能直接打开查看,需要转为jar文件。dex2jar的具体使用如下:
1.下载dex2jar(地址:https://files.cnblogs.com/files/onelikeone/dex2jar-tools-2.1.zip),并解压重命名为dex2jar,我的目录是:D:\ApkReverseTool\dex2jar
2.把需要转jar的apk命名为a.zip或者a.rar,并且解压缩,可以看到classes.dex。
2.将classes.dex复制到d2j-dex2jar.bat文件所在目录
3.打开cmd,进入d2j-dex2jar.bat所在目录。输入命令:d2j-dex2jar.bat classes.dex,理论上可以生成classes-dex2jar.jar。在公司电脑上确实生成了,但是在自己笔记本上面没有生成,报错了。这是因为我在自己笔记本上设置的sdk版本是27,也就是Android N ,我原先下载的dex2jar是dex2jar2.0,dex2jar2.0不支持Android N。因此,后来下载的dex2jar2.1,此问题解决:
jd-gui是查看jar文件的工具,具体使用如下:
1.下载jd-gui。官网下载地址:Java Decompiler。下载第一个或者第四个都可以。
2.双击打开jd-gui
3.拖动classes-dex2jar.jar到jd-gui,打开MainActivity.class,可以看到源代码:
Android Studio2.2版本之后,增加了Apk Analyzer功能,具体使用如下:
1、直接拖动需要反编译的apk到AndroidStudio:
2、在需要查看源代码的文件上右键,选择show bytecode,即可看到smali代码:
最后,总结一下。其实,apktool这三款工具,用起来可以说是非常简单了。掌握了这三款工具的使用,基本可以破解绝大多数没有“加固”的apk。Android Studio2.2自带的Apk Analyzer可以一键拖动反编译apk,可以查看smali源代码,但是文件是只读的,不支持修改。在下一篇博客里,将会介绍一款功能强大的新的反编译工具。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。