背景
上年夏天在上海实习,某天正在开心的划水中..然后当场被导师抓到。导师:"你竟然在水群?还是狗管理!"
于是就给我增加了一个任务,基于fart增加一个goto类型dex method 抽取的脱壳机。
当时我参考的是youpk作者的思路
fart
https://bbs.pediy.com/thread-252630.htm
youpk
https://bbs.pediy.com/thread-259854.htm
然后在我离职前都没有完成这个工作(找不到自己的bug 遍历方法的时候进程总是crash 2333)。离职后公司的服务器也交还了,然后就没有了编译android 的环境,加上现在忙于写毕业设计,就没有继续搞下去
然后!!!
AUPK开源了
AUPK
https://bbs.pediy.com/thread-266716.htm
恰好自己的毕设代码写完了,就剩下毕设论文,感觉能空出来时间来复现一下自己的问题
环境搭建
对于还没有毕业的穷人来讲,买一个能编译android源码的服务器/mac book pro/豪华电脑配置虚拟机 感觉都有一些吃力。然后我想到了两个办法。
1.重装电脑 装成黑苹果编译android源码
2.买一个移动硬盘,移动硬盘装上linux虚拟机。
BUT BUT 我的好兄弟 HBh25Y在和我一次聊天,讲出了他的独特理解。
HBh25Y大佬方法总结:
1.超频
2.本机16g内存全给虚拟机
3.写一个一直make的脚本
风险:
1.能够忍受10小时左右的时间
2.忍受真机随时崩溃的危险
为了自己能下班或者双休玩游戏,我选择了2
京东下单 移动硬盘+移动硬盘盒。
配置硬盘
下载一个diskgennius,格式化+新建分区
制作系统盘
找一个u盘,制作系统盘。
本来用的是rufus,但是用rufus 发现有error:file system,然后就直接黑屏卡在一个grub了。
然后用了 balenaEtcher 傻瓜式操作,插入u盘,进入boot。
系统设置
进入系统设置的时候,没有设置好,也出错了好几次。
然后继续安装就好。
aosp源码下载&&编译
由于我租的房子网速很差,我就没有考虑用清华源
就用了 r0ysue巨巨的网盘链接下载了。
下载解压到ubuntu系统里面,然后根据网上的文章配置环境。过程出了一个错误,网上能搜到解决方法。
未完待续(不会鸽,只是可能会晚点)
复现过程
通过这段时间不断的debug,将问题定位到了类的初始化上面。
1.不针对goto类型的脱壳机,执行到armmethod->invoke就够了,可以通过反射的方式去获取到类的artmethod,并不需要执行EnsureInitialized来进行手动初始化。
2.针对goto类型的脱壳机,往下执行则会导致系统将类初始化,则会导致一些问题,比如厂商针对此类脱壳机特地插入程序不会调用的垃圾类,如下图
主动调用就会执行初始化调用静态块,导致程序退出。
解决方案
目前的想法:
1.写驱动hook exit
2.使用hook框架主动调用myfartmethod
3.继续修改系统源代码,增加过滤规则
4.多次启动程序,多次dump
方案优缺点:
第一种方案针对高版本的系统可能会很麻烦并且不稳定,第二种方案aupk的作者在帖子上也讲过,虽然会dump不全,但也会把软件关注的代码dump下来。目前感觉第三种和第四种方案通用性和稳定性最好。
参考链接
fart
https://bbs.pediy.com/thread-252630.htm
youpk
https://bbs.pediy.com/thread-259854.htm
AUPK