发新话题
打印

[转载]修改PEB结构绕防火墙

[转载]修改PEB结构绕防火墙

文章作者:俞汉君
发个代码 修改PEB结构绕防火墙

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


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


思路来自网上,代码用Pascal编写!
{
功能 :通过PEB获取EXE路径演示(可以修改该路经,以绕过防火墙)
Email:yuhj@zjjy.com
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.
Heaven is a place nearby so I won't be so far away and if you try and look for me maybe you'll find me someday

TOP

不会Pascal
不知道能否说一下原理步骤?
Behold·I send you forth as sheep in the midst of wolves·《马太福音》·10·16

TOP

发新话题