反转shellcode时,我们看到PEB在各个阶段走得很频繁。但是,我很好奇,IDA是否为此提供了任何预定义的标准结构?如果是这样,它叫什么?在四处寻找和搜寻之后,我什么也找不到。我也会对PEB_LDR_DATA和RTL_USER_PROCESS_PARAMETERS的定义非常感兴趣。

我可以自己创建它们并以某种方式导出它们(必须弄清楚如何)。但是在此之前,我真的很想知道IDA的标准结构定义中是否缺少某些内容。

#1 楼

PEB的结构是_PEB和PEB_LDR_DATA。您需要加载ntapi类型库,可以通过进入类型库视图(Shift + F11)并按Ins来添加它。

#2 楼

如果您使用的是IDA FREE,则此库和其他一些类型库不可用

,如果您打算使用<43,则本教程将提供一些有关如何完成此操作的提示

操作系统winxp sp3 vm

create them yourself and export them somehow (would have to figure out how). 


假设您正在ntkrnlpa.exe中反转PsGetProcessId()
(all opaque structures like EPROCESS can vary from os to os / hotfix to hotfix patch tuesday to patch tuesday )


,您发现84是EPROCESS-> PID,并希望将此信息提供给反汇编

创建一个名为EPROCESS.h的文本文件

在文本文件中键入以下内容,然后保存以供以后使用
                  ; Exported entry 872. PsGetProcessId    
                  ; Attributes: bp-based frame    
                  ; __stdcall PsGetProcessId(x)
                  public _PsGetProcessId@4
                  _PsGetProcessId@4 proc near
8B FF             mov     edi, edi
55                push    ebp
8B EC             mov     ebp, esp
8B 45 08          mov     eax, [ebp+8]
8B 80 84 00 00 00 mov     eax, [eax+84h] <-----
5D                pop     ebp
C2 04 00          retn    4
                  _PsGetProcessId@4 endp


转到ida free ->File->Load File->Parse Header File或快捷方式ctrl+f9
浏览到EPROCESS.h

成功后您应该会看到这是ida information window

typedef struct EPROCESS 
{
  BYTE unknown[0x84];
  DWORD Pid;
} EPROCESS, *EPROCESS;


视图-> open subviews->structures或快捷方式shift+f9
insert键单击add standard structure开始输入peb,您应该会看到窗口滚动并向您展示您刚刚广告的结构ded

The initial autoanalysis has been finished.
C:\Documents and Settings\Admin\Desktop\EPROCESS.h: `successfully compiled`


转到idaview选择84h / right click->select structure offset

并应用Eprocess.Pid

反汇编会有点更具可读性

00000000 EPROCESS        struc ; (sizeof=0x88, standard type)
00000000 unknown         db 132 dup(?)
00000084 Pid             dd ?
00000088 EPROCESS        ends


开始在此eprocess.h中添加其他发现的偏移量,并再次加载它以更新
结构定义

很多可以通过windbg

查看结构定义的一部分,例如peb和peb_ldr_data可以这样查看

8B 80 84 00 00 00 mov     eax, [eax+EPROCESS.Pid]


其他详细信息

如果您修改.h文件以添加另一个这样的结构成员,请注意以下几点:

dt nt!_PEB
dt nt!_PEB_LDR_DATA


请注意,在解析头文件之前,您需要删除早期的定义再次,这意味着您所有以前的工作都将在重新加载时丢失
,请保存您的工作

评论


谢谢你!我正在使用IDA Pro,但是在确实缺少我要查找的定义的情况下,此信息很有用。

– Elias51
2013年8月10日23:02