freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

脱壳系列—— 揭开so section加密的美丽外衣
2018-04-09 16:04:41

i春秋作家:HAI_

0x00 前言

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

或许你想看看这里

HAI_使用手册

java开发之旅

Android开发之旅

0x01 so静态分析

1.未加密之前的so

image.png

2.加密之后的so

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

image.png

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

image.png

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

3.结论

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

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


image.png

0x02 动态脱壳

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

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

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

连接手机,开启服务,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

成功附加。

image.png

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

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

image.png

文件偏移是: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。


image.png

测试

使用ida打开。

发现ida还是报错。


image.png

image.png

先忽略,进去。

image.png

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

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

0x03 修复

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

image.png

然后使用ida进行测试。

image.png

修复成功。


# 移动逆向
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者