由于通过网页版实现快捷登陆被TX和谐了,所以,各种群验证以及相继失效!因此,想起来很多年前玩的一种方法,就拿出来分享了!
登陆QQ的网页,除了从网页快捷登陆之外,还可以通过QQ面板,直接登陆!
所以,我们点击QQ面板上的QQ空间标志,等待网页弹出,进入成功
进入之后 是这样的状态 https://user.qzone.qq.com/这里是你的QQ号/infocenter
我们在地址栏 按下 CTRL+Z 会出现一串很长的网址
https://ssl.ptlogin2.qq.com/jump?ptlang=2052&clientuin=QQ&clientkey=clientkey&u1=https:%2F%2Fuser.qzone.qq.com%2QQ%2Finfocenter&source=panelstar
clientkey是一段64位的文本字符串,这个肯定是从QQ内存中获取的,因为这里涉及了权限问题,所以,就没有QQ和key放出来。
忘记以前是怎么定位的了,只记得是 KernelUtil.dll 中的 ?GetSignature@Misc@Util@@YA?AVCTXStringW@@PBD@Z IDA附加 定位到函数
进入之后 是这样的状态 https://user.qzone.qq.com/这里是你的QQ号/infocenter
我们在地址栏 按下 CTRL+Z 会出现一串很长的网址
https://ssl.ptlogin2.qq.com/jump?ptlang=2052&clientuin=QQ&clientkey=clientkey&u1=https:%2F%2Fuser.qzone.qq.com%2QQ%2Finfocenter&source=panelstar
clientkey是一段64位的文本字符串,这个肯定是从QQ内存中获取的,因为这里涉及了权限问题,所以,就没有QQ和key放出来。
忘记以前是怎么定位的了,只记得是 KernelUtil.dll 中的 ?GetSignature@Misc@Util@@YA?AVCTXStringW@@PBD@Z IDA附加 定位到函数
CTXStringW *__cdecl Util::Misc::GetSignature(CTXStringW *a1, int a2)
{
int v2; // eax
int v4; // [esp-14h] [ebp-14h]
int v5; // [esp-10h] [ebp-10h]
int v6; // [esp-Ch] [ebp-Ch]
int v7; // [esp-8h] [ebp-8h]
CTXStringW::CTXStringW(a1);
v5 = 0;
sub_55404A73(&v5);
if ( v5 )
{
v6 = 0;
if ( (*(int (__stdcall **)(int, int, int *))(*(_DWORD *)v5 + 60))(v5, a2, &v6) >= 0 )
{
v7 = 0;
sub_5536126A(&v7, v6);
v2 = Util::Encode::Encode16(&v4, &v7);
CTXStringW::operator=(a1, v2);
CTXStringW::~CTXStringW((CTXStringW *)&v4);
if ( v7 )
(*(void (__stdcall **)(int))(*(_DWORD *)v7 + 8))(v7);
}
sub_5540C87C(&v6);
}
sub_5540C87C(&v5);
return a1;
}
传入2个参数
参数1 是 缓存区 返回结果指针
参数2 是 传入参数的指针
查看交叉引用
CTXStringW *__cdecl Util::Misc::GetSignature(CTXStringW *a1, int a2)
{
int v2; // eax
int v4; // [esp-14h] [ebp-14h]
int v5; // [esp-10h] [ebp-10h]
int v6; // [esp-Ch] [ebp-Ch]
int v7; // [esp-8h] [ebp-8h]
CTXStringW::CTXStringW(a1);
v5 = 0;
sub_55404A73(&v5);
if ( v5 )
{
v6 = 0;
if ( (*(int (__stdcall **)(int, int, int *))(*(_DWORD *)v5 + 60))(v5, a2, &v6) >= 0 )
{
v7 = 0;
sub_5536126A(&v7, v6);
v2 = Util::Encode::Encode16(&v4, &v7);
CTXStringW::operator=(a1, v2);
CTXStringW::~CTXStringW((CTXStringW *)&v4);
if ( v7 )
(*(void (__stdcall **)(int))(*(_DWORD *)v7 + 8))(v7);
}
sub_5540C87C(&v6);
}
sub_5540C87C(&v5);
return a1;
}
传入2个参数
参数1 是 缓存区 返回结果指针
参数2 是 传入参数的指针
查看交叉引用
一个一个进去看
CTXStringW *__cdecl Util::Misc::Get32ByteValueAddedSign(CTXStringW *a1)
{
Util::Misc::GetSignature(a1, (int)"buf32ByteValueAddedSignature");
return a1;
}
CTXStringW *__cdecl Util::Misc::Get32ByteValueAddedSign(CTXStringW *a1)
{
Util::Misc::GetSignature(a1, (int)"buf32ByteValueAddedSignature");
return a1;
}
CTXStringW *__cdecl Util::Misc::GetValueSTHttp(CTXStringW *a1)
{
Util::Misc::GetSignature(a1, (int)"bufSTHttp");
return a1;
}
发现2个函数 调用方式 一样,不同的是
一个是 buf32ByteValueAddedSignature 一个是 bufSTHttp
这里选择 buf32ByteValueAddedSignature 因为我们获取的是64位的key
CTXStringW *__cdecl Util::Misc::GetValueSTHttp(CTXStringW *a1)
{
Util::Misc::GetSignature(a1, (int)"bufSTHttp");
return a1;
}
发现2个函数 调用方式 一样,不同的是
一个是 buf32ByteValueAddedSignature 一个是 bufSTHttp
这里选择 buf32ByteValueAddedSignature 因为我们获取的是64位的key
.text:55416CFC ; class CTXStringW __cdecl Util::Misc::Get32ByteValueAddedSign(void)
.text:55416CFC public ?Get32ByteValueAddedSign@Misc@Util@@YA?AVCTXStringW@@XZ
.text:55416CFC ?Get32ByteValueAddedSign@Misc@Util@@YA?AVCTXStringW@@XZ proc near
.text:55416CFC ; CODE XREF: Util::URL::AdjustUrl(CTXStringW const &,Util::URL::URLMODIFYLEVEL,CTXStringW const &,wchar_t const *)+A8↓p
.text:55416CFC ; Util::URL::GetKeyFmt(CFmtString &)+21↓p ...
.text:55416CFC push ebp
.text:55416CFD mov ebp, esp
.text:55416CFF push offset aBuf32bytevalue ; "buf32ByteValueAddedSignature"
.text:55416D04 push dword ptr [ebp+8]
.text:55416D07 call ?GetSignature@Misc@Util@@YA?AVCTXStringW@@PBD@Z ; Util::Misc::GetSignature(char const *)
.text:55416D0C mov eax, [ebp+8]
.text:55416D0F pop ecx
.text:55416D10 pop ecx
.text:55416D11 pop ebp
.text:55416D12 retn
.text:55416D12 ?Get32ByteValueAddedSign@Misc@Util@@YA?AVCTXStringW@@XZ endp
当前登陆QQ号 是通过 ?GetSelfUin@Contact@Util@@YAKXZ 获取的
.text:55416CFC ; class CTXStringW __cdecl Util::Misc::Get32ByteValueAddedSign(void)
.text:55416CFC public ?Get32ByteValueAddedSign@Misc@Util@@YA?AVCTXStringW@@XZ
.text:55416CFC ?Get32ByteValueAddedSign@Misc@Util@@YA?AVCTXStringW@@XZ proc near
.text:55416CFC ; CODE XREF: Util::URL::AdjustUrl(CTXStringW const &,Util::URL::URLMODIFYLEVEL,CTXStringW const &,wchar_t const *)+A8↓p
.text:55416CFC ; Util::URL::GetKeyFmt(CFmtString &)+21↓p ...
.text:55416CFC push ebp
.text:55416CFD mov ebp, esp
.text:55416CFF push offset aBuf32bytevalue ; "buf32ByteValueAddedSignature"
.text:55416D04 push dword ptr [ebp+8]
.text:55416D07 call ?GetSignature@Misc@Util@@YA?AVCTXStringW@@PBD@Z ; Util::Misc::GetSignature(char const *)
.text:55416D0C mov eax, [ebp+8]
.text:55416D0F pop ecx
.text:55416D10 pop ecx
.text:55416D11 pop ebp
.text:55416D12 retn
.text:55416D12 ?Get32ByteValueAddedSign@Misc@Util@@YA?AVCTXStringW@@XZ endp
当前登陆QQ号 是通过 ?GetSelfUin@Contact@Util@@YAKXZ 获取的
int __fastcall Util::Contact::GetSelfUin(int a1)
{
int result; // eax
int v2; // esi
int v3; // [esp-8h] [ebp-8h]
v3 = a1;
result = dword_554F12AC;
if ( !dword_554F12AC )
{
v3 &= dword_554F12AC;
sub_55404A73(&v3);
if ( v3 )
(*(void (__stdcall **)(int, int *))(*(_DWORD *)v3 + 48))(v3, &dword_554F12AC);
v2 = dword_554F12AC;
sub_5540C87C(&v3);
result = v2;
}
return result;
}
.text:55405EA9 public ?GetSelfUin@Contact@Util@@YAKXZ
.text:55405EA9 ?GetSelfUin@Contact@Util@@YAKXZ proc near
.text:55405EA9 ; CODE XREF: .text:5535A2FE↑p
.text:55405EA9 ; .text:5535A921↑p ...
.text:55405EA9 push ebp
.text:55405EAA mov ebp, esp
.text:55405EAC push ecx
.text:55405EAD mov eax, dword_554F12AC
.text:55405EB2 test eax, eax
.text:55405EB4 jnz short loc_55405EE7
.text:55405EB6 and [ebp-4], eax
.text:55405EB9 lea eax, [ebp-4]
.text:55405EBC push eax
.text:55405EBD call sub_55404A73
.text:55405EC2 mov eax, [ebp-4]
.text:55405EC5 pop ecx
.text:55405EC6 test eax, eax
.text:55405EC8 jz short loc_55405ED5
.text:55405ECA mov ecx, [eax]
.text:55405ECC push offset dword_554F12AC
.text:55405ED1 push eax
.text:55405ED2 call dword ptr [ecx+30h]
.text:55405ED5
.text:55405ED5 loc_55405ED5: ; CODE XREF: Util::Contact::GetSelfUin(void)+1F↑j
.text:55405ED5 push esi
.text:55405ED6 mov esi, dword_554F12AC
.text:55405EDC lea ecx, [ebp-4]
.text:55405EDF call sub_5540C87C
.text:55405EE4 mov eax, esi
.text:55405EE6 pop esi
.text:55405EE7
.text:55405EE7 loc_55405EE7: ; CODE XREF: Util::Contact::GetSelfUin(void)+B↑j
.text:55405EE7 mov esp, ebp
.text:55405EE9 pop ebp
.text:55405EEA retn
.text:55405EEA ?GetSelfUin@Contact@Util@@YAKXZ endp
接下来写代码 就可以了 ,这里我采用远程注入的方式 进行 操作,代码是易语言代码,其他的语言 自行修改即可
int __fastcall Util::Contact::GetSelfUin(int a1)
{
int result; // eax
int v2; // esi
int v3; // [esp-8h] [ebp-8h]
v3 = a1;
result = dword_554F12AC;
if ( !dword_554F12AC )
{
v3 &= dword_554F12AC;
sub_55404A73(&v3);
if ( v3 )
(*(void (__stdcall **)(int, int *))(*(_DWORD *)v3 + 48))(v3, &dword_554F12AC);
v2 = dword_554F12AC;
sub_5540C87C(&v3);
result = v2;
}
return result;
}
.text:55405EA9 public ?GetSelfUin@Contact@Util@@YAKXZ
.text:55405EA9 ?GetSelfUin@Contact@Util@@YAKXZ proc near
.text:55405EA9 ; CODE XREF: .text:5535A2FE↑p
.text:55405EA9 ; .text:5535A921↑p ...
.text:55405EA9 push ebp
.text:55405EAA mov ebp, esp
.text:55405EAC push ecx
.text:55405EAD mov eax, dword_554F12AC
.text:55405EB2 test eax, eax
.text:55405EB4 jnz short loc_55405EE7
.text:55405EB6 and [ebp-4], eax
.text:55405EB9 lea eax, [ebp-4]
.text:55405EBC push eax
.text:55405EBD call sub_55404A73
.text:55405EC2 mov eax, [ebp-4]
.text:55405EC5 pop ecx
.text:55405EC6 test eax, eax
.text:55405EC8 jz short loc_55405ED5
.text:55405ECA mov ecx, [eax]
.text:55405ECC push offset dword_554F12AC
.text:55405ED1 push eax
.text:55405ED2 call dword ptr [ecx+30h]
.text:55405ED5
.text:55405ED5 loc_55405ED5: ; CODE XREF: Util::Contact::GetSelfUin(void)+1F↑j
.text:55405ED5 push esi
.text:55405ED6 mov esi, dword_554F12AC
.text:55405EDC lea ecx, [ebp-4]
.text:55405EDF call sub_5540C87C
.text:55405EE4 mov eax, esi
.text:55405EE6 pop esi
.text:55405EE7
.text:55405EE7 loc_55405EE7: ; CODE XREF: Util::Contact::GetSelfUin(void)+B↑j
.text:55405EE7 mov esp, ebp
.text:55405EE9 pop ebp
.text:55405EEA retn
.text:55405EEA ?GetSelfUin@Contact@Util@@YAKXZ endp
接下来写代码 就可以了 ,这里我采用远程注入的方式 进行 操作,代码是易语言代码,其他的语言 自行修改即可
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)