首页
社区
课程
招聘
[原创]360安全招聘_无线攻防第三题粗解
发表于: 2014-5-16 18:36 13369

[原创]360安全招聘_无线攻防第三题粗解

2014-5-16 18:36
13369
原帖见这里http://www.kanxue.com/bbs/showthread.php?t=187661

360cm的APK主要分为2部分,JAVA层没有做太多的工作,大部分的工作都是SO在做,如果验证通过,则SO通过反射调用MainActivity的show方法显示pass。

很可惜,so做过保护,流程上有一堆花花在做乱序,字符串也2层加密过了,只能硬着头皮上了。。。。。

抛开整个乱序不考虑,基本的验证思路是把用户名和email拼接成一个完整的字符串a,对a中的用户名部分先变一下型,得到字符串b,将b使用少许变异的sha1算法算个hash值c,最后验证码的8字节组成部分就是c[0]/c[2]/c[5]/c[9]/c[14]/c[20]/c[27]/c[35]的8字节依次组合

下面只是把关键函数列出来,方便对照,代码和bin在附件中,对于这种乱序过的,我觉得看代码比将可能更实际点儿。。。。。

前面讲到字符串有2层解密:
_gnu_armfini_25 自己实现的解密算法
_gnu_armfini_23 base64解密字符串

_gnu_armfini_33 SHA1_INIT
_gnu_armfini_36 SHA1ProcessMessageBlock
_gnu_armfini_32 SHA1Input   (变异)
_gnu_armfini_35 SHA1PadMessage
_gnu_armfini_34 SHA1Result
_gnu_Unwind_4   sha1_hash

最后附上一组可用的数据:
nick
test@test.com
d05f9199
上传的附件:
收藏
免费 0
支持
分享
最新回复 (21)
雪    币: 370
活跃值: (1175)
能力值: ( LV9,RANK:310 )
在线值:
发帖
回帖
粉丝
2
楼主能给点详细思路么?
2014-5-16 19:43
0
雪    币: 9
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
王勇,哥来了
2014-5-16 21:29
0
雪    币: 250
活跃值: (251)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
mark 楼主真强力!
2014-5-16 22:04
0
雪    币: 2523
活跃值: (520)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
JNI_OnLoad中把java层的验证函数和SO中的verify函数关联上,从so的verify函数一步步跟吧,SO保护过的,也没有太明显的点,数字的CM也不是盖的
2014-5-16 22:22
0
雪    币: 370
活跃值: (1175)
能力值: ( LV9,RANK:310 )
在线值:
发帖
回帖
粉丝
6
嗯。楼主,我有一个疑问,我用ida6.1打开五一之后更新的apk中的.so文件,发现有如下错误:


然后函数表中的On_load函数和verify函数面目全非了:


这个是大概是通过什么方式实现的。这样做了之后,如何去链接.so中的函数呢。
上传的附件:
2014-5-16 23:24
0
雪    币: 2523
活跃值: (520)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
静态手段已经没啥用了,清除了section信息,应该是加载时segment重组,load到内存后是正常的,躺在磁盘上就是有问题的
2014-5-17 00:08
0
雪    币: 463
活跃值: (283)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
8
你真有耐心跟那一堆跳厉害
2014-5-17 12:08
0
雪    币: 2523
活跃值: (520)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
那堆跳转都是有模式的,熟悉了他的模式后,直接无视,只关注跳转里面夹杂的正常指令即可
搞逆向的要耐得住寂寞,你懂的
2014-5-17 14:16
0
雪    币: 35
活跃值: (139)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
10
楼主是怎么硬着头皮上的...做过保护的so 值怎么还原的?
2014-5-17 14:41
0
雪    币: 2523
活跃值: (520)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
11
单步多跟几次 追数据 追流程
2014-5-17 14:53
0
雪    币: 370
活跃值: (1175)
能力值: ( LV9,RANK:310 )
在线值:
发帖
回帖
粉丝
12
赞一个! 弱弱问下楼主,你用ida跟的还是gdb?
2014-5-17 18:56
0
雪    币: 95
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
请问哪里可以找到第三题的apk呢,我也想试试,但是找不到。
2014-5-22 16:05
0
雪    币: 2523
活跃值: (520)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
14
原帖里不是贴出来了么?
http://aqkg6ljr44.l14.yunpan.cn/lk/QNNLZInYrxyjZ
2014-5-22 17:54
0
雪    币: 118
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
我也想知道楼主是用ida还是gdb?
2014-5-22 18:29
0
雪    币: 2523
活跃值: (520)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
16
IDA 用着舒服一点儿
2014-5-22 22:05
0
雪    币: 95
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
刚回去看了下原帖,才注意到后面的帖子中发出来了,非常感谢
2014-5-23 11:14
0
雪    币: 118
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
都是土豪啊
2014-5-23 13:25
0
雪    币: 29
活跃值: (499)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
19
很好奇楼主是如何探查出SHA1Input函数发生变异,并确定变异代码的呢?

另外我跟了一下,发现SHA1Input中的判断是context->Message_Block_Index == 64(你给的代码是63)
还有就是,用你的注册机算出来的注册号,除了你给出的那个,其他均不行(无论上面的值是63还是64)...
麻烦楼主抽空看看啊~
2014-6-2 23:53
0
雪    币: 2523
活跃值: (520)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
20
一步一步跟踪出来的,确定了是SHA1却发现自己算出来的SHA1和cm算出来的不一样,最后发现是SHA1实现里有点小变异

http://pan.baidu.com/s/1sj6nEB7 这个链接是当初我分析的APK,可自行下载看看你的样本和我的样本是不是一样,好像当初说换了一个样本解决部分机型无法启动的问题

test
test@test.com
6ce749ce
再附一组key,对照着我的样本测试了一下没有发现注册码无效的问题
2014-6-3 10:56
0
雪    币: 29
活跃值: (499)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
21
是APK版本不一样~我这个版本的SHA1应该是在另外的地方变异了~
2014-6-3 12:24
0
雪    币: 2523
活跃值: (520)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
22
一不一样自己看看吧 链接也发了
2014-6-3 12:33
0
游客
登录 | 注册 方可回帖
返回
//