非常感谢大家提供帮助
是这样的,程序有一个函数:win32CSIImpl_ApiProxyResponse_GetData
[Asm] 纯文本查看 复制代码 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:[0x41F01C]
0055832C |. E8 47C4EAFF call CPA.00404778
00558331 |. 8BF0 mov esi,eax
00558333 |. 8B43 04 mov eax,dword ptr ds:[ebx+0x4]
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:[ebx+0x4]
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
[Asm] 纯文本查看 复制代码 0F456BBF CC int3
0F456BC0 > 8B4424 04 mov eax,dword ptr ss:[esp+0x4]
0F456BC4 8B40 20 mov eax,dword ptr ds:[eax+0x20]
0F456BC7 C3 retn
0F456BC8 CC int3
在执行完0F456BC4后,eax寄存器的值才能看见。
各位大神,能不能指点一下,如何获取执行完0F456BC4后的eax寄存器值?
易语言部分的hook:
[AppleScript] 纯文本查看 复制代码 hook.安装 (“libcpa-core.dll”, “win32CSIImpl_ApiProxyResponse_GetData”, &_win32CSIImpl_ApiProxyResponse_GetData)
这是安装的hook,在后面的hook代码如下
[AppleScript] 纯文本查看 复制代码 .版本 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:[esp+0x4]
' 0F456BC4 8B40 20 mov eax,dword ptr ds:[eax+0x20]
' 置入代码 ({ 139, 68, 36, 4, 139, 64, 32 })
c = win32CSIImpl_ApiProxyResponse_GetData (lpdate, rp, da)
置入代码 ({ 137, 69, 252 }) ' MOV DWORD PTR SS:[ebp-4],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的数据,但是程序会崩溃。
求大神指导一下,感谢。
|