首页
论坛
专栏
课程

[原创] 利用**加固逻辑漏洞取巧脱壳

卓桐 2018-11-7 18:28 3336

首先要道个歉,之前要发的进程注入,开发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

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

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框架即可实现。


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



[防守篇]2018看雪.TSRC CTF 挑战赛(团队赛)11月1日征题开启!

最后于 2018-11-8 14:24 被kanxue编辑 ,原因:
本主题帖已收到 1 次赞赏,累计¥2.00
最新回复 (13)
FIGHTING安 1 2018-11-7 19:24
2

0

占个前排
smartdon 1 2018-11-7 19:29
3

0

前排
老skr江 2018-11-7 20:02
4

0

smartdon 前排
Ddddz 2018-11-7 20:32
5

0

大佬牛逼
currwin 1 2018-11-7 20:34
6

0

这是真滴优秀。
卓桐 2018-11-7 20:45
7

0

currwin 这是真滴优秀。
可不敢,前段时间刚被美团大佬鄙视
最后于 2018-11-7 20:45 被卓桐编辑 ,原因:
开花的水管 2018-11-8 10:52
8

0

大佬,大佬
Vn小帆 2018-11-8 11:50
9

0

这漏洞马上就要被修复了             
屯田日久 2018-11-8 13:56
10

0

楼主,我的.cache目录下,只有classes.jar有内容啊,而且这个classes.jar就是应用assets目录里的SecShell0.jar。
我的是官网最新的免费加固,会不会已经修复了。
hhhaiai 2018-11-9 18:01
11

0

这个牛逼  。赞一个
moonlife 2018-11-12 11:22
12

0

 赞
ffegya 2018-11-12 20:20
13

0

请问楼主爱加密是如何脱壳的,能否大概讲下呢。我最近在分析,发现是爱加密是用的类抽取,而且把so混淆了,section节也修改了,在dvm下,可以在openDexFile下断点来dump出dex,但是现在的手机都是art模式下的,而art模式下在openMemory下断dump出的还是抽取了方法体的dex,并没有真正拿到dex,我尝试分析了下so,从内存dump出解密的so并修复后,但是由于有混淆,代码实在看不明白,不知道您是如何处理的呢,另外art下对于这种类抽取的有没有比较好的脱壳方法呢
又见飞刀z 2018-11-14 10:39
14

0

ffegya 请问楼主爱加密是如何脱壳的,能否大概讲下呢。我最近在分析,发现是爱加密是用的类抽取,而且把so混淆了,section节也修改了,在dvm下,可以在openDexFile下断点来dump出dex,但是现 ...
你意思是说在dvm模式下的openDexFile方法dump出的比art模式下openMemory方法dump出的要完整吗?
返回