本帖最后由 banzhu 于 2025-12-17 13:17 编辑 前言
在逆向分析程序的过程中,有时候需要我们记录某个代码地址中断时,堆栈中的数据,如果仅仅用肉眼看,如果只中断几次还好,要是上百次岂不是要累死?我们当然有其他的方案:
比如在这里做个HOOK打印,可以是Inline Hook,也可以是VEH HOOK
但是两种都有一个问题:写代码。
写代码难道不用时间的吗,肯定用,而且写代码还要查BUG,逆向本来就让很多朋友头疼了,还要写代码,有些人更头疼了
所以我们今天要讲一种不用写代码就可以记录打印数据的方法:
比如我们要记录这里的GetProcAddress函数名传入的情况:
我们可以看到[ESP+4]里面放的就是我们需要的函数名
7706F9CE | FF15 A40C0D77 | call dword ptr ds:[<GetProcAddressForCaller>] |
现在我们需求就是把每次[ESP+4]里面的数据拿出来,能够复制,能够拿来就看,拿来就用
我们先带大家看一下效果:所有中断的堆栈数据,我们全部一次性拿出来了!
- 函数名称: "RaiseException"
- 函数名称: "GetLastError"
- 函数名称: "GetSystemInfo"
- 函数名称: "VirtualProtect"
- 函数名称: "VirtualQuery"
- 函数名称: "FreeLibrary"
- 函数名称: "GetModuleHandleW"
- 函数名称: "GetProcAddress"
- 函数名称: "LoadLibraryExA"
- 函数名称: "UnhandledExceptionFilter"
- 函数名称: "SetUnhandledExceptionFilter"
- 函数名称: "GetCurrentProcess"
- 函数名称: "TerminateProcess"
- 函数名称: "IsProcessorFeaturePresent"
- 函数名称: "QueryPerformanceCounter"
- 函数名称: "GetCurrentProcessId"
- 函数名称: "GetCurrentThreadId"
- 函数名称: "GetSystemTimeAsFileTime"
- 函数名称: "InitializeSListHead"
- 函数名称: "IsDebuggerPresent"
- 函数名称: "GetStartupInfoW"
- 函数名称: "RtlUnwind"
- 函数名称: "SetLastError"
- 函数名称: "EnterCriticalSection"
- 函数名称: "LeaveCriticalSection"
- 函数名称: "DeleteCriticalSection"
- 函数名称: "InitializeCriticalSectionAndSpinCount"
- 函数名称: "TlsAlloc"
- 函数名称: "TlsGetValue"
- 函数名称: "TlsSetValue"
- 函数名称: "TlsFree"
- 函数名称: "LoadLibraryExW"
- 函数名称: "GetStdHandle"
- 函数名称: "WriteFile"
- 函数名称: "GetModuleFileNameW"
- 函数名称: "ExitProcess"
- 函数名称: "GetModuleHandleExW"
- 函数名称: "GetCommandLineA"
- 函数名称: "GetCommandLineW"
- 函数名称: "HeapAlloc"
- 函数名称: "HeapFree"
- 函数名称: "FindClose"
- 函数名称: "FindFirstFileExW"
- 函数名称: "FindNextFileW"
- 函数名称: "IsValidCodePage"
- 函数名称: "GetACP"
- 函数名称: "GetOEMCP"
- 函数名称: "GetCPInfo"
- 函数名称: "MultiByteToWideChar"
- 函数名称: "WideCharToMultiByte"
- 函数名称: "GetEnvironmentStringsW"
- 函数名称: "FreeEnvironmentStringsW"
- 函数名称: "SetEnvironmentVariableW"
- 函数名称: "SetStdHandle"
- 函数名称: "GetFileType"
- 函数名称: "GetStringTypeW"
- 函数名称: "CompareStringW"
- 函数名称: "LCMapStringW"
- 函数名称: "GetProcessHeap"
- 函数名称: "HeapSize"
- 函数名称: "HeapReAlloc"
- 函数名称: "FlushFileBuffers"
- 函数名称: "GetConsoleOutputCP"
- 函数名称: "GetConsoleMode"
- 函数名称: "SetFilePointerEx"
- 函数名称: "CreateFileW"
- 函数名称: "CloseHandle"
- 函数名称: "WriteConsoleW"
- 函数名称: "DecodePointer"
- 函数名称: "InitializeCriticalSectionEx"
- 函数名称: "FlsAlloc"
- 函数名称: "FlsSetValue"
- 函数名称: "InitializeCriticalSectionEx"
- 函数名称: "FlsAlloc"
- 函数名称: "FlsGetValue"
- 函数名称: "FlsSetValue"
- 函数名称: "LCMapStringEx"
- 函数名称: "AreFileApisANSI"
复制代码
操作教程: 游客,本帖隐藏的内容需要积分高于 100 才可浏览,您当前积分为 0
|