约翰在这里。我在我们信息技术学校的后半部,我们从一位老师那里得到了一个附带项目。他在2009年用delphi编写了一个仿真器,该仿真器一直在使用。没什么特别的,只是串行总线仿真器,我们可以通过接口控制的东西,或通过带有他的dll的C ++代码来模拟进程的过程。一个有趣的小应用程序。我想为自己获取一份副本,并且已经通过电子邮件将所需的内容发送给自己。惊喜来了。如果我尝试在学校环境之外运行该程序,它只是将我带出一条错误消息,指出我无权运行该软件,然后退出。嗯第二天,我们和那位老师上了课,我问了这个课程。他为“最终有人尝试过”感到高兴。他告诉我,我可以自由测试程序,直到达到极限为止。如果我设法在笔记本电脑上运行它,他可以给我一些好成绩。接下来,他告诉了整个班级有关该程序的一些信息:
-我们正在谈论64位进程。它不检查DLL,但检查“某物”,如果找到了某物,则程序将启动。如果不是,将显示一条简单的错误消息,然后该过程终止。此外,该程序仅检查一次,直到停止为止。
因此,我回到家收集了新信息,然后启动了x64dbg和IDA以查看发生了什么。我只能找到messageBox(W)生成。在此之前,它会检查“ test al,al”。如果相等,则跳转到地址,但仅返回“ nop”,并弹出消息框。
我尝试搜索字符串引用,例如一些硬编码的文件位置或注册表项,以及消息框的文本,但是没有运气。什么都没找到。
所以,现在我在这里。如果我什至一开始都不知道要搜索什么,我应该如何继续修补支票?
当然,他们不会在学校教逆向工程,但是我们可以在空闲时间自由地做任何事情,如果能带来一些成果,那是有回报的。
有什么想法吗?
,谢谢,
约翰。
#1 楼
由于应用程序是用Delphi编写的,因此我建议通过IDR(交互式Delphi Recorder)运行二进制文件。该工具对Delphi和VCL内部有更好的了解,然后可以生成.idc文件,您可以将其加载到Ida Pro中。您(大部分)将具有正确的功能和符号命名,这使阅读代码变得更加容易。然后执行直到消息框,并检查调用堆栈以查看您来自何处。可能检查的可能是IP地址,域名,计算机名(是否遵循某些命名约定)等。
评论
为什么不在测试al和al上设置断点,然后手动将零标记设置为1-程序将绕过JE路径继续绕过JEE路径,绕过消息框,并可能继续进行应用程序的其余部分。我会说检查是在程序的说明中进行的。此跳转仅跳过“ OR DWORD PTR SS:[RBP + E8],100000]”,该引用引用MessageBoxA的参数之一。那是我的直觉。祝你好运!
您愿意共享二进制文件吗?
我建议您进入通话中(在哪里休息),有可能您需要的所有内容都在回复之前,我不确定我们是否只能根据您的屏幕截图为您提供帮助。提示:不要破坏MessagBoxA,例如,尝试破坏ExitProcess或调用任何杀死进程的函数。
我要在MessageBox上设置一个断点(有多个,尽管MessageBoxA通常可以使用)功能,运行程序并等待它在断点处断开。现在,您可以按照堆栈跟踪查看MessageBox的调用位置,并从那里最终找到导致MessageBox显示的条件。