2020/03/14更新:获取、导出微信所有表情
前言
适用:PC端微信 2.8.0.121 版本
更新与于2020年3月14日
本文仅作技术研究
具体原理见上一篇:
https://blog.csdn.net/qq_43572067/article/details/100062493
本次主要是在上次的源码基础上进行更新,适用于当前版本的微信版本
其实就更新了两个地址
1、强制把聊天收发的表情全部保存下来
2、强制把打开收藏的表情全部保存下来
成品:
链接: https://pan.baidu.com/s/1UYXXEU0kKGvpSHNqTFnBcg
提取码: t4qt
源代码:
使用VS2015以上编译
RemoteInject.exe
// RemoteInject.cpp : 定义控制台应用程序的入口点。#include "stdafx.h"
#include "windows.h"
#include "atlstr.h"
#include <TlHelp32.h>char* GetProgramDll()
{static char exeFullPath[MAX_PATH] = { 0 }; // Full pathchar *nWeak;GetModuleFileNameA(NULL, exeFullPath, MAX_PATH);nWeak = strrchr(exeFullPath, '\\');memcpy(nWeak + 1, "GetWeChatPic.dll", strlen("GetWeChatPic.dll"));return exeFullPath;
}DWORD GetProcessPid(CString nProcessName)
{PROCESSENTRY32 nPT;nPT.dwSize = sizeof(nPT);HANDLE nSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);BOOL nRet = Process32First(nSnapShot, &nPT);while (nRet){if (nProcessName.MakeLower() == CString(nPT.szExeFile).MakeLower()){return nPT.th32ProcessID;}nRet = Process32Next(nSnapShot, &nPT);}return 0;
}int main()
{ printf("适用:PC端微信 2.8.0.121版本\r\n更新与2020年3月14日\r\n");DWORD nPid = GetProcessPid("wechat.exe");HANDLE nHandle = OpenProcess(PROCESS_ALL_ACCESS, FALSE, nPid);printf("进程ID:%d - 进程句柄:%d\r\n", nPid, nHandle);CHAR *DllPath = GetProgramDll();int nLen = strlen(DllPath)+1;LPVOID pBuf = VirtualAllocEx(nHandle, NULL, nLen, MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);if (!pBuf){printf("申请内存失败!\r\n"); getchar();return 0;}if (!WriteProcessMemory(nHandle, pBuf, DllPath, nLen, 0)){printf("写入内存失败!\r\n");getchar();return 0;}HANDLE hRemoteThread = CreateRemoteThread(nHandle, NULL, NULL,(LPTHREAD_START_ROUTINE)LoadLibraryA, pBuf, 0, 0);WaitForSingleObject(hRemoteThread, -1);CloseHandle(hRemoteThread);VirtualFreeEx(nHandle, pBuf, 0, MEM_FREE);printf("注入完成!\r\n");getchar();return 0;
}
GetWeChatPic.dll
#include "stdafx.h"
#include "stdio.h"
#include "windows.h"
#include <shellapi.h>DWORD FileBuff;
DWORD FileSize;CHAR FileName[MAX_PATH];FILE *pFile;DWORD Old_wxam_dec_isWXGF_4;extern "C" _declspec(dllexport) void ExportFun()
{}void MyHook(LPVOID HookAddress, LPVOID NewAddress, DWORD *OldAddress,DWORD HookBytesNum)
{BYTE JumpByte[6] = { 0x68,0x00,0x00,0x00,0x00,0xc3 };*(DWORD*)(JumpByte + 1) = (DWORD)HookAddress + HookBytesNum;*OldAddress = (DWORD)VirtualAlloc(NULL, 1024, MEM_COMMIT, PAGE_EXECUTE_READWRITE);memcpy((LPVOID)*OldAddress, HookAddress, HookBytesNum);memcpy((BYTE*)*OldAddress + HookBytesNum, JumpByte,6);*(DWORD*)(JumpByte + 1) = (DWORD)NewAddress;WriteProcessMemory((HANDLE)-1, HookAddress, JumpByte, 6, 0);}DWORD GetHash(char *nBuff,int nBuffSize)
{DWORD nHash = 0;for (int i = 0; i < nBuffSize; i++){nHash = ((nHash << 25) | (nHash >> 7));nHash = nHash + nBuff[i];}return nHash;
}char* GetProgramDir()
{static char exeFullPath[MAX_PATH] = { 0 }; // Full pathchar *nWeak;GetModuleFileNameA(NULL, exeFullPath, MAX_PATH);nWeak = strrchr(exeFullPath, '\\');memcpy(nWeak + 1, "GetWeChatPic", strlen("GetWeChatPic"));return exeFullPath;
}__declspec(naked) void Hook()
{__asm{pushad;mov eax, [esp + 36];mov FileBuff, eax;mov eax, [esp + 40];mov FileSize, eax;}sprintf_s(FileName, 256, "GetWeChatPic\\%08X.gif", GetHash((char*)FileBuff, FileSize));fopen_s(&pFile, FileName, "wb+");fwrite((LPVOID)FileBuff, FileSize, 1, pFile);fclose(pFile);__asm{popad;jmp Old_wxam_dec_isWXGF_4;}
}BOOL APIENTRY DllMain(HMODULE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{switch (ul_reason_for_call){case DLL_PROCESS_ATTACH:{{HMODULE nHmodule = GetModuleHandleA("WeChatWin.dll");BYTE HookByte2[] = { 0xeb };//DWORD pFunAddress = (DWORD)nHmodule + 0x7DB79;//聊天收发的表情全部保存下来20190820DWORD pFunAddress = (DWORD)nHmodule + 0x94016;//聊天收发的表情全部保存下来20200314WriteProcessMemory((HANDLE)-1, (LPVOID)pFunAddress, HookByte2, 1, 0);BYTE HookByte5[] = { 0xeb };//pFunAddress = (DWORD)nHmodule + 0x2841DC;//打开收藏的表情全部保存下来20190820pFunAddress = (DWORD)nHmodule + 0x2BE71F;//打开收藏的表情全部保存下来20200314WriteProcessMemory((HANDLE)-1, (LPVOID)pFunAddress, HookByte5, 1, 0);}HMODULE nHmodule = GetModuleHandleA("WXAMDecoder.dll");LPVOID pFunAddress = GetProcAddress(nHmodule, "wxam_dec_isWXGF_4");if (pFunAddress){MyHook(pFunAddress, Hook, &Old_wxam_dec_isWXGF_4, 9);SECURITY_ATTRIBUTES SecurityAttributes;SecurityAttributes.lpSecurityDescriptor = 0;SecurityAttributes.bInheritHandle = false;SecurityAttributes.nLength = sizeof(SecurityAttributes);CreateDirectoryA("GetWeChatPic", &SecurityAttributes);if (MessageBoxA(0, "注入成功!\r\n是否打开储存的表情文件夹?", "Tips", MB_ICONINFORMATION | MB_YESNO)==IDYES)ShellExecuteA(NULL, ("open"), ("explorer"), GetProgramDir(), NULL, SW_SHOW);}else{MessageBoxA(0, "注入失败!请重启微信进入到聊天框内再注入!", "Tips", MB_ICONERROR);}}case DLL_THREAD_ATTACH:case DLL_THREAD_DETACH:case DLL_PROCESS_DETACH:break;}return TRUE;
}
2020/03/14更新:获取、导出微信所有表情相关推荐
- PyQt5使用笔记(一) 处理excel文件获取页眉页脚信息 2020.03.14
Openpyxl库只能处理.xlsx的excel文件, 而xlrd无法获取页眉页脚信息, 使用win32com库调用excel软件来获取页眉, 需要电脑上安装office软件. 1. python 安 ...
- 别求面经了!小夕手把手教你如何斩下和选择NLP算法岗offer!(2020.4.14更新)...
推完上一篇文章,订阅号和知乎后台有好多小伙伴跟小夕要面经(还有个要买简历的是什么鬼),然鹅小夕真的没有整理面经呀,真的木有时间(。 ́︿ ̀。).不过话说回来,面经有多大用呢?最起码对于NLP岗位的面 ...
- 基于代价函数小波脊相位的MFSK信号符号速率估计MATLAB仿真及代码(2020.12.14更新)
算法来源 王勇, 王李福, 邹辉,等. 一种小波脊相位提取方法: 中国专利. 仿真结果 引言 当前,脊点的选取较准确也较经典的方法是Liu等提出的里程碑式的基于代价函数的小波脊相位提取方法(即代价函数 ...
- 新XyPlayer 智能解析 X3.95正式版 (2020.06.12更新)
2020.06.12 更新 X3.9.5正式版 主要更新如下: 更新云播规则; 2.微信插件添加开关设置和防红开关; 注意:如果是更新升级,请在后台微信插件设置里重新启用. 2020.04.14 更新 ...
- python:获取微信好友列表信息(二)进行导出微信好友到csv数据读取与处理
接上一篇:https://blog.csdn.net/seoyundu/article/details/81543656 代码中:对csv文件读取,并利用pandas库处理,统计出好友信息. pand ...
- 12.一键导出微信读书的书籍和笔记
# 一键导出微信读书的书籍和笔记> 本项目基于[@arry-lee](https://github.com/arry-lee)的项目[wereader](https://github.com/a ...
- Unity导出微信小游戏
微信小游戏感觉这几年挺火,打算熟悉一下流程看看 微信提供的Unity转微信小游戏解决方案 地址:https://developers.weixin.qq.com/minigame/dev/guide/ ...
- 频繁更新背后,微信究竟在思考什么?
作者|丁直仁 来源|深响 微信历来谨慎的做事风格在今年似乎有了变化. 知识星球创始人吴鲁加曾在即刻发布一条这样的动态:"有哥们说:微信长满了焦虑的青春痘,以前不这样的."配图是微信 ...
- VSCO Film Pack 1-7 LR+ACR预设|VSCO Luts预设[2020.5月更新]
VSCO Film Pack 1-7 LR+ACR预设|VSCO Luts预设[2020.5月更新] VSCO Film Pack 1-7 LR+ACR预设|VSCO Film Luts Comple ...
最新文章
- java后台分页插件怎么写_Java分页技术(从后台传json到前台解析显示)
- Apache2.4.x下proxy_module、proxy_fcgi_module结合PHP-FPM解决内存不足问题
- 如何停止电脑正在运行的VBS程序?
- Uber AI简单方法实现大规模语言模型的精细控制
- 2019年人工智能行业现状与发展趋势报告
- C语言程序设计第一节课作业
- cocos2dx[3.2](5) ——入口类AppDelegate.cpp
- vs2008环境下MFC对注册表的读写操作
- CAS证书分析(2)
- 用MSBuild.... DailyBuild和软件开发流程的东东
- 身价超13000亿!他又重回世界首富了
- php 页面拖动改变大小,鼠标拖动改变DIV等网页元素的大小的实现方法
- 两个offer如何做选择?年薪20万vs年薪15万
- python历史上的今天_历史上的今天接口调用示例
- android 迅雷 好用版本,迅雷不限速版本安卓下载-迅雷不限速版 安卓版v6.6.6-PC6安卓网...
- lottie-动画转代码神器
- php左斜线和右斜线,左斜杠和右斜杠分别有什么意义?
- 四.驱动框架入门之LED(中)
- 163vip邮箱全面体验测评分享
- iPhone 订阅退款方法
热门文章
- Windows10重置系统
- 基于asp.net805小区停车场(车位车库)车辆信息管理系统
- tp5 读取/下载 excel文件内容
- 【CYW20819】二、环境搭建
- 危险场景分类(NHTSA 37 Pre-Crash Scenarios)
- 线性栈实现中缀表达式计算器
- 蓝桥ROS机器人之C++系列奇妙甜甜圈
- 有两个磁盘文件 textl.txt text2.txt ,各存放一行英文字母,要求把这两个文件中的信息合并(按字母顺序排列),然后输出到 个新文件 text3.txt
- 【转】webpack是什么?有什么用?怎么用?
- linux虚拟机联网方法(桥接和NAT)