首页
社区
课程
招聘
[原创]安卓逆向的核心流程
发表于: 2025-9-16 15:49 8256

[原创]安卓逆向的核心流程

2025-9-16 15:49
8256

  安卓逆向的东西比较多,刚接触容易不知道怎么入手。如果知道安卓逆向的核心流程有哪些,对安卓逆向有一个整体的认知,就能比较清晰地知道自己缺什么和学什么。这篇文章梳理一下安卓逆向的要点,方便学习安卓逆向的小伙伴参考对照。

  一开始先准备好手机和电脑这些硬件设备。安卓系统是从linux系统过来的,进程之间互相隔离,想突破隔离就需要有root权限。手机root目前有三种方案:Magisk、KernelSU和APatch。

  1、Magisk:上手比较简单,只需要修改启动文件boot.img,插件也比较多。
  2、KernelSU:修改内核,相对Magisk更加稳定,但门槛高,插件比较少。
  3、APatch:结合上面两个的优势,只需要修改boot.img+支持加载内核模块。

  安卓系统或linux系统分为用户层和内核层,APK只能运行在用户层。如果有内核插件的能力,就可以从更底层进行拦截修改。就逆向分析来说,比较推荐的是APatch:既能够使用上层的安卓插件AndroidPatch Modules(APM),也能够用底层的内核插件KernelPatch Modules(KPM)

  拿到一个APK,先看看这个APK有没有加壳。加壳的原理是把原本的代码资源进行加密保护,等到运行的时候再解密释放出来。而脱壳就是把解密释放的代码资源拷贝出来。查壳可以用ApkCheckPack,脱壳可以用frida_dump

  得到没有保护壳的APK之后,就可以进行静态分析,先看看整个APK都有哪些文件资源。APK本身也分为两层:Java层和Native层(C/C++层),对应两种工具:
  1、Java层的静态分析工具:jadx
  2、Native层的静态分析工具:IDA Pro

  静态分析一开始只是看个大概,之后还得进行动态调试,才能知道APK运行的细节。动态调试对应的工具有两种:
  1、单步调试:lldb,适合下断点之后跟踪数据和逻辑
  2、拦截打印:frida,适合拦截看参数和整体调用

  如果一用工具进行分析,就提示环境异常或者直接闪退,那就意味着工具被检测到了。
  检测要么基于原理,比如lldb正在进行动态调试,status会有TracerPid的信息,APK只要检查TracerPid字段,就能知道是不是被动态调试。而反检测就是根据原理,检查的时候修改返回正常的值,比如抹掉TracerPid字段。
  要么是基于特征进行检测,比如frida的默认端口是27042,APK只要检查端口27042是不是存在,就能知道是不是被frida工具入侵了。而反检测就是修改特征值,比如修改frida的端口号;或者直接换魔改版的工具Florida

  有了工具,接下来就是进行具体的功能分析,这个时候需要具备两种能力:
  1、正向开发的能力:比如点一个按钮,弹一个提示框。起码要知道正向开发的时候,代码正常是怎么写的,这样逆向分析的时候才能找到切入点。
  2、代码反编译的能力:正向开发是清晰明了的源代码,编译之后看到的是汇编。java编译成smail,Native(C/C++)编译成ARM汇编。而逆向分析就得从底层的这些汇编看出原本代码的逻辑。

  在进行分析代码的时候,也会遇到很多保护手段,给逆向分析带来更多的麻烦:
  1、代码混淆:Java或者Navite(JNI)清晰的名字被替换成abc这些代替符号。这种只能根据代码的逻辑去猜测。
  2、字符串加密:静态分析看到的是混乱的密文,运行的时候才解密成明文。要么运行的时候把明文拷贝出来,要么根据解密算法用脚本去还原。
  3、控制流扁平化:原本结构清晰的ifelse,被打乱成一个状态机不断跳转。现在比较多的是OLLVM的扁平化、对应的可以写脚本去还原原本的结构。
  4、代码变异:原本的代码变异成相同语义的多条代码,一眼看上去不那么直观易懂。这种得走代码优化,或者脚本识别之后的还原。
  5、代码虚拟化:原本的一句代码,变成了一套虚拟代码和虚拟机器,虽然运行的结果一样,但分析难度特别高。这种就得跟踪代码的执行过程,然后根据虚拟机的原理去还原。


[培训]传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2025-9-22 09:41 被GhHei编辑 ,原因: 纠错
收藏
免费 550
支持
分享
最新回复 (414)
雪    币: 346
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
2
666
2025-9-16 16:32
0
雪    币: 86
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
3
666
2025-9-16 16:35
0
雪    币: 2
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
4
感谢分享
2025-9-16 17:07
0
雪    币: 1762
活跃值: (1205)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
5
学习
2025-9-16 17:11
0
雪    币: 104
活跃值: (6838)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
tql
2025-9-16 17:13
0
雪    币: 377
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
7
666
2025-9-16 18:06
0
雪    币: 289
活跃值: (2006)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
666
2025-9-16 18:12
0
雪    币: 477
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
9
这个讨论对我很有帮助,谢谢!
2025-9-16 18:27
0
雪    币: 0
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
10
666
2025-9-16 19:42
0
雪    币: 1150
活跃值: (6960)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
学习
2025-9-16 19:49
0
雪    币: 7
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
12
学习
2025-9-16 20:01
0
雪    币: 220
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
13
6666
2025-9-16 20:36
0
雪    币: 50
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
14
11
2025-9-16 21:48
0
雪    币: 213
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
15
66666666666666
2025-9-16 21:57
0
雪    币: 7066
活跃值: (23500)
能力值: ( LV12,RANK:550 )
在线值:
发帖
回帖
粉丝
16
看看
2025-9-16 22:08
0
雪    币: 380
活跃值: (3900)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
tql
2025-9-16 22:11
0
雪    币: 0
活跃值: (371)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
mark
2025-9-16 22:50
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
19
学习
2025-9-16 23:02
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
20
xuexi
2025-9-16 23:04
0
雪    币: 8033
活跃值: (4493)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
看看核心
2025-9-17 00:24
0
雪    币: 8
活跃值: (200)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
66666
2025-9-17 03:50
0
雪    币:
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
23
学习
2025-9-17 08:18
0
雪    币: 1100
活跃值: (1633)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
学习
2025-9-17 08:22
0
雪    币: 2280
活跃值: (2730)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
25
666
2025-9-17 09:14
0
游客
登录 | 注册 方可回帖
返回