加固前:
加固后:
生成两个so文件:
libjgdtc.so文件为官方dex2c以后的结果;
libjiagu.so为dexVMP以后的so文件;
运行结果:在android 4.4 5.0等会崩溃闪退;
libjiagu.so为早先的dex Vmp 加固,之前分析过,忽略。
接下来分析libjgdtc.so:
静态分析看到:
这里面的重点函数是sub_4DA0函数:
这种API的调用的,没有看到。
但是通过第三方的调用,然后进行HOOK可以看到:
可以HOOK到对应的字符串只是返回的每次结果不对!!
可能跟内存的初始化有关,so中的初始化函数没有调用。
360在里面运用了大量的混淆处理!
通过简单的阅读F5以后的代码:
发现是360把java2c以后的解释反射调用的操作放在了一个函数中。相当于之前VMP的解释器的入口操作一样,然后进行混淆处理,同时对里面的字符串进行加密操作,用的时候进行解密。
动态分析:
总结:
360是把VMP加固与java2c结合加固:
这里为了简单起见第三方调用这个libjgdtc.so这个文件;
eg01:算术
前后函数猜测为引用管理;算术运算的还比较正常逻辑。
总结:
1.360会把dexVMP和java2c进行结合。它的java2c依然也是以反射为主的解释,但是它把最后反射的解释函数同类型的定位到一个入口,这样的大的函数的逻辑会比较复杂,这时候采用OLLVM的混淆的优势就会比较大。
2.字符串上加密,用到的时候进行解密;
3.兼容性上很不好,崩溃率比较高!!