我正在尝试对一个过去常常用来摆弄的旧游戏进行逆向工程,而不再维护它。目前,我只是想编辑连接IP以假装服务器在线,但我在跟踪应用程序内的IP时遇到了一些问题。执行wireshark测试后,程序尝试连接的IP地址为:24.56.108.156,但使用十六进制或文本的十六进制编辑程序(特别是XVI32)进行扫描则不会返回结果。
所以,我继续小提琴并加载了我没有永远使用过的ollydbg,毫无疑问,我的装配知识一直在下降。无论如何,我首先查看引用的字符串并发现其中的一些文本(似乎是代码注释),表明“RemoteHostIP”函数返回远程主机的IP。因此,我找到了调用程序集并在其上执行了断点以确保它是正确的函数,并在客户端尝试连接时调用它。它的组装是:
MOV EAX, DWORD PTR DS:[C98FA8]
OR EAX, EAX
JE SHORT Eternal.0043629F //Jumps back to the MOV call.
我查看了EAX的值,它显示为75843918,DS显示为002B,但EAX值(转换回十进制或ascii时)不等于客户端尝试连接的IP地址。所以,我不知道除了数据段寄存器之外DS究竟意味着什么,或者它如何影响去引用的指针,所以我去了表达式00C98FA8并得到了相同的值75843918,这不是我想要的。< / p>
我这里的想法已经不多了,有什么具体的我可以错过的吗?那DS是否有一些我不知道的效果?任何帮助将不胜感激,如果我遗漏了一些可能有用的信息,请告诉我。
- 新增信息 -
作为对typ1232的回应,仅供参考:
地址在各个数字之间有一些填充,它就像: 32,随机数00和其他垃圾..等等,所以我无法直接追踪它。
答案 0 :(得分:1)
我最后通过一些猜测找到了它,似乎应用程序的每一部分在每个ip之前用00分割东西,所以原来是:00 32 00 34 00 2E等等。