合金弹头 逆向分析与外挂制作报告【内联HOOK】

一、工具及游戏介绍

使用工具:Ollydbg,PEID,Cheat Engine

实现功能:玩家无敌

目标:找到全局数据,或关键代码块。

游戏版本:合金弹头1-5代珍藏版

二、逆向逻辑

1、初始判断【CE数据】

通过游戏试玩,发现玩家是一次性死亡,但在复活开始阶段,有闪光的无敌状态。

可利用这点,实现无敌。

刚开始先通过CE找到类似秒数的 复活状态信息数据,并找到修改数据的代码段。

2、OD调试【OD追踪关键代码块】

在秒数数据下硬件写入断点,得到修改数据的代码。

回溯跟踪分析,分析DL的来源,追踪关键代码块。

在函数入口处下条件断点。

往上分析,发现削减数据,DL来源于【EBX*4+0x5FE0A8】,

经多次验证,EBX == 0x0,所以数据来源0x5FE0A8

此地址数据一直在变化,下硬件写入断点,得到相关计算的功能代码。

跟踪分析,发现此函数返回未削减的数值,并准备调用削减功能代码。

进入分析。

发现函数从固定地址0x711470 + EAX偏移(模块内),取出中间堆数据地址(堆内)。

再通过 中间堆数据地址 + ECX偏移,得到放在 堆中的无敌状态数值。

通过得到无敌状态数值,调用削减功能代码,进行削减后,

再发往0x5FE0A8处,再赋回堆0x39C60CB处。

3、分析和实现

所以,此处可对 EAX偏移,ECX偏移,进行判断。

准确锁定状态数据,并进行Hook代码。

实现内联HOOK,完成无敌。

三、总结:

1、总体逻辑

﹒﹒﹒﹒﹒﹒﹒﹒﹒Hook中间代码实现 ↓ 实现数据恒定

﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒(取出修改)

﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒↓↓↓--------------↑↑↑

固定数据------------>>>中间数据--------->>>中间堆数据

(复活初始赋值)(多种数据临时存放点) ﹒(无敌状态数据)

﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒(0x5FE0A8) ﹒﹒﹒﹒﹒(0x39C60CB)

﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒↓↓↓----------------↑↑↑

﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒﹒(修改存放)

2、Hook Opcode

83 F1 01 3D 70 1C 71 00 75 0B 81 F9 84 04 10 00 75 03 B0 99 C3 8A 04 11 C3

3、功能代码

//找到进程

        HANDLE ReProcess = 0;

        PROCESSENTRY32 pe32;

        pe32.dwSize = sizeof(pe32);

        HANDLE hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);

        BOOL bMore = ::Process32First(hProcessSnap, &pe32);

        //多字节转宽字节

        WCHAR proname[20] = {};

        MultiByteToWideChar(CP_ACP, MB_COMPOSITE, "WinKawaks.exe", 20, proname, 20);

        while (bMore)

        {

            if (wcscmp(pe32.szExeFile, proname) == 0)

            {

                ReProcess = ::OpenProcess(PROCESS_ALL_ACCESS, FALSE, pe32.th32ProcessID);

                printf("找到了\n");

                break;

            }

            bMore = Process32Next(hProcessSnap, &pe32);

        }

        HANDLE process;

        process = OpenProcess(PROCESS_ALL_ACCESS, FALSE, 0xeb4);

        //Hook 地点

        DWORD attibute;

        VirtualProtectEx(ReProcess, (LPVOID)0x00444779, 0x6, PAGE_READWRITE, &attibute);

        //jmp HookOpcode

        BYTE OPecode1[] = { ‘\xE9‘, ‘\xB8‘, ‘\xC2‘, ‘\x07‘, ‘\x00‘, ‘\x90‘ };

        DWORD num;

        WriteProcessMemory(ReProcess, (LPVOID)0x00444779, OPecode1, 6, &num);

        VirtualProtectEx(ReProcess, (LPVOID)0x00444779, 0x6, attibute, &attibute);

        //Hook Opcode

        VirtualProtectEx(ReProcess, (LPVOID)0x004c0a36, 0x25, PAGE_READWRITE, &attibute);

        //HookOpcode

        BYTE OPecode2[] = { ‘\x83‘, ‘\xF1‘, ‘\x01‘, ‘\x3D‘, ‘\x70‘, ‘\x1C‘,

            ‘\x71‘, ‘\x00‘, ‘\x75‘, ‘\x0B‘, ‘\x81‘, ‘\xF9‘,

            ‘\x84‘, ‘\x04‘, ‘\x10‘, ‘\x00‘, ‘\x75‘, ‘\x03‘,

            ‘\xB0‘, ‘\x99‘, ‘\xC3‘, ‘\x8A‘, ‘\x04‘, ‘\x11‘, ‘\xC3‘ };

        WriteProcessMemory(ReProcess, (LPVOID)0x004c0a36, OPecode2, 25, &num);

        VirtualProtectEx(ReProcess, (LPVOID)0x004c0a36, 0x25, attibute, &attibute);

        CloseHandle(ReProcess); 

四、效果

完成无敌:

个人总结:

虽然只是个小外挂,但找出了类似储存游戏数据的地方。虽然不太确定,但往这条路分析下去,以此达到其它功能,潜力还是蛮大的。

附件:

合金弹头外挂.exe

KID

原文地址:https://www.cnblogs.com/KIDofot/p/8543959.html

时间: 2024-11-08 08:49:17

