360加固保动态脱壳

测试环境:

调试器: IDA6.5

手机及系统版本:

.SO层脱壳

一:.如何到达壳入口点?

1.我是通过对dvmLoadNativeCode函数下断,分析它执行流程最后到达壳入口(如果您有更好的办法还请告知,感谢中...),函数dvmLoadNativeCode是执行加载so文件的操作。(2.3系统是这个名字),2.3以上系统被名称粉碎了,不过在2.3以上系统中可以在libdvm.so中搜索函数名也是可以找到的,(我当前系统函数名为:_Z17dvmLoadNativeCodePKcP6ObjectPPc)如下图所示:

2.对dvmLoadNativeCode函数进行下断有些小技巧,前后下断点,等壳执行完成后反回就断在这里,如下图所示:

3.跟进这libdvm.so:4087B900 BLX unk_4083F694 函数后,分析其流程就可以发现有so的加载基址为0x5B97C000,如下图:

4.得到so在内存中基址后就可以用ReadELF -a xx.so来查看so文件的INIT_ARRAY文件偏移,如下图执行 ReadELF -a libprotectClass.so 命令后

5.我们用IDA静态反编译libprotectClass.so文件,然后去0xfd98地址去看看,是一个函数地址,如下图

该函数为:

6.得到了libprotectClass.so在内存中基址与INIT_ARRAY文件偏移,将它们相加即可得到so壳入口了0x5B97EF5C,去内存中看看,如下图:

是不是与__gnu_armfini_26函数很像呢?然后我们在该函下个断点,F9执行以这儿就可以接着分析so壳代码了。

二:so如何脱壳?

1.到达壳入口后我们单步跟踪看看,到修改代码属性这里

R0为要修改的开始地址

2.准备解密代码,跟进该函数。

在该函数里做解密代码操作,首先是拷贝0xA长度的密钥,如下图,然后初始化密钥

3.从初始化密钥函数来看,应该使用的是RC4算法,接着就是解密了。

R0为要解密的Buffer, R1为Buffer的大小, R3为初始化后的密钥。

4.算法 密钥 都知道了,我们可以写个程序来解密so了,如下图解密前后JNI_OnLoad对比。

解密前为:

解密后为:(代码己正常)

到此可以静态分析了,其它的小伙伴们自己去玩吧(^_^), 解密算法RC4_so己放在附件中。

DEX 内存dump

1.接着上面so代码解密完成后,反回到这里, libdvm.so:4087B904 MOV   R1, R6

这时可以在JNI_OnLoad函数下断点了,如下图:

F9来到JNI_OnLoad函数,接着就是慢长的分析了。

详细的分析流程我就不细说了,想了解的现在可以自己动态与静态结合分析了,我们这次的目的是内存中dump完整的DEX。

到JNI_OnLoad函数后,到下面libprotectClass.so:5B88A22C BLX   R4下好断点。如下图

3.F9到这里后,F7跟进,然后在 mmap函数下断点, F9执行,当LR的地址为程序领空时反回下好断点(一定要是程序领空才有效,因为mmap会被多次调用),F9执行。

接下来R0将会存放解密后的Dex,然后F8走,直到该函数执行完成后,开始解密DEX开头0x70个字,解密完成后就可dump出来了,如下图:

到此完整的DEX己经出来了,下面我们Dump出来,打包反编译。

开始地址为0x5BC35000, 大小为0x005EDBA4, 结束地址为0x5C222BA4

4.将dump出来的dex重新打包并能成功反编,如下图:

5.到此整个过程就完成了,下面该做些什么小伙伴们自己发辉吧,我就不知道了。(^_^)。(样本就是上传了,想玩玩的去XX加固保官网下载去吧)

资料下载

http://yunpan.cn/cAFzDYcB6weWY (提取码:6e74)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏小樱的经验随笔

CTF---安全杂项入门第二题 A记录

A记录分值:20 来源: sammie 难度:中 参与人数:2255人 Get Flag:566人 答题人数:621人 解题通过率:91% 他在看什么视频,...

515140
来自专栏张善友的专栏

内容协商 (Content Negotiation)

大多数响应包含一个实体,此实体包含人类用户能理解的信息。通常,希望提供给用户相应于请求最容易得到的实体。对服务器和缓存来说,不幸的是,并不是所有的用户都对这个最...

21890
来自专栏DannyHoo的专栏

iOS开发中在swift项目中pod snapkit库时报错

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010105969/article/details/...

14730
来自专栏FreeBuf

一款隐藏嵌入式Rookit的DDoS木马分析

该款木马分析文章在2015年由@PETER KÁLNAI 最先发表于AVAST的公开blog中,木马的架构严谨,设计精良,应该是产业化的一部分。接下来我们就来看...

29870
来自专栏Java帮帮-微信公众号-技术文章全总结

2017年3月Java9带来的革新!

? 一:计划 2016-05-26: 功能开发完成 2016-08-11: 执行测试 2016-09-01: 开始减速 2016-10-20: 零错误反弹(注...

25240
来自专栏友弟技术工作室

密码机制

djeqtdyy-joao-silas 今天主要是介绍的内容是,一般网站,或应用,在用户注册后,用户的密码如何保存在数据库中,当然,肯定不是明文的.只有当事人知...

39390
来自专栏码神联盟

碎片化 | 第四阶段-40-Struts组件分类讲解-视频

如清晰度低,可转PC网页观看高清版本: http://v.qq.com/x/page/o0567s4azx0.html ---- ---- 版权声明:本视频...

35690
来自专栏北京马哥教育

Python爬虫:一些常用的爬虫技巧总结

用python也差不多一年多了,python应用最多的场景还是web快速开发、爬虫、自动化运维:写过简单网站、写过自动发帖脚本、写过收发邮件脚本、写过简单验证码...

31270
来自专栏拂晓风起

Firefox做默认浏览器,点击QQ面板连接(QQ邮箱,空间),延迟很久很久才打开网页(Firefox 浏览器 延迟 打开 点击没反应)

15740
来自专栏崔庆才的专栏

JavaScript加密逻辑分析与Python模拟执行实现数据爬取

本节来说明一下 JavaScript 加密逻辑分析并利用 Python 模拟执行 JavaScript 实现数据爬取的过程。在这里以中国空气质量在线监测分析平台...

75770

扫码关注云+社区

领取腾讯云代金券