今日任务
- 定位目标
Que 0x01 思路梳理
- 最终任务:逆向分析某 apk,梳理其主干功能代码逻辑
之前想到的定位方案是通过关键字搜索的方式来定位到功能模块,不过在实践中验证了这条思路不可行。
由于没有过 Android 开发经验,所以这里打算先了解一下 Apk 打包的大致过程。
Que 0x02 Apk 打包大致过程
Step 1 打包资源文件,生成 R.java 文件
输入
- Resource 文件
- Assert 文件
- AndroidMainfest.xml 文件
- Android 基础类库
工具
- aapt
输出
- 打包好的资源文件
- R.java 文件
Step 2 处理 aidl 文件,生成相应的 java 文件
输入
- 源码文件
- aidl 文件
- framework.aidl
工具
- aidl
输出
- .java 文件
Step 3 编译工程文件,生成相应的 class 文件
输入
- 源码文件
- 库文件
工具
- javac
输出
- .class 文件
Step 4 转换 class 文件,生成 .dex 文件
输入
- .class 文件
- 库文件
工具
- javac
输出
- .dex 文件
Step 5 打包生成 apk
输入
- 打包后的资源文件
- 打包后类文件
- libs 文件
工具
- apkbuilder 工具
输出
- 未签名的 .apk 文件
Step 6 Apk 签名
输入
- 未签名的 .apk 文件
工具
- jarsigner
输出
- 签名的 .apk 文件
Step 7 对签名后的 Apk 文件进行对齐处理
输入
- 签名后的 .apk 文件
工具
- zipalign
输出
- 对齐后的 .apk 文件
Que 0x03 新的思路
在大致了解了 Apk 打包过程之后,发现似乎除了对 Apk 架构更了解以外,对于当前的任务并没有很大的帮助。
请教前辈之后,得到一个新的思路,定位当前的顶层 Activity,找到关键功能的 button,看看是如何实现的。
Que 0x04 定位顶层 Activity
这里只写测试手机:
adb shell dumpsys activity | grep "mResumedActivity" # 三星 S8
adb shell dumpsys activity | grep "mFocusedActivity" # 坚果 Pro2
目标 app 当前 Activity 信息如下:
mResumedActivity: ActivityRecord{e335a40 u0 com.samsung.android.app.music.chn/com.samsung.android.app.music.common.activity.MusicMainActivity t294}
那么其 Activity 名为 com.samsung.android.app.music.chn/com.samsung.android.app.music.common.activity.MusicMainActivity
尝试分析这个 Activity