某tx乐固脱壳详细流程

安卓逆向解疑老师vx:3481626363
好久没更新了,今天就日常更新一下某乐固脱壳,有兴趣交流学习的也可以添加一下这个vx沟通。
解压查看文件:
某tx乐固脱壳详细流程_第1张图片
进入lib查看
某tx乐固脱壳详细流程_第2张图片
后面mix.dex 是一个空dex, mixz.dex 是一个压缩文件,解压后也是一个空dex。

jadx-gui 查看apk:
某tx乐固脱壳详细流程_第3张图片
某tx乐固脱壳详细流程_第4张图片
attachBaseContext->a->load()调用链,里面有个关键方法。a 里面调用了d(), d方法是用来加载so的方法,load 方法是一个native方法,
某tx乐固脱壳详细流程_第5张图片
再看 onCreate
某tx乐固脱壳详细流程_第6张图片
调用了一个native方法runCreate, c(b)是崩溃相关的.

因此, ida打开so文件,发现导入导出函数没有,节区信息已经被处理了。
某tx乐固脱壳详细流程_第7张图片
抹掉节区信息后,再用ida打开,发现有了一些导入导出导入函数,查看JNI_Onload 发现该函数的指令已经被处理过了,不能正常识别。
某tx乐固脱壳详细流程_第8张图片
于是开始动态调试。

勾选加载lib时断下来。因为JNI_Onload被处理了,因此init_array里面肯定有解密信息,
直接在这个so文件加载进来时在JNI_Onload 处断下来。
某tx乐固脱壳详细流程_第9张图片

某tx乐固脱壳详细流程_第10张图片
在这里插入图片描述
此时dump处来这个so文件,
某tx乐固脱壳详细流程_第11张图片
dump出来的so 抹掉节区信息,把load段的文件对齐和内存对齐一致。
某tx乐固脱壳详细流程_第12张图片
此时JNI_Onload 已经正常了
某tx乐固脱壳详细流程_第13张图片
ctrl+s 在第二个load段里查看init_array的信息,由于函数是内存地址,需要减去模块基址
某tx乐固脱壳详细流程_第14张图片
查看前两个函数都没有什么实际性内容,查看最后一个函数,
某tx乐固脱壳详细流程_第15张图片
可以看到 有两个mprotect函数的调用,修改内存属性为3(写、可执行) 和5(读、可执行),因此中间部份是解密JNI_Onload代码.
由于在JNI_Onload中单步f8,没走几步还没产生函数调用,就会崩溃,因此第二个mprotect后面做了反调试。

在 return sub_8630中,有一个创建线程的操作,线程参数是模块基址。
某tx乐固脱壳详细流程_第16张图片
查看线程函数:
某tx乐固脱壳详细流程_第17张图片
线程函数里面循环做了一些检测,因此这部分就是反调试逻辑。

再次调试,尝试nop掉调用创建线程那里的函数
在这里插入图片描述
然后尝试在OpenMemory 下断,f9 会发现在此函数下断下来了,前两个dex都比较小不是真正的dex,也就是前面的lib目录下两个 空的dex,第三次段下来的就是正真的dex文件。
某tx乐固脱壳详细流程_第18张图片
拖出来的dex
某tx乐固脱壳详细流程_第19张图片

你可能感兴趣的:(Android逆向,爬虫,脱壳修复)