-
-
[原创]某壳分析学习过程
-
发表于:
2018-2-21 16:56
10623
-
一·初步分析
看反编译java代码看是读assets下的so文件,然后加载
再调用interface函数
Ida加载so没有搜到interface函数,应该是动态注册。之后hook dvmUseJNIBridge可以看到
发现so的section被处理过,分析dynamic段或者动态在linker下断点找到init函数,看看有没有什么反调试,然后看jnionload。
二.过反调试
jnionload主要是一些反调试,壳反调试变化不大,网上已经给出反调试。在汇编代码的blx lr这些地方下断点,然后去分析。
1.首先是检测rtld_db_dlactivity是否为0,主要就是映射linker.so然后遍历符号表找到rtld_db_dlactivity然后判断。这儿被下断点时值为0x10de(小头),改成0xc046(小头)就可以了。
2. 然后是tracepid的检测,在strtol处下断点,修改返回值为0
3. 然后是时间差检测。每次修改太麻烦,我是hook了time函数,返回值修改为一个固定值。之前还想,会不会猥琐的专门加个一秒半秒的延迟,这样修改成同一个时间也会过不了反调试。还是想多了。
4. 端口检测,用ida跟踪时,就不要用23946端口了
三.第二个so分析
过反调试之后会释放第二个so,第二个so是被处理过的,会进行手动加载,主要就是将linker装载和解析so的过程自己实现。Ida动态调试时直接analyze area释放出来的so也可以识别里面的函数
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)