QQ登录

只需一步,快速开始

搜索
查看: 3303|回复: 10

[原创] 吾爱破解2016安全挑战赛cm7 Android CrackMe 分析详解

[复制链接]

160

积分

11

主题

2

精华

副坛主

三思而后行

Rank: 7Rank: 7Rank: 7

违规
0 点
JmPoint
1829 点
声望
15 点
赏金币
1555 枚
发单信誉
0
接单信誉
3
注册时间
2015-7-28
最后登录
2016-12-6
在线时间
160 小时

4st TeAm成员

发表于 2016-4-4 22:12:19 | 显示全部楼层 |阅读模式
吾爱破解安全大赛cm7 --- android-crackme分析
     CMOLLVM混淆,搞过android的同学们估计都知道这是一个什么玩意儿。一般来说,假如逆向需要的时间是100%,然后idaF5插件可以降到20%,那么这个OLLVM就是可以把这20%的可能性给扼杀掉,顺便把时间提升到 10000%的神器。
     举个例子,正常函数的F5代码是这样的
     OLLVM混淆后的代码是这样的
     后面还有好长好长的一段,妈呀画面太美我不敢看
     在这里我想先解释一下这个OLLVM到底是一个什么样的东西,不然看着就只知道是一堆if-else判断,那么后面的分析就不用看了。
     看代码说话
     这是正常的求和代码,当然,我们可以脑洞一开,把它弄得复杂一点。
     怎么样,看懂了吗?看懂了的同学可以直接看下一part了。实际上,这个就实现的功能上来说是和上面的一样。简化一下可以变为这个样子。
     可以看到,函数执行的流程不再是由上到下的顺序流了,而是根据pc的值,动态得选择if块中的语句执行,同时把下一个if块的地址赋予pc指针。这个就是OLLVM大概的思路,当然,我这个是大大简化了的。对此,不得不说,城里人真会玩啊!!!
     咳咳,真实的语句被打乱,隐藏起来。通常,一个if块中只包含一句甚至是半句的指令,而逆向分析人员则不得不花费大量时间去整理程序执行的流程,提取真实的代码。这就是OLLVM的困难所在,也是其设计巧妙之处。
     而这个CM,也就利用了这个技术,把80%的逆向者阻挡了在门外。
     好了,既然知道了这么难,哪就散了吧,做不来的?对吧。如果这就放弃了,那么待得日后出了真正的VM,那么就是不是完全不可能搞定了?咳咳,在这里放弃还是有点早了,鼓起信心迎难而上吧。

     先看看CM的大致验证流程,首先是调用验证的地方0x000125F4
     非常明显的校验,进去看看,可以知道主要有4个校验的地方。
     直接上F5代码
     首先是对密码进行base64解密放到v360N(8字节)处,然后对v360N进行rsa变换,接着是一个tea变换,得到(“360N”,CheckCode)结构的解码代码,最后对用户名进行hash,得到值与CheckCode比较,正确的话就返回成功。大致的流程是这个样子,这一部分的分析还是挺简单的,然而要如何正确地分析这几个函数的时候才是困难所在,毕竟这几个变换都不是标准的算法。
为了方便分析,先使用一组key
Name:360
Key=6@LdGUI1qEN
     ①变形base64算法
     第一个变换是变形的base64变换。这有非常明显的特征,在进行密码测试时,解密长度变化为43,86,129。然而这又不是标准base64算法,毕竟第一个字符为’=’号。这也好办,只要在内存中dump出转换表,结合key算一下组合方法,就完事了。然而这才是难点所在,算法的代码是这样的。
     里面调用到 0x0000C6EC 这个地址进行真实的转换
     神马鬼,这么多的跳转,都跟踪到头晕了。其实这里就是真实的OLLVM,此时R0就是上面代码中的PC指针,然后这里就是一堆if - else 语句的跳转。
     这里则是算出下一步函数地址的地方。上一点的地方则是这一节的真实指令。
     因为这个函数体比较大,而且还有循环的指令,所以一步步跟踪起来代码可能会有上十万行。接下来就是耐心的比拼了,记住我们的目标,就是dump转换table,很简单,所以大可以一步一步地进行跟踪。当然,这并不是做好的方法。总体地看一下,OLLVM中,真实的代码是隐藏在if 的块里面,所以我们只需要从中dump出真实的指令出来就可以了。
     这方面的工作有不少人已经做过了,参考一下,可以写一个脚本来进行提取,脚本效果大致如下:
     类似于ida的跟踪功能,只是跳过了无用的跳转指令,顺便打印寄存器的变化。虽然代码依旧丑的很,不过可阅读性已经提高了不少了。以时间来说的话,就是把10000%的时间缩短到300%了。对于这个cm来说,这样就差不多了,好吧,上吧。
     因为base64里面有循环取出加密数据,取置换表,然后写解密数据的操作,所以我们优先找到取加密数据的位置,以及写解密数据的位置,那么在这之间的便是解密操作了。直接搜索dump出来的trace文件,查找传递进去的R0(未解密密码地址)的值。这里就是搜索4D7C8,得到:
     得到取pass数据的地址为DCD4,并且可以看到每次循环都是使用4个字节,从这个位置跟踪下去可以发现
     根据输入在内存中取表置换,对base64熟悉的同学应该知道这就是取表运算的地方,直接把内存中的表dump(0xBEA85108)出来,然后根据合法key的转换可以发现这个base64的组合和标准的base64是反序的。结果算法如下:
    这个算法和PYG上的随机base64算法十分相似,估计就是用同样的工具生成的。然后标准12字节变8字节,填充字节为1个,那么填充的字符自然就是最后的N了。
     ②标准rsa64算法
     Rsa算法部分最为简单,里面对base64解密的结果通过str2hex转换为字符串后,直接推送到解密函数处
     函数内没有任何混淆,直接分析即可。
     内存中的大数数据。
     以及将其转换为大数的函数。跟进去可以发现相关提示
     恩,是openssl的大数库。
     中间大数的各种加减乘除运算后得到模数n和指数e,然后对v360N进行rsa变换
     公钥解密算法,好在这里只是一个64bitRSA(长一点就无解了),可以用工具来分解。

