青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

elva

手工打造微型Win32可執(zhí)行文件

文章來(lái)源:www.xfocus.net
文章提交:watercloud (watercloud_at_xfocus.org)

本文是我在學(xué)習(xí)PE文件格式時(shí)打造小型PE文件的學(xué)習(xí)歷程的一個(gè)記錄性文字,最終我的目標(biāo)是完全手工打造一個(gè)小的EXE文件,第一個(gè)為1024字節(jié),最終改造到512字節(jié)。

廢話不多說(shuō),開(kāi)始工作:

寫(xiě)個(gè)匯編程序:
start:
    xor ebx,ebx
    jz tcall

tjmp:  
    pop eax
    push ebx
    push eax
    add eax,7
    push eax
    push ebx
    push ExitProcess
    push MessageBoxA
    ret

tcall:   call tjmp
     db "ExeDIY",0
     db "Hello!",0

用masm32編譯鏈接后生成Hello.exe


該exe為2k大小,為了把它大小裁減下來(lái),用UltraEdit新建一個(gè)16進(jìn)制文件,
然后我們參考原來(lái)的文件來(lái)手工創(chuàng)建一個(gè)新的hello.exe。

文件如附件最終為1k大小,已經(jīng)在WinXp/2k/Nt上測(cè)試。

我們作的主要工作是:
  1.  把Dos Stub去掉;按照新的信息構(gòu)造文件頭。
  2.  新文件對(duì)齊值為0x200,在0x200處填入指令信息。
  3.  把數(shù)據(jù)段去掉。(但由于WinXp上section個(gè)數(shù)不能為一個(gè),否則報(bào)不是Win32程序,所以仍
      然保留了數(shù)據(jù)段的section信息,但把它指向都改為了.text段)
  4.  由于數(shù)據(jù)段已經(jīng)被去掉,需要將Imports相關(guān)信息搬入.text段0x300處。并從新計(jì)算
      輸入表的地址和輸入地址表的地址及Import結(jié)構(gòu)相關(guān)鏈表和指針的地址。由于我們?cè)?x300
      處,執(zhí)行時(shí)內(nèi)存映像中地址為0x401100,需要按照0x1100為參照修改鏈表的各個(gè)值。

在制作過(guò)程中發(fā)現(xiàn)文件對(duì)齊WinXp不能小于0x200,否則為非法win32程序,而NT可以時(shí)32字節(jié)倍數(shù)的對(duì)齊
,如果只針對(duì)NT的話可以把文件構(gòu)造的更小.

雖然我們只用到1個(gè)段,但pe文件還是必須要有兩個(gè)section!

修改Import相關(guān)地址后必須修改指令信息中的地址。因?yàn)槊看螌?duì)API的引用都是在操作編譯器提供的一個(gè)地址,
該地址存放的時(shí)一條jmp [xxxx]  的指令, xxxx 地址即為Import的函數(shù)指針數(shù)組,Loader在加載程序時(shí)
會(huì)根據(jù)調(diào)用的DLL函數(shù)的具體加載地址來(lái)填充這里,但我們已經(jīng)把這一地址移到了0x401100,要作修正。