合金弹头 逆向分析与外挂制作报告【内联HOOK】的相关文章

web兼容学习分析笔记--块级、内联、内联块级元素

一.块级.内联.内联块级元素 (1)块级元素:block **独占一行 **可设置width,height,margin,padding **内部可包含块级或内联元素 (3)内联(行内)元素:inline **和其他inline元素同行显示 **可以设置margin-left,margin-righ,padding-left,padding-right, **无效设置widht,height,margin-top,margin-bottom,padding-top,padding-bottom

Android逆向分析之Xposed的hook技术

Android逆向工程里常用到的工具除了的dex2jar,jd-gui,  Apktool之外还有一个Xposed. 这个工具是一个在不修改APK的情况下,影响其运行过程的服务框架.可以根据自己的需求编写模块,让模块控制目标应用的运行. 因为本人也是新手,对于Xposed用法还有很多的不熟悉,所以只对其hook技术进行简单的介绍,并让hook技术应用到以后的逆向分析工程中. 至于什么是hook,不了解的话就先去百度一下,这里基于菜鸟有限的经验,我只能说是一种函数拦截技术~ 首先,下载Xposed

自制反汇编逆向分析工具 迭代第四版本

上一个版本,本工具支持的第一个逆向策略,(对反汇编的函数体内的分支控制结构逆向生成cpp代码,)一直都可以正常工作,直到遇上了一个函数.这个使我的逆向策略算法失效的函数,主要的特点是它含有众多无条件跳转指令(,都是在函数体内的跳转). 为什么无条件跳转指令会使得我的第一个逆向算法失效,因为这些无条件跳转指令让函数的执行流变得不易于线性理解. 在一个没有反汇编出来的函数汇编代码中,如果无条件跳转指令很少,特殊地连一条无条件跳转指令也没有时,将汇编代码的执行流当作行文阅读,总可以找到一个特例让所有条

【原创游戏】合金弹头S——Unity制作的同人游戏

--纪念合金弹头陪伴的童年,回味横版过关射击快感 合金弹头S是一款Unity制作的同人游戏,由于当时我只是一个学了3个月游戏的同学,所以尚有一些不足之处,但这是我用Unity做的第一个原创作品 下载地址:https://pan.baidu.com/s/1c2ohTrq 原创boss战 O(∩_∩)O~ 原文地址:https://www.cnblogs.com/sols/p/8449317.html

c++反汇编与逆向分析 小结

第一章  熟悉工作环境和相关工具1.1 熟悉OllyDBG  操作技巧1.2 反汇编静态分析工具 IDA(最专业的逆向工具)    快捷键    功能     Enter     跟进函数实现     Esc       返回跟进处    A         解释光标处的地址为一个字符串的首地址     B         十六进制数与二进制数转换    C         解释光标处的地址为一条指令     D         解释光标处的地址为数据,没按一次将会转换这个地址的数据长度   

【QT】找茬外挂制作

找茬外挂制作 找茬游戏大家肯定都很熟悉吧,两张类似的图片,找里面的不同.在下眼神不大好,经常瞪图片半天也找不到区别.于是乎决定做个辅助工具来解放一下自己的双眼. 一.使用工具 Qt:主要是用来做界面的 OpenCV: 用于图像处理 C++: 基本实现语言 Qt中OpenCV的配置在[QT]OpenCV配置中讲过了,不会配置的可以看看. 二.实现方案 我要做一个通用的找茬辅助工具,即可以在所有PC找茬游戏中使用.这意味着我们不能通过获取游戏窗口句柄来定位游戏界面.那怎么办呢?灵光一闪,我想到了截图

逆向分析底纹

工作需要会被要求还原某个证书底纹,一般解决的思路是到网上找,如果找到了就直接用,如果找不到了相同的就找近似的凑合用,如果连近似的底纹都没有那我们是不是就没有办法了呢?有的,我们可以直接逆向分析出它最基本的单元,然后用photshop的填充功能生成即可. 既然用的是逆向分析,那么我们应该知道正向是怎么回事! 一般证书底纹是由一张二方连续贴图或者四方连续贴图拼接而成的,我这里称这张贴图为原子贴图,原子贴图的特征为"它是底纹里面最基本的那个单位,不能被拆分了",只要制作好了这个原子贴图,那么

游戏外挂制作原理

外挂现在大体上来讲分为三种,分别是模拟按键,WPE封包和内存挂.比如模拟键盘的,鼠标的,这种就叫做按键模拟,也叫脚本精灵:还有修改数据包的,这种就叫做WPE封包外挂,这种外挂相对而言比较稳定,但是对于技术要求难度也比较高,因为修改WPE封包,你需要知道和了解加密解密算法等等一系列的知识:还有最后一种就是修改本地内存的,这种相对而言比较常见,市场上面比较常见的也是这种游戏外挂,相对而言技术要求也不是太高,资料也比较齐全,比较大众:但好像没有修改服务器内存的哦,呵呵.其实修改服务器也是有办法的,只是

Arduino智能小车制作报告

Arduino智能小车制作报告 制作成员:20135224陈实  20135208贺邦  20135207王国伊 前提: Arduino,是一个开源的单板机控制器,采用了基于开放源代码的软硬件平台,构建于开放源代码 simple I/O接口版,并且具有使用类似Java,C语言的Processing Wiring开发环境.选择Arduino作为智能小车的控制板,因为它的小巧但功能强大,能够方便的和传感器还有各种电子元件连接,而且还能和很多软件如Flash.Processing进行连接互动,但是最重