解决我的Android通用脱壳机BUG

背景

上年夏天在上海实习,某天正在开心的划水中..然后当场被导师抓到。导师:"你竟然在水群?还是狗管理!"

于是就给我增加了一个任务,基于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巨巨的网盘链接下载了。

https://pan.baidu.com/s/1zAYliYbkagdUUsykww_L4g#list/path=%2F%E5%AE%89%E5%8D%93%2FFART%E8%B0%B7%E6%AD%8C%E5%84%BF%E5%AD%90%E5%85%A8%E8%AE%BE%E5%A4%87%E4%B8%8B%E8%BD%BD%2Faosp_pure_source_code&parentPath=%2F%E5%AE%89%E5%8D%93

下载解压到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

https://bbs.pediy.com/thread-266716.htm

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值