在 Ollydbg 中创建我自己的自定义结构

逆向工程 ollydbg
2021-07-10 11:06:44

在 Ollydbg 的十六进制转储窗口(CPU 窗口的左下象限)中,可以将数据解释为结构,您可以右键单击一个或多个字节,然后看到选项“解码为结构”或“解码为结构的指针”(如果更多超过一个字节选择)。然后它会打开一个新窗口,其中数据垂直排列,每个数据元素显示为一行。您可以解码多个实例。

但是,我想添加我自己的结构类型。想象一下我有这个结构:

typedef struct {
           double x,y,z;   
           unsigned char id;
           int label;
           char *name_string;
           anotherStructType *struct;       
           } model_type;

下面是一些显示步骤的图像,选择了固定结构类型“COORD”。想象一下,我想用上面的“model_type”结构类型来解码它。也许答案在于某些命令行或 .ini 手动设置?

此外,如果它可以与标签一起使用来识别反汇编窗口中的结构元素,那就太好了,例如,如果有人能以某种方式告诉 Olly EAX 是基指针,[EAX+1C] 可以被解释为“player.id” . 但也许我被带走了......

在此处输入图片说明

在此处输入图片说明 在此处输入图片说明

1个回答

意识到 what follows are undocumented stuff

创建一个file either named as [binary].argcommon.arg
第一个名称仅适用于特定的[二进制]
第二个名称 common.arg 全局适用

将此粘贴到文件中

STRUCT _MYSTRUCT
QWORD DOUBLE x
QWORD DOUBLE y
QWORD DOUBLE z
BYTE  CHAR  id
DWORD INT label
DWORD ASCII* name
DWORD INT* foo
END

将文件放在 ollydbg 所在的文件夹中。
_MYSTRUCT 现在应该在下拉框中可用

STRUCT是关键字
结构名称需要前导下划线
成员定义为
FIELDSIZE, TYPENAME , MEMBERNAME

有效的 FIELDSIZE 是

  1. 字节
  2. 单词
  3. 双字
  4. 字词
  5. 泰比特

对应于大小的1,2,3,4,8,16
TYEPNAMES 很大,你应该尝试和错误
我已经发布了一些常见的
注意我已经将你的最后一个结构转换为 INT* 而不是 anotherstruct*
你可能需要在文件中添加一个自定义类型,
你可以指定一个用星号重复计数 *

BYTE*48 BYTE somecrap  

somecrap 是 MemberName 一个字符串

END is a keyword 表示结构结束

一些使用来自您的 Query 编译执行的结构的虚拟 src 和下面的屏幕截图

源文件

#include <stdio.h>
#include <windows.h>
#pragma pack(1)
typedef struct _TESTY {
    int a;
    int b;
}Testy,*PTesty;
typedef struct _MYSTRUCT {
    double x,y,z;
    unsigned char id;
    int label;
    char *name;
    Testy *foo;
}MyStruct,*PMyStruct;

int main (void) {
    MyStruct blah;
    Testy arrgh;
    char *test = "hello do i know c ?";
    memset(&blah,0,sizeof(blah));
    blah.x=43.0;
    blah.y=76.34;
    blah.z=0.0;
    blah.id = 'a';
    blah.label = 54;
    blah.name = test;
    arrgh.a =45;
    arrgh.b =54000;
    blah.foo = &arrgh;
    printf("%f\n",blah.x);
    printf("%s\n",blah.name);
    printf("%d\n",blah.foo->b);
    return 0;   
}

被执行

structy.exe
43.000000
hello do i know c ?
54000 

使用 ollydbg 运行

ollydbg.exe structy.exe 

日志窗口显示它使用了我们由 xxxxx.arg 提供的结构定义

Log data
Address   Message
          OllyDbg v2.01
          Command line: structy.exe
          Loading function descriptions from 'common.arg'
            2 structures
            Total size of known data is 1521777 bytes

截屏 在此处输入图片说明