Bachelor硕 发表于 2021-1-20 23:27

PC微信hook,jmp跳转后崩溃

PC微信HOOK,思路为hook地址跳转执行自己的函数,之后再跳转回吓一条指令。
我现在执行完自己函数后,跳转到下条指令。之后再执行就会跳转到报错界面。根据视频写的。百思不得其解。有做过pc微信hook的还请提供的思路或者线索。
HOOK地址如下:

procedure RECVMSG; stdcall;
var
WinAdd: Integer;
JmpAddr: DWORD;
begin
asm
    mov pEax, eax
    mov pEcx, ecx
    mov pEdx, edx
    mov pEbx, ebx
    mov pEsp, esp
    mov pEbp, ebp
    mov pEsi, esi
    mov pEdi, edi
end;

FrmRcvMsg.MemMsg.Lines.Add(FrmRcvMsg.ShowMsg(pEdi));
WinAdd :=FrmRcvMsg.GetWeChatWin;
JmpAddr :=WinAdd + PYDZ + 5;
asm
    mov eax, pEax
    mov ecx, pEcx
    mov edx, pEdx
    mov ebx, pEbx
    mov esp, pEsp
    mov ebp, pEbp
    mov esi, pEsi
    mov edi, pEdi
    //retn                  //jmp跳转回跳失败   改为call自己的函数运行完返回
    jmp JmpAddr
end;
end;

苏紫方璇 发表于 2021-1-20 23:45

hook之后用od再调试一遍,一般就清楚哪里的问题了

fanvalen 发表于 2021-1-21 01:09

感觉是你把mov那句破坏了你跳过去,没进行恢复所以ip指针失效所以奔溃,最后你写的程序只能强制跳回原来的下一个地址
不懂dp不知道你有没有还原

Bachelor硕 发表于 2021-1-21 08:21

fanvalen 发表于 2021-1-21 01:09
感觉是你把mov那句破坏了你跳过去,没进行恢复所以ip指针失效所以奔溃,最后你写的程序只能强制跳回原来的 ...

我看其他视频他们用c写的   也是破坏没有恢复强制跳回后能行。到我这就不清楚啥问题。总是崩溃。

Bachelor硕 发表于 2021-1-21 08:36

苏紫方璇 发表于 2021-1-20 23:45
hook之后用od再调试一遍,一般就清楚哪里的问题了

刚学的od一出错就不会看了C:\Users\zjm\Desktop\~FVKZ9G$0IGNXLE26T8Z~8A.png
C:\Users\zjm\Desktop\BL~5MLLC{DQ@26B_01Y~I(6.png

Bachelor硕 发表于 2021-1-21 08:37

苏紫方璇 发表于 2021-1-20 23:45
hook之后用od再调试一遍,一般就清楚哪里的问题了

图片如下

2b菜鸟 发表于 2021-1-21 09:25

跳转之前要把所用寄存器的状态保存下来,跳转回来之前要恢复之前的环境。至少在你的代码中我没看到标志位寄存器的保存与恢复。我觉的使用pushad,pushfd会更香?如果我说错了请自动忽略,有问题欢迎继续讨论

浙大王俊凯 发表于 2021-1-21 09:44

你应该是对视频没有理解吧?视频的链接发我下,我给你看看你的问题在哪里

Bachelor硕 发表于 2021-1-21 11:07

浙大王俊凯 发表于 2021-1-21 09:44
你应该是对视频没有理解吧?视频的链接发我下,我给你看看你的问题在哪里

https://www.bilibili.com/video/BV1Sg4y1b7uc?t=3041&p=2

Bachelor硕 发表于 2021-1-21 11:08

2b菜鸟 发表于 2021-1-21 09:25
跳转之前要把所用寄存器的状态保存下来,跳转回来之前要恢复之前的环境。至少在你的代码中我没看到标志位寄 ...

代码里mov 寄存器八个标志位了呀
页: [1] 2
查看完整版本: PC微信hook,jmp跳转后崩溃