首页
社区
课程
招聘
[原创]对好搜小说app协议的一次逆向
发表于: 2017-3-26 11:54 7468

[原创]对好搜小说app协议的一次逆向

2017-3-26 11:54
7468


我用的好搜小说版本是1.8.183,需要测试的请自行下载

点击一个小说,抓包之,在androidKill中搜索关键字encode_sign

 

打开关键字所在的类;



进去查看,在静态代码块加载了个动态链接库,核心的加密算法写在了native层

上IDA,进行动态调试,将断点下在urlEncodeFromJNI这个方法处:


然后手机上点击一部小说,运行到strlen的时候,将请求的链接传了进来



请求的链接长度为87


再次传进来一个参数,并计算其长度,这个参数是当前的时间戳


将0x97个内存长度初试化为0


将时间戳链接到请求链接后边




链接以后的结果



我们来看看连续三次的链接,然后记下这个缓冲区的地址:

继续申请长度为0x58的内存,并将其填充为0


调用md5Init初始化md5计算需要的数据结构



计算需要进行md5的数据段的长度


开始计算md5,在这里的md5Update函数中,传递了缓冲区地址,要进行哈希运算的地址,长度,这个长度等于拼接后的字符串的长度

在放字符串的后边的内存地址,再申请一个16个字节的空间,并用0初始化



调用MD5Final方法计算md5值

申请0x20个字节的内存,并用0填充

sprintf这里是个循环,执行和很多次,然后在刚才的缓冲区添加了一堆字符串,md5final方法计算而来的值并不是字符串,是一些十六进制的字符,sprintf将这些字符按照assic码转换成人能够看清的字符。总之md5+sprinf的值为在cmd5网站上计算的人眼能识别的字母,不了解可以等sprintf循环过去去看看给缓冲区写的值,这些值和CMD5网站计算出来的一样



将0x98长度的内存初始化为0


这个strcat将第一次拼接好的字符串连接到第一次计算的md5的值后边:




我们来看看链接完成后的结果


初始化0x58个字节的内存,为MD5Init初始化用


将刚才初始化的内存的地址给md5Init


计算所有需要md5的字符串长度(不明白一只计算长度干啥,也没有仔细分析)

调用md5Update函数,这里注意了:md5Update函数的第三个参数,为需要计算的字符串的长度,这里为0xa8,第一次我就是卡在这里了,全部计算,当然结果不对


到这个sprintf又和上一个sprintf的作用一样,不多解释


最终的计算结果为链接中的encode_sign值


总结一下计算过程:
1.将请求链接中的部分字段提取出来,加上时间戳,"eha",格式如下:
http://reader.m.so.com/app/index.PHP?m=Api&c=BookIntro&bid=3227333191007413155&uid=0dbc710c48e3d9ac0ebde

b116de326fe&ver=183&src=napp_sz1490169346086eha
2.计算步骤一中的哈希得到哈希结果
3.将步骤1中的字符串拼接到步骤二中计算的哈希结果后面
4.将步骤3中的字符串取前168(0xA8)位进行哈希,得到的结果就是连接中的

encode_sign字段


实验证明:

1.请求链接:

GET /app/index.php?m=Api&c=BookIntro&bid=3534808458083825046&uid=0dbc710c48e3d9ac0

ebdeb116de326fe&ver=183&src=napp_sz&encode_id=201703221490176124881&encode_sign=5

e9a514b1304f56b5a26f799e1d176df

2.制作成步骤1中的需要哈希的部分:

http://reader.m.so.com/app/index.php?m=Api&c=BookIntro&bid=3534808458083825046&uid=0dbc710c48e3d9ac0ebdeb116de326fe&ver

=183&src=napp_sz1490176124881eha

3.计算这个字符串的哈希:



3.将这个哈希放在第一次哈希的字符串前边:
a6d06f88cecbc5ca342f6d204f15191ahttp://reader.m.so.com/app/index.php?m=Api&c=BookIntro&bid=3534808458083825046&uid=0dbc710c48e3d9ac0ebdeb116de326

fe&ver=183&src=napp_sz1490176124881eha
4.取前168位(上一步中红色部分)做哈希:


我们来对比一下原来请求链接中的哈希:

分析正确




[课程]Linux pwn 探索篇!

收藏
免费 1
支持
分享
最新回复 (19)
雪    币: 21449
活跃值: (62288)
能力值: (RANK:125 )
在线值:
发帖
回帖
粉丝
2
如何防范这类攻击?
2017-3-26 12:20
0
雪    币: 4443
活跃值: (2066)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
是用的真机嘛
2017-3-26 12:58
0
雪    币: 371
活跃值: (94)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
4
cqzhou 是用的真机嘛
是真机
2017-3-26 14:53
0
雪    币: 32
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
厉害,学习了。
2017-3-26 18:09
0
雪    币: 371
活跃值: (94)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
6
kingyangcn 厉害,学习了。
我也是刚开始学习,共同学习共同进步
2017-3-26 20:19
0
雪    币: 371
活跃值: (94)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
7
Editor 如何防范这类攻击?
这不算是啥攻击吧?
2017-3-26 20:19
0
雪    币: 18
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
挺不错的!
2017-3-26 21:41
0
雪    币: 371
活跃值: (94)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
9
wingsbupt 挺不错的!
小白刚开始学习
2017-3-27 19:18
0
雪    币: 256
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
赞一个,虽然理解起来很费劲
2017-3-28 16:20
0
雪    币: 202
活跃值: (19)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
谢谢分享~
2017-3-29 15:35
0
雪    币: 4
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
感谢楼主分享~
2017-3-29 17:26
0
雪    币: 371
活跃值: (94)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
13
unionrock 赞一个,虽然理解起来很费劲
慢慢来吧,一个月前我也是小白
2017-4-1 15:57
0
雪    币: 371
活跃值: (94)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
14
实验室苦工 谢谢分享~
分享 交流
2017-4-1 15:58
0
雪    币: 240
活跃值: (388)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
15
谢谢分享,  很好
2017-4-3 21:38
0
雪    币: 6818
活跃值: (153)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
不错!!!!!!!!
2017-4-6 00:19
0
雪    币: 2121
活跃值: (2509)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
17
感谢分享
2017-4-14 14:39
0
雪    币: 15
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
厉害,学习
2017-4-18 08:49
0
雪    币: 334
活跃值: (790)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
19
楼主,请问一下,我要怎么才能定位到IDA这个加密函数的地址。
2017-7-7 13:41
0
雪    币: 371
活跃值: (94)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
20




cherrychan

楼主,请问一下,我要怎么才能定位到IDA这个加密函数的地址。

在http请求中抓链接中的关键词,根据关键词在反编译后的app中全局搜索,定位到从哪儿发出去的,然后看代码逻辑,找在哪儿调用的,一步步来就行了

2017-7-8 20:44
0
游客
登录 | 注册 方可回帖
返回
//