今天分析一个网赚类的样本,业务方要我搞清楚为什么每次完成任务出现红包时,总会随之弹出一个插屏广告。
大概就是下图这样,说实话,弹几层广告确实挺恶心,关起来都麻烦
先在测试机装上应用,发现有root检测,试过几个通用的过root检测的frida脚本,发现不行
看了下代码,是网易的壳
正好,最近在看Ratel,刚好来练练手,试试在非root环境下Ratel的脱壳怎么样
Ratel用起来没frida那么随意,有兴趣大家去他的github看看:virjarRatel · GitHub
Ratel大概脱壳步骤:
1 装上Ratal
2 装上目标应用
3 感染应用
4 写脱壳插件
5 应用跑起来,就开始脱壳了
下面是脱壳代码,在主框架入口调一下entry就行
public class Unpack {
public static final String tag = "RATEL-YOOHA";
public static void entry(RC_LoadPackage.LoadPackageParam lpparam) {
// TODO 抽取壳要把这个选项打开
//UnPackerToolKit.autoEnable(true);
UnPackerToolKit.unpack(new UnPackerToolKit.UnpackEvent() {
@Override
public void onFinish(File file) {
try {
FileUtils.copyFile(file, new File("/sdcard/crack.apk"));
Log.i(tag, "unpacked over");
} catch (IOException e) {
Log.e(tag, "unpacked error", e);
e.printStackTrace();
}
}
});
}
}
跑起来后,壳果然脱了,效果还行
先看看代码,发现有个函数非常可以
严重怀疑就是他干的坏事,怎么办,hook他呗,试试Ratel的hook好不好使
Ratel写代码跟xposed差不多,记住一点就行,把类开头的X改成R。结果果然没让我失望,就是这个函数干的
从调用栈来看,这个函数是被Native调用的,看了下框架Unity + libil2cpp.so ,这个框架下,需要用到一个开源工具来解密Il2CppDumper,解密方法大家可以去github看,顺便给他个星星:GitHub - Perfare/Il2CppDumper: Unity il2cpp reverse engineer
解密出来的内容如下:
一般情况下,在 /DummyDll/ 下的dll文件用dnSpy 打开后,都能看到函数体,然后继续分析,但今天这个样本,解出来的dll 打开函数都是空的
好吧,那只能看 libil2cpp.so 的代码了,上图中Address 的偏移就是这个函数在so文件中的偏移,首先我们需要先跑一下脚本,将这个符号和结构体等信息先载入IDA,具体方法:
1 IDA先打开libil2cpp.so
2 加载 ida_with_struct.py 脚本(该脚本在你下载的)Il2CppDumper工具包里面
3 加载 script.json (解密出来的文件里面)
4 加载 il2cpp.h 文件 (解密出来的文件里面)
5 漫长的等待
看到这个就加载完了:
OK,开始干活,既然确认是调用Java函数showImageInterstitialAd,那么so中肯定会用到字符串“showImageInterstitialAd”,先到解密出来的 stringliteral.json 文件中找该字符串
然后在IDA中 跳转到这个地址,看到一个变量,先改个名字,防止跟丢了
对变量查找引用,找到调用他的地方,AndroidJavaObject_CallStatic, 这个函数会根据传进来的字符串函数名反射调用java函数
接着再查找引用
再查,找到了,这个红包物体被激活时,会调用OnEnable函数,在该函数中,会调用ShowinterAd来弹出插屏广告,也就是说,出现这个过关红包就会弹一次插屏,也真够烦的
OK,先到这吧