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

目录结构

classes.dex -> classes-dex2jar.jar

jd-gui:

https://github.com/java-decompiler/jd-gui

Example

Apktool 反编译

介绍

https://github.com/iBotPeaches/Apktool

https://apktool.org/docs/install

Usage:

反编译:apktool d Auto_V7.5.0.600064_release_signed.apk
回编译:apktool b Auto_V7.5.0.600064_release_signed

--help

APK签名

1
jarsigner -keystore system.jks -storepass android -signedjar signed.apk unsign.apk android

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 结果如下:
Sign.java

找到反编译后对应的smali文件,修改签名默认通过
smali\com\autonavi\common\tool\sign\Sign.smali

测试后还是报签名异常,继而想到基于界面关键字搜索:
"退出应用"

找到方法调用栈
方法调用

最后修改弹框判断,返回 false 即可
修改返回值

综上,反编译成功


Android逆向工程简介
http://example.com/2024/05/09/Android逆向工程简介/
作者
Shuiyes
发布于
2024年5月9日
许可协议