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

 

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

 

梆梆免费版的逆向分析就不来了,几位大佬都有过分析。
加固后,原dex被打包到secData0.jar中,secData0.jar是加密过的zip文件(不是zip加密)

 

加固应用沙箱文件

 

.cache内有加密过的jar和dex(其实是同样的加密算法)

应用第一次运行把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 = (int) file.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

使用jeb等工具打开即可

 

原理

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

 

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

 

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

 

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

技术
©2019-2020 Toolsou All rights reserved,
字节三面远程,Java+Redis+网络+数据库+算法,轻松反杀面试官?停车场管理系统C语言10个经典小程序——小白必备!Cloud Alibabab笔记问世,全网详解仅此一份手慢无Bigtable论文笔记linux系统数据库服务器的性能调优方法论中国移动的宽带免费策略已不可持续10909米!中国奋斗者号在马里亚纳海沟成功坐底BATJ面试redis灵魂36问,你这么回答,面试官一定对你刮目相看基于springboot的文件上传