安卓腾xQ协议逆向-TLV分析 (一)

本文只限用于学习交流!!!

用到的工具(网上都能下载到):

        1.YgAndroidQQSniffer

        2.小鸟嗅探

        3.Frida

一、抓包分析

输入账号密码,登录...(怎么配置抓包就不说了,很多工具都能抓到...)

这里我使用的是YgAndroidQQSniffer 这个抓包工具,可以一键抓到wtlogin包

二、分析包

把整个包都复制 上古神器 <飞鸟嗅探中去分析>

操作:右键->安卓qq->QQ包数据格式化 (如下图效果)

 因为截图不出来格式化按钮,只能这样展示了,我也不用这个工具抓包(上古年间的工具,容易   蹦),只用来做分析。

使用小鸟嗅探格式化->转到part2分析,如下

这里有相关的tlv加密,其他的加密不做分析。

定位到tlv包,如下。

publickey下面的数据就是我们需要解密的tlv包。

解析tlv包, 如下。 

关于这个tea解密,这个秘钥很关键我们可以通过hook获取到这个秘钥(怎么hook等下再说),解密之后, 输出部分就是们的tlv解密后的数据,整个tlv一般有25个,我们分析几个需要二次解密的tlv。

1)tlv106

这个tlv需要解密,如下。

先得到解密公钥,如下。 公式:MD5(md5(密码)+00 00 00 00+hex(QQ))

tea解密,如下。

分析如下

00 04

20 EA 98 4A

00 00 00 14

00 00 00 10

00 00 00 00 00 00 00 00

43 EF CC 98[QQ:1139788952]

64 C5 07 D3

00 00 00 00 01

E1 0A DC 39 49 BA 59 AB BE 56 E0 57 F2 0F 88 3E //密码的MD5

FA 9E B8 FD FC 71 6A F4 D6 13 2A 55 75 41 57 F4 //tgtkey

00 00 00 00 01

A7 C6 85 F4 BC B3 DB 01 72 FC B0 9E 70 B5 BA EB //guid

20 04 89 EA

00 00 00 01

00 0A

31 31 33 39 37 38 38 39 35 32 //[1139788952]

00 00

2)tlv144 使用上面的tgtkey解密

分析,如下

00 05 //5部分

01 09

00 10

8A D2 35 98 4E 5D F5 4A 0C A5 26 97 D9 53 6A F3

05 2D 01 81 0A 05 75 62 6F 6F 74 12 B0 01 4C 69 6E 75 78 20 76 65 72 73 69 6F 6E 20 34 2E 31 34 2E 32 35 33 2D 61 6E 64 72 6F 69 64 2B 20 28 63 6A 77 40 6D 76 2D 64 65 76 31 29 20 28 67 63 63 20 76 65 72 73 69 6F 6E 20 34 2E 39 20 32 30 31 35 30 31 32 33 20 28 70 72 65 72 65 6C 65 61 73 65 29 20 28 47 43 43 29 2C  20 47 4E 55 20 67 6F 6C 64 20 28 47 4E 55 20 42 69 6E 75 74 69 6C 73 20 32 2E 32 35 2E 35 31 2E 32 30 31 34 31 31 31 37 29 20 31 2E 31 31 29 20 23 38 31 39 20 53 4D 50 20 46 72 69 20 41 70 72 20 31 34 20 30 39 3A 33 38 3A 31 33 20 43 53 54 20 32 30 32 33 1A 03 52 45 4C 22 1C 72 65 6C 2E 73 65 2E 69 6E 66 72 61 2E 32 30 32 33 30 34 30 37 2E 31 38 33 36 33 33 2A 3D 41 73 75 73 2F 41 73 75 73 2F 41 53 55 53 5F 49 30 30 33 44 44 3A 37 2E 31 2E 32 2F 32 30 31 37 31 31 33 30 2E 33 37 36 32 32 39 3A 75 73 65 72 2F 72 65 6C 65 61 73 65 2D 6B 65 79 73 32 24 38 61 31 39 39 30 61 62 2D 64 33 35 64 2D 34 37 61 37 2D 39 62 37 38 2D 64 61 61 30 39 35 62 66 30 66 36 39 3A 10 64 36 38 36 62 62 38 31 30 37 33 36 35 38 35 64 42 0D 47 39 33 30 30 5A 43 55 32 41 50 49 33 4A 1C 72 65 6C 2E 73 65 2E 69 6E 66 72 61 2E 32 30 32 33 30 34 30 37 2E 31 38 33 36 33 33

[-?

uboot_x0012_?Linux version 4.14.253-android+ (cjw@mv-dev1) (gcc version 4.9 20150123 (prerelease) (GCC), GNU gold (GNU Binutils 2.25.51.20141117) 1.11) #819 SMP Fri Apr 14 09:38:13 CST 2023REL"rel.se.infra.20230407.183633*=Asus/Asus/ASUS_I003DD:7.1.2/20171130.376229:user/release-keys2$8a1990ab-d35d-47a7-9b78-daa095bf0f69:_x0010_d686bb810736585dB

G9300ZCU2API3Jrel.se.infra.20230407.183633]  // 这一坨是设备信息

01 24

00 2C

00 07

61 6E 64 72 6F 69 64[android]

00 05

37 2E 31 2E 32 [7.1.2]

00 02

00 10

43 68 69 6E 61 20 4D 6F 62 69 6C 65 20 47 53 4D[China Mobile GSM]

00 00 00 04

77 69 66 69[wifi]

01 28

00 2E

00 00 00 01 00 01 00 00 00 00

0B 41 53 55 53 5F 49 30 30 33 44 44[ASUS_I003DD]

00 10

A7 C6 85 F4 BC B3 DB 01 72 FC B0 9E 70 B5 BA EB

00 04

41 73 75 73 [Asus]

01 6E

00 0B

41 53 55 53 5F 49 30 30 33 44 44 [ASUS_I003DD] //手机型号

三、frida hook 解密key

//frida hook脚本
function myhook()
{
    Java.perform(function()
    {
        function signedToUnsignedByte(signedByte) {
            return (signedByte + 256) % 256;
        }
        
        // 转换有符号字节数组为无符号十六进制表示
        function bytesToHex(bytes) {
            return Array.from(bytes, signedToUnsignedByte)
            .map(byte => byte.toString(16).toUpperCase().padStart(2, '0'))
            .join(' ');
        }

        let cryptor = Java.use("oicq.wlogin_sdk.tools.cryptor");
        cryptor["encrypt"].implementation = function () {
            console.log("\n------参数:---------------");
            for (var j = 0; j < arguments.length; j++) {
                console.log("arg"+j+":"+arguments[j]);
            }
            console.log("转换后:"+bytesToHex(arguments[3]))
            let result = this["encrypt"](...arguments);
            console.log(`cryptor.encrypt result=${result}`);
            return result;
        };

    })

}
setImmediate(myhook)

 hook结果如下。

使用它解密tlv数据包,如下。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值