这个代码方程是可解的吗?

逆向工程 拆卸
2021-06-28 21:52:53

假设有以下几行代码:

 MOV DWORD PTR FS:[0],EAX
 CALL someRoutine
 MOV EAX,DWORD PTR DS:[EAX+4]
 CMP DWORD PTR DS:[EAX+1204],0
 JE placeInCode
 XOR EAX,EAX

我的目标是以始终采用 JE 的方式更改 [someRoutine] - 我特别不想篡改 [someRoutine] 之外的代码。因此,只需将 [someRoutine] 视为一组可以自由更改和适应的指令。

我似乎无法理解如何解决这个等式。如果调用后没有MOV指令,我想我可以直接去地址[EAX+1204]填0。但是像这样,似乎有太多未知的依赖。

有什么建议吗?

1个回答

someRoutine执行以下操作(在下面的 C 中用于示例目的)-

DWORD* p = (DWORD*)malloc(8);
p[0] = 0;
p[1] = (SIZE_T)p - 1204;
return p;

显然这是一个内存泄漏,因为分配的内存永远不会被free()'d,所以如果someRoutine经常被调用,你不会想要使用这种方法然而,在我们不知道实际程序的内存布局的情况下,提供更好的建议是不可行的。

编辑:根据@tathanhdinh 的建议更新。