一种常规Android脱壳技术的拓展(附工具)

最近在做移动安全测试的项目时,遇到了最新的某数字壳,好久都没脱壳了,记得上次脱壳还是zjdroid通杀的时候。秉着安全研究的精神,趁此机会,又把最新的加固与脱壳技术过了一遍,然而并没有成功脱掉。

郁闷之际,我索性沉下心来,好好看看当前脱壳技术的原理,就这样我在Github上看了几个脱壳工具的代码。

其中一个我感觉很有趣, 正是strazzere大神的android-unpacker,这是一款ndk写的动态Android脱壳的工具,原理简单来说就是ptrace,然后在内存中匹配特征码和odex的magic,最后dump到文件。我当然自己编译测试了,但发现是对于最新的壳,貌似还是不管用,总是dump下来一个空文件。

后来我在分析代码,自己边看边改边测试。慢慢结构和代码基本上面目全非了,顺便改了个代码错误( 这个错误就是之前dump结果为空的真凶 -_- ),到最后按照strazzere大神的基本思路索性自己重新写了一个工具(复用了大神的部分代码)。

下面说下几个最重要的和大神方法不一样的地方:

1. android-unpacker基本上就是匹配odex magic的函数时(下图),而我不管odex了,专心匹配dex的magic。

2.android-unpacker用pread(下图),而我换了read和lseek,具体就不说为啥了,这是非常重要的一点。

3.我直接抛弃了android-unpacker中的壳的特征匹配这一整块儿内容。

4.android-unpacker只匹配和dump一次,而我引入了双循环机制,这点对我的脱壳成功也非常重要。

5.android-unpacker在peek_memory(下图)中进行magic匹配,我改了逻辑,换了一种匹配方式。

6.另外我还增加了一匹配种方法,来增强匹配的成功率。

7.引入了wait_times机制(很无奈)

8.其他..

我找了三家公司的壳试了下,下面直接上效果图顺便说说工具怎么用:

1.这个工具就是ndk程序,所以要在Root后的Android环境下运行(虚拟机和实体机都可以)

2.一般来说,先让工具跑起来等着,第一个参数是包名,第二个参数是等待时间。

3.等待时间有两重含义,第一是当工具发现APP进程后,等待多久才开始第一次Scan;第二是每次Scan的时间间隔。(因为每种壳机制都不太一样,所以dex在内存中出现和留存的时间也不同,所以这个wait_time可以灵活配置,具体大家自己琢磨吧。)

4.实际dump成功的例子(我就不把壳厂商和APP名字写出来了,大家应该都能看出来):

(1)某些壳需要把参数wait_times设置1~3秒,然后打开APP,不然APP会退。

(2)等待时机支持小数秒,呵呵。

(3)这个dump下来的是缺失的dex,接着向下看。

(4)还是上个APP,这次成功了,没关系,多试几次就好了,呵呵。

(5)不写wait_times的话也可以,默认0秒。

(6)某数字公司的壳,dex内存里一直有,所以先启动APP,然后再开工具也是可以的。

(7)再来一个

就不贴dex2jar的图了。

说明

1.工具仅用于安全研究及安全测试,如用于非法用途,后果自负。 2.除了arm版,我还编译了个x86的,方便使用虚拟机的童鞋。 3.本来是准备要再研究更多厂商的,但是这段时间实在是忙,想了想还是先发出来吧。 4.这工具并不是万能的,甚至可以说是不健全的。我仅测试了三家的壳,有两家都可以稳脱,还有一家一部分可以,一部分不行。欢迎大家测试其他的壳,你们脱不了可不要怨我。 5.别跟我要代码了,我的代码太丑陋,直接参考android-unpacker的思路就可以。

下载地址请点击阅读原文

*本文作者:Drizzle.Risk,转载须注明来自FreeBuf黑客与极客(FreeBuf.COM)

原文发布于微信公众号 - FreeBuf(freebuf)

原文发表时间:2016-05-24

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

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序你好

微服务架构入门(Micro-Architecture)

1075
来自专栏编程一生

架构师之路--视频业务介绍,离线服务架构和各种集群原理

1502
来自专栏ThoughtWorks

浅谈微服务基建的逻辑 | 洞见

这篇文章主要目的是面向初接触微服务的朋友简单介绍微服务基础建设所需要的各个模块以及缘由。 起点 首先,我们得有一个“服务”。根据定义,我们可以把每个服务实例都视...

3575
来自专栏数据和云

云服务真的靠谱吗? AWS 用户中断31小时仅恢复6周数据

网络剪报服务商 - Instapaper 遭受了超过31小时的服务中断,而且他们声明还需要一个星期的数据库恢复时间。 Instapaper 是一个网络内容收藏站...

34212
来自专栏织云平台团队的专栏

混合云管理问题,你解决了么?

本文将介绍织云是如何建设和使用命令通道解决混合云的服务器管理问题。

10.5K2
来自专栏逸鹏说道

撞库扫号防范

0x00 背景 撞库扫号攻击已经是Top 10 Security Risks for 2014之一,不管你的网站密码保存的额多好,但是面试已经泄露的账号密码,撞...

5047
来自专栏技术杂文

你信任的公司正在窃取你的信息

通常来讲,“购买新产品” 指的是这样的交易过程:购买食物时,可以先确认食材然后购买它,即使难吃也不会要了你的命;购买汽车时,首先它得符合所有安全标准;为特定目的...

1053
来自专栏云计算教程系列

如何在Ubuntu上搭建方舟:生存进化服务器

《方舟:生存进化》(英语:Ark: Survival Evolved)是一款由Studio Wildcard制作与发行的生存类沙盒动作冒险游戏,使用虚幻4引擎打...

9253
来自专栏美团技术团队

大众点评账号业务高可用进阶之路

1903
来自专栏编程一生

实现一个自己的搜索引擎的初始规划

1594

扫码关注云+社区