wxid转微信号工具,通过QQ号转WXID,协议源码纯代码分享!

发布时间 2023-11-18 18:35:01作者: 新壳软件

这个协议其实跟网上分享的小程序调用查微信号接口不一样,我这种是另类的,但是能实现同样的效果代码我整合好了,就纯代码,UI界面下面我也会分享出来,主要是协议代码需要大家好好学习研究一下,我自己也研究了很久才HOOK出来的,需要服务器和客户端连接奥,我这边只分享服务端的代码,也就是核心的数据转换代码。

UI界面:

 

 

核心代码:【转换实现解密】仅供学习!

========================================================

.版本 2

.支持库 spec

.程序集 窗口程序集_启动窗口, , , 本源码来自易语言资源网(www.eyuyan.la)

.子程序 _按钮1_被单击, , , 易语言学习资源、源码下载站:www.eyuyan.la

.局部变量 好友信息, 好友信息

查询好友信息 (“weixin”, 好友信息)

调试输出 (好友信息.昵称)

' 调用了模块,我用的是精易模块6.9和超级模块9.2

.子程序 查询好友信息, , , $SEH 3.7.6.29 通过微信id查询好友信息

.参数 微信ID, 文本型

.参数 好友信息, 好友信息, 参考

.局部变量 进程句柄, 整数型

.局部变量 组装代码, 字节集

.局部变量 线程句柄, 整数型

.局部变量 参数地址, 整数型

.局部变量 字节集数据, 字节集

.局部变量 信息缓冲区, 整数型

.局部变量 call_1, 整数型

.局部变量 call_2, 整数型

.局部变量 call_3, 整数型

.局部变量 call_4, 整数型

.局部变量 内存地址, 整数型

.局部变量 Addr, 整数型

.局部变量 变量, 整数型

.局部变量 call_5, 整数型

.局部变量 call_6, 整数型

.局部变量 call_7, 整数型

.局部变量 内存地址2, 整数型

.局部变量 EBX, 整数型

.局部变量 进程PID, 整数型

.局部变量 WeChatWin_DLL, 整数型

' 3.7.6.29

' 63D20000 基址

' 6413E9B2 8D45 08 lea eax,dword ptr ss:[ebp+0x8] ; wxid结构体

' 6413E9B5 B9 ACC62666 mov ecx,WeChatWi.6626C6AC ;WeChatWin_DLL+254C6AC

' 6413E9BA 50 push eax

' 6413E9BB E8 E05A3F00 call WeChatWi.645344A0 ; call 5

' 6413E9C0 84C0 test al,al ; 忽略

' 6413E9C2 0F85 73020000 jnz WeChatWi.6413EC3B ; 忽略

' 6413E9C8 E8 F34DD1FF call WeChatWi.63E537C0 ; call 6

' 6413E9CD 8D4D 08 lea ecx,dword ptr ss:[ebp+0x8] ; wxid结构体

' 6413E9D0 51 push ecx

' 6413E9D1 8BC8 mov ecx,eax

' 6413E9D3 E8 D8E10D00 call WeChatWi.6421CBB0 ; call 7 查询call在这里面

' 查询call

' 6421CC13 8D85 04FCFFFF lea eax,dword ptr ss:[ebp-0x3FC] ; 好友信息缓冲区

' 6421CC19 C745 FC 0000000>mov dword ptr ss:[ebp-0x4],0x0 ; 忽略

' 6421CC20 50 push eax ; push 缓冲区地址

' 6421CC21 56 push esi ; push 微信id结构体

' 6421CC22 8BCF mov ecx,edi

' 6421CC24 E8 D7CFFFFF call WeChatWi.64219C00 ; 查询call,

进程PID = 进程_名取ID (“WeChat.exe”)

WeChatWin_DLL = Get_modH (进程PID, “WeChatWin.dll”)

进程句柄 = OpenProcess (2035711, 0, 进程PID)

call_4 = WeChatWin_DLL + 十六到十 (“4F9C00”)

call_5 = WeChatWin_DLL + 十六到十 (“8144A0”)

call_6 = WeChatWin_DLL + 十六到十 (“1337C0”)

内存地址 = VirtualAllocEx (进程句柄, 0, 2048, 4096, 64)

信息缓冲区 = VirtualAllocEx (进程句柄, 0, 4096, 4096, 64)

写内存整数型 (进程PID, 内存地址 + 1024, WeChatWin_DLL + 十六到十 (“630E30”))

写内存整数型 (进程PID, 内存地址 + 1028, 内存地址 + 1024)

EBX = 内存地址 + 1028

置汇编代码 ({ })

Pushad ()

Mov_EAX (内存地址 + 100) ' 微信id结构体

Mov_ECX (WeChatWin_DLL + 十六到十 (“254C6AC”)) ' 常量

Push_EAX ()

Call_Ptr (内存地址 + 1004) ' call 5

Call_Ptr (内存地址 + 1008) ' call 6

Mov_ECX (内存地址 + 100) ' 微信id结构体

' 寄存器的值也要传过去,不然微信崩溃

Mov_ECX_EAX ()

Mov_EDI_ECX ()

Mov_EAX (信息缓冲区)

Push_EAX ()

Mov_ESI (内存地址 + 100)

Push_ESI ()

Mov_ECX_EDI ()

Call_Ptr (内存地址 + 1000) ' call 4

Mov_EBX (EBX)

