如何中断尚未跟踪的指令?

逆向工程 艾达 调试
2021-06-21 18:17:15

我有一些关于 IDA 和 Ollydbg 的问题。

首先,有没有办法用跟踪指令创建记录并让调试器在遇到记录中没有跟踪的指令时自动中断?

我的第二个问题是指 IDA 跟踪选项。我用 C++ 编写了一个简单的 Win32 GUI 应用程序,它主要由一个消息泵(GetMessageTranslateMessageDispatchMessage)和一个WindowProcedure. 我尝试了以下方法:

  1. 我在消息泵中设置了一个断点;
  2. 从那里开始追踪;
  3. WindowProcedure单击按钮时触发中断的第二个断点

IDA 跟踪的只是来自消息泵的指令,而不是来自 的指令WindowProcedure,尽管它至少应该跟踪DefaultWindowProc指令。

谁能告诉我这是什么原因?

2个回答
  1. 英特尔的 Pin 软件可以做到这一点。然而,这可能需要一些努力。
  2. WindowProcedure 是系统调用吗?我不认为 IDA 可以调试内核代码 - 如果是这种情况,您可能必须使用 windbg。

STEGANOGRAPHED IMAGE :) 复制 HEXEDIT 和 RIP
HITAID DLL
这个答案与hittraceollydbg 的特性有关
附件是一个odbg110插件hitaid.dll
,dll 已7zipped and hexedited作为 jpg
下载 hexedit上传到这里delete first 10 bytessave as hitaid.7z
使用 7zipextract hitaid.dll存档

ollydbg 有一个叫做Hittrace 这个插件的特性,它利用这个特性来实现查询

把DLL中odbg110 plugin path
open calc.exe的odbg
analyse主模块即的calc.exe
right clickdisasm window选择hittrace右键菜单
中选择add all recognized procedures submenu
所有公认的程序将marked with grey marker
run与exe文件f9
是被击中将所有指令colored red
ctrl+L从通过所有命中DISASM窗口周期的开始
使用插件删除所有命中
,如果需要的要素说button 7 is clicked,现在
,新的代码路径pertains to button 7将是红色
的新作可以通过选择反汇编窗口开始,然后按CTRL + L到达
插件可以用来repeatedly以去除点击应用程序need not be 暂停交互,您可以根据需要在新代码路径中设置 f2 断点,并通过 disasm 上下文菜单重新启用 hittrace

源代码如下

#include <windows.h>
#include "plugin.h"
#pragma warning(disable:4100)
BOOL WINAPI DllEntryPoint(HINSTANCE hi,DWORD reason,LPVOID reserved) 
{
    return 1;
};
extc int _export cdecl ODBG_Plugindata(char shortname[32]) 
{
    strcpy(shortname,"HitAid");
    return PLUGIN_VERSION;
};
extc int _export cdecl ODBG_Plugininit( int ollydbgversion,HWND hw,ulong *features) 
{
    Addtolist(0,0,"Hit Trace Aid Plugin by blabb"); 
    return 0;
};
extc int _export cdecl ODBG_Pluginmenu(int origin,char data[4096],void *item) 
{
    switch (origin)    
    {
    case PM_MAIN:
        strcpy(data,"0 &HitAid");
        return 1;
    default: break;
    };
    return 0;
};
extc void _export cdecl ODBG_Pluginaction(int origin,int action,void *item) 
{
    uchar *buff , *retu;
    unsigned long psize, i , addr;
    t_module * mod = Findmodule( Plugingetvalue(VAL_MAINBASE) );    
    addr = mod->codebase;
    if (origin==PM_MAIN)    
    {
        switch (action) 
        {
        case 0:
            retu = Findhittrace ( addr, &buff,&psize);
            for (i=0;i < psize;i++ )    {
                if ( retu[i] != ( TR_TRACE | TR_HIT )  ) 
                {
                    continue;
                }
                Modifyhittrace((addr+i) , (addr+i+1),ATR_REMOVE);
            }
            break;
        default:
            break;
        };
    };
};

使用 vs 2010 express 编译并由 alex 修改 pdk 可从 www.ollydbg.de 下载

cl /nologo /W4 /O1 /J /analyze /LD /WX /D"_CRT_SECURE_NO_WARNINGS" hitaid.cpp    
/link /subsystem:windows /dll /ENTRY:DllEntryPoint/MERGE:.rdata=.text .\ollydbgvc7.lib