Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Info o PE fajlu.. ... .. .. . .. .. . . . .

[es] :: Pascal / Delphi / Kylix :: Info o PE fajlu.. ... .. .. . .. .. . . . .

[ Pregleda: 386 | Odgovora: 5 ]

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

qwertzuiopasdfghjkl

Član broj: 94834
Poruke: 86
*.adsl.net.t-com.hr.



Profil

icon Info o PE fajlu.. ... .. .. . .. .. . . . .15.05.2006. u 16:35

Dal je netko radio, il dal zna koje strukture i APIje kako saznat osnove informacije o PE fajlovima (OEP,ImageSize,NumberOfSections...), znaci ove podatke kao sto su na slici, te kako promijenit OEP nekom programu?




[Ovu poruku je menjao qwertzuiopasdfghjkl dana 15.05.2006. u 17:36 GMT+1]
Prikačeni fajlovi
15.05.2006. u 16:35 

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1401
82.208.201.*

ICQ: 246436949


Profil

icon Re: Info o PE fajlu.. ... .. .. . .. .. . . . .15.05.2006. u 18:26
Da ti nisi neki buduci haker ili cracker? :)

Pogledaj JCL biblioteku... imas tamo skoro sve sto ti treba.
DirectX na srpskom | GLScene na srpskom

There are only 10 types of people in this world; those who understand binary and those who don't.
15.05.2006. u 18:26 

qwertzuiopasdfghjkl

Član broj: 94834
Poruke: 86
*.adsl.net.t-com.hr.



Profil

icon Re: Info o PE fajlu.. ... .. .. . .. .. . . . .15.05.2006. u 18:59
Ma jok.. pokusavam napravit prog koji spaja bar 2 programa (znaci da jedan .exe sadrzi 2 .exe-a, i pri pokretanjem tog jednog pokrecu se obadva), a treba mi i za izradu pakera/protektora.. a uskoro planiram da uradim nesto na foru HIEW-a, samo sto ce imati dodatnu formu sa gornje navedenim opcijama.. sad cu pogledat te komponente!
15.05.2006. u 18:59 

reiser
Vranje

Član broj: 7895
Poruke: 1884
*.dialup.neobee.net.



Profil

icon Re: Info o PE fajlu.. ... .. .. . .. .. . . . .15.05.2006. u 19:49
Za dobijanje info o PE i ostalim headerima, prvo mapiraj image fajla sa MapAndLoad(), i zatim koristi ImageDirectoryEntryToData(), ImageNtHeader(), ImageRvaToVa(), ImageRvaToSection() fje, zavisi koja ti treba. Na kraju, kad izvuces sve potrebne podatke, sa UnmapAndLoad() oslobodi alociranu memoriju.

Elem, nisam siguran sta pravis, ali najlakse ti je da napises mali proggie koji ce ekstraktovati oba executable fajla koji su zapisani na njegovom kraju, i izvrsavati jedan pa drugi. Da spojis dva exe fajla direktno, bez koriscenja ikakvog pomocnog programa, ne mozes bez asemblera, a i ako to uspes, gotovo je sigurno da ce antivirus sankcionisati takav fajl :)
15.05.2006. u 19:49 

qwertzuiopasdfghjkl

Član broj: 94834
Poruke: 86
*.adsl.net.t-com.hr.



Profil

icon Re: Info o PE fajlu.. ... .. .. . .. .. . . . .15.05.2006. u 19:56
Evo mali primjer kako sifrirati kod?!
Znaci prost MessageBox bi izgledao u delphiu:

MessageBox(0,0,0,0);

To se u debageru vidi iz aviona:

00407C44 . 6A 00 PUSH 0 ; /Style = MB_OK|MB_APPLMODAL
00407C46 . 6A 00 PUSH 0 ; |Title = NULL
00407C48 . 6A 00 PUSH 0 ; |Text = NULL
00407C4A . 6A 00 PUSH 0 ; |hOwner = NULL
00407C4C . E8 87C9FFFF CALL <JMP.&user32.MessageBoxA> ; \MessageBoxA

E sad ako iskucamo ovako sta:
Code:

asm
  xor edi,edi
  push edi
  xor eax,eax
  push eax
  push eax
  xor edi,edi
  push edi
  mov ebx, $FFD0
  push ebx
  mov ebx, $0012FF9C
  mov eax, $77d8050b
  call ebx
 end;


I ako to otvorimo u debageru imat cemo:

00408018 . 31FF XOR EDI,EDI
0040801A . 57 PUSH EDI
0040801B . 31C0 XOR EAX,EAX
0040801D . 50 PUSH EAX
0040801E . 50 PUSH EAX
0040801F . 31FF XOR EDI,EDI
00408021 . 57 PUSH EDI
00408022 . BB D0FF0000 MOV EBX,0FFD0
00408027 . 53 PUSH EBX
00408028 . BB 9CFF1200 MOV EBX,12FF9C
0040802D . B8 0B05D877 MOV EAX,user32.MessageBoxA
00408032 . FFD3 CALL EBX


