利用梆梆加固逻辑漏洞取巧脱壳

首先要道个歉,之前要发的进程注入,开发hook框架、插件化等技术,因为原公司产品还在使用,暂时是不能开源了,还是食言了。

 

抽空看了几家加固的应用,做了个通用脱壳机(轻量化,只需要进程注入埋点,全Java层即可,可以不依赖hook框架,当然我为了方便使用的我自己写的hook框架。类似dexhunter以及一些修改源码、编译系统的方式太重了),暂时除了梆梆函数级加密,其他加固的抽取字节码的只要还还原,就可以脱,例如爱加密,也发现了一些加固的逻辑漏洞,可以取巧脱壳(此处脱壳定义,仅限恢复非被置为Native的方法,java2c、vmp、java2jni的不在恢复范围),今天抛砖引玉,发一个梆梆的取巧脱壳的方法。

 

梆梆免费版的逆向分析就不来了,几位大佬都有过分析。
加固后,原dex被打包到secData0.jar中,secData0.jar是加密过的zip文件(不是zip加密)
利用梆梆加固逻辑漏洞取巧脱壳_第1张图片

 

加固应用沙箱文件

 

利用梆梆加固逻辑漏洞取巧脱壳_第2张图片

.cache内有加密过的jar和dex(其实是同样的加密算法)
利用梆梆加固逻辑漏洞取巧脱壳_第3张图片

应用第一次运行把secData0.jar复制到.cache内,即classes.jar,解密后解压出dex,在内存中拼组odex结构,写回沙箱的是个加密的odex。

 

解密classes.dex

仅需在应用进程执行如下代码,读取再写回即可。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

FileInputStream fis = null;

FileOutputStream fos = null;

try {

    File file = new File("/data/data/com.*o/.cache/classes.dex");

 

    fis = new FileInputStream(file);

    int length = (intfile.length();

    MLog.e(file+":"+ length);

    byte[] buff = new byte[length];//若文件太大可分段读取

    int read = fis.read(buff);

 

    MLog.e("read "+read+" "+new String(buff,0,3));

    File qq = new File("/data/data/com.*o/qq");

    fos = new FileOutputStream(qq);

    fos.write(buff);

 

} catch (IOException e) {

    e.printStackTrace();

}finally {

    if (fis != null) {

        try {

            fis.close();

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

    if (fos != null) {

        try {

            fos.close();

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

}

qq即为解密后的odex
利用梆梆加固逻辑漏洞取巧脱壳_第4张图片

使用jeb等工具打开即可

利用梆梆加固逻辑漏洞取巧脱壳_第5张图片

利用梆梆加固逻辑漏洞取巧脱壳_第6张图片

利用梆梆加固逻辑漏洞取巧脱壳_第7张图片

 

原理

通过注入进程,埋点、挂钩,在应用进程执行代码,梆梆hook了io相关的函数,所以读取classes.dex的时候已经被梆梆解密并重定向读取解密后的dex,所以只需读取并写到一个文件中即可。

 

注入进程并不一定非要注入当前应用进程,父进程埋点即可。

 

其实hook的定义个人觉得很多人都会以为像xposed这样基于方法的才是hook,其实安卓中的binder,Java的动态代理,(反射)替换对象等都可以理解为hook,上面的父进程和应用进程埋点,完全可以不用任何hook框架即可实现。

 

以上就是利用壳本身的机制,取巧脱壳的一种方式。防御就不提了,梆梆免费版在同类加固中算是很弱的了,应该也是不想在免费版上加强了。以上方式也可用于企业版,只是函数级加密被抽取的字节码并不能通过这种方式获取到。

你可能感兴趣的:(android)