前言

适用: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更新:获取、导出微信所有表情相关推荐

  1. PyQt5使用笔记(一) 处理excel文件获取页眉页脚信息 2020.03.14

    Openpyxl库只能处理.xlsx的excel文件, 而xlrd无法获取页眉页脚信息, 使用win32com库调用excel软件来获取页眉, 需要电脑上安装office软件. 1. python 安 ...

  2. 别求面经了!小夕手把手教你如何斩下和选择NLP算法岗offer!(2020.4.14更新)...

    推完上一篇文章,订阅号和知乎后台有好多小伙伴跟小夕要面经(还有个要买简历的是什么鬼),然鹅小夕真的没有整理面经呀,真的木有时间(。 ́︿ ̀。).不过话说回来,面经有多大用呢?最起码对于NLP岗位的面 ...

  3. 基于代价函数小波脊相位的MFSK信号符号速率估计MATLAB仿真及代码(2020.12.14更新)

    算法来源 王勇, 王李福, 邹辉,等. 一种小波脊相位提取方法: 中国专利. 仿真结果 引言 当前,脊点的选取较准确也较经典的方法是Liu等提出的里程碑式的基于代价函数的小波脊相位提取方法(即代价函数 ...

  4. 新XyPlayer 智能解析 X3.95正式版 (2020.06.12更新)

    2020.06.12 更新 X3.9.5正式版 主要更新如下: 更新云播规则; 2.微信插件添加开关设置和防红开关; 注意:如果是更新升级,请在后台微信插件设置里重新启用. 2020.04.14 更新 ...

  5. python:获取微信好友列表信息(二)进行导出微信好友到csv数据读取与处理

    接上一篇:https://blog.csdn.net/seoyundu/article/details/81543656 代码中:对csv文件读取,并利用pandas库处理,统计出好友信息. pand ...

  6. 12.一键导出微信读书的书籍和笔记

    # 一键导出微信读书的书籍和笔记> 本项目基于[@arry-lee](https://github.com/arry-lee)的项目[wereader](https://github.com/a ...

  7. Unity导出微信小游戏

    微信小游戏感觉这几年挺火,打算熟悉一下流程看看 微信提供的Unity转微信小游戏解决方案 地址:https://developers.weixin.qq.com/minigame/dev/guide/ ...

  8. 频繁更新背后,微信究竟在思考什么?

    作者|丁直仁 来源|深响 微信历来谨慎的做事风格在今年似乎有了变化. 知识星球创始人吴鲁加曾在即刻发布一条这样的动态:"有哥们说:微信长满了焦虑的青春痘,以前不这样的."配图是微信 ...

  9. 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 ...

最新文章

  1. java后台分页插件怎么写_Java分页技术(从后台传json到前台解析显示)
  2. Apache2.4.x下proxy_module、proxy_fcgi_module结合PHP-FPM解决内存不足问题
  3. 如何停止电脑正在运行的VBS程序?
  4. Uber AI简单方法实现大规模语言模型的精细控制
  5. 2019年人工智能行业现状与发展趋势报告
  6. C语言程序设计第一节课作业
  7. cocos2dx[3.2](5) ——入口类AppDelegate.cpp
  8. vs2008环境下MFC对注册表的读写操作
  9. CAS证书分析(2)
  10. 用MSBuild.... DailyBuild和软件开发流程的东东
  11. 身价超13000亿!他又重回世界首富了
  12. php 页面拖动改变大小,鼠标拖动改变DIV等网页元素的大小的实现方法
  13. 两个offer如何做选择?年薪20万vs年薪15万
  14. python历史上的今天_历史上的今天接口调用示例
  15. android 迅雷 好用版本,迅雷不限速版本安卓下载-迅雷不限速版 安卓版v6.6.6-PC6安卓网...
  16. lottie-动画转代码神器
  17. php左斜线和右斜线,左斜杠和右斜杠分别有什么意义?
  18. 四.驱动框架入门之LED(中)
  19. 163vip邮箱全面体验测评分享
  20. iPhone 订阅退款方法

热门文章

  1. Windows10重置系统
  2. 基于asp.net805小区停车场(车位车库)车辆信息管理系统
  3. tp5 读取/下载 excel文件内容
  4. 【CYW20819】二、环境搭建
  5. 危险场景分类(NHTSA 37 Pre-Crash Scenarios)
  6. 线性栈实现中缀表达式计算器
  7. 蓝桥ROS机器人之C++系列奇妙甜甜圈
  8. 有两个磁盘文件 textl.txt text2.txt ,各存放一行英文字母,要求把这两个文件中的信息合并(按字母顺序排列),然后输出到 个新文件 text3.txt
  9. 【转】webpack是什么?有什么用?怎么用?
  10. linux虚拟机联网方法(桥接和NAT)