JW加固简单分析

 

一、  猜想

加固的几维Demo,这里简单的分析一下它的强度,Java2c主要是借助于JNI反射技术对java层的方法全部的反射为本地层,增大分析难度。Java2cpp以后再借助于编译混淆或者编译虚拟的技术来增大分析难度。接着对编译以后的So文件进行加壳保护。

这里主要是对demo中的onCreate方法进行了java2c,并且对于保护以后的so没有做任何的破坏、加壳保护,因此直接在IDA中打开:也是做了静态注册,因此直接在导出函数中进行分析:可以看到控制流异常的复杂,说明肯定是做了编译混淆,因为几维有一个安全编译器。

JW加固简单分析_第1张图片

可以看一下几维安全编译器的说明:

JW加固简单分析_第2张图片

看了看感觉就是OLLVM的变形混淆。

二、  静态分析

1.     通过查看字符串可以发现确实对java2c应该出现的字符串进行了处理,没办法进行免费版那种快速有效的定位。但是在java2c执行前有个函数sub_B6B8()猜测这块应该是字符串解密函数。下面动态调试的时候进行验证。

JW加固简单分析_第3张图片

2.     通过F5去观察这些代码,一些关键JNI API还是很明显的暴露,所以这个离DX的技术还是差很多,大量的混淆其实在JNI反射中体现的不是很好,特别都会对于数组那块的混淆处理,接着去动态的分析一下仔细的体会一下细节部分的处理。

三、  动态分析

1.     首先等执行完sub_B6B8()这个函数以后进行内存Dump下来so,并进行修复,可以看到所有字符串都出来了。说明以上的猜测是正确的,接下来进行逻辑分析。

JW加固简单分析_第4张图片

2.     接下来静态分析查看经过修复的So的逻辑,因为有了字符串和JNI API函数的时候,这个时候静态分析去看的效果就会比较明显。

3.     其实几维这块的安全编译器在JNI函数上所发挥的效果是不大的,因为字符串和一些JNI API把逻辑暴露的差不多了,并且JNI反射后的结构大体相同。如果是用于java层的纯逻辑函数,应该还是有一点效果的。


 


你可能感兴趣的:(android逆向安全,Android,代码保护与逆向)