Popad ()

ret ()

组装代码 = 取汇编代码 ()

写内存整数型 (进程PID, 内存地址 + 1000, call_4)

写内存整数型 (进程PID, 内存地址 + 1004, call_5)

写内存整数型 (进程PID, 内存地址 + 1008, call_6)

WriteProcessMemory_字节集 (进程句柄, 内存地址 + 200, 编码_Ansi到Unicode (微信ID), 取字节集长度 (编码_Ansi到Unicode (微信ID)), 变量)

写内存整数型 (进程PID, 内存地址 + 100, 内存地址 + 200)

写内存整数型 (进程PID, 内存地址 + 104, 取字节集长度 (编码_Ansi到Unicode (微信ID)))

写内存整数型 (进程PID, 内存地址 + 108, 取字节集长度 (编码_Ansi到Unicode (微信ID)))

写内存整数型 (进程PID, 内存地址 + 112, 0)

写内存整数型 (进程PID, 内存地址 + 116, 0)

写内存字节集 (进程PID, 内存地址, 组装代码, 取字节集长度 (组装代码)) ' 这里是将组装好的机器码写入申请的那块内存。

线程句柄 = CreateRemoteThread (进程句柄, 0, 0, 内存地址, 参数地址, 0, 0) ' 写进去之后执行。

WaitForSingleObject (线程句柄, 2000) ' 等待执行完毕。

Addr = 读内存整数型 (进程PID, 信息缓冲区 + 十六到十 (“10”))

字节集数据 = 读内存字节集 (进程PID, Addr, 读内存整数型 (进程PID, 信息缓冲区 + 十六到十 (“14”)) × 2)

好友信息.微信ID = 编码_Unicode到Ansi (字节集数据)

Addr = 读内存整数型 (进程PID, 信息缓冲区 + 十六到十 (“24”))

字节集数据 = 读内存字节集 (进程PID, Addr, 读内存整数型 (进程PID, 信息缓冲区 + 十六到十 (“28”)) × 2)

好友信息.微信号 = 编码_Unicode到Ansi (字节集数据)

Addr = 读内存整数型 (进程PID, 信息缓冲区 + 十六到十 (“38”))

字节集数据 = 读内存字节集 (进程PID, Addr, 读内存整数型 (进程PID, 信息缓冲区 + 十六到十 (“4C”)) × 2)

好友信息.V3 = 编码_Unicode到Ansi (字节集数据)

Addr = 读内存整数型 (进程PID, 信息缓冲区 + 十六到十 (“58”))

字节集数据 = 读内存字节集 (进程PID, Addr, 读内存整数型 (进程PID, 信息缓冲区 + 十六到十 (“5C”)) × 2)

好友信息.备注 = 编码_Unicode到Ansi (字节集数据)

Addr = 读内存整数型 (进程PID, 信息缓冲区 + 十六到十 (“6c”))

字节集数据 = 读内存字节集 (进程PID, Addr, 读内存整数型 (进程PID, 信息缓冲区 + 十六到十 (“70”)) × 2)

好友信息.昵称 = 编码_Unicode到Ansi (字节集数据)

Addr = 读内存整数型 (进程PID, 信息缓冲区 + 十六到十 (“AC”))

字节集数据 = 读内存字节集 (进程PID, Addr, 读内存整数型 (进程PID, 信息缓冲区 + 十六到十 (“B0”)) × 2)

好友信息.英文简称 = 编码_Unicode到Ansi (字节集数据)

Addr = 读内存整数型 (进程PID, 信息缓冲区 + 十六到十 (“C0”))

字节集数据 = 读内存字节集 (进程PID, Addr, 读内存整数型 (进程PID, 信息缓冲区 + 十六到十 (“C4”)) × 2)

好友信息.英文全称 = 编码_Unicode到Ansi (字节集数据)

Addr = 读内存整数型 (进程PID, 信息缓冲区 + 十六到十 (“D4”))

字节集数据 = 读内存字节集 (进程PID, Addr, 读内存整数型 (进程PID, 信息缓冲区 + 十六到十 (“D8”)) × 2)

好友信息.备注英文简称 = 编码_Unicode到Ansi (字节集数据)

Addr = 读内存整数型 (进程PID, 信息缓冲区 + 十六到十 (“E8”))

字节集数据 = 读内存字节集 (进程PID, Addr, 读内存整数型 (进程PID, 信息缓冲区 + 十六到十 (“EC”)) × 2)

好友信息.备注英文全称 = 编码_Unicode到Ansi (字节集数据)

' VirtualFreeEx (进程句柄, 内存地址, 0, 32768)

CloseHandle (线程句柄) ' 关闭

CloseHandle (进程句柄) ' 关闭

.子程序 Get_modH, 整数型, , www.eyuyan.la

.参数 PROC_PID, 整数型

.参数 MOD_NAME, 文本型

.局部变量 模块, 精易_模块信息, , "0"

.局部变量 Inc, 整数型

.局部变量 i, 整数型

.局部变量 句柄, 整数型

Inc = 进程_ID取模块 (PROC_PID, 模块)

.计次循环首 (Inc, i)

.如果 (到文本 (模块 [i].模块文件名) = MOD_NAME)

句柄 = 模块 [i].模块句柄

跳出循环 ()

.否则

.如果结束

.计次循环尾 ()

返回 (句柄)

=========================================================