逆向IDA远程调试与内存快照

Posted sunsetr

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了逆向IDA远程调试与内存快照相关的知识,希望对你有一定的参考价值。

前言

简单记录下IDA远程调试功能使用,然后用一个小Demo演示下利用内存快照功能记录动态函数调用与变量的方法。

环境

物理机:调试主机(Windows、Linux、Mac)
虚拟机:被调试主机(Windows、Linux、Mac)

步骤

1、根据被调试主机系统版本,拷贝IDA根目录“dbgsrv”文件夹下的相应调试组件到被调试主机上。

技术图片
2、在被调试主机启动调试组件,记好IP和端口等信息。

技术图片
3、在调试主机上启动IDA,通过远程调试选项连接被调试主机上的调试组件对目标程序进行调试。

技术图片

技术图片

示例

先写个动态调用的Demo

 1 #include "stdafx.h"
 2 #include <windows.h>
 3 
 4 typedef void(WINAPI *pSleep)(DWORD dwMilliseconds);
 5 pSleep mySleep;
 6 
 7 int _tmain(int argc, _TCHAR* argv[])
 8 {
 9     HMODULE h = LoadLibrary(_T("kernel32.dll"));
10     if (h)
11     {
12         mySleep = (pSleep)GetProcAddress(h, "Sleep");    //
13         __asm xor eax,eax;                               //
14         mySleep(1000);                                   //
15     }
16 
17     system("pause");
18     return 0;
19 }
技术图片
#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函数了。

 

以上是关于逆向IDA远程调试与内存快照的主要内容,如果未能解决你的问题,请参考以下文章

逆向分析工具IDA与开源工具GhidraCutter对比测评

Android逆向 ida动态调试问题

IDA Pro:如何通过删除除代码之外的所有内容来减少内存快照大小?

Android逆向笔记-通过tracerPid对抗IDA调试

安卓逆向 -- IDA动态调试

01-从零开始用IDA做逆向