关于这个app 找key 网上有很多教程https://www.xuepojie.com/thread-48772-1-1.html
这里主要是分析一下这个app的反调试手法 以及代码的逻辑
1.这个app的反调试是放在jni_onload函数里面的 具体如下
2.分析v3->field_4v4++; 这里的代码
使用到的结构体
struct MyFillData
{
int field_0;
void (*field_4[1])(void);
char field_8[28];
int field_24;
int field_28;
MyFillData *Next;
};
在 .init_array函数中 调用了这个sub_D4153378 给一些地址赋值
sub_D4153378 又调用了sub_D41532AC
看看 sub_D41532AC 的实现逻辑 就是给FlagFillData指针赋值的
再给FlagFillData 填充完数据后
使用 v3->field_4v4++; 调用Get_FillFunAddr_sub_D4152CA8
4.再执行 tt_PthreadCreate(v9, 0, AntiDebug_sub_D41526A4, 0, 0); 在线程中调用AntiDebug_sub_D41526A4进行反调试
主要是检测进程的TracePid
调用kill函数 杀死进程
3.执行完 sub_D41527F4 函数后 这里的地址变成了0 为了防止看解密填充函数的过程