揰掵佲 发表于 2019-10-11 15:03:37

【实战】调用QQ/TIM算法,实现clientkey的提取,并完成快捷登陆

这是很早之前的东西了,只是网上很少人放出来,具体的分析过程我也不记得了!大概说一下思路吧!

1、当QQ/TIM 启动的时候 会在本地创建一个小型的web服务器比如 访问这个网页 就能提取出 http://localhost.ptlogin2.qq.com:4300/mc_get_uins 你当前登陆的所有QQ 但是 他只能显示出来登陆了几个,不能进行操作
2、登陆QQ之后,我们可以直接在QQ的面板点击 QQ空间进入https://ssl.ptlogin2.qq.com/jump?ptlang=2052&clientuin=“+clientuin+”&clientkey="+clientkey+"&u1=https:%2F%2Fuser.qzone.qq.com%2F“+clientuin+”%2Finfocenter&source=panelstar
3、通过访问这个网址,可以获取到对应的cookies 从而完成快捷登陆,QQ9.1版本开始修复了 clientkey直接通过网页版获取,而是通过控件获取,导致我们无法加载控件
4、我们可以通过直接在内存中,完成 clientkey的计算 ,方法 包括了 内存搜索、 或者 调用相关的函数 本章 讲的是 如何调用 相关的函数计算
5、对应的算法 是 KernelUtil.dll 中 ?GetSignature@Misc@Util@@YA?AVCTXStringW@@PBD@Z   
6、IDA载入后分析该函数
CTXStringW *__cdecl Util::Misc::GetSignature(CTXStringW *a1, int a2)
{
int v2; // eax
char v4; //
int v5; //
int v6; //
int v7; //

CTXStringW::CTXStringW(a1);
v5 = 0;
sub_55404A73(&v5);
if ( v5 )
{
    v6 = 0;
    if ( (*(*v5 + 60))(v5, a2, &v6) >= 0 )
    {
      v7 = 0;
      sub_5536126A(v6);
      v2 = Util::Encode::Encode16(&v4, &v7);
      CTXStringW::operator=(a1, v2);
      CTXStringW::~CTXStringW(&v4);
      if ( v7 )
      (*(*v7 + 8))(v7);
    }
    sub_5540C87C(&v6);
}
sub_5540C87C(&v5);
return a1;
}
7、发现有2个参数其中 a1 是返回值 a2是主要参数 ,查看交叉引用
CTXStringW *__cdecl Util::Misc::Get32ByteValueAddedSign(CTXStringW *a1)
{
Util::Misc::GetSignature(a1, "buf32ByteValueAddedSignature");
return a1;
}

8、定为关键位置
.text:55416*FC ; class CTXStringW __cdecl Util::Misc::Get32ByteValueAddedSign(void)
.text:55416*FC               public ?Get32ByteValueAddedSign@Misc@Util@@YA?AVCTXStringW@@XZ
.text:55416*FC ?Get32ByteValueAddedSign@Misc@Util@@YA?AVCTXStringW@@XZ proc near
.text:55416*FC                                       ; CODE XREF: Util::URL::AdjustUrl(CTXStringW const &,Util::URL::URLMODIFYLEVEL,CTXStringW const &,wchar_t const *)+A8↓p
.text:55416*FC                                       ; Util::URL::GetKeyFmt(*FmtString &)+21↓p ...
.text:55416*FC
.text:55416*FC arg_0         = dword ptr8
.text:55416*FC
.text:55416*FC               push    ebp
.text:55416*FD               mov   ebp, esp
.text:55416*FF               push    offset aBuf32bytevalue ; "buf32ByteValueAddedSignature"
.text:55416D04               push   
.text:55416D07               call    ?GetSignature@Misc@Util@@YA?AVCTXStringW@@PBD@Z ; Util::Misc::GetSignature(char const *)
.text:55416D0C               mov   eax,
.text:55416D0F               pop   ecx
.text:55416D10               pop   ecx
.text:55416D11               pop   ebp
.text:55416D12               retn
9、函数代码不太难,直接远程注入,得到结果之后,构建第2步的网址,访问网页,发现 登陆成功了! 剩下的无非就是基本的网页抓包分析了!
10、值得注意的是,每个不同版本的QQ/TIM 所对应的 offset是不同的,所以需要动态获取

完整代码如下
**** Hidden Message *****

12、整个快捷登陆代码如下
**** Hidden Message *****
**** Hidden Message *****

**** Hidden Message ***** 模块地址 https://www.leybc.com/thread-2843-1-1.html 模块中的命令都是乐易模块的!


q小杰 发表于 2019-10-11 15:48:36

不错                     

DD924 发表于 2023-7-30 20:14:17

战】调用QQ/TIM算法,实现clientkey的提取,并完成快捷登陆 [修改]
高级模式

tenp00 发表于 2023-7-31 15:53:44

IM算法,实现clientkey的提取,并完成快捷登陆 [修改]
高级模式

weenze 发表于 2019-10-11 15:10:22

mingge66666

丶七年 发表于 2019-10-11 16:49:01

哇!看看看,支持大佬

745885260 发表于 2019-10-11 17:14:20

调用QQ/TIM算法,实现clientkey的提取,并完成快捷登陆

sxyo 发表于 2019-10-11 20:34:16

感谢大佬分享,正需要,谢谢

夏时 发表于 2019-10-11 23:13:45

:)真棒我来学习了

empo 发表于 2019-10-11 23:22:19

学习一下......

飘雪 发表于 2019-10-12 14:41:31

调用QQ/TIM算法,实现clientkey的提取,并完成快捷登陆

lingjuesuo666 发表于 2019-10-12 16:51:34

学习一下......
页: [1] 2 3 4 5
查看完整版本: 【实战】调用QQ/TIM算法,实现clientkey的提取,并完成快捷登陆