首页
社区
课程
招聘
对一个apk的协议分析
发表于: 2020-3-15 23:15 13905

对一个apk的协议分析

2020-3-15 23:15
13905

过年的时候看见一个apk,因为肺炎在屋头宅的发霉,拿出来玩玩,小白图个乐,大佬乎喷。

Apk信息


这个app的协议是明文,只有一个sign签名。


1APK的协议

长链接的心跳


返回值

登录和注册

Type 1=登录 2=注册

Username 和password 是账户和密码

imei手机序列号

t是时间戳

sign是加密验证

返回值:

2,搜索协议的逻辑

Name是搜索内容

应用上点击列表后向服务器发送 urn:btih: ,时间戳,sign

返回值

{"msg":"0",

"list":[{"name":"1.rm",

"data":"83a371d890c1178e8ecc8c060f17d2acf4a0eff707955035be407f7ce707d8ed49d5689a4abbffb8", "size":""}]}


返回值:

{"url":"http://120.76.250.16/video.php?host=sz.btfs.mail.ftn.qq.com&code=87d1e08d092c1d05527947754d542095aade3db0cf4619df17e81d10b6e414c4fe101e3622bbcc09f45404c17b601e05d2861bfb4799b740e087e2d94ab886f7&data=83a371d890c1178e8ecc8c060f17d2acf4a0eff707955035be407f7ce707d8ed49d5689a4abbffb81d30aadc7fb85e082658c7","cookie":"b4d29c58","msg":"0"}

这个就是视频源了,开始寻找sign的签名算法。

2 apk源码

在com.Soku. jxActivity的内部类madaper中onBindViewHolder方法发送hash以及data拿到视频地址

sign是调用com.Soku.Sign.getsign方法取返回值,传入的参数为 hash+time

