《2022年android反汇编教程 .pdf》由会员分享,可在线阅读,更多相关《2022年android反汇编教程 .pdf(3页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、android反编译小结apktool/ AXMLPrinter2.jar/ dex2jar.bat/ jd-gui/ Jodeclipse/ JadClipse开篇:“ 对于软件开发人员来说,保护代码安全也是比较重要的因素之一,不过目前来说Google Android平台选择了Java Dalvik VM的方式使其程序很容易破解和被修改,首先APK 文件其实就是一个MIME 为 ZIP 的压缩包,我们修改ZIP 后缀名方式可以看到内部的文件结构,类似 Sun JavaMe的 Jar 压缩格式一样,不过比较去别的是Android上的二进制代码被编译成为Dex 的字节码,所有的Java 文件最终
2、会编译进该文件中去,作为托管代码既然虚拟机可以识别,那么我们就可以很轻松的反编译。所有的类调用、 涉及到的方法都在里面体现到, 至于逻辑的执行可以通过实时调试的方法来查看,当然这需要借助一些我们自己编写的跟踪程序。Google最然在 Android Market上设置了权限保护app-private文件夹的安全,但是最终我们使用修改定值的系统仍然可以获取到需要的文件。 from: http:/ 文件解压后有两部分文件需要处理,一种是xml文件,另一种一个dex 文件( .dex ),我们可以从 .dex文件中得到 .class ,利用后者再得到大家垂涎已久的java文件。下面分别针对这三种格式
3、的文件进行反编译处理;1. 对 x ml 文 件进 行 包 的 解 析 , 一 般 有 两 种 方 式 : apk t ool ( 推 荐 ) 和 AXMLPr i nt er 2. j a r ;2. 从 d ex 到 cl as s 公 认 de x2 j a r. bat , 实 现 反 编 译 ; 公 认 的 强 者 ;3. 而 c l a ss 到 j a v a的 方 式 要 更 多 样 化 一 些 , 因 为 只 是 查 看 反 编 译 后 的 代 码 : j d - gui (推 荐 ) , Jo de cl i ps还是先对此过程作个大致介绍吧:1. 首 先 把 ap k文
4、件 改 名 为.z i p, 然 后 解 压 缩 其 中 的 c l a s s. de x 文件 , 它 就 是 j ava 文 件 编 译再 通 过 d x 工 具2. 把 c l a ss. d ex 拷 贝 到 d ex 2j ar. b at 所 在 目 录 。 运 行 d ex 2j a r. ba tcl ass. dex , 生 成 c l ass es. de x. de3. 运 行 J D- GUI 工 具 ( 绿 色 软 件 , 好 用 的 软 件 ! ) , 打 开 上 面 的 j a r 文 件 , 即 可 看 到 j a va 源 代 码。如果上面的步骤都可以自我完
5、成了,那么,下面对这几个软件的详细介绍就可忽略不看!这几个软件,细分开来介绍(用步骤A( 分 A1,A2), B, C( 分 C1,C2,C3), ABC分别代表三个不同的步骤):A1. apktool:通常用于生成程序的源代码和图片、XML 配置、语言资源等文件。我们对图片和语言资源等文件修改后,可以再把它们编译打包成APK,签名后就是手机可以安装的本地化/修正版APK 了。支持 Linux 、Windows下工作安装步骤:1. 安装 JAVA 环境(官方推荐jdk 1.6);2. 下载 apktool.jar:http:/ apktool1.3.2.tar.bz2 和 apktool-in
6、stall-windows-2.2_r01-3.tar.bz2 (不一定是这个,但最好选最新版本的吧!) 3. 解压 apktool1.3.2.tar.bz2得到 apktool.jar;解压 apktool-install-windows.zip到任意文件夹,将apktool.jar拷入此文件夹中(也名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 3 页 - - - - - - - - - 有人说是直接全部拷入C:/Windows,一样的);(目前此文件夹中有三个文件:
7、apktool.jar/apktool.bat/aapt.exe)4.cmd命令行进入到解压apktool-install-windows-2.2_r01-3.tar.bz2所得的文件夹,输入 apktool测试是否安装成功;安装成功后,下面开始反编译过程:1. a pk t o old( 要 反 编 译 的 文 件 )( 输 出 文 件 夹 )如 : a pkt o oldXXX. ap k( 目 标 文 件 夹 )反 编 译my. ap k 到 文 件 夹 myap k2. a pk t o olb( 目 标 文 件 夹 )从 目 标 文 件 夹 中 重 建APK, 生 成 的 APK在
8、目 标 文 件 夹 di st 文 件 夹里 , 叫 o ut.a pk。这个 out.apk是没有签名的,所以不能直接装到手机里。签名工具和方法见http:/ 签名后得到的APK ,就是可以装到手机里的了。A2. AXMLPrinter2.jar将它放到android-sdk-windows-1.5_r3tools 文件夹中运行 cmd, 进入 tools目录,运行java -jar AXMLPrinter2.jar main.xml main.txt ;于是我们就得到了反编译后的XML 文件;经历了这么多,我们得到的只是部分布局文件和资源文件,但java 文件还是 犹抱琵琶半遮面 。下面,
9、让我们掀起她的红盖头来: B. dex2jar 下载: http:/ 首先找到Android软件安装包中的classes.dex (解压得到) ; 它就是 java 文件编译再通过dx 工具打包成的 ,所以现在我们就用上述提到的2 个工具来逆方向导出java源文件2. 把 classes.dex拷贝到 dex2jar.bat所在目录 ; 在命令行模式下定位到dex2jar.bat所在目录,运行dex2jar.bat classes.dex ,生成 classes.dex.dex2jar.jar,成功了一半!C1. JD-GUI下载: http:/java.decompiler.free.fr/
10、?q=jdgui方便好用, 直接解压得到JD-GUI ,用它打开上面的jar 文件,File-Save JAR Source,即可看到梦寐以求的java源代码;我们也可以解压B 步骤得到的jar 文件得到 class 文件,到这里,我们就要用到Jodeclipse和 JadClipse了;C2. Jodeclipse-Jode的 Eclipse插件C3. JadClipse-Jad的 Eclipse插件关于这两个Eclipse插件的安装可见下面链接:http:/ 还有朋友提到DJ Java Decompiler,没用过,可以一试!)名师资料总结 - - -精品资料欢迎下载 - - - - -
11、- - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 3 页 - - - - - - - - - 但也有人提出此问题:自从 eclipse升级到 3.3 以后 jad 插件就一直没有成功的安装上去,网上看了好多文章也是以前版本的安装方法,3.3目前通过 eclipse的 software update的插件安装方式已经不行了。解决方法如下:1. 从 http:/ ,我目前下载的是 jadnt158.zip;2. 从 http:/ . jadclipse_3.3.0.jar地址下载jadclipse_3.3.0.jar,拷贝到eclipse
12、的 plugins目录下;3. 启动或重起eclipse ,修改 window - Preferences - Java - JadClipse 下的Path to decompiler 如:D:ericjadnt158jad.exe(jadnt158.zip解压后的目录) ;4.Windows - Perference - General - Editors - File Associations中修改“ *.class”默认关联的编辑器为“ JadClipse Class File Viewer” 大功告成,之后在java类里按住 ctrl点击类就可以看到它jad 反编译后的源带码了;如果
13、发现安装了没有效果,可以删除eclipse主目录下的configurationorg.eclipse.update后,再执行eclipse -clean试试最后,将得到的java 文件和得到的xml 文件组合可得一个android工程,即可得到相对比较完整的apk 源码;但也有些额外加的包没被编译出来。但做到这一步已经足够用于学习,我们的目的也就达到了!有人会说程序可以用混淆器扰乱代码,但刚从网上看到的一种关于混淆器的说法:“ 用混扰器的代码一般就是去掉所有注释和把变量名、方法名和类名变成一些没意义的名字。反编译后一般都变成a, b , c,.这样的名字,只能一点点的看懂,再利用Eclipse的改名方法,一次性的吧相关的名字改成有意义的名称。”所以,大家的关键代码最好还是打成.so 库吧!要不会被一些人搞得内裤都没得穿!特此感谢:http:/ (dexdump, baksmali.jar, smali.jar),效果也都还不错!如果大家有什么关于防止反编译比较好的的技巧,可以留言告知, 所有程序员都会感谢你的!名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 3 页 - - - - - - - - -