你有很多问题合二为一。我会试着回答一些。
OllyDBG 是一个很好的免费反汇编程序。专业人士可能会为 IDA-Pro 付费,但这是一款昂贵的产品。
关于搜索内存,OllyDBG 确实提供了该功能。在任何内存转储窗口(例如,CPU 窗口的内存转储窗格)中,您可以: 右键单击,从上下文菜单中选择“搜索”,然后选择整数或二进制字符串。与作弊引擎不同,您无法使用 OllyDBG 搜索近似值。您可能会寻找一个可以执行此操作的插件,而不是我知道的。
我认为“WINAPI”可能是指 Win32 API。您正在查看的游戏中可能有一个名为 WINAPI 的组件。为了在各种 Windows API 上设置断点,这是游戏客户端扩展器喜欢做的事情,你会想知道实际的 Windows API 在哪里,可以这么说。这些功能并非都在一个“地方”。有多种 DLL 模块可以“导出”构成 Win32 API 的函数。例如,MessageBox()
从 导出,USER32.DLL
但从ExitProcess()
导出KERNEL32.DLL
。
要在 OllyDBG 中的 Windows API 调用上设置断点,您可以: 查看菜单、可执行模块以查看内存中的所有模块。右键单击 USER32.DLL 模块并从上下文菜单中选择“查看名称”。在那里您将看到从 USER32 导出的所有函数。
如果游戏客户端是用 C 语言编写的,那么在所谓的“导入表”中就会有一个 API 函数列表。这可以在内存中加载的 .EXE 模块中找到,或者也可以在磁盘上的 EXE 文件中使用link /dump /imports
.
在脚本语言的情况下,通常没有导入表,或者如果有导入表,它会导入大量可通过脚本引擎访问的功能。
不幸的是,我不认为 OllyDBG 支持条件断点。
Regarding where to begin learning disassembly, surely the best instruction is to utilize quite a bit of assembly on your own code. Even writing a Windows application which displays only a Message Box bearing "Hello World" will require you to learn about import tables in order to access the MessageBox() API. In fact, writing such an application in C could also be informative to you. However, I recommend you compile the code using only the command-line tools and not the GUI environment. The GUI will hide too much information from you and interfere with the learning. In order to access the USER32.DLL API, you will need to inform the linker that you wish to use the USER32.LIB 'import library' so your C code can transparently call MessageBox()
.