(BuildConfig.VERSION_NAME的值是 6.3")


接下来调用 suritySignature.sign(),这个 类位于ibaba.wireless.security.jaq.SecuritySignature;

SecureSignatureDefine.OPEN_KEY_SIGN_INPUT值为"INPUT"



之后是一个接口类IsecureSignatureComponent;他的实现在lib\armeabi\d1libsgmain.so中

但是这并不是一个so文件而是一个jar包。

我通过ddms绘制函数轨迹得到完整的调用链。

com.alibaba.wireless.security.a.h.a.sign()->

com.taobao.wireless.security.adapter.a.b.a()->    //判断传入的参数map类型

com.taobao.wireless.security.adapter.a.b.a();->  //重载的函数, 这个函数的作用是将Unicode字节码转成UTF-8

com.taobao.wireless.security.adapter.a.b.a();->  

com.taobao.wireless.security.adapter.JNICLibrary.doCommandNative(int i, Object... objArr);

最后调用了native函数。传入的参数为10401,new object{ hash+time+“6.3“,"3be780bc-8cf2-446c-9e03-de3a8fd9d0a7", Integer.valueOf(3),"0335"}


接下来就开始对 libsgmain-5.4.56.so的分析


3 libsgmainso.so的分析

Jar包中的lib\armeabi\libsgmain-5.4.56.so,简单粗暴的将所有节头的偏移和大小置0后使用ida打开

这个so里面很多的流程混淆,具体可以参考这篇大佬的文章

详细分析一款移动端浏览器安全性

https://www.anquanke.com/post/id/179080


很多的函数并不能F5 

经过分析,函数开始处与函数结束处取一个内存中的值判断是否相等,如果不相等就跳转另一个地址

并且这个值并不参与运算中来,所以修改后并不影响我们的分析并且可以愉快的F5了


执行流程

首先so会去寻找 Boolean,String,Integer并做方法全局化引用 。

然后0xb9b0处解密加载

com/taobao/wireless/security/adapter/common/HttpUti,

解密 函数 sub_903F0 他的第一个参数是要解密的数据,第二个是返回值,三是 要解密的数据的大小

 首先申请一段56byte的内存(就叫malloc_56)再申请11byte的内存,将后面这个11byte的内存地址放入 malloc_56 的首地址。

这 11byte的内存存入的是10字节的密钥RC4算法, malloc_56[1]是0, malloc_56[2],是11,后面的都是一些函数地址了


密钥DcO/lcK+h? m3c*q@ (好像其他版本的密钥都是一样的)



接着再申请一个malloc_56,首地址存放要解密的数据地址。通过一个函数75DDA里的switch去调用sub_7C700


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

最后于 2020-3-16 11:31 被yezheyu编辑 ,原因: 其他原因
收藏
免费 5
支持
分享
最新回复 (24)
雪    币: 19
活跃值: (331)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
学习了很不错的分析过程。
最后于 2020-3-16 13:18 被尕可编辑 ,原因: 其他
2020-3-16 01:18
0
雪    币: 248
活跃值: (3789)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
有点长,留着慢慢看
2020-3-16 05:25
0
雪    币: 2914
活跃值: (5006)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
4
发包是啥软件啊,看起来还挺好用的
2020-3-16 09:38
0
雪    币: 1841
活跃值: (1305)
能力值: ( LV3,RANK:35 )
在线值:
发帖
回帖
粉丝
5
windy_ll 发包是啥软件啊,看起来还挺好用的
Soku
2020-3-16 10:08
0
雪    币: 2914
活跃值: (5006)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
6
你咋不上天呢 Soku
楼主可以分享一下工具链接吗?去百度搜了一圈居然找不到
2020-3-16 10:18
0
雪    币: 1841
活跃值: (1305)
能力值: ( LV3,RANK:35 )
在线值:
发帖
回帖
粉丝
7
windy_ll 楼主可以分享一下工具链接吗?去百度搜了一圈居然找不到[em_5]
http://skapp.cc/
2020-3-16 10:42
0
雪    币: 2914
活跃值: (5006)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
8
楼主,这个好像不是你这篇帖子里用的发包工具样

最后于 2020-3-16 10:49 被windy_ll编辑 ,原因:
2020-3-16 10:49
0
雪    币: 204
活跃值: (23)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
windy_ll 楼主,这个好像不是你这篇帖子里用的发包工具样
抓包软件是fiddler 百度有了
2020-3-16 11:04
0
雪    币: 2914
活跃值: (5006)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
10
很快就胖了 抓包软件是fiddler 百度有了
2020-3-16 11:10
0
雪    币: 1841
活跃值: (1305)
能力值: ( LV3,RANK:35 )
在线值:
发帖
回帖
粉丝
11
windy_ll
原来你是说抓包工具嗦
2020-3-16 11:32
0
雪    币: 1841
活跃值: (1305)
能力值: ( LV3,RANK:35 )
在线值:
发帖
回帖
粉丝
12
windy_ll
天啊,我现在用的这个ida每次退出后都会少些记录的数据,我要崩溃了,明明保存了的
2020-3-16 11:36
0
雪    币: 2914
活跃值: (5006)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
13
你咋不上天呢 [em_26]原来你是说抓包工具嗦
emmm一直用anyproxy抓包,都没有认出来是fiddler
2020-3-16 12:15
0
雪    币: 2221
活跃值: (4602)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
不错 学习了
2020-3-16 12:19
0
雪    币: 977
活跃值: (435)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
15
感谢分享
2020-3-16 15:26
0
雪    币: 145
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
16
学习了。
2020-3-16 17:14
0
雪    币: 1237
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
17
阿里的这个libsgamain是真的恶心。到现在我还不是很会搞这个东西
2020-3-17 09:30
0
雪    币: 883
活跃值: (884)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
分析很详细啊,学习了。
2020-3-17 11:58
0
雪    币: 106
活跃值: (609)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
能不能加一下我的QQ交流技术:290387340
2020-3-18 17:13
0
雪    币: 423
活跃值: (413)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
20
这个软件调用的阿里聚安全的算法,确实有点厉害。我也是搞不定。
2020-3-18 18:18
0
雪    币: 4957
活跃值: (19070)
能力值: ( LV13,RANK:317 )
在线值:
发帖
回帖
粉丝
21
感谢分享
2020-4-1 17:01
0
雪    币: 275
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
22
学习了,感谢
2020-4-3 18:00
0
雪    币: 0
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
您好,请问在JNI_OnLoad中的JUMPOUT 如何分析呢。
这一块我在网上没能找到很好的学习资料,想要请教一下
2020-5-1 00:38
0
雪    币: 200
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
24

楼主麻烦看到请回复,有偿求问192638110

最后于 2020-7-6 15:10 被mb_gbrkqlle编辑 ,原因:
2020-6-29 16:16
0
雪    币: 200
能力值: ( LV1,RANK:0 )
在线值:
发帖
回帖
粉丝
25
2020-7-6 15:11
0
游客
登录 | 注册 方可回帖
返回
//