能力值:
(RANK:20 )
|
-
-
2 楼
第一句应该是个if结构,ebp+8是局部变量,和c进行比较
不等于跳到22的地方,至于call的参数,第一个应该是null
0070b344是个全局变量吧
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
我修改了 0060DA84 跳转到自己的函数
asm
push ebp
mov ebp,esp
push ecx
mov ecx,$00000009
push [ebp + $C]
push [ebp + $8]
call ProcessUserMessageX; //我call到自己的过程,获取到的变量不正确而且call了之后,没有做任何改变,原函数也会报错,不知道是为啥
mov eax,FOldFunc3
add eax,9 这里我跳转了9 原来我修改了前面的 5个字节 但是他前五个字节的命令是一起的,然后我就全写上去,然后跳转到9 在执行 不知道对不对
jmp eax
end;
请大神在帮我看一看,谢谢指点
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
昨天研究了一夜,才发现原来这个函数是类成员函数
然后这个函数的原形是
procedure TUserEngine.ProcessUserMessage(PlayObject: TPlayObject; DefMsg: pTDefaultMessage; Buff: PChar);
然后我重新开始HOOK
procedure AAX(PlayObject: TPlayObject; DefMsg: pTDefaultMessage; buff:PChar );
var
pzz : TPlayObject;
dzz : pTDefaultMessage;
bzz : pchar;
begin
asm
push ebp // 原地址的内容
mov ebp,esp // 原地址的内容
mov eax, dword ptr [ebp +$10]
mov bzz,eax
mov eax, dword ptr [ebp +$C]
mov dzz,eax
mov eax,dword ptr [ebp +$8]
mov pzz,eax
pushad
pushfd
end
rev(pzz,dzz,bzz); //调用自己的函数
asm
popfd
popad
push ecx // 原地址的内容
mov ecx,$00000009 // 原地址的内容
mov eax,FOldFunc2 //原函数的地址
add eax,9
jmp eax
end;
end;
function rev(PlayObject: TPlayObject; DefMsg: pTDefaultMessage; buff:PChar):integer; stdcall;
begin
Result := 0;
end;
我现在这样写 在 rev 中 可以正确的 获得 playObject 和 DefMsg 两个参数 但是第三个参数 buff 获取就异常
在回传给原函数的 三个参数中 前两个也是正常的 但是 buff 就有错误
引起报错,其他两个参数却没有问题
希望有高人指点迷津。。
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
又经过一天整天的研究.
发现两个可以HOOK 的方式但是还是异常
创了一个类
Txxx = class
private
public
procedure ProcessUserMessAge(PlayObject: TPlayObject; DefMsg: pTDefaultMessage; Buff: PChar);
procedure Hook( PlayObject: TPlayObject; DefMsg: pTDefaultMessage; Buff: PChar );
procedure hook2();
end;
如果 将 0060DA84 jmp 到 Hook2的话
procedure Txxx.hook2();
begin
asm
push ebp
mov ebp,esp
push ecx
mov ecx,$00000009
mov eax,FOldFunc2
jmp eax
end;
end;
可以完全正常的调用到原来的函数 但是在中间想用
[EBP + $10]
[EBP + $C]
[EBP + $8]
操作参数的话, 获取第三个参数 PCAHR的时候乱码.而且获取后,回调到到原函数的参数也会乱码.
--------------------------------------------------------------------------------------------------------
如果 将 0060DA84 jmp 到 Hook的话
procedure Txxx.Hook( PlayObject: TPlayObject; DefMsg: pTDefaultMessage; Buff: PChar );
begin
// 这里可以测试 三个参数 获得到的内容全都是正确的
Self.ProcessUserMessAge(PlayObject,DefMsg,buff); //我是想利用这里回调原来的函数
end;
procedure Txxx.ProcessUserMessAge(PlayObject: TPlayObject; DefMsg: pTDefaultMessage; Buff: PChar);
begin
asm
push ebp
mov ebp,esp
push ecx
mov ecx,$00000009
mov eax,FOldFunc2
jmp eax
end;
end;
直接 这样调用的话 在 hook 前面调试 三个参数全都是正确的 但是调用到 Txxx.ProcessUserMessAge 第三个参数 pchar 就会乱码,
怎么测试 参数三总是会异常,.找不到是什么原因引起第三个参数错误, 麻烦各位好心人帮我看看吧.
|
|
|