游客,如果您要查看本帖隐藏内容请回复

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即加入

x

评分

参与人数 5JmPoint +130 声望 +4 +3 收起 理由
Ylca + 5 这贴很给力,我只想说三十六个赞!.
Dxer + 10 + 1 + 1 这贴很给力,我只想说三十六个赞!.
B1nGzL + 5 + 1 + 1 零日安全有你更精彩。
BambooQJ + 10 + 1 + 1 F8老板就是叼
Sodiseng + 100 + 1 这贴很给力,我只想说三十六个赞!.

查看全部评分

回复

使用道具 举报

80

积分

2

主题

1

精华

正式会员

Rank: 1

违规
0 点
JmPoint
676 点
声望
10 点
赏金币
0 枚
发单信誉
0
接单信誉
0
注册时间
2015-11-9
最后登录
2017-2-17
在线时间
68 小时
发表于 2016-4-5 10:31:53 | 显示全部楼层
太牛逼了!!!!
回复

使用道具 举报

45

积分

1

主题

0

精华

正式会员

Rank: 1

违规
0 点
JmPoint
218 点
声望
10 点
赏金币
0 枚
发单信誉
0
接单信誉
0
注册时间
2016-3-6
最后登录
2017-4-25
在线时间
45 小时
QQ
发表于 2016-4-5 12:30:11 | 显示全部楼层
膜拜大神啊。。。
回复 支持 反对

使用道具 举报

69

积分

8

主题

0

精华

正式会员

Rank: 1

违规
0 点
JmPoint
115 点
声望
10 点
赏金币
0 枚
发单信誉
0
接单信誉
0
注册时间
2015-7-26
最后登录
2017-4-26
在线时间
222 小时
QQ
发表于 2016-4-5 16:46:16 | 显示全部楼层
膜拜F8大屌
回复 支持 反对

使用道具 举报

0

积分

0

主题

0

精华

临时会员

违规
0 点
JmPoint
9 点
声望
0 点
赏金币
0 枚
发单信誉
0
接单信誉
0
注册时间
2016-4-5
最后登录
2016-4-5
在线时间
1 小时
QQ
发表于 2016-4-5 21:25:05 | 显示全部楼层
zhenxin真心的看不懂可
回复 支持 反对

使用道具 举报

50

积分

3

主题

0

精华

正式会员

Rank: 1

违规
0 点
JmPoint
286 点
声望
10 点
赏金币
0 枚
发单信誉
0
接单信誉
0
注册时间
2015-12-25
最后登录
2017-4-13
在线时间
36 小时
发表于 2016-4-13 20:00:55 | 显示全部楼层
F8老师就是叼
回复 支持 反对

使用道具 举报

0

积分

0

主题

0

精华

临时会员

违规
0 点
JmPoint
0 点
声望
0 点
赏金币
0 枚
发单信誉
0
接单信誉
0
注册时间
2016-4-24
最后登录
2016-4-24
在线时间
0 小时
QQ
发表于 2016-4-24 22:45:45 | 显示全部楼层
太牛X了 呵呵
回复 支持 反对

使用道具 举报

0

积分

0

主题

0

精华

临时会员

违规
0 点
JmPoint
15 点
声望
0 点
赏金币
0 枚
发单信誉
0
接单信誉
0
注册时间
2016-5-3
最后登录
2016-5-3
在线时间
0 小时
QQ
发表于 2016-5-3 18:55:16 | 显示全部楼层
666666666666666666666666666661
回复 支持 反对

使用道具 举报

56

积分

5

主题

0

精华

正式会员

Rank: 1

违规
0 点
JmPoint
206 点
声望
10 点
赏金币
0 枚
发单信誉
0
接单信誉
0
注册时间
2015-12-24
最后登录
2016-10-10
在线时间
14 小时
QQ
发表于 2016-7-9 14:37:44 | 显示全部楼层
赞一个~
回复

使用道具 举报

209

积分

29

主题

2

精华

专家团

Rank: 7Rank: 7Rank: 7

违规
0 点
JmPoint
3321 点
声望
13 点
赏金币
0 枚
发单信誉
0
接单信誉
0
注册时间
2015-7-28
最后登录
2017-4-27
在线时间
151 小时

特殊贡献勋章

发表于 2016-7-21 12:31:00 | 显示全部楼层
我F8师傅就是牛逼
回复 支持 反对

使用道具 举报

*滑动验证:
您需要登录后才可以回帖 登录 | 立即加入

本版积分规则

关闭

站长推荐上一条 /2 下一条

QQ|Archiver|手机版|小黑屋|零日安全论坛 ( 吉ICP备15004039号 点击这里给我发消息

GMT+8, 2017-4-27 15:09 , Processed in 0.109896 second(s), 38 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表