请教一下Delphi中嵌套汇编如何取函数的参数? |
缺席
|
allen-86
一般會員 發表:28 回覆:44 積分:19 註冊:2008-02-01 發送簡訊給我 |
目前研究了一下Dll的劫持,劫持的是ws2_32.dll,
编译出的ws2_32.dll如果不添加任何代码,程序是可以运行的。 现在的问题是:要截获recv包,不知道如何取参数值,然后修改数据包。 关键代码如下: procedure recv; begin //如何截取收到的封包,然后修改?? asm jmp POldrecv end; end; procedure send; begin {asm mov cbyte,edx //31 0D 0A mov ilen,ecx end; MessageBeep(8000);} //send发送是OK的 测试时是Delphi编写的程序(用idhttp取网页) asm jmp POldsend end; end; 网络上看文章,Delphi默认用的是eax,edx,ecx取第一个 第二个 第三个参数值(那第四个呢?) C语言是这样取: MOV EAX,[ESP 4] MOV cbyte0,EAX //第一个参数地址 MOV EAX,[ESP 8] MOV cbyte0,EAX //第二个参数地址 我把整个的档案传上来,麻烦大家看一下,多谢!
------
The empty vessels make the greatest sound. |
allen-86
一般會員 發表:28 回覆:44 積分:19 註冊:2008-02-01 發送簡訊給我 |
找到取参数的方法了:
procedure recv; begin asm mov eax,[esp 4] //第一个参数 mov pScoket,eax mov eax,[esp 8] //第2个参数 mov cbyte,eax mov eax,[esp 12] //第3个参数 mov ilen,eax mov eax,[esp 16] //第4个参数 mov iFlag,eax end; //问题是:现在收到的全是0,cbyte都为0,意味着真正的recv没有执行, //请问如何收到真正的数据?? MessageBeep(8000); asm jmp POldrecv end; end; 多谢大家了!
------
The empty vessels make the greatest sound. |
allen-86
一般會員 發表:28 回覆:44 積分:19 註冊:2008-02-01 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |