【发布时间】:2011-05-17 22:00:48
【问题描述】:
我又回来了,沮丧和绝望地寻求帮助:D。
我正在尝试为一个简单的程序创建一个作弊程序,它基本上将是一个 .dll 文件,当它使用其基地址注入主程序时,它将更改主程序的整数值。问题是,我无法使用作弊引擎找到它,主要是因为有多个带有 NEGATIVE 的级别指针?偏移量。例如:
//Starting pointer address
0x0033FCF0 -> 200
//Finding second level pointer using "Find out what's accessing this address" in Cheat Engine
**(mov eax,[ebp+08])** // **EAX=0x00000007** , **EPB=0x0033FCE8 => mov 00000007,[0033FCE8+08]**
2nd Level Pointer:
**(0033FCE8+18) -> 200**
所以我继续使用“找出什么是……”来查找下一个指针,但是在使用带有二级指针地址的 T-SEARCH 时,我得到了 7 - 8 个新的静态地址。
问题是,我不知道哪个是正确的,因为作弊引擎拒绝让我使用 NEGATIVE 添加指针?偏移量。
例子:
Base Pointer:
**mov eax,[epb-18] !!!** // Notice the **MINUS**
最重要的是,作弊引擎拒绝接受带有负偏移量的指针!
那么,有没有另一种方法可以从多级指针中找到基地址? 欢迎使用 OlyDBG / Idapro 解决方案。非常感谢你们!
这是我试图破解的简单程序的源代码:
#include <iostream>
#include <conio.h>
#include <windows.h>
#include <stdlib.h>
int main(){
int hp = 100;
while(1){
std::cout << hp << std::endl;
Sleep(3000);
hp += 10;
system("cls");
}
return 0;
}
我想做的是用这个 .dll 编辑 hp 整数
#include <windows.h>
#define BASE 0xBASE_POINTERS_ADDRESS_WHICH_I_NEED_TO_FIND
#define OFFSET 0xTHE_OFFSET
#define VALUE 90
void MainFunction()
{
while(1)
{
if (GetAsyncKeyState(VK_MENU)&0x8000 && GetAsyncKeyState('C')&0x8000)
MessageBox(0,L"Alt + C was pressed!",L"MessageBox! ",0);
*(int*)((*(int*)BASE) + OFFSET) = VALUE;
Sleep(100); //Let the program rest, otherwise it hogs cpu resources.
}
}
BOOL WINAPI DllMain(HINSTANCE MyInstance,DWORD reason_for_call,LPVOID PointerToVoid)
{
if (reason_for_call == DLL_PROCESS_ATTACH) CreateThread(0,0,(LPTHREAD_START_ROUTINE)&MainFunction,0,0,0);
return true;
}
顺便说一句,我正在尝试破解 hp! 〜哦,等等,我已经说过了,哦,好吧,随便;)
谢谢你们,上帝保佑你们!
【问题讨论】:
-
和你的问题无关,但是
#define WIN_LEAN_AND_MEAN没用——首先,宏名是WIN32_LEAN_AND_MEAN;其次,它必须在之前#include <windows.h>(或任何其他直接或间接包含windows.h的头文件)定义。 -
哦,非常感谢!我没注意!我对整个多级指针的事情感到困惑......再次感谢:D
-
EBP 通常是 帧指针,从该寄存器的负偏移量通常表示程序正在访问函数参数。正偏移量表示局部变量。这是非常常见的。 (来自 other 指针的负偏移并不常见。)
-
您要破解的程序的许可证是什么?
-
LPVOID PointerToVoid- 我必须承认,这个信息量很大!
标签: c++ pointers offset memory-address