其中新手反汇编查询

时间:2009-10-13 21:12:17

标签: assembly language-agnostic disassembly ollydbg

我相对(阅读:愚蠢的新手)熟悉反汇编,但这有点难过我: 我有一组用zlib压缩的保存文件和一个加载它们的游戏。它们的结构是已知的,一旦加载,内存中的结构与其相应的保存文件相同。问题在于游戏是用一种ass向后编写的,只能编写脚本的语言,以某种方式设法不留静态指针。完全没有。几十个人尝试过,看似静态的指针路径会在同一台机器上发生微小变化后中断。一个简单的解决方案是只搜索进程的内存以查找文件的内容,但这是一个非常强大的解决方案,我宁愿避免用于教育目的。

问题:

  • 我正在尝试使用OllyDBG。我对它很可怕,但仍设法制作一些实际工作的琐碎编码器。我是否使用合适的工具来做工作,还是我是一个愚蠢的新手?现代反向器在他们的套件中有哪些工具?
  • 在相关的说明中,我不得不求助于使用Cheat Engine(或它的堂兄MHS)进行内存搜索。这似乎有点违反直觉。 OllyDBG真的没有办法搜索值并改进结果,或者我错过了什么?
  • 如何在WINAPI上设置断点?天啊,WINAPI在汇编级别看起来如何?这是我没有找到任何体面的信息,我很确定谷歌有足够多的东西,但我似乎无法输入正确的词。
  • 扩展上述内容,如何设置动态断点?如果我对一个特定的,经常被调用的函数感兴趣,但只有 ,如果此时的EAX等于一个特定的值,那么我怎么能让Olly(或其他任何东西)在这个条件下中断呢?
  • 任何关于拆卸或低级程序设计的一般性书籍/建议/资源,以打破事物。

免责声明:有问题的游戏是免费软件,单人游戏,作者不反对,项目旨在扩展功能而不是任何东西。也是第一篇文章,希望我没有弄错。 :(

1 个答案:

答案 0 :(得分:4)

你有很多问题集于一身。我会尝试回答一些问题。

OllyDBG是一款优秀的免费反汇编程序。专业人士可能会为IDA-Pro付费,但这是一种昂贵的产品。

关于搜索内存,OllyDBG确实提供了该功能。在任何内存转储窗口(例如,CPU窗口的内存转储窗格)中,您可以:右键单击,从上下文菜单中选择“搜索”,然后选择“整数”或“二进制字符串”。与Cheat Engine不同,您无法使用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模块中找到,也可以使用link /dump /imports在磁盘上的EXE文件中查看。

对于脚本语言,通常没有导入表,或者如果有导入表,它会导入可通过脚本引擎访问的大量功能。

遗憾的是,我认为OllyDBG不支持条件断点。

关于从哪里开始学习反汇编,当然最好的指令是在你自己的代码上使用相当多的汇编。即使编写仅显示带有“Hello World”的消息框的Windows应用程序,也需要了解导入表以访问MessageBox()API。事实上,在C中编写这样的应用程序也可以为您提供信息。但是,我建议您仅使用命令行工具而不是GUI环境来编译代码。 GUI将隐藏您的过多信息并干扰学习。为了访问USER32.DLL API,您需要通知链接器您希望使用USER32.LIB'导入库',以便您的C代码可以透明地调用MessageBox()