整個(gè)文件dump出來(lái)的內(nèi)容如下(WinHex真是強(qiáng)大呀?。>唧w意義在后面描述。
你可以在這里下載它:http://watercloud.diy.163.com/others/Hello1.exe

Offset      0  1  2  3  4  5  6  7   8  9  A  B  C  D  E  F

00000000   4D 5A D5 E2 C0 EF BB F9  B1 BE B6 BC C3 BB D3 D0   MZ這里基本都沒(méi)有
00000010   D3 C3 2C 44 4F 53 B1 A3  C1 F4 B5 C4 CD B7 B2 BF   用,DOS保留的頭部
00000020   D0 C5 CF A2 2C CE D2 C3  C7 B6 BC B2 BB D3 C3 2E   信息,我們都不用.
00000030   D2 BB D6 B1 B5 BD D5 E2  C0 EF C0 B2 40 00 00 00   一直到這里啦@...
00000040   50 45 00 00 4C 01 02 00  00 00 00 00 00 00 00 00   PE..L...........
00000050   00 00 00 00 E0 00 0F 01  0B 01 00 00 00 02 00 00   ....?..........
00000060   00 00 00 00 00 00 00 00  00 10 00 00 00 00 00 00   ................
00000070   00 00 00 00 00 00 40 00  00 10 00 00 00 02 00 00   ......@.........
00000080   00 00 00 00 00 00 00 00  04 00 00 00 00 00 00 00   ................
00000090   00 30 00 00 00 02 00 00  00 00 00 00 02 00 00 00   .0..............
000000A0   00 01 00 00 00 00 00 00  00 01 00 00 00 10 00 00   ................
000000B0   00 00 00 00 02 00 00 00  00 00 00 00 00 00 00 00   ................
000000C0   10 11 00 00 3C 00 00 00  00 00 00 00 00 00 00 00   ....<...........
000000D0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................
000000E0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................
000000F0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................
00000100   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................
00000110   00 00 00 00 00 00 00 00  00 11 00 00 10 00 00 00   ................
00000120   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................
00000130   00 00 00 00 00 00 00 00  43 6C 6F 75 64 00 00 00   ........Cloud...
00000140   00 02 00 00 00 10 00 00  00 02 00 00 00 02 00 00   ................
00000150   00 00 00 00 00 00 00 00  00 00 00 00 60 00 00 60   ............`..`
00000160   4E 53 46 4F 43 55 53 00  00 02 00 00 00 20 00 00   NSFOCUS...... ..
00000170   00 02 00 00 00 02 00 00  00 00 00 00 00 00 00 00   ................
00000180   00 00 00 00 60 00 00 60  D5 E2 C0 EF BF AA CA BC   ....`..`這里開(kāi)始
00000190   CA C7 B6 D4 C6 EB CC EE  B3 E4 D0 C5 CF A2 A3 AC   是對(duì)齊填充信息,
000001A0   C3 BB D3 D0 D3 C3 2E 20  D2 BB D6 B1 B5 BD 30 78   沒(méi)有用. 一直到0x
000001B0   32 30 30 68 BF AA CA BC  CE AA 2E 74 65 78 74 28   200h開(kāi)始為.text(
000001C0   D2 B2 BE CD CA C7 43 6C  6F 75 64 29 B6 CE BF AA   也就是Cloud)段開(kāi)
000001D0   CA BC 2C CE D2 C3 C7 B0  D1 20 49 6D 70 6F 72 74   始,我們把 Import
000001E0   B1 ED D2 B2 B7 C5 B5 BD  D5 E2 B8 F6 B6 CE C0 EF   表也放到這個(gè)段里
000001F0   C0 B4 C1 CB 2F 2F BA C7  BA C7 20 3A 29 20 20 20   來(lái)了//呵呵 :)  
00000200   33 DB 74 13 58 53 50 83  C0 07 50 53 68 2A 10 40   3踭.XSP兝.PSh*.@
00000210   00 68 30 10 40 00 C3 E8  E8 FF FF FF 45 78 65 44   .h0.@.描?ExeD
00000220   49 59 00 48 65 6C 6C 6F  21 00 FF 25 00 11 40 00   IY.Hello!.%..@.
00000230   FF 25 08 11 40 00 00 00  00 00 00 00 00 00 00 00   %..@...........
00000240   B4 FA C2 EB BE CD D5 E2  C3 B4 D2 BB B5 E3 A3 AC   刖駝餉匆壞悖?
00000250   D5 E2 C0 EF D3 D6 CA C7  CC EE B3 E4 A3 AC 49 6D   這里又是填充,Im
00000260   70 6F 72 74 B1 ED CE D2  C3 C7 D2 B2 B7 C5 B5 BD   port表我們也放到
00000270   D5 E2 B8 F6 B6 CE C0 B4  C1 CB A3 AC CE AA C1 CB   這個(gè)段來(lái)了,為了
00000280   BC C6 CB E3 B5 D8 D6 B7  B7 BD B1 E3 CE D2 C3 C7   計(jì)算地址方便我們
00000290   B0 D1 CB FC B7 C5 B5 BD  30 78 33 31 30 68 B4 A6   把它放到0x310h處
000002A0   C1 CB C6 E4 B6 D4 D3 A6  C4 DA B4 E6 B5 D8 D6 B7   了其對(duì)應(yīng)內(nèi)存地址
000002B0   CE AA A3 BA 30 78 34 30  31 31 30 30 00 00 00 00   為:0x401100....
000002C0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................
000002D0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................
000002E0   00 00 00 00 00 00 00 00  B5 BD D5 E2 C0 EF BF AA   ........到這里開(kāi)
000002F0   CA BC 49 6D 70 6F 72 74  B1 ED D0 C5 CF A2 A3 BA   始Import表信息:
00000300   5C 11 00 00 00 00 00 00  78 11 00 00 00 00 00 00   \.......x.......
00000310   4C 11 00 00 00 00 00 00  00 00 00 00 6A 11 00 00   L...........j...
00000320   00 11 00 00 54 11 00 00  00 00 00 00 00 00 00 00   ....T...........
00000330   86 11 00 00 08 11 00 00  00 00 00 00 00 00 00 00   ?..............
00000340   00 00 00 00 00 00 00 00  00 00 00 00 5C 11 00 00   ............\...
00000350   00 00 00 00 78 11 00 00  00 00 00 00 AB 00 45 78   ....x.......?Ex
00000360   69 74 50 72 6F 63 65 73  73 00 4B 45 52 4E 45 4C   itProcess.KERNEL
00000370   33 32 2E 64 6C 6C 00 00  BB 01 4D 65 73 73 61 67   32.dll..?Messag
00000380   65 42 6F 78 41 00 55 53  45 52 33 32 2E 64 6C 6C   eBoxA.USER32.dll
00000390   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................
000003A0   BA C3 C1 CB A3 AC BD E1  CA F8 A3 AC D5 E2 C0 EF   好了,結(jié)束,這里
000003B0   CA C7 D7 EE BA F3 D2 BB  B8 F6 B6 D4 C6 EB D3 C3   是最后一個(gè)對(duì)齊用
000003C0   B5 C4 CC EE B3 E4 D6 B5  C1 CB A1 A3 20 20 20 20   的填充值了。    
000003D0   77 61 74 65 72 63 6C 6F  75 64 40 6E 73 66 6F 63   watercloud@nsfoc
000003E0   75 73 2E 63 6F 6D 20 20  32 30 30 32 C4 EA 31 32   us.com  2002年12
000003F0   D4 C2 31 38 C8 D5 20 20  20 CD FB B8 AB D5 FD 21   月18日   望斧正!


PE文件整個(gè)結(jié)構(gòu)如圖:

    +-------------------+
    | DOS頭             |
    +-------------------+
    | File-Header       |
    +-------------------+
    | Optional-Header   |
    |- - - - - - - - - -|
    |                   |----------------+
    | Data Directories  |                |
    |                   |                |
    | ( RVA,  size)     |-------------+  |
    |                   |
    |                   |---------+   |  |
    |                   |         |   |  |
    +-------------------+         |   |  |
    |                   |-----+   |   |  |
    | Section-Headers   |     |   |   |  |
    |                   |--+  |   |   |  |
    |                   |  |  |   |   |  |
    +-------------------+<-+  |   |   |  |
    |                   |     | <-+   |  |
    | Section Data 1    |     |       |  |
    |                   |     | <-----+  |
    +-------------------+<----+          |
    |                   |                |
    | Section Data 2    |                |
    |                   | <--------------+
    +-------------------+

相關(guān)結(jié)構(gòu)摘錄MSDN和Winnt.h如下:


typedef struct _IMAGE_DOS_HEADER {      // DOS .EXE header
    WORD   e_magic;                     // Magic number
    WORD   e_cblp;                      // Bytes on last page of file
    WORD   e_cp;                        // Pages in file
    WORD   e_crlc;                      // Relocations
    WORD   e_cparhdr;                   // Size of header in paragraphs
    WORD   e_minalloc;                  // Minimum extra paragraphs needed
    WORD   e_maxalloc;                  // Maximum extra paragraphs needed
    WORD   e_ss;                        // Initial (relative) SS value
    WORD   e_sp;                        // Initial SP value
    WORD   e_csum;                      // Checksum
    WORD   e_ip;                        // Initial IP value
    WORD   e_cs;                        // Initial (relative) CS value
    WORD   e_lfarlc;                    // File address of relocation table
    WORD   e_ovno;                      // Overlay number
    WORD   e_res[4];                    // Reserved words
    WORD   e_oemid;                     // OEM identifier (for e_oeminfo)
    WORD   e_oeminfo;                   // OEM information; e_oemid specific
    WORD   e_res2[10];                  // Reserved words
    LONG   e_lfanew;                    // File address of new exe header  //除了這項(xiàng)和e_magic基本都可以隨便填
  } IMAGE_DOS_HEADER, *PIMAGE_DOS_HEADER;

我們關(guān)心的為 e_lfanew,該地址指向了PE頭結(jié)構(gòu)在文件中的偏移.如我們的這個(gè)文件該值為
0x40,而0x40開(kāi)始就是PE頭的開(kāi)始,標(biāo)志為"PE"兩個(gè)字符.

PE頭部信息包括一個(gè)標(biāo)志值 "PE\0\0",和FileHeader及OptionHeader,結(jié)構(gòu)如下:
typedef struct _IMAGE_NT_HEADERS {
  DWORD Signature;                     //總是"PE\0\0"
  IMAGE_FILE_HEADER FileHeader;
  IMAGE_OPTIONAL_HEADER OptionalHeader;
} IMAGE_NT_HEADERS, *PIMAGE_NT_HEADERS;

FileHeader的類型定義如下:

typedef struct _IMAGE_FILE_HEADER {
  WORD Machine;
  WORD NumberOfSections;               //Section個(gè)數(shù),WinXp不能少于2(即使真正數(shù)據(jù)段只有一個(gè)),其他平臺(tái)未知.
  DWORD TimeDateStamp;                 //可以隨便填
  DWORD PointerToSymbolTable;          
  DWORD NumberOfSymbols;
  WORD SizeOfOptionalHeader;
  WORD Characteristics;
} IMAGE_FILE_HEADER, *PIMAGE_FILE_HEADER;

OptionHeader類型定義如下:
typedef struct _IMAGE_OPTIONAL_HEADER {
  WORD    Magic;
  BYTE    MajorLinkerVersion;
  BYTE    MinorLinkerVersion;
  DWORD   SizeOfCode;
  DWORD   SizeOfInitializedData;
  DWORD   SizeOfUninitializedData;
  DWORD   AddressOfEntryPoint;          //入口地址,佷重要
  DWORD   BaseOfCode;                   //代碼段起始地址
  DWORD   BaseOfData;                   //數(shù)據(jù)段起始地址.
  DWORD   ImageBase;                    //NT/2k/XP基本都是0x400000
  DWORD   SectionAlignment;
  DWORD   FileAlignment;
  WORD    MajorOperatingSystemVersion;
  WORD    MinorOperatingSystemVersion;
  WORD    MajorImageVersion;
  WORD    MinorImageVersion;
  WORD    MajorSubsystemVersion;
  WORD    MinorSubsystemVersion;
  DWORD   Win32VersionValue;
  DWORD   SizeOfImage;
  DWORD   SizeOfHeaders;
  DWORD   CheckSum;
  WORD    Subsystem;                    //這個(gè)別亂填,要不然可能又是非法Win32程序,MajorSubsystemVersion也是.
  WORD    DllCharacteristics;
  DWORD   SizeOfStackReserve;
  DWORD   SizeOfStackCommit;
  DWORD   SizeOfHeapReserve;
  DWORD   SizeOfHeapCommit;
  DWORD   LoaderFlags;
  DWORD   NumberOfRvaAndSizes;          //以下DataDirectory
  IMAGE_DATA_DIRECTORY DataDirectory[IMAGE_NUMBEROF_DIRECTORY_ENTRIES];
} IMAGE_OPTIONAL_HEADER, *PIMAGE_OPTIONAL_HEADER;

typedef struct _IMAGE_DATA_DIRECTORY {
  DWORD   VirtualAddress;   //每個(gè)地址都是Virtual,就是程序加載后該地址在內(nèi)存中相對(duì)于ImageBase的偏移,帶virtual的地址是這樣
                            //在文件中的偏移為 Addr - 對(duì)應(yīng)Section的VirtualAddress + 對(duì)應(yīng)Section的文件內(nèi)起始偏移
  DWORD   Size;
} IMAGE_DATA_DIRECTORY, *PIMAGE_DATA_DIRECTORY;

其中各個(gè)項(xiàng)意義如下:
1  Export table address and size
2  Import table address and size
3  Resource table address and size
4  Exception table address and size
5  Certificate table address and size
6  Base relocation table address and size
7  Debugging information starting address and size
8  Architecture-specific data address and size
9  Global pointer register relative virtual address  
10 Thread local storage (TLS) table address and size
11 Load configuration table address and size
12 Bound import table address and size
13 Import address table address and size
14 Delay import descriptor address and size
15 Reserved
16 Reserved


各Section-Header結(jié)構(gòu)如下:
typedef struct _IMAGE_SECTION_HEADER {
  BYTE    Name[IMAGE_SIZEOF_SHORT_NAME];
  union {
      DWORD   PhysicalAddress;
      DWORD   VirtualSize;
  } Misc;
  DWORD   VirtualAddress;            
  DWORD   SizeOfRawData;      
  DWORD   PointerToRawData;          //該節(jié)起始地址對(duì)于于文件的偏移
  DWORD   PointerToRelocations;
  DWORD   PointerToLinenumbers;
  WORD    NumberOfRelocations;
  WORD    NumberOfLinenumbers;
  DWORD   Characteristics;           //屬性,控制內(nèi)存空間的執(zhí)行,寫(xiě),讀等相關(guān)權(quán)限.
} IMAGE_SECTION_HEADER, *PIMAGE_SECTION_HEADER;


對(duì)應(yīng)這一結(jié)構(gòu)我們的這個(gè)文件各重要字段為:
46  Section個(gè)數(shù) : 2
5c  代碼大小 : 200
68  OEP : 1000
6c  BaseOfCode : 1000
74  ImageBase: 400000
78  Section數(shù)據(jù)內(nèi)存對(duì)齊: 1000
7c  Section數(shù)據(jù)文件對(duì)齊: 200
90  Image在內(nèi)存整個(gè)空間大小: 3000 /2000也行,起始我們只用了1000,但填這個(gè)值提示非法Win32程序:(
94  頭部大小: 200,好像填400,800也沒(méi)關(guān)系.
B4  DataDirectory中的數(shù)目 : 10
c0  輸入表地址: 1110
11c 輸入地址表地址: 1100

B8-138 為 DataDirectory數(shù)組

138 開(kāi)始為.text節(jié)頭部  ,在我們這里名字就叫Cloud啦:)
    140  size :36
    144  Vaddr:1000
    148  RawSize: 200
    14c  PointToRawData: 200
    15c  屬性 : 60000060 可讀寫(xiě)執(zhí)行段

160 開(kāi)始為第二個(gè)節(jié),這個(gè)節(jié)我們沒(méi)有用,但是系統(tǒng)不允許只有一個(gè)節(jié),放到這里作樣子的了,騙騙加載器.
200 開(kāi)始為真正的代碼開(kāi)始
300 開(kāi)始為Import相關(guān)鏈表.



程序加載后內(nèi)存中情況為
400000開(kāi)始: MZ . . .  文件頭部信息
401000開(kāi)始: 對(duì)應(yīng)為文件0x200開(kāi)始的內(nèi)容
401100開(kāi)始: 對(duì)應(yīng)為文件0x300開(kāi)始的Import表 ,但此時(shí)加載器已經(jīng)把各外部函數(shù)地址填好了.

ExitPorcess函數(shù)的地址填在 401100處
MessageBoxA函數(shù)的地址填在 401108處



--------------------改造----------------------


打開(kāi)UltraEdit再次重寫(xiě),這次的目標(biāo)是512字節(jié):
你可以在這里下載它:http://watercloud.diy.163.com/others/Hello2.exe

Offset      0  1  2  3  4  5  6  7   8  9  A  B  C  D  E  F

00000000   4D 5A 33 DB 74 13 58 53  50 83 C0 07 50 53 68 2C   MZ3踭.XSP兝.PSh,
00000010   00 40 00 68 32 00 40 00  C3 E8 E8 FF FF FF 45 78   .@.h2.@.描? Ex
00000020   65 44 49 59 00 48 65 6C  6C 6F 21 00 FF 25 20 11   eDIY.Hello!.% .
00000030   40 00 FF 25 28 11 40 00  00 00 00 00 40 00 00 00   @.%(.@.....@...
00000040   50 45 00 00 4C 01 02 00  00 00 00 00 00 00 00 00   PE..L...........
00000050   00 00 00 00 70 00 0F 01  0B 01 00 00 00 02 00 00   ....p...........
00000060   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................
00000070   00 00 00 00 00 00 40 00  00 10 00 00 00 02 00 00   ......@.........
00000080   00 00 00 00 00 00 00 00  04 00 00 00 00 00 00 00   ................
00000090   00 30 00 00 00 02 00 00  00 00 00 00 02 00 00 00   .0..............
000000A0   00 01 00 00 00 00 00 00  00 01 00 00 00 10 00 00   ................
000000B0   00 00 00 00 02 00 00 00  00 00 00 00 00 00 00 00   ................
000000C0   30 11 00 00 3C 00 00 00  2E 74 65 78 74 00 00 00   0...<....text...
000000D0   00 02 00 00 00 10 00 00  00 02 00 00 00 01 00 00   ................
000000E0   00 00 00 00 00 00 00 00  00 00 00 00 60 00 00 60   ............`..`
000000F0   2E 72 64 61 74 61 00 00  02 00 00 00 00 20 00 00   .rdata.........
00000100   00 02 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................
00000110   00 00 00 00 60 00 00 60  00 00 00 00 00 00 00 00   ....`..`........
00000120   7C 11 00 00 00 00 00 00  98 11 00 00 00 00 00 00   |.......?......
00000130   6C 11 00 00 00 00 00 00  00 00 00 00 8A 11 00 00   l...........?..
00000140   20 11 00 00 74 11 00 00  00 00 00 00 00 00 00 00   ...t...........
00000150   A6 11 00 00 28 11 00 00  00 00 00 00 00 00 00 00   ?..(...........
00000160   00 00 00 00 00 00 00 00  00 00 00 00 7C 11 00 00   ............|...
00000170   00 00 00 00 98 11 00 00  00 00 00 00 AB 00 45 78   ....?......?Ex
00000180   69 74 50 72 6F 63 65 73  73 00 4B 45 52 4E 45 4C   itProcess.KERNEL
00000190   33 32 2E 64 6C 6C 00 00  BB 01 4D 65 73 73 61 67   32.dll..?Messag
000001A0   65 42 6F 78 41 00 55 53  45 52 33 32 2E 64 6C 6C   eBoxA.USER32.dll
000001B0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................
000001C0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................
000001D0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................
000001E0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................
000001F0   00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00   ................


加載后內(nèi)存空間布局如下:

ImageBase: 400000
   程序入口地址 : 400000  即從文件偏移000開(kāi)始, 我們把代碼56字節(jié)放到了dos頭部
里了.
   .text : 401000  -- 對(duì)應(yīng) 文件 off 100 (但程序加載時(shí)從000開(kāi)始加載的)
   .data : 沒(méi)有用
   Import表信息在401130處(對(duì)應(yīng)為文件130)
        Import1
           Org -> 40116c  -> 40117c -> ExitProcess
           Name -> 40118a -> Kernel32.dll
           First -> 401120

        Import2
           Org -> 401174 -> 401198 -> MessageBoxA
           Name -> 4011a6 -> User32.dll
           First -> 401128

dll加載后在內(nèi)存 401120 處存放了ExitProcess的地址
           內(nèi)存401128 處存放了MessageBoxA的地址

程序代碼的jmp表就是:
    40002c  : jmp 401120
    400032  : jmp 401128
然后程序里調(diào)用API就使用了40002c和400032這兩個(gè)地址


對(duì)應(yīng)文件最終被加載了兩分,
    一個(gè)在400000 系統(tǒng)自身要使用的表結(jié)構(gòu),但我們同時(shí)把執(zhí)行代碼也
  放到了這里,并修改了程序入口指向這里.

    另一個(gè)在401000處,這里我們主要利用了這個(gè)地址除了了Import表.
  本來(lái)想使用400000處的導(dǎo)入表信息,但我把相關(guān)指針修改為000后系統(tǒng)報(bào)
  非法win32程序,就沒(méi)有辦法了.



文件布局如下:
00-40  : dos頭,但我們把代碼也放到這里了.
40-58  : PE-File-Header
58-C8  : PE-Option-Header,其中B8-C8為DataDirectory (ExportDirectory和
ImportDirectory)
          我們把DataDirectory已經(jīng)減到不能在小了,無(wú)論如何要ImportDirectory.
c8-F0  : .text Section-Header
F0-118 : .rdata Section-Header (沒(méi)有用處的節(jié)信息,但系統(tǒng)不允許只有一個(gè)節(jié)只好
裝模作樣放一個(gè).)
         好了真正的PE頭部信息結(jié)束,后面本來(lái)是 文件對(duì)齊的填充,我們利用這里存放
ImportTable.
120-1B0: Import-Table


而且從中可以看到,就算把DataDirectory都去掉(WinXp去掉后會(huì)被認(rèn)為非法Win32程
序),把Section減到只有
1個(gè)(Winxp最低也要兩個(gè)才是合法文件) 文件頭部信息也需要 0x88個(gè)字節(jié). 如果支持
100文件對(duì)齊,并且不使用
Import表那么可以將PE文件做到256字節(jié) ,但對(duì)于讓xp也能運(yùn)行512字節(jié)應(yīng)該是極限了.




最后提供一個(gè)512字節(jié)的小工具:鎖屏(Win2k/Xp)
http://watercloud.diy.163.com/others/LockWin.exe


參考:http://watercloud.nease.net/others/pe.txt  英文 作者不詳
      http://watercloud.diy.163.com/others/PE文件格式分析.pdf   中文  作者不詳
      MicroSoft MSDN


本文只是一個(gè)記錄性文字,且本人水平很差,望大家斧正。

                             watercloud

                           2002 - 12 - 21

posted on 2007-05-14 00:45 葉子 閱讀(458) 評(píng)論(0)  編輯 收藏 引用 所屬分類: 技術(shù)研究

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            毛片基地黄久久久久久天堂| 欧美刺激午夜性久久久久久久| 国产精品日韩欧美大师| 亚洲小少妇裸体bbw| 欧美一区二区三区视频| 国产有码在线一区二区视频| 久久久蜜臀国产一区二区| 欧美不卡视频| 亚洲视频在线一区| 国产欧美日韩一级| 美女久久一区| 国产精品99久久久久久久久久久久| 性做久久久久久久免费看| 在线观看精品视频| 欧美三级在线播放| 欧美一级一区| 亚洲精品女av网站| 99热在这里有精品免费| 国产美女在线精品免费观看| 久久婷婷国产综合精品青草| 日韩午夜三级在线| 久久午夜精品| 一区二区电影免费观看| 国产视频综合在线| 欧美极品aⅴ影院| 欧美一区二区三区播放老司机| 亚洲大片av| 久久精品久久99精品久久| 日韩天堂在线观看| 国内精品久久久久久| 欧美日韩黄色一区二区| 久久精品人人爽| 中日韩视频在线观看| 欧美va天堂| 久久国产综合精品| 亚洲视频一区二区在线观看| 在线观看欧美| 国产一区白浆| 国产精品欧美风情| 欧美激情日韩| 久久一区亚洲| 欧美在线啊v一区| 亚洲色无码播放| 亚洲国产精品成人综合色在线婷婷 | 在线观看一区二区精品视频| 欧美日韩一区二区视频在线观看 | 午夜精品久久久久久| 亚洲国产mv| 激情久久久久久久| 国产女人aaa级久久久级| 欧美日韩中文在线观看| 免费短视频成人日韩| 欧美一区二区三区四区视频| 一区二区三区视频在线| 亚洲精品欧洲| 亚洲国产精品久久精品怡红院| 久久嫩草精品久久久精品| 欧美一区二区三区四区高清| 亚洲午夜一级| 亚洲视频一区| 亚洲作爱视频| 日韩亚洲在线观看| 亚洲精一区二区三区| 亚洲欧洲精品一区二区三区| 尤物九九久久国产精品的特点 | 亚洲欧美久久久| 亚洲图片欧美一区| 在线视频欧美一区| 一本色道久久加勒比88综合| 亚洲精品久久嫩草网站秘色| 亚洲国产天堂久久综合| 亚洲黄色影片| 亚洲全部视频| 99亚洲一区二区| 99热免费精品| 亚洲视频每日更新| 亚洲欧美日韩一区二区| 亚洲女性裸体视频| 欧美一区二区女人| 久久精品国产亚洲一区二区三区 | 麻豆精品精品国产自在97香蕉| 久久精品国产成人| 可以看av的网站久久看| 欧美成人有码| 欧美少妇一区| 国产精品亚洲综合一区在线观看| 国产精自产拍久久久久久| 国产香蕉97碰碰久久人人| 国内外成人免费视频| 好看的亚洲午夜视频在线| 亚洲国产精品成人综合色在线婷婷| 精品福利av| 99精品视频一区| 亚洲欧美日本日韩| 久久久久久久一区二区| 欧美顶级大胆免费视频| 99热在线精品观看| 亚洲在线视频免费观看| 久久久人人人| 欧美—级a级欧美特级ar全黄| 欧美视频一区二区三区在线观看| 国产精品国产精品| 一区二区视频在线观看| 99精品国产99久久久久久福利| 亚洲一区二区影院| 久久视频免费观看| 亚洲精品在线免费| 先锋影音网一区二区| 免费在线国产精品| 国产精品久久久久av| 在线观看中文字幕不卡| 国产精品99久久久久久www| 久久精品国产综合精品| 亚洲激情社区| 久久国产色av| 欧美性片在线观看| 亚洲国产成人精品视频| 亚洲综合视频一区| 欧美电影在线播放| 午夜精品久久久久影视 | 亚洲视频在线观看| 麻豆精品一区二区av白丝在线| 99v久久综合狠狠综合久久| 久久精品国产亚洲一区二区三区| 欧美日韩国产黄| 亚洲国产精品黑人久久久| 久久大综合网| 日韩视频精品在线观看| 久久亚洲欧洲| 国产婷婷97碰碰久久人人蜜臀| 99精品国产在热久久下载| 美女尤物久久精品| 午夜日韩电影| 欧美视频在线观看免费网址| 亚洲韩国日本中文字幕| 久久人体大胆视频| 亚洲欧美日韩一区在线| 欧美日韩视频在线观看一区二区三区 | 亚洲国产一区在线| 久久久久国产精品麻豆ai换脸| 99精品欧美一区二区三区| 欧美成人a∨高清免费观看| 国产一区二区三区成人欧美日韩在线观看| 一本色道久久88精品综合| 欧美成人性网| 久久久久久尹人网香蕉| 国产主播精品| 久久精品亚洲精品| 午夜激情综合网| 国产精品亚洲а∨天堂免在线| 亚洲视频电影在线| 亚洲精品美女在线观看| 欧美国产日韩精品| 亚洲精品社区| 亚洲青涩在线| 欧美黄色aaaa| 99在线|亚洲一区二区| 亚洲国产精品毛片| 欧美激情精品久久久久久| 亚洲三级免费| 亚洲另类视频| 欧美日韩中文| 亚洲欧美日韩一区在线观看| 亚洲视频精品在线| 国产欧美日韩另类视频免费观看| 亚洲欧美日本在线| 小黄鸭精品密入口导航| 国产日韩欧美综合精品| 久久精品色图| 久久综合福利| 亚洲乱码国产乱码精品精天堂 | 日韩视频在线观看| 亚洲三级观看| 国产精品九九久久久久久久| 性久久久久久久久久久久| 亚洲欧美怡红院| 激情欧美丁香| 亚洲国产高潮在线观看| 欧美日韩午夜在线| 欧美一区二区在线观看| 久久9热精品视频| 亚洲国产一区二区视频| 亚洲免费成人| 国产亚洲成年网址在线观看| 媚黑女一区二区| 欧美激情精品久久久久久变态| 一区二区三区精品久久久| 亚洲免费伊人电影在线观看av| 国产日韩欧美另类| 欧美福利影院| 国产精品乱码久久久久久| 久久久久久穴| 欧美日本簧片| 久久久夜色精品亚洲| 欧美成人一区二区三区片免费| 亚洲自拍另类| 久久在线播放| 午夜精品免费在线| 免费日韩av电影| 欧美一级淫片aaaaaaa视频|