Android逆向工程简介
Android逆向工程简介
反编译技术
简介
Android APK 反编译是指将已经编译打包好的 APK 文件(压缩包)转换回可读的源代码(.smali/.class)形式,以便进行逆向工程、代码分析、修改或其他目的。
classes.dex
APK 文件本质上是一个 ZIP 压缩包,因此你可以使用任何支持 ZIP 格式的工具(如 WinRAR、7-Zip 或命令行工具 unzip)来解压它。解压后,你会得到一系列的文件夹和文件,其中重要的有 classes.dex、resources.arsc 、res文件夹等。
转换dex
由于 classes.dex 文件包含的是 Dalvik 字节码(DEX 格式),而不是 Java 字节码(JAR 格式),需要一个工具来将其转换为 Java 字节码或 SMALI 格式(一种基于 Android 平台的汇编语言)。常用的工具有 dex2jar(将 DEX 转换为 JAR)和 smali/baksmali(在 DEX 和 SMALI 之间转换,常用工具)
dex2jar
介绍
https://github.com/pxb1988/dex2jar
jd-gui:
https://github.com/java-decompiler/jd-gui
Apktool 反编译
介绍
https://github.com/iBotPeaches/Apktool
Usage:
反编译:apktool d Auto_V7.5.0.600064_release_signed.apk
回编译:apktool b Auto_V7.5.0.600064_release_signed
APK签名
1 | |
jarsigner:Java 提供的用于对 JAR/APK 文件进行数字签名和验证的工具。
-keystore system.jks:指定使用的密钥库文件(这里是 system.jks)。
-storepass android:指定密钥库的密码(这里是 android)。
-signedjar signed.apk:指定签名后输出的 APK 文件名(这里是 signed.apk)。
unsign.apk:待签名的原始(未签名)APK 文件。
android:密钥库中用于签名的别名(alias),即密钥对的标识名称。
反编译高德实战
签名校验
对高德简单反编译再回编译后安装会提示(签名)错误
签名错误第一时间想到去找签名获取的地方,用jdgui搜索 sign 结果如下:
找到反编译后对应的smali文件,修改签名默认通过
测试后还是报签名异常,继而想到基于界面关键字搜索:
找到方法调用栈
最后修改弹框判断,返回 false 即可
综上,反编译成功