Ko bi odavde zakljucio da se poziva MessageBox, posto nema nigdje direktnog Call-a.. itd, ima trikova tak oda AV nije problem!!
Malo sam u guzvi pa cim ulovim vremena sredit cu to, i asm nije problem!




15.05.2006. u 19:56 

qwertzuiopasdfghjkl

Član broj: 94834
Poruke: 86
*.adsl.net.t-com.hr.



Profil

icon Re: Info o PE fajlu.. ... .. .. . .. .. . . . .15.05.2006. u 20:20
Imas pravo.. za broj sekcija:

Code:

program Project3;
{$APPTYPE CONSOLE}
uses
  SysUtils, Windows, ImageHlp;
var
  imageinfo: LoadedImage;
  pExportDirectory: PImageExportDirectory;
  dirsize:Cardinal;
begin
  if MapAndLoad(PChar('c:\prog.exe'), nil, @imageinfo, True, True) then
  begin
  WriteLn('Broj sekcija: '+IntToStr(imageinfo.NumberOfSections));
  pExportDirectory := ImageDirectoryEntryToData(imageinfo.MappedAddress,
        False, IMAGE_DIRECTORY_ENTRY_EXPORT, dirsize);
  //sad se tu jos nalaze neki podaci

  UnMapAndLoad(@imageinfo);
  end;
  ReadLn;
end.


A evo iskopao sam fju za vadjenje imena, broja funkcija u DLL-ovima:
Code:

procedure ListDLLExports(const FileName: string; List: TStrings);
type
  TDWordArray = array [0..$FFFFF] of DWORD;
var
  imageinfo: LoadedImage;
  pExportDirectory: PImageExportDirectory;
  dirsize: Cardinal;
  pDummy: PImageSectionHeader;
  i: Cardinal;
  pNameRVAs: ^TDWordArray;
  Name: string;
begin
  List.Clear;
  if MapAndLoad(PChar(FileName), nil, @imageinfo, True, True) then
  begin
    try
      pExportDirectory := ImageDirectoryEntryToData(imageinfo.MappedAddress,
        False, IMAGE_DIRECTORY_ENTRY_EXPORT, dirsize);
      if (pExportDirectory <> nil) then
      begin
        pNameRVAs := ImageRvaToVa(imageinfo.FileHeader, imageinfo.MappedAddress,
          DWORD(pExportDirectory^.AddressOfNames), pDummy);
        for i := 0 to pExportDirectory^.NumberOfNames - 1 do
        begin
          Name := PChar(ImageRvaToVa(imageinfo.FileHeader, imageinfo.MappedAddress,
            pNameRVAs^[i], pDummy));
          List.Add(Name);
        end;
      end;
    finally
      UnMapAndLoad(@imageinfo);
    end;
  end;
end;


Hm, takodjer ima i par odlicnih struktura za takve stvari:
DEBUG_EVENT
-evo sta se sve s njim moze pratit:
typedef struct _DEBUG_EVENT {
DWORD dwDebugEventCode;
DWORD dwProcessId;
DWORD dwThreadId;
union {
EXCEPTION_DEBUG_INFO Exception;
CREATE_THREAD_DEBUG_INFO CreateThread;
CREATE_PROCESS_DEBUG_INFO CreateProcessInfo;
EXIT_THREAD_DEBUG_INFO ExitThread;
EXIT_PROCESS_DEBUG_INFO ExitProcess;
LOAD_DLL_DEBUG_INFO LoadDll;
UNLOAD_DLL_DEBUG_INFO UnloadDll;
OUTPUT_DEBUG_STRING_INFO DebugString;
RIP_INFO RipInfo;
} u;
} DEBUG_EVENT;

i CONTEXT (sa kojim se mogu kontrolirat registri)

Ima jos struktura:
http://msdn.microsoft.com/libr...reos5/html/wce50lrfcontext.asp

Jos cu pogledat onaj JCL kad ulovim vremena!!


eDiTišN:
Na koji nacin se moze dumpovat neki fajl u memoriji, recimo da nadjem handle fajla pa da ga iscitam sa ReadProcessMemory i onda taj dio da spremim kao .exe, i jednio sto ostaje popravit IAT tablicu (imort fje), za to ima onaj zgodan program ImpRec, sad kako pak to da se ugradi?!

[Ovu poruku je menjao qwertzuiopasdfghjkl dana 15.05.2006. u 21:27 GMT+1]
15.05.2006. u 20:20 

[es] :: Pascal / Delphi / Kylix :: Info o PE fajlu.. ... .. .. . .. .. . . . .

[ Pregleda: 386 | Odgovora: 5 ]

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.