HanDs
管理员

[Delphi文章] 修改PEB结构绕防火墙 



以前一直懒得发表文章,结果就是在一次意外的事件中许多思想 许多代码 许多情感 许多。。。许多数据灰飞烟灭!


2月份的时候,根据网上一个思路写了下面的代码,可以穿透防火墙!


思路来自网上,代码用Pascal编写!
{
  功能 :通过PEB获取EXE路径演示(可以修改该路经,以绕过防火墙)
  Email:[email protected]
  Web  :http://yunuo.net
  by  :渗透
}

unit PEBtest;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  _UNICODE_STRING = record
    Length: WORD{Ushort};
    MaximumLength: WORD;
    Buffer: PWideChar;
  end {_UNICODE_STRING};
  UNICODE_STRING = _UNICODE_STRING;
  PUNICODE_STRING = ^_UNICODE_STRING;

//PEB中的一个结构
type
  _PEB_LDR_DATA = record
    Length: ULONG;
    Initialized: BOOLEAN;
    SsHandle: pointer;//PVOID;
    InLoadOrderModuleList: LIST_ENTRY;
    InMemoryOrderModuleList: LIST_ENTRY;
    InInitializationOrderModuleList: LIST_ENTRY;
  end {_PEB_LDR_DATA};
  PEB_LDR_DATA = _PEB_LDR_DATA;
  PPEB_LDR_DATA = ^_PEB_LDR_DATA;


//模块结构 (72)
type
  _LDR_MODULE = record
    InLoadOrderModuleList: LIST_ENTRY;
    InMemoryOrderModuleList: LIST_ENTRY;
    InInitializationOrderModuleList: LIST_ENTRY;
    BaseAddress: pointer;
    EntryPoint:  pointer;
    SizeOfImage: ULONG;
    FullDllName: UNICODE_STRING;
    BaseDllName: UNICODE_STRING;
    Flags: ULONG;
    LoadCount: SmallInt;
    TlsIndex: SmallInt;
    HashTableEntry: LIST_ENTRY;
    TimeDateStamp: ULONG;
  end {_LDR_MODULE};
  LDR_MODULE = _LDR_MODULE;
  PLDR_MODULE = ^_LDR_MODULE;


type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
PEB :Pointer;
pmod:PLDR_MODULE;
pld :PPEB_LDR_DATA;

test:pointer;
begin
//获取PEB
asm
mov eax,fs:$30  //$18是TEB的地址 ,$30是PEB地址
mov PEB,eax
end;
Showmessage('当前进程的PEB地址='+IntToHex(Integer(peb),8));


PLD:=PPEB_LDR_DATA(Pointer(Integer(Peb)+$0C)^) ;    //PEB地址处开始$0C偏移处是一个PEB_LDR_DATA结构的指针
                                                    //该结构包含了程序所调用的模块
Pmod:=PLDR_MODULE(Pld.InLoadOrderModuleList.Flink); //获取第一个路径模块地址 (Exe本身)  .Flink.flink是第二个模块
Showmessage('程序入口点='+Inttohex(integer(pmod.EntryPoint),8));

ShowMessage(Pmod.FullDllName.Buffer);              //获取了EXE的路径,修改它可以穿透防火墙.例如修改为
                                                    //Pmod.FullDllName.Buffer:='C:\WINNT\system32\services.exe';
End;

end.


学习中请遵守法律法规,本网站内容均来自于互联网,本网站不负担法律责任
修改
#1楼
发帖时间:2016-7-9   |   查看数:0   |   回复数:0
游客组
快速回复