20楼#
发布于:2002-06-22 18:22
程序装入后都被重定位了,所以只能是偏移,没有地址的说法。
jmp myhookprotocol肯定可行,myhookprotocol就是你的函数的偏移值,没问题前提是在C中嵌入汇编。 |
|
|
21楼#
发布于:2002-06-23 12:53
各位大侠,我的问题是这样的,我得到了一个系统函数handler,我想用我的函数代替系统函数,但我想在系统转入我的函数的时候,加入一个我自己的参数进去,也就是说在原有系统函数的参数上再加入一个我的参数。
一位高人给我写了这样的话: pContext = NdisAllocateMemory(...) memcpy(pContext,{pop eax,push MyReference,push eax,jmp MyFunction}); {pop eax,push MyReference,push eax,jmp MyFunction}); 你把这里的汇编翻译成二进制的代码填入pContext的头部 注意这里的jmp MyFunction是要根据当前地址来计算偏移量的。要有点汇编的基础。 他的意思是用pContext来替换系统函数的handler, 这里的二进制转换我已经懂了,就是转成机器码,但是 “jmp MyFunction要根据当前地址来计算偏移量”我却不懂,我用softice看了一下我的程序,在调用函数时都是先push reference,然后call,call与jmp有什么区别? 还有这个偏移是相对于什么的偏移,要怎样计算? 谢谢! |
|
22楼#
发布于:2002-06-23 14:20
CALL会压栈,JMP不会就这区别。看看病毒程序的地址获取就知道了!
|
|
|
23楼#
发布于:2002-06-23 14:22
哪里有?
但我也看到了以call前有push压栈 |
|
24楼#
发布于:2002-06-24 07:45
哪里有? call前有push,一般是传递函数参数,或保存某些寄存器。 |
|
|
25楼#
发布于:2002-06-28 20:33
JMP后面可以跟你的地址,不过如果你要在机器码中利用的话,里面EA后面跟的地址是一段偏移,实际上是你的地址与当前地址差再减去JMP XXXXXXXX指令本身所占的字节数,所以简单点还是用PUSH
RET,机器码为68H,你的地址,0C3H。 |
|
|
26楼#
发布于:2002-07-01 11:18
CALL会压栈,JMP不会就这区别。看看病毒程序的地址获取就知道了! \"压栈\"!? Change the Stack Pointer!? |
|
|
27楼#
发布于:2002-07-01 12:47
swift,将jmp MyFunction改为长跳转(jmp 0100:MyFuction),就不需要计算相对偏移。在win系列的防火墙中使用过,没有问题。
|
|
28楼#
发布于:2002-07-01 12:50
怎么是0100?
|
|
29楼#
发布于:2002-07-01 12:53
JMP后面可以跟你的地址,不过如果你要在机器码中利用的话,里面EA后面跟的地址是一段偏移,实际上是你的地址与当前地址差再减去JMP XXXXXXXX指令本身所占的字节数,所以简单点还是用PUSH 能否举个例子?晕,呵呵! |
|
30楼#
发布于:2002-07-01 15:52
sorry,是0008
|
|
31楼#
发布于:2002-07-22 17:05
你应该学学汇编。。。。 :o :o :o :o
|
|
|
32楼#
发布于:2002-07-23 11:09
为何不用debug调试工具呢你?
|
|
33楼#
发布于:2002-07-23 12:23
你这样吧!
UCHAR Buffer[6]={0X68,0,0,0,0,C3} 然后把你的函数地址放在*(PULONG)&Buffer[1]=你的函数名,这样就可以了然后是jmp到你的这个buffer里面去就可以 |
|
34楼#
发布于:2002-07-24 11:04
还没搞定?
看看这个贴子吧。http://www.driverdevelop.com/forum/viewthread.php?tid=17544 |
|
35楼#
发布于:2002-07-24 11:18
谢谢大家这么帮忙,真的感动!5555555555
:) 我正在开始学汇编,所以这个问题我先放一放了, 等我道行够深的时候,再去想了,谢谢各位了! 不过汇编中有太多不懂了,可能要求教于大家了,希望各位能够帮忙 :) |
|
上一页
下一页