首页
社区
课程
招聘
[求助]内存补丁,内嵌汇编 分析。
发表于: 2006-4-24 21:57 3691

[求助]内存补丁,内嵌汇编 分析。

2006-4-24 21:57
3691
我用delphi和c分别写了dll钩子内存补丁,c编译后运行完全正确。但delphi会出现问题,OD提示说 xxxxxx 无法实现,请尝试修改 eip。
程序功能:调用主程序的函数(已找到指针) 函数参数我自己定义.
主程序函数有4个参数,我只修改3个,一个不修改。
后面注解的是 寄存器的变化
我跟了一下 delphi 如下

03BB2B2A    50                   push eax        //EAX 0012F504        ASCII "sss"
03BB2B2B    52                   push edx        //ESP 0012F4E8
03BB2B2C    51                   push ecx
03BB2B2D    6A 00                push 0   //这个是第1个参数自定义
03BB2B2F    B9 FFFFFF00          mov ecx,0FFFFFF //这个是第2个参数自定义

03BB2B34    8B55 FC              mov edx,dword ptr ss:[ebp-4]        //EDX 0012F504 ASCII "sss" //这个是第3个参数自定义
03BB2B37    B8 8C7D4F00          mov eax,4F7D8C  //这个是第4个参数默认地址                        //EAX 004F7D8C jymir
03BB2B3C    8B00                 mov eax,dword ptr ds:[eax]        //EAX 00D3B314
03BB2B3E    FF15 E09A4700        call dword ptr ds:[479AE0]  //主程序地址
03BB2B44    59                   pop ecx
03BB2B45    5A                   pop edx
03BB2B46    58                   pop eax
03BB2B47    5F                   pop edi
03BB2B48    5E                   pop esi
03BB2B49    8BE5                 mov esp,ebp
03BB2B4B    5D                   pop ebp
03BB2B4C    C3                   retn
以下是vc++
03B512CC  |.  50                 push eax                //EAX 0012F99C ACCESS "12123"
03B512CD  |.  52                 push edx                //ECX 0012F99C ACCESS "12123"
03B512CE  |.  51                 push ecx
03B512CF  |.  6A 00              push 0    这个是第1个参数
03B512D1  |.  B9 FFFFFF00        mov ecx,0FFFFFF  这个是第2个参数
03B512D6  |.  8B95 F4FEFFFF      mov edx,[local.67] 这个是第3个参数
03B512DC  |.  B8 8C7D4F00        mov eax,4F7D8C        //这个是第4个参数        //EAX 004F7D8C jymir  EDX "123123"
03B512E1  |.  8B00               mov eax,dword ptr ds:[eax]        //EAX 00D3B314
03B512E3  |.  FF55 FC            call [local.1] //主程序地址,保存在常量中
03B512E6  |.  59                 pop ecx
03B512E7  |.  5A                 pop edx
03B512E8  |.  58                 pop eax
03B512E9  |.  5F                 pop edi
03B512EA  |.  5E                 pop esi
03B512EB  |.  5B                 pop ebx
03B512EC  |.  81C4 4C010000      add esp,14C
03B512F2  |.  3BEC               cmp ebp,esp
03B512F4  |.  E8 47030000        call dll.03B51640
03B512F9  |.  8BE5               mov esp,ebp
03B512FB  |.  5D                 pop ebp
03B512FC  \.  C3                 retn

以上是分析数据,小弟弄了2昼夜找到问题。delphi 到call 的地方后 好象找不到函数地址的一样,跟不进去了,也是这个地方出的错。
注:c的完全正确也没有出错。代码是用内嵌的汇编。

请各位高手指点下。

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 200
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
2
后来我觉得是不是用钩子无法 调用主程序的 内容。所以我测试了一下。用delphi
asm
  mov eax,[$xxxxxx]
  jmp eax
end;

这样,我测试这跟了一下,完全可以到主程序上,不过用行完后也出个错误提示。jmp eax 后功能可以实现。
2006-4-24 22:02
0
雪    币: 331
活跃值: (56)
能力值: ( LV13,RANK:410 )
在线值:
发帖
回帖
粉丝
3
编译成间接寻址了。。。
2006-4-25 00:56
0
雪    币: 200
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
4
搞定了,2天2夜啊。太累了,说实话睡觉都在想这问题呢。
经朋友指定,和上面这位朋友的提示。
原来delphi和c中的内嵌汇编有不同。问题出在 寻址方面。
delphi 不能直接用  call xxxxx
所以我加了一个 ebx才搞定。靠这个来转地址
push ebx
mov ebx, 00479AE0H
call ebx
pop ebx
2006-4-25 03:07
0
游客
登录 | 注册 方可回帖
返回