【逆向】利用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;
}
View Code

使用IDA远程调试,执行到保存Sleep函数地址处

执行完后双击0x13D3F88地址,在保存的Sleep地址上右键选择“Offset kernel32_Sleep”将其标注为Sleep函数。

然后使用内存快照功能拍摄快照,断开远程调试器连接后,静态分析的时候就能直观的查看每个动态调用的函数了。

参考

《IDA Pro权威指南》

posted @ 2020-05-21 20:50  SunsetR  阅读(779)  评论(0编辑  收藏  举报