脱壳系列—— 揭开so section加密的美丽外衣

i春秋作家:HAI_

0×00 前言

对so的加密,https://bbs.pediy.com/thread-191649.htm大神的帖子里已经很详细的说明了。当然加密不是我们研究的重点,如何搞掉这个so的加密才是我们的要事。

或许你想看看这里

HAI_使用手册

java开发之旅

Android开发之旅

0×01 so静态分析

1.未加密之前的so

脱壳系列—— 揭开so section加密的美丽外衣

2.加密之后的so

我们使用ida打开的时候,ida进行了报错提示。

脱壳系列—— 揭开so section加密的美丽外衣

可能在平时很多时候都会发现so是被加密了的,ida就会报这个错误,我们忽略这个,然后进入。

脱壳系列—— 揭开so section加密的美丽外衣

这个就是我们加密过后的内容。

3.结论

so文件进行加密之后效果很明显,无法在加密之后的so得出有用信息。也相当于是对so进行了加壳,再详细一点就是加密壳。

而我们最主要做的就是脱掉这个加密壳。

脱壳系列—— 揭开so section加密的美丽外衣

0×02 动态脱壳

又到了我们最好玩的脱壳环节了。

利用一个最原理就是,不管你加密成什么样子,在内存中,你总是要还原的,不还原系统怎么运行。

所以我们需要进行一个动态脱壳。

连接手机,开启服务,attach

su

cd data/local/tmp

./zhu -p23333

adb forward tcp:23333 tcp:23333

//可能会用到
adb shell am start -D -n com.example.shelldemo/.MainActivity adb forward tcp:8700 jdwp:7728 jdb -connect com.sun.jdi.SocketAttach:hostname=127.0.0.1,part=8700

成功附加。

脱壳系列—— 揭开so section加密的美丽外衣

这个时候程序已经在运行了。

所以我们需要找到demo里的so文件。

脱壳系列—— 揭开so section加密的美丽外衣

文件偏移是:75A00000
大小是:5000

我们来dump一下。

程序的话还是用之前的程序把。

static main(void){
    auto fp, begin, end, dexbyte;
    //打开或创建一个文件
    fp = fopen("d:\\dump.dex", "wb");
    //dex基址
    begin =  0xF34C6320;   
//dex基址 + dex文件大小
end = begin + 0x00013570;
    for ( dexbyte = begin; dexbyte < end;     dexbyte ++ ){
//按字节将其dump到本地文件中
fputc(Byte(dexbyte), fp);
        }
}

稍稍的更改一下就可以使用了。

好了我们成功dump。

脱壳系列—— 揭开so section加密的美丽外衣

测试

使用ida打开。

发现ida还是报错。

脱壳系列—— 揭开so section加密的美丽外衣

脱壳系列—— 揭开so section加密的美丽外衣

先忽略,进去。

脱壳系列—— 揭开so section加密的美丽外衣

这个时候发现关键函数已经出来了。

但是我们还是想要追求一下完美。

0×03 修复

我们这里修复使用工具进行。

脱壳系列—— 揭开so section加密的美丽外衣

然后使用ida进行测试。

脱壳系列—— 揭开so section加密的美丽外衣

修复成功。

上一篇:C#-WebForm-AJAX阿贾克斯(一)基本格式


下一篇:最近adt升级引起的问题