xxhaishixx 发表于 2019-11-15 17:16:26

关于hook后读写寄存器及软件报错

非常感谢大家提供帮助

是这样的,程序有一个函数:win32CSIImpl_ApiProxyResponse_GetData

00558320/$53            push ebx
00558321|.56            push esi
00558322|.57            push edi
00558323|.8BD8          mov ebx,eax
00558325|.B2 01         mov dl,0x1
00558327|.A1 1CF04100   mov eax,dword ptr ds:
0055832C|.E8 47C4EAFF   call CPA.00404778
00558331|.8BF0          mov esi,eax
00558333|.8B43 04       mov eax,dword ptr ds:
00558336|.85C0          test eax,eax
00558338|.74 3E         je short CPA.00558378
0055833A|.50            push eax
0055833B|.E8 5CFEFFFF   call <jmp.&libcpa-core.win32CSIImpl_ApiProxyResponse_GetData>
00558340|.59            pop ecx                                                      ;0D92D4F0
00558341|.8BF8          mov edi,eax
00558343|.8B43 04       mov eax,dword ptr ds:
00558346|.50            push eax
00558347|.E8 48FEFFFF   call <jmp.&libcpa-core.win32CSIImpl_ApiProxyResponse_GetData>
0055834C|.59            pop ecx                                                      ;0D92D4F0
0055834D|.8BD8          mov ebx,eax
0055834F|.85FF          test edi,edi
00558351|.74 25         je short CPA.00558378



在0055833B处是函数的call,以及前面的push eax 【应该要带一个参数,如果是寄存器的话,应该都可以整数型吧】
进入0055833B处是函数的call
0F456BBF    CC            int3
0F456BC0 >8B4424 04       mov eax,dword ptr ss:
0F456BC4    8B40 20         mov eax,dword ptr ds:
0F456BC7    C3            retn
0F456BC8    CC            int3


在执行完0F456BC4后,eax寄存器的值才能看见。
各位大神,能不能指点一下,如何获取执行完0F456BC4后的eax寄存器值?

易语言部分的hook:

hook.安装 (“libcpa-core.dll”, “win32CSIImpl_ApiProxyResponse_GetData”, &_win32CSIImpl_ApiProxyResponse_GetData)

这是安装的hook,在后面的hook代码如下
.版本 2

.子程序 _win32CSIImpl_ApiProxyResponse_GetData, 整数型
.参数 lpdate, 整数型
.参数 rp, 整数型
.参数 da, 整数型
.局部变量 date, 文本型
.局部变量 a, 文本型
.局部变量 b, 文本型
.局部变量 c, 整数型



' OutputDebugStringA (“CPA:win32CSIImpl_ApiProxyResponse_GetData 被调用!”)
hook.暂停 (“libcpa-core.dll”, “win32CSIImpl_ApiProxyResponse_GetData”)
' 0F456BC0 >8B4424 04       mov eax,dword ptr ss:
' 0F456BC4    8B40 20         mov eax,dword ptr ds:
' 置入代码 ({ 139, 68, 36, 4, 139, 64, 32 })
c = win32CSIImpl_ApiProxyResponse_GetData (lpdate, rp, da)
置入代码 ({ 137, 69, 252 })' MOV DWORD PTR SS:,EAX(把EAX的值赋值给date)
置随机数种子 ()
写到文件 (取运行目录 () + “\dump\” + 到文本 (取随机数 (11111, 99999)) + “.txt”, 到字节集 (date))
' 拷贝数据 (lpdate, 取变量地址 (date), 取文本长度 (数据))

' OutputDebugStringA (“CPA_win32CSIImpl_ApiProxyResponse_GetData消息:” + 数据)

hook.继续 (“libcpa-core.dll”, “win32CSIImpl_ApiProxyResponse_GetData”)

' 返回值 = 0
返回 (c)



参数个数这个可以调整,还有从汇编代码中貌似没有返回值,现在写出来的hook,能获取到eax的数据,但是程序会崩溃。
求大神指导一下,感谢。
页: [1]
查看完整版本: 关于hook后读写寄存器及软件报错