当前位置: 首页 > news >正文

44.第二阶段x86游戏实战2-C++HOOK提取游戏lua

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!

本次游戏没法给

内容参考于:微尘网络安全

本人写的内容纯属胡编乱造,全都是合成造假,仅仅只是为了娱乐,请不要盲目相信。

工具下载:

链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd=6tw3

提取码:6tw3

复制这段内容后打开百度网盘手机App,操作更方便哦

上一个内容:43.第二阶段x86游戏实战2-提取游戏里面的lua

上一个内容里通过对lua_dostring打断点看返回到什么位置,然后把返回到的位置全部标记了下来,然后通过对所有返回到的地址做断点,然后在游戏中点击按钮等操作,看看什么位置的断点没有被触发,没被触发的地址是我们要找到位置,通过这种方式最终找到了我们想要的地方,然后本次开始使用C++对它做HOOK从而得到游戏的lua脚本

然后开始之前,需要说明,要HOOK的位置是下图红框位置

然后这里使用x32dbg不使用OD了,OD会卡死,x32dbg和OD一样都是用来动态调试的,它的附加方式,如下图点击文件,再点击附加

然后在游戏启动器点击运行游戏,然后快速点击刷新,刷新完快速双击游戏,如下图红框

附加之后点击符号,找到luaPlus里的lua_dostring,然后按F2给lua_dostring打断点,然后按F9运行,x32dbg会莫名乱断下来,这里要自行区分断的位置对不对(比如我们要找lua_dostring但是断下来的位置不是lua_dostring位置这就不对,这就需要继续按F9,直到再lua_dostring位置断下来)

然后x32dbg乱断的情况可以点击下图选项

然后点击忽略上一次,这样可以减少断下来的情况,注意这里会把上一次断点的位置忽略也就是再执行到上一次断点(异常)的位置不会断下来了

然后来到上一个内容里找到的我们想要的位置,如下图断点位置,然后hook的位置在下图断点的位置,然后这时可以观察栈esp+0位置是lua脚本的内容,esp+4(esp+8位置的名字不知道为啥它会乱码)的位置是lue脚本的名字,有了这些开始写C++代码

然后注入的时候要注意,不能太早,太早注入器获取不到游戏句柄从而注入失败

核心代码,它实现了把lua写入到硬盘上

HOOK位置,0x31C44B是偏移

效果图:

使用记事本打开

HOOK.cpp文件的内容

// HOOK.cpp: 实现文件
//#include "pch.h"
#include "MFCLibrary3.h"
#include "HOOK.h"
#include "afxdialogex.h"
#include "CLVEH.H"
#include "stringex.h"
void Call_输出调试信息(char*pszFormat, ...)
{
#ifdef _DEBUGchar szbufFormat[0x1000];char szbufFormat_Game[0x1100] = "";va_list argList;va_start(argList, pszFormat);vsprintf_s(szbufFormat, pszFormat, argList);strcat_s(szbufFormat_Game, szbufFormat);OutputDebugStringA(szbufFormat_Game);va_end(argList);#endif}
void  LuaHook(EXCEPTION_POINTERS* ExceptionInfo)
{stringex  luaFile = (char*)*(DWORD*)(ExceptionInfo->ContextRecord->Esp + 4);//lua的目录地址(lua文件名)int weizhi = luaFile.rfind("/");int tmp = 0;if (weizhi == -1) {weizhi = 0;tmp = 0;}else {tmp = weizhi;weizhi++;}string FILES = luaFile.substr(weizhi, luaFile.size() - tmp);stringex PATH;PATH = "d:\\lua\\";PATH = PATH + FILES;Call_输出调试信息("---  %s", PATH.c_str());char* luaText = (char*)*(DWORD*)(ExceptionInfo->ContextRecord->Esp + 0);//lua的文件内容Call_输出调试信息("jinru3");// CreateFileA是Windows提供的函数HANDLE hResFile = CreateFileA(PATH.c_str(), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);//创建文件  // INVALID_HANDLE_VALUE意思是创建文件失败if (INVALID_HANDLE_VALUE == hResFile){Call_输出调试信息("创建失败");}DWORD dwWritten = 0;//写入文件的大小 // SetFilePointer是Windows提供的函数,意思是设置偏移,就是在文件中第几行第几列开始写入SetFilePointer(hResFile, 0, 0, FILE_BEGIN);// WriteFile是Windows提供的函数,意思是给文件写内容WriteFile(hResFile, luaText, strlen(luaText), &dwWritten, NULL);//写入文件  // FlushFileBuffers是Windows提供的函数,意思是刷新缓冲区,一般只有刷新了缓冲区数据才算真正的写到文件中放到硬盘里了FlushFileBuffers(hResFile);// CloseHandle是Windows提供的函数,意思是关闭句柄(句柄是一个抽象的概念为了系统的安全搞的),在这里的意思是关闭文件// 不关闭的效果,在删除文件时提示文件已打开无法删除这种提示CloseHandle(hResFile);//关闭文件句柄  //lua.WriteToFile(PATH);}
// HOOK 对话框IMPLEMENT_DYNAMIC(HOOK, CDialogEx)HOOK::HOOK(CWnd* pParent /*=nullptr*/): CDialogEx(IDD_DIALOG1, pParent)
{CCLVEH::Instance()->AddVeh("HOOKLUA", "Game.exe", 0x31C44B, 0, 2, 0, LuaHook);CCLVEH::Instance()->InitVeh();}HOOK::~HOOK()
{
}void HOOK::DoDataExchange(CDataExchange* pDX)
{CDialogEx::DoDataExchange(pDX);
}BEGIN_MESSAGE_MAP(HOOK, CDialogEx)ON_BN_CLICKED(IDC_BUTTON1, &HOOK::OnBnClickedButton1)
END_MESSAGE_MAP()// HOOK 消息处理程序void HOOK::OnBnClickedButton1()
{// TODO: 在此添加控件通知处理程序代码
}

上方的代码不全,只有手写的代码

完整代码:

链接:https://pan.baidu.com/s/1W-JpUcGOWbSJmMdmtMzYZg?pwd=q9n5

提取码:q9n5

复制这段内容后打开百度网盘手机App,操作更方便哦


img


http://www.mrgr.cn/news/68626.html

相关文章:

  • 深度学习:解码器如何与编码器交互的过程
  • MyBatis 返回 Map 或 List<Map>时,时间类型数据,默认为LocalDateTime,响应给前端默认含有‘T‘字符
  • Python爬虫与Web渗透测试入门指南——初学者防踩雷
  • PyQt5 超详细入门级教程上篇
  • 微服务透传日志traceId
  • P11118 [ROI 2024 Day 2] 无人机比赛 题解
  • LeetCode:485.最大连续1的个数——简单题简单做
  • Python matplotlib库 grid()网格线函数讲解
  • echarts设置tooltip宽高
  • AI和大模型技术在网络脆弱性扫描领域的最新进展与未来发展趋势
  • Docker配置及简单应用
  • 揭秘集装箱箱号自动识别原理,箱号识别算法
  • 智慧城市路面垃圾识别系统产品介绍方案
  • 5万加购上线即断货,双11洗衣机品类打破增长难关
  • npx创建项目时,error fetch failed.TypeError: fetch failed
  • Linux服务器修改网络配置
  • 2.1 >关于桌面环境
  • Java 上机实践1(入门)
  • CAN和CANFD的不同点
  • 【前端知识】JS模块规范
  • 【野生动物识别系统】Python+深度学习+人工智能+卷积神经网络算法+TensorFlow+ResNet+图像识别
  • go格式化时间
  • Leetcode:26. 删除有序数组中的重复项——Java快慢指针暴力解法
  • 考研人数减少,为什么考同等学力申硕的却更多?
  • Adaptive AUTOSAR ——Cryptography (在自适应AUTOSAR中的应用:概念、功能与实现)
  • java中图片加载