挂钩内部函数:参数如何?
Posted
技术标签:
【中文标题】挂钩内部函数:参数如何?【英文标题】:Hooking internal function: How do the the parameters look like? 【发布时间】:2014-10-13 23:39:15 【问题描述】:我已经在 C# 中使用 Easyhook 来挂钩 WINAPI 的函数。 现在我正在尝试挂钩程序的内部函数来记录特定的“事件”。
我已经能够通过作弊引擎的“Ultimap”-Function 发现函数调用:
008AEC40 /$ 6A FF PUSH -1
008AEC42 |. 68 E37EC100 PUSH Progra.00C17EE3
008AEC47 |. 64:A1 00000000 MOV EAX,DWORD PTR FS:[0]
008AEC4D |. 50 PUSH EAX
008AEC4E |. 51 PUSH ECX
008AEC4F |. 56 PUSH ESI
008AEC50 |. A1 4093F600 MOV EAX,DWORD PTR DS:[F69340]
008AEC55 |. 33C4 XOR EAX,ESP
008AEC57 |. 50 PUSH EAX
008AEC58 |. 8D4424 0C LEA EAX,DWORD PTR SS:[ESP+C]
008AEC5C |. 64:A3 00000000 MOV DWORD PTR FS:[0],EAX
008AEC62 |. 8BF1 MOV ESI,ECX
008AEC64 |. 897424 08 MOV DWORD PTR SS:[ESP+8],ESI
008AEC68 |. E8 033CFFFF CALL Progra.008A2870
008AEC6D |. C74424 14 0000000>MOV DWORD PTR SS:[ESP+14],0
008AEC75 |. 8B4424 1C MOV EAX,DWORD PTR SS:[ESP+1C]
008AEC79 |. 50 PUSH EAX
008AEC7A |. 8D4E 24 LEA ECX,DWORD PTR DS:[ESI+24]
008AEC7D |. C706 18E8CD00 MOV DWORD PTR DS:[ESI],Progra.00CDE818
008AEC83 |. E8 F8E7FFFF CALL Progra.008AD480
008AEC88 |. C74424 14 FFFFFFF>MOV DWORD PTR SS:[ESP+14],-1
008AEC90 |. 8BC6 MOV EAX,ESI
008AEC92 |. 8B4C24 0C MOV ECX,DWORD PTR SS:[ESP+C]
008AEC96 |. 64:890D 00000000 MOV DWORD PTR FS:[0],ECX
008AEC9D |. 59 POP ECX
008AEC9E |. 5E POP ESI
008AEC9F |. 83C4 10 ADD ESP,10
008AECA2 \. C2 0400 RETN 4
函数在这里被调用:
008CAF5F . 85F6 TEST ESI,ESI
008CAF61 . 74 29 JE SHORT Progra.008CAF8C
008CAF63 . 6A 32 PUSH 32
008CAF65 . 8D5424 4C LEA EDX,DWORD PTR SS:[ESP+4C]
008CAF69 . 52 PUSH EDX
008CAF6A . 8D8F DC120000 LEA ECX,DWORD PTR DS:[EDI+12DC]
008CAF70 . E8 2BF4F4FF CALL Progra.0081A3A0
008CAF75 . C68424 A4000000 1>MOV BYTE PTR SS:[ESP+A4],13
008CAF7D . 834C24 14 40 OR DWORD PTR SS:[ESP+14],40
008CAF82 . 50 PUSH EAX
008CAF83 . 8BCE MOV ECX,ESI
008CAF85 . E8 B63CFEFF CALL Progra.008AEC40 #### FUNCTION CALL ####
008CAF8A . EB 02 JMP SHORT Progra.008CAF8E
008CAF8C > 33C0 XOR EAX,EAX
008CAF8E > C78424 A4000000 1>MOV DWORD PTR SS:[ESP+A4],14
008CAF99 . 8B95 F0130000 MOV EDX,DWORD PTR SS:[EBP+13F0]
008CAF9F . 6A 01 PUSH 1
008CAFA1 . 8D7424 38 LEA ESI,DWORD PTR SS:[ESP+38]
现在我正在尝试了解有关 ASM(调用约定等)的更多信息。 This tutorial 很好,但是上面的函数我还是不知道怎么处理。
函数参数看起来如何?
在函数调用中断时,我尝试通过挂钩“提取”的信息(一个简单的整数)存储在 EBX 中,不幸的是,它没有被访问一次。所以我找了一个函数,这个值作为参数传递,对吧?
【问题讨论】:
【参考方案1】:函数008AEC40
似乎正在使用thiscall calling convention。第一个参数 this
指针在 ECX
中传递。其余参数按从右到左的顺序压入堆栈。这个特殊的函数,一个 C++ 类的方法,除了它的隐式 this
指针外,只接受一个参数。
【讨论】:
非常感谢。你知道任何关于逆向工程 C++ 应用程序的书籍/教程吗?以上是关于挂钩内部函数:参数如何?的主要内容,如果未能解决你的问题,请参考以下文章
错误 无效的挂钩调用。 Hooks 只能在函数组件的主体内部调用
错误:无效的挂钩调用。钩子只能在函数组件的主体内部调用。 【我还在用函数组件】
React Hooks:在验证时实例化状态挂钩错误:无效的挂钩调用。 Hooks 只能在函数组件的主体内部调用
× 错误:无效的挂钩调用。 Hooks 只能在函数组件的主体内部调用。[ReactJS]