首页
社区
课程
招聘
[求助]注入被拦截 想了个办法 但遇到问题了 内嵌汇编的问题
发表于: 2009-9-17 08:54 4791

[求助]注入被拦截 想了个办法 但遇到问题了 内嵌汇编的问题

2009-9-17 08:54
4791
想先模仿一个句子

整句如下WriteProcessMemory( hProcess, pCodeRemote, &MyFunc, 48, NULL);

然后再从中改点东西就可以过拦截了

但却模仿不成功

DEBUG 可以看到如下
0040DD21  mov        esi,esp
0040DD23  push        0
0040DD25  push        30h
0040DD27  push        offset MyFunc (00401320)
0040DD2C  mov        eax,dword ptr [ebp-144h]
0040DD32  push        eax
0040DD33  mov        ecx,dword ptr [ebp-12Ch]
0040DD39  push        ecx
0040DD3A  call        dword ptr [__imp__WriteProcessMemory@20 (0042a1d0)]
0040DD40  cmp        esi,esp
0040DD42  call        __chkesp (00401570)

但写成如下那样 不行 到 call   WriteProcessMemory 后就出错
_asm{
push        0
push        30h
push        offset MyFunc
mov        eax,pCodeRemote
push        eax
mov        ecx,hProcess
push        ecx
call        WriteProcessMemory
}

请帮忙看看

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 1491
活跃值: (975)
能力值: (RANK:860 )
在线值:
发帖
回帖
粉丝
2
首先
0040DD33  mov        ecx,dword ptr [ebp-12Ch]
0040DD39  push        ecx

其中ECX为进程句柄,这个如果在汇编下需要用函数得到。。
2009-9-17 14:26
0
雪    币: 1491
活跃值: (975)
能力值: (RANK:860 )
在线值:
发帖
回帖
粉丝
3
除了函数的最后两个参数,其余的参数好像都需要用别的函数得到
  MS是这样的,
我也不是很明白。。
2009-9-17 14:28
0
雪    币: 3
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
用VC搞的吧? 内联汇编吧? call xxxx 的时候F11看跑到哪里去了不就解决问题了吗.....  看编译器的编译方式问题,  

call  xxxx  可能不会像你预期的那样;

原因就是, 好像VC把 call xxxx搞成了 call 指针本身的地址, 这样肯定是错的;

你这样吧

call   dword ptr [xxxxx]

这样就call 了指针指向的地址

无聊, 说多点, 如 call MessageBox,   事实上, MessageBox是一个变量(VC就是这样组织的), 它本身的地址可能是0x0050789, 如同其它所有指针一样, 这个指针填入的地址可能是 0x00B01234,  而0x00B01234里就是 jmp  真正的MessagBox地址;

call MessageBox     vc可能会把它搞成 call 0x0050789这里;
call dword ptr [MEssageBox], vc 应该会把它搞成 call 0x00B01234这里
2009-9-18 06:07
0
雪    币: 3
活跃值: (28)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
又忘了告诉你, 这样自己手动写汇编调用WriteProcessMemory, 和vc里C++调用WriteProcessMemory,

根本没有任何的区别!!!!  所以你想都不要想这样就能过绕过拦截, 劝你还是别费心机了, 还不如花时间好好想一下人家是在哪里用什么方法拦截了你吧...
2009-9-18 06:14
0
雪    币: 18
活跃值: (80)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
事实是过了
2009-12-2 09:32
0
雪    币: 0
活跃值: (954)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
_asm{
push        0
push        30h
push        offset MyFunc
mov        eax,pCodeRemote
push        eax
mov        ecx,hProcess
push        ecx
call        WriteProcessMemory
}

进栈顺序不都一样。等于没改。。
2009-12-3 02:42
0
雪    币: 112
活跃值: (48)
能力值: ( LV9,RANK:320 )
在线值:
发帖
回帖
粉丝
8
你这基本就不行!先不说你要修改什么,或许你想要做的是  hook下WritepRrocessMemory函数!这个看你的目的了,单说这个语法!看看我写的这个示例:

HANDLE hMod=GetModuleHandle("KERNEL32.DLL");
PVOID pWriteMem=GetProcAddress(hMod,"WriteProcessMemory");
LONG ret;
__asm{
push 0
push 30h
mov eax,offset MyFunc
push eax
lea eax, pCodeRemote
push eax
lea eax,hProcess
push eax
call pWriteMem
mov ret,eax
}
2009-12-3 08:49
0
游客
登录 | 注册 方可回帖
返回
//