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

对一个apk的协议分析

2020-3-15 23:15
14178

过年的时候看见一个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":"566K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8U0p5J5x3q4)9J5k6e0M7$3i4K6u0W2x3U0f1H3i4K6u0W2x3e0k6Q4x3V1k6$3K9h3c8W2L8#2)9J5k6i4m8Z5M7q4)9K6c8X3S2G2M7%4c8Q4x3@1c8K6P5W2)9J5k6h3u0@1k6Y4y4Q4x3X3g2E0j5h3W2D9i4K6u0W2k6Y4c8F1i4K6u0W2M7i4q4Q4x3X3g2U0L8$3#2Q4x3U0k6S2L8i4m8Q4x3@1u0U0L8$3c8W2i4K6y4p5z5o6N6V1x3h3f1H3z5r3b7H3z5e0u0U0x3h3b7H3y4e0f1J5y4K6V1@1y4K6M7#2y4r3b7#2y4o6t1H3z5e0g2S2j5h3c8W2x3$3c8T1x3r3y4X3y4o6j5I4z5h3c8X3x3e0N6W2z5o6q4V1x3e0m8T1y4X3f1@1x3e0c8U0y4r3k6W2x3e0l9I4k6e0x3$3x3U0u0T1j5X3y4U0x3o6W2X3y4o6f1@1x3o6c8U0x3e0N6T1y4U0l9I4k6e0l9#2k6o6t1^5y4U0q4T1k6X3t1@1y4K6V1&6j5U0M7@1x3r3f1H3z5o6N6W2x3X3b7&6y4r3q4T1z5o6R3$3k6U0N6Q4x3U0k6S2L8i4m8Q4x3@1u0V1j5i4c8S2i4K6y4p5z5o6y4S2x3K6M7I4k6o6R3&6x3r3x3I4x3e0M7^5k6e0S2W2j5$3x3^5j5K6l9$3x3r3j5I4y4$3b7J5j5h3y4X3y4r3p5H3k6h3k6X3y4K6l9%4z5e0f1#2x3o6x3#2j5X3f1@1x3o6N6X3y4$3y4W2y4K6l9%4k6o6S2W2k6o6b7&6k6o6f1$3z5o6W2S2y4r3q4T1j5X3k6X3j5U0R3I4k6o6x3H3j5h3q4V1j5K6N6X3j5U0R3#2k6e0l9^5x3U0j5#2z5r3x3%4","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里面很多的流程混淆,具体可以参考这篇大佬的文章

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

3dfK9s2c8@1M7s2y4Q4x3@1q4Q4x3V1k6Q4x3V1k6%4N6%4N6Q4x3X3g2S2L8Y4q4#2j5h3&6C8k6g2)9J5k6h3y4G2L8g2)9J5c8Y4m8G2M7%4c8Q4x3V1k6A6k6q4)9J5c8U0p5%4z5e0l9^5x3l9`.`.


很多的函数并不能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


[招生]科锐逆向工程师培训(2025年3月11日实地,远程教学同时开班, 第52期)!

最后于 2020-3-16 11:31 被yezheyu编辑 ,原因: 其他原因
收藏
免费 5
支持
分享
最新回复 (24)
雪    币: 19
活跃值: (341)
能力值: ( 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
雪    币: 2960
活跃值: (5191)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
4
发包是啥软件啊,看起来还挺好用的
2020-3-16 09:38
0
雪    币: 1927
活跃值: (1467)
能力值: ( LV3,RANK:35 )
在线值:
发帖
回帖
粉丝
5
windy_ll 发包是啥软件啊,看起来还挺好用的
Soku
2020-3-16 10:08
0
雪    币: 2960
活跃值: (5191)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
6
你咋不上天呢 Soku
楼主可以分享一下工具链接吗?去百度搜了一圈居然找不到
2020-3-16 10:18
0
雪    币: 1927
活跃值: (1467)
能力值: ( LV3,RANK:35 )
在线值:
发帖
回帖
粉丝
7
windy_ll 楼主可以分享一下工具链接吗?去百度搜了一圈居然找不到[em_5]
ae5K9s2c8@1M7q4)9K6b7g2)9J5c8W2)9J5c8Y4y4C8j5i4m8H3i4K6u0W2j5$3y4Q4x3V1j5`.
2020-3-16 10:42
0
雪    币: 2960
活跃值: (5191)
能力值: ( 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
雪    币: 2960
活跃值: (5191)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
10
很快就胖了 抓包软件是fiddler 百度有了
2020-3-16 11:10
0
雪    币: 1927
活跃值: (1467)
能力值: ( LV3,RANK:35 )
在线值:
发帖
回帖
粉丝
11
windy_ll
原来你是说抓包工具嗦
2020-3-16 11:32
0
雪    币: 1927
活跃值: (1467)
能力值: ( LV3,RANK:35 )
在线值:
发帖
回帖
粉丝
12
windy_ll
天啊,我现在用的这个ida每次退出后都会少些记录的数据,我要崩溃了,明明保存了的
2020-3-16 11:36
0
雪    币: 2960
活跃值: (5191)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
13
你咋不上天呢 [em_26]原来你是说抓包工具嗦
emmm一直用anyproxy抓包,都没有认出来是fiddler
2020-3-16 12:15
0
雪    币: 2345
活跃值: (4742)
能力值: ( 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
活跃值: (418)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
20
这个软件调用的阿里聚安全的算法,确实有点厉害。我也是搞不定。
2020-3-18 18:18
0
雪    币: 5035
活跃值: (19265)
能力值: ( 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
游客
登录 | 注册 方可回帖
返回