C++笔记-利用远程线程注入获取PC版微信个人昵称
发布日期:2021-06-30 10:40:53
浏览次数:3
分类:技术文章
本文共 2682 字,大约阅读时间需要 8 分钟。
目录
程序运行
运行程序:
点击确定:
本人微信对应的版本如下:
微信版本如下:
代码与实例
这里直接用CE,然后用二分法去找基址就可以。最后发现是在
WeChatWin.dll加上0x13972DC的偏移上,这里给出其他信息的偏移:
关键代码如下:
注入器:
#include#include #include #include #include #include using namespace std;bool Inject(LPCTSTR DLLPath, DWORD ProcessID){ HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS, FALSE, ProcessID); if(!hProcess){ cout << "OpenProcess failed!" << endl; return false; } SIZE_T pathSize = (_tcslen(DLLPath) + 1) * sizeof(TCHAR); LPVOID startAddress = VirtualAllocEx(hProcess, NULL, pathSize, MEM_COMMIT, PAGE_READWRITE); if(!startAddress){ cout << "VirtualAllocEx failed" << endl; return false; } if(!WriteProcessMemory(hProcess, startAddress, DLLPath, pathSize, NULL)){ cout << "WriteProcessMemory failed" << endl; return false; } PTHREAD_START_ROUTINE pfnStartAddress = (PTHREAD_START_ROUTINE)GetProcAddress(GetModuleHandle(_T("kernel32.dll")), "LoadLibraryW"); if(!pfnStartAddress){ cout << "GetProcAddress failed" << endl; return false; } HANDLE hThread = CreateRemoteThreadEx(hProcess, NULL, NULL, pfnStartAddress, startAddress, NULL, NULL, NULL); if(!hThread){ cout << "CreateRemoteThreadEx failed" << endl; return false; } WaitForSingleObject(hThread, INFINITE); CloseHandle(hThread); CloseHandle(hProcess); return true;}int main(int argc, int *argv[]){ HANDLE hProcess = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL); if(!hProcess){ cout << "CreateToolhelp32Snapshot failed!" << endl; getchar(); return 0; } PROCESSENTRY32 info; info.dwSize = sizeof(PROCESSENTRY32); if(!Process32First(hProcess, &info)){ cout << "Process32First failed!" << endl; getchar(); return 0; } DWORD wxPid; while(true){ USES_CONVERSION; if(strcmp("WeChat.exe", W2A(info.szExeFile)) == 0){ wxPid = info.th32ProcessID; break; } if(!Process32Next(hProcess, &info)){ wxPid = 0; break; } } if(wxPid == 0){ cout << "Process32Next over! unfind pid!" << endl; getchar(); return 0; } //开始注入 if(Inject(L"E:\\vs2012\\hackWechat\\Debug\\hackDll.dll", wxPid)){ cout << "inject successfully!" << endl; } getchar(); return 0;}
注入的dll关键代码:
#include "stdafx.h"#include "My.h"#include#include void getAllInfo(){ MessageBoxA(NULL, "开始解析", "报告首长", NULL); //WeChatWin.dll的基址 DWORD weChatWinAddr = (DWORD)GetModuleHandle(L"WeChatWin.dll"); char wxID[0x1000] = {0}; DWORD weIDDW = weChatWinAddr + 0x13972DC; //wxID[0] = (char)(*(DWORD*)weIDDW); for(int i = 0; i < 40; i++){ wxID[i] = (char)(*(DWORD*)weIDDW); if(wxID[i] == '0'){ break; } weIDDW += 0x1; } MessageBoxA(NULL, wxID, "报告首长", NULL);}
这里要注意,这个版本的微信,使用sprinf_s和memcpy会有问题,会被拦截,大家可以试试,只有用这种一个字节,一个字节的读,不会出现问题!
源码打包下载
转载地址:https://it1995.blog.csdn.net/article/details/103357756 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2024年04月06日 10时12分50秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
知识点记录-springboot2.1集成rabbitmq
2019-04-30
微服务springcloud2系列篇-配置与注册nacos组件
2019-04-30
数据库系列篇mysql8-分库分表中间件mycat(WINDOWS环境)
2019-04-30
用户权限设计-基于RBAC模型
2019-04-30
微服务springcloud2系列篇-网关GATEWAY跨域问题
2019-04-30
Java并发以及多线程基础
2019-04-30
软件质量的8个特性
2019-04-30
应届渣渣前端的艰难求职之路
2021-07-03
2021年不可错过的17种JS优化技巧(一)
2021-07-03
2021年不可错过的17种JS优化技巧(二)
2019-04-30
月薪15~20k的前端面试问什么?
2019-04-30
一文学会使用Vue3
2019-04-30
我是如何看Vue源码的
2019-04-30
在 Vue 中用 Axios 异步请求API
2019-04-30
LVM逻辑卷------基础命令详解(三分钟入门)
2019-04-30
LVM逻辑卷------详细操作过程(三分钟上手)
2019-04-30
mysql——介绍及安装与基本用法
2019-04-30