秒脱360加固Android教程
Android比较iOS,安全问题往往比较突出,各种缝隙和破解层出不穷。对破解办法的了解,能在开发中进行防止,加强运用的安全性。本系列文章会对Android运用的破解和维护两方面做个讨论,给开发的同学一些学习。Andoid开发的同学可能会遇到需要做竞品剖析的情况,APK加固常常会成为剖析的妨碍。360途径做为Android运用分发的最大途径,很多apk都运用了360加固。本文就来聊聊怎么过掉这个坑。360加固后的apk,在arm设备上首先会将assets目录下的libjiagu.so拷贝到files目录下,然后通过libjiagu.so动态解密并加载原始dex要对apk脱壳,首先要剖析libjiagu.so完成。而该so做了二进制加壳。那么现在首先要做的事就是先把so的壳给脱了。通过010Editor检查libjiagu.so结构可知,其init_proc和init_array都无本质功用,真实的解密放在JNI_OnLoad里边。
JNI_OnLoad函数里有十分多的废物跳转指令搅扰剖析,后边还会有动态解密的函数运转,如果检测到调试器,会把动态函数置成不合法代码,使程序CRASH
1b0c404这个位置就会跑飞。这样剖析比较累人。换个思路,对一些要害函数进行hook,进行hook log剖析Hook dlopen和dlsym LOG打印出libjiagu.so的加载基址和巨细
能够看到JNI_OnLoad的地址仍是在libjiasu.so内存范围内的Hook RegisterNatives函数,打印如下LOG
这个LOG能够看到RegisterNatives有被调用,注册了一个interface7函数,函数地址是51e2f211,仔细看这个地址发现,这个地址现已是thumb指令集了,跟libjiagu.so运用的arm指令集不太相符,并且能够看到函数地址现已超出了libjiagu.so内存范围了.libjiagu.so的基址是51b3b000,巨细是46000,最大内存地址是51B81000那么,根本能够断定,它在内存中加载了另一个so从/proc/%pid%/maps里找到函数地址地点的内存块,把周围接连的内存一同dump出来在这片内存里找到如下一块内存
这其实就是elf heaer了,不过一些elf结构信息现已被抹掉了。除了根本的结构信息还缺失如下三个数据:0x20 e_shoff0x30 e_shnum0x32 e_shtrndx接下来的作业就是对这个残损的内存进行修正了,通过剖析上面三个数据,dlopen其实都没有用到,其值对elf运转没有影响。通过修正后的文件能够替换掉本来的libjiagu.so,从头签名后使apk正常运转,用于IDA动态调试剖析。下面是通过修正后的libjiagu.so用ida剖析的流程图片段
360在dex加载的时分,并没有调用dvmDexFileOpenPartial,而是自完成了此函数的功用,因而直接在这个函数上下断点是不能脱壳的。它的完成方法根本是照抄了bionic源码
如上面源码所示,运用dex地点内存的时分都会运用memcmp校验MAGIC是否为dex,所以只需hook memcmp,然后在过滤函数里校验是否为dex,然后dump出来便是原始的dex。把hook结构搭好,完成如下的memcmp过滤函数,就可主动将原始dex dump下来。
前面的都搞定后,整个脱壳进程就能够主动化了。APK发动瞬间即会主动脱壳。点击发动APK,会输出如下LOG
LOG里的第3个dmp即为原始dex,现已主动写入到指定目录。该脱壳器可运用于现在一切360加固,只需指定APK包名即可在发动时秒脱
没有下载地址啊
页:
[1]