2012-12-02 18 views
1

我有一个使用的例子库test2.dll一个示例程序test1.exe如何更改呼叫与逆向工程

  • test.dll所包含的功能和A()相同类型的B()
  • test1.exe调用A然后退出。

在这里,我找到了呼叫A()The line which test.exe calls Ahttp://i.stack.imgur.com/5W9Jd.jpg

现在,如果我没有记错,我需要用正确的B()偏移更换88FDFFFF,却怎么也我计算它,以便B()将被调用,而不是A()

+1

如果您打算使用二进制调试工具,您最好在认识目标计算机的指令集方面进行认真的投资。这些信息很容易在参考手册中找到;对于x86,英特尔提供了很容易找到的在线参考资料,这些参考文献将详细淹没您。 –

回答

2

如果这在x86呼叫相对指令,偏移值是通过减去呼叫之后的指令的地址计算(=调用指令位置+ 5个字节),从目标的地址。所以,你需要修补偏移地址(B) - 地址(callinstruction + 5)。

+0

好的。但是'B()'位于一个dll中,那么'address(B)'究竟是什么?我知道它是'test2.dll'内的入口点,但是如何将它转换为'text1.exe'中的地址?并且'callinstruction + 5 = ADD ESP,0C'? – assafmo

+1

欢迎来到逆向工程,在那里你可以了解更多关于系统细节的信息,而不是你真正想知道的。您需要花时间学习如何组织DLL,以及标准代码如何调用DLL中的函数。然后你就会明白如何找到地址(A),因此地址(B)。 [我不会写“callinstruction + 5 = ADD ...”作为一个合理的等式。我没有检查你的例子,看看这个调用之后有什么指令;它可能是那个具体的ADD是那个指令。在这种情况下,“地址(callinstruction)+5 ==地址(ADD ...)”如果这是你的问题] –

-1

我建议先学习asm基础知识,并使用HIEW hexeditor/disassembler来改变简单代码。

+0

我知道asm,并且HIEW使用起来不舒服。 – assafmo

+1

是的,HIEW是99.9%反向器的基本工具,已经习惯了,使用起来非常简单。 –

+1

大多数反向器使用IDA和OllyDBG。我为此谋生,从未使用过HIEW。只是我2美分。 – samoz

0

如果b在test1.exe进口很容易,否则你必须使用LoadLibrary和GetProcAddress的。

ctrl+N,看是否b进口与否。