-
-
[原创]乐固分析-续
-
发表于:
2023-2-12 17:03
14194
-
APK:新概念AI版v1.11.0
包名:com.qqxue.newconcept
MD5:c05d7bd5154f9043daaad64a6d97861f
jadx、idapro、unicorn
在之前100次都没坚持下来后,最近第101下定决心学好英语,于是在应用商店下了一堆app,通过精心挑选最后留下了新概念AI版,但是这个app的一些东西需要会员才能看。
开会员是不可能的,这辈子都不可能为了学英语花钱,说不定再等几天就要第102次下定决心学好英语了,那这钱不就白花了么。
先用jadx反编译看下,发现使用了乐固进行加壳。
正好去年发了一篇分析乐固的帖子【乐固分析】,记得当时写了个脱壳脚本,于是把我的陈年老代码翻出来,ida加载脚本一把梭。
当我以为能轻松秒杀的时候,不出意外的意外翻车了。
简单看了下脱壳脚本,发现里面使用了一些硬编码,一些函数的地址被写死了。
然后对比so的md5,发现两个so的md5不一致,所以这些地址都是错误的。
1、加固的逻辑一般不会变,所以之前脱壳脚本的流程也不用动。
2、每次编译后so中的函数地址可能会发生变化,所以脚本中调用的函数地址不能写死,需要脚本根据so进行自动适配
3、分析so找出特征码,对引用的地址进行定位
通过查看之前的脚本,找出所有需要适配的地方
0X1D48,
0X1D60,
0X1CF4,
0X1FE8,
0X1EA4,
0X1E5C,
0X1E20,
0X1D84,
0X1F88,
0X1DA8,
0X1CE8,
0X1E14,
0X20B4,
0X20C0
原脚本中的地址是0x2B604,在ida中找到这个函数,没有发现能够定位的地方
于是查看一下引用,发现0x29BC0调用了这个函数,
0x29BC0使用了一些常量字符串,并且0x29BC0这个函数没有被混淆,所以引用字符串的时候,代码偏移是不会变的
于是决定通过"PROCESS_CHILD"这个字符串进行定位,先找到引用的时候偏移为+0x98的函数
然后查看汇编代码,往上倒回去找,找到的第一条BL指令,跳转的地址就是我们需要的地址
添加脚本代码
原脚本中的地址是0x2315C,在ida中找到这个函数,没有发现能够定位的地方
于是查看一下引用,发现0x10EB4调用了这个函数,
0x10EB4中在调用该函数前,使用了常量偏移632,在生成汇编代码的时候是不会变的
于是找到该指令的二进制搜索一下,看是不是唯一的,可以看到搜索结果只有一处,可以通过该特征码进行定位。
然后从定位点往下找,找到的第一条BL指令,跳转的地址就是我们需要的地址
添加脚本代码
原脚本中的地址是0x2B2AC,在ida中找到这个函数,发现存在常量字符串"compress return error"能够定位。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)