马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
微信 PC端 数据库 自动解密
摘要
PC密码为32字节。
手动流程参考看雪另一位dalao整理的文章,链访问最后的参考处。我重要是把整个过程实现了自动化,顺便复习了一下api hook。
手动流程
获取密码
打开微信(不点登录)。
打开Odb附加WeChat.exe。
查找->可执行模块->WeChatWin。
用插件找ASCII字符串(我打了中文搜索补丁,直接用中文搜索的搜索ASCII字符串)。
然后搜索字符串DBFactory::encryptDB,跳转到第一次出现该字符串的位置。这里旧版本大概是第二个字符串的位置。3.3版本我找到了两个,都跳转过去看看,其中一个push语句下面有一个TEST,另一个只有一个call就return了。要找的是有TEST那个。
该TEST语句就是比较密码的地方,双击设置断点。然后运行并登录。
停在断点时,选择edx在数据窗口中跟随。
然后把从edx开始的32字节的数据dump出来,该32字节的数据就是密码。
从源码安装openssl
需要用到openssl,据说sqlcipher用的是最低版本的openssl。这里使用1.0.2u。
起首安装perl。()
然后运行 x86 Native Tools Command Prompt for VS 2019 这个shell。
激活perl环境
- state activate
- cd /d E:\openssl-1.0.2u\
复制代码 编译
- perl Configure VC-WIN64A no-asm -prefix=E:\Program_Files\openssl102u
- ms\do_ms.bat
- nmake -f ms\ntdll.mak
复制代码 查抄
- nmake -f ms\ntdll.mak test
复制代码 安装
- nmake -f ms\ntdll.mak install
复制代码 奇怪的是最后照旧安装到了E:\usr\local\ssl\这个目录下
解密
这里分享vs2019解密的过程。
在项目的属性页 -> C/C++ -> 常规 -> 附加包含目录 中添加openssl的include目录。
在项目的属性页 -> 链接器 -> 常规 -> 附加库目录 中添加openssl的include目录。
在项目的属性页 -> 链接器 -> 输入 -> 附加依赖项 中添加libeay32.lib和ssleay32.lib。
然后编译运行看雪文章中的代码。(链访问参考)
然后把E:\usr\local\ssl\bin\中的两个dll复制exe的根目录,exe才能正常运行。
接着把exe和两个dll复制到微信缓存文件的目录/对应用户目录/Msg/里,微信缓存目录名为WeChat Files,可以在微信设置中查到。
复制过去后运行exe即可。
自动获取(代码修改api hook)
流程
代码参考附件。
总流程如下:
- 复制dll到wx根目录
- 打开微信
- 注入dll
- 微信登录
- dll把密钥dump出来
- 复制聊天记录文件
- 解密
复制代码 其中dll所做的是修改目标函数的起始字节为jmp,跳转到hook函数中,然后读取原函数的参数,把密钥写到文件里,再unhook并跳回原来的位置继续运行。
因为比较懒,自动化代码没有写卸载dll的东西。另外有时会出现dump出密码后,微信直接闪退的环境。
dll
通过注入dll实现修改代码的hook来dump出密钥。
通过GetModuleHandle获取WeChatWin.dll的基址,然后加上目标api的偏移得到api的地址。
1
2
| hApi = GetModuleHandleW(L"WeChatWin") + apiOffset;
hook_by_5b_code(hApi, (PROC)HookFunc);
| 然后查看api的代码可以推算出密钥首地址为*(*(esp - 4 + 0x10)),减4是因为有个push ebp。然后剩下的照抄test edx, edx前的代码得到。
当然也可以直接在test edx, edx的地方跳转,这样直接读edx就行。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
| __declspec(naked) void HookFunc()
{
{
DWORD _esp = 0;
__asm {
mov _esp, esp;
pusha;
}
DWORD addr = *(DWORD*)(*(DWORD*)(_esp + 0xc));
HANDLE hFile = CreateFileW(L"./pw.bin", GENERIC_WRITE, 0, 0, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL);
WriteFile(hFile, (LPCVOID)addr, 32, NULL, NULL);
CloseHandle(hFile);
unhook_by_5b_code(hApi);
__asm {
popa;
mov ecx, 0x53677E70;
jmp ecx;
}
}
}
| 食用指南
GetPwHookCodeDll.cpp是dll的代码。AllInOne.cpp是自动解密的代码。需要提供wx根目录位置和微名誉户文件的位置。
wx用户文件的位置:在wx的缓存文件(该目录在wx设置中有)中,有一个叫wxid_xxxxxxx的文件夹,xxxxx是你的初始wx id,这个就是对应wx账户的本地文件。
假设wx根目录是D:\WeChat,用户目录是D:\WeChat Files\wxid_bravetroops。 方法一:在自动步伐根目录中打开shell,输入AllInOne.exe D:\WeChat D:\WeChat Files\wxid_bravetroops即可。 方法二:在步伐根目录中有个aio_cf.txt,第一行输入wx根目录,第二行输入用户目录即可。
最后会在根目录生成一个dec_ChatMsg.db的文件,就是解密后的聊天记录。
参考
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |