能力值:
( LV2,RANK:10 )
|
-
-
2 楼
啊哦。看来大家都不感兴趣啊。。看来是太简单了。但偶不懂,呵呵。麻烦各位了。我现在补充下问题:
我完整的补充下该段代码:
005718BD |> \8B5424 10 mov edx, dword ptr [esp+10] ; 参数1
005718C1 |. 52 push edx ; 1
005718C2 |. 55 push ebp
005718C3 |. E8 38F30100 call 00590C00 ;
005718C8 |. 83C4 08 add esp, 8
005718CB |. 5D pop ebp
005718CC |. 5B pop ebx
是这样。比如这个函数的地址 0x00590C00 ,他的作用是实现是输入3个参数,x,y,type,然后根据type的类型对x,y做运算,当type==0,函数就实现x+y ,ypte==1,则实现x*y
我现在要做的就是HOOK到该程序,然后直接调用 0x00590c00这个函数,实现参数自定义,也就是说我需要传入的参数为x,y,type
通过分析该程序的汇编代码,可以看到如下:
005718C1 |. 52 push edx ; 参数1
005718C2 |. 55 push ebp
005718C3 |. E8 38F30100 call 00590C00
其中ebp就是type的传入,这个问题不大。
而edx就是x,y的传入,但他是一个连续参数,也就是说从反汇编上分析看到的edx实际只是一个地址(比如为 0x00555550),那地址0x00555550的值就是x,0x00555554的值就是y,
我通过程序嵌入操作也需要传输这样一个值。呵呵,不过第一次遇上这种,实在不知道该怎么定义并且传入这个值
有就是在VC里写这么段函数
void ::calXY()
{
_asm
{
push ebp
push edx
mov ebp,1
mov edx,...这里我就不会弄了
mov eax,0x00590c00
call eax
pop edx
pop ebp
}
}
上面只是我单方面写的代码,可能本身方法就没对,也麻烦大家给指点下。谢谢了
|
能力值:
( LV2,RANK:10 )
|
-
-
3 楼
结贴,已经解决了。偶真糊涂
|
|
|