portable executable (PE EXE files)

0

Hi , bawil sie ktos moze odczytem plikow Portable executable (PE EXE), jesli ktos ma jakis doswiadczalny programik, sampel to prosilbym na maila mnie nie chodza sample z msdn, a neta nie wszystkie kumam
Pozdrawiam

0

Jezeli ja potrafilem nauczyc sie zasad dzialanie plikow wykonywalnych - 32 bitowych to czemu ty tego nie mial bys zrobic? Pokazal bym Ci prace zrobiona w asemblerze, ale jesli nie znasz podstaw budowy tego pliku to i tak watpie ze zrozumiesz. Jest taki plik pomocy, ktory dokladnie przedstawia budowe PE. Tym bardziej, ze wiekszosc, kogo interesuje to zgadnienie berda probowac stworzyc wirusa - dla mnie te pliki latwiej jest zarazic niz zwykle dosowe, nie wspominajac o plikach windowsowych typu NE (16 - bitowych).

0

Hi, no mnie raczej chodzi o dzialanie antywirusowe ;)
Co do dzialania to faktycznie nie rozumiem budowy tego pliku, bo w programie co analizuje PE EXE jest duzo zmiennych defiiniowanych ktore ja nie kumam, a nie ma prawie zadnych funkcji. No ale bede jakos sie meczyl.

0

Hej, wgłębiłem sie w to i mam już coś. Jednak nie mam pojęcia jak sprawdzic czy ja to dobrze robię.

1.MAm wiec pytanko, czy jesli mam coś takiego:
(*(USHORT *)lpFile == IMAGE_DOS_SIGNATURE)
to czy lpFile jest tak jakby odczytem zmapowanego pliku .exe?

Aha, moze ma któs prorgam analizujacy chociazby ilosc cekcji itp. abym mogl sobie sprawdzic czy ja to dobrze odczytałem (wystarczy plik wykonywalny). Bo jakoś to strasznie abstrakcyjne jest, nie ma jak sprawdzić poprawności (przynajmniej ja nie umiem, a PE Corector u mnie wiesza się)
Pozdrawiam
[hurra]

0

Do konca tygodnia wrzuce tekst dotyczacy budowy tych plikow. Gdzie jest punkt startowy (break point), co to sa sekcje i jak mozna dopisac wlasny kod aby mogl sie pierwszy wykonac. Mam spore doswiadczenie z plikami PE, wiec mysle, ze inni na pewno z checia chcieli by sie dowiedziec cegos wiecej o tych plikach.

0

Hi, wywala mi blad jak odczytuje plik scanreg.exe (ten z dysk. startowej), inne windowskowe pliki smigaja dobrze, i nie wiem czemu, Wychodzi Access Violation czyli dostep zaboniony jest do tego adresu, ale skoro tam podany jest taka wartosc pola ->e_lfanew, to powinno byc dostepne

b=((BYTE*)lpFile + ((PIMAGE_DOS_HEADER)lpFile)->e_lfanew);
int ib;
ib=(int)b; //tutaj wysala Access Violation, na wskaznikach moge operowac, ale jak juz do wartosci sie dobiure to lipa, ale to tylkko w jak mapuje plik Scanreg.exe

lpFile to adres do zmapowanego pliku

Z góry dzięki, pozdro i Wesołych świąt

0

Jedynym wytlumaczeniem tego zachowania jest to, ze plik jest uruchomiony i dziala w tle. Albo jest otwarty przez inny, ktory mu zabral prawa do otwierania (metoda FILE_SHARE_). Zobacz czy nie mozna otworzyc, gdy chcesz tylko uczynic go do odczytu?

0

//plik nie jest uruchomiony i nie działa w tle, wydaje mi się że on nie jest w formacie PE, ale nie wiem.

Czy ktoś dobrze opanował może RVA?

  1. Bo pewnie moj problem wiaze sie z tym.
    Mam tak:
    PIMAGE_OPTIONAL_HEADER poh;
    lpFile - zmapowany plik

VA=(DWORD)lpFile + poh->DataDirectory[1].VirtualAddress

no i co sie okazuje to ze VA nie pokazuje mi na katalog funkcji importowanych [1]. W niektorych exekach dziala dobrze a w niektorych sie sypie, jak wiec dobrze zamieniac VirtualAddress tak aby wskazywał na dane ale w pliku, nie w pamieci. ?

Ja naprawde tego nie kumam. W msdn jest ładnie wszystko napisane, ale nie kumam tam jednego przejścia, pewnie jest ono aby ten moj VA dobrze wskazywał, ale co się okazuje ten sposób w msdn tez sie sypie.

  1. ///i czy ja to dobrze skumałem
    RVA rozni sie tyle od offsetu zmapowanego pliku, ze jak exe jest ladowany do pamięci (przy uruchomieniu go??) to niektore pola sa wyrownywane (FileAlignment), wiec wypełnia sie je zerami. Przy odczycie pliku, jako pliku zmapowanego nie ma tych zer (padding), czy tak?? Dlatego RVA nie pokazuja zawsze tego co powinny, tylko tak jakby troche na wyrost, dalej?? Nawet jesli dobrze to nie wiem jak sie tego pozbyc, zapełniac zerami wszystko chciałem, dopoki nie zobaczyłem że rozmiar sekcji (SizeOfRawData>SizeOfVirtualData (jakoś tak)) w zmapowanym jest większy od rozmiaru wirtualnego (ponoc wypelnionego zerami), wtedy zgłupiałem :|
0

Bo RVA inaczej sie przelicza. najpierw pobierasz adres RVA a potem sprawdzasz kazda sekcje 40 bajtowa, czy ten adres zawiera sie wlasnie w danej sekcji. I jesli tak to z sekcji czytamy adres fizyczny i skaczemy do tego miejsca. Wszystko dokladnie opisze jak napisalem, ale potrzebuje jednak wiecej czasu, bo jednak mam wiele innych obowiazkow.

0

Do konca tygodnia wrzuce tekst dotyczacy budowy tych plikow. Gdzie jest punkt startowy (break point), co to sa sekcje i jak mozna dopisac wlasny kod aby mogl sie pierwszy wykonac. Mam spore doswiadczenie z plikami PE, wiec mysle, ze inni na pewno z checia chcieli by sie dowiedziec cegos wiecej o tych plikach.

spore, a entrypoint okreslasz jako breakpoint (pulapka stawiana w debugerze) [diabel]

0

Tak, popieprzyly mi sie nazwy - breakpoint a entrypoint. Zwracam honor. na razie artykulu nie pisze bo niestety mam mature. Ale po niej wrzuce art. Pozdrawiam Twardy

1 użytkowników online, w tym zalogowanych: 0, gości: 1