前言
在逆向分析程序的过程中,有时候需要我们记录某个代码地址中断时,堆栈中的数据,如果仅仅用肉眼看,如果只中断几次还好,要是上百次岂不是要累死?我们当然有其他的方案:
比如在这里做个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"




没有回复内容