【逆向】利用IDA远程调试与内存快照识别动态函数调用
前言
简单记录下IDA远程调试功能使用,然后用一个小Demo演示下利用内存快照功能记录动态函数调用与变量的方法。
环境
物理机:调试主机(Windows、Linux、Mac)
虚拟机:被调试主机(Windows、Linux、Mac)
步骤
1、根据被调试主机系统版本,拷贝IDA根目录“\dbgsrv”文件夹下的相应调试组件到被调试主机上。
2、在被调试主机启动调试组件,记好IP和端口等信息。
3、在调试主机上启动IDA,通过远程调试选项“Remote Windows debugger”连接被调试主机上的调试组件对目标程序进行调试。
示例
先写个动态调用的Demo
#include "stdafx.h" #include <windows.h> typedef void(WINAPI *pSleep)(DWORD dwMilliseconds); pSleep mySleep; int _tmain(int argc, _TCHAR* argv[]) { HMODULE h = LoadLibrary(_T("kernel32.dll")); if (h) { mySleep = (pSleep)GetProcAddress(h, "Sleep"); // __asm xor eax,eax; // mySleep(1000); // } system("pause"); return 0; }
使用IDA远程调试,执行到保存Sleep函数地址处
执行完后双击0x13D3F88地址,在保存的Sleep地址上右键选择“Offset kernel32_Sleep”将其标注为Sleep函数。
然后使用内存快照功能拍摄快照,断开远程调试器连接后,静态分析的时候就能直观的查看每个动态调用的函数了。
参考
《IDA Pro权威指南》