主要是理下之前学习的逻辑:
前面讲过APP启动的两个关键点attachBaseContext和onCreate,这两个地方是在执行完Dex解密后,在这两个地方进行加壳做文章的地方。如果想要对APP进行加壳,由于ClassLoader双亲委派的原因,想要执行壳的dex,就需要是对ClassLoader进行修复,这样才能正确的加载壳的Dex。
ps:壳都是通过替换APP的Application类并自己实现这两个函数,并在这两个函数中实现dex的解密加载。下面这个是看雪hanbingle大佬的图。
上面讲的是一代壳的加载过程,在2017年的DEF CON 25 黑客大会中,Avi Bashan 和 SlavaMakkaveev提出来了DexFile的两个脱壳点,导致一代壳直接能被绕过去了。
为了对抗脱壳,一代壳是对整体的dex进行加固。演变为二代壳是对dex中的函数进行抽空,导致脱壳后看不到函数内容。
对抗二代壳技巧就是在函数指令抽空后,找到函数的内存地址,再还原回去,就能脱壳。
在这里面比较突出的是Fupk3,后面才逐渐演变为fart,Youpk。
Fupk3只能是安卓4.4以下系统Dalvik虚拟机才能用,而fart,youpk都是可以在Art环境下能够使用的。
Fart脱壳思路:
1.内存中DexFile结构体完整dex的dump
2.主动调用类中的每一个方法,并实现对应CodeItem的dump
3.通过主动调用dump下来的方法的CodeItem进行dex中被抽取的方法的修复
youpk脱壳思路:
加深主动调用流程至Switch解释器的每条汇编指令执行前回调
参考文章:
https://bbs.kanxue.com/thread-252630.htm
ps:如果想一块讨论代码审计&APP逆向&渗透可以添加下面的微信号相互交流
本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者及本公众号不为此承担任何责任。
欢迎关注公众号“呼啦啦安全”,原创技术文章第一时间推送
原文始发于微信公众号(呼啦啦安全):安卓逆向系列(十)--整体梳理
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论