ÕýÔÚѧPE½á¹¹...¸Ðл¸öλ´ó¸çµÄÎÄÕºÍ×ÊÁÏ...ÕâÀïÏÈ˵Éùлл
Ò»°ã¸ß¼¶±àÒëÆ÷¶¼ÊDZàÒëºÃµÄPEÍ·²¿,ÀýÈçMASM,TASMµÈ
Ò»Ö±¶¼ËµNASM,FASMÊǵͼ¶±àÒëÆ÷.¿ÉÒÔ×Ô¶¨Òå½á¹¹
µ«ÊÇ¿àÓÚÎÞÈË·¢²¼Ïà¹ØÎÄÕÂ˵Ã÷..ÎÒÕâÀï¾Í¼òµ¥µÄÓÃNASMдһÏÂ
ÓÉÓÚ¸ÕѧPE½á¹¹Ðí¶à¶«Î÷¶¼²»Ì«¶®Ï£Íû¸öλ´óÏÀÖ¸µã
ÈçºÎ´òÔìÒ»¸öÃÔÄãµÄPE½á¹¹..ÎÒÔÝÖ»Ö»ÄÜ×÷µ½617×Ö½Ú
ÏÂÃæËæ×ÅѧϰµÄÉîÈë...»¹ÓиüÃÔÄãµÄPE³öÏÖ...
´úÂë¿ÉÒÔÖ±½Ó±àÒë..
±àÒë²ÎÊý:nasmw -fbin MsgBoxA.asm -o MsgBoxA.exe
ÇëÏÂÔØ×îеÄNASM for Win32±àÒëÆ÷
µ±Ç°×îа汾:NASM 0.98.39
´úÂë:
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
;Small PE Header Demo For NASM
;Email:Anskya@Gmail.com
;
;´úÂë˵Ã÷:NASM ±àдÃÔÄãPE´úÂë.(C) 2006.3.20
;1.×Ô¹¹ÔìPEÍ·²¿
;2.×Ô¹¹Ôìµ¼Èë±í½á¹¹
;
;Thank:Vecna[29A],Nguga aka PedroGC Made NAGOA+.INC
;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
[BITS 32]
%define CODE_BASE 1000h ;´úÂë»ùÖ·
%define RVADIFF 1000h-200h ;¼ÆËãÄÚ´æÊý¾ÝÓëÓ²ÅÌÊý¾ÝÏà¶Ô±ãÒË
%define imagebase 00400000h ;´úÂë»ùÖ·
%define reloc RVADIFF+imagebase ;È«¾ÖÆ«ÒÆ--Ò»¸öºÜÖØÒªµÄ²ÎÊý
;DOS STUBÍ·²¿
MZ_Header:
.magic dw "MZ" ;01 02----DOS STUB±êʶ[¹Ø¼üÊý¾Ý]
.cblp dw 435Bh ;03 04--[·Ç¹Ø¼üÊý¾Ý]
.cp dw 415Dh ;05 06--[·Ç¹Ø¼üÊý¾Ý]
.crlc dw 736Eh ;07 08--ÕâÊ®¸ö×Ö½ÚÎÒÃÇ¿ÉÒÔдһµã×Ô¼ºµÄ¸öÈËÐÅÏ¢[·Ç¹Ø¼üÊý¾Ý]
.cparhdr dw 796Bh ;09 10--[·Ç¹Ø¼üÊý¾Ý]
.minalloc dw 2161h ;11 12--[·Ç¹Ø¼üÊý¾Ý]
PE_Header:
.Signature dd "PE" ;13 14 | 15 16----PE Í·²¿Æðʼ[¹Ø¼üÊý¾Ý]
.Machine dw 14Ch ;17 18----¸ÃÎļþÔËÐÐËùÒªÇóµÄCPU:IMAGE_FILE_MACHINE_I386[¹Ø¼üÊý¾Ý]
.NumberOfSections dw 1 ;19 20----Îļþ½ÚÊýÁ¿[¹Ø¼üÊý¾Ý]
.TimeDateStamp dd 0h ;21 22 | 23 24----Îļþ´´½¨ÈÕÆÚºÍʱ¼ä[·Ç¹Ø¼üÊý¾Ý]
.PointerToSymbolTable dd 0h ;25 26 | 27 28----µ÷ÊÔÐÅÏ¢-[·Ç¹Ø¼üÊý¾Ý]
.NumberOfSymbols dd 0h ;29 30 | 31 32----µ÷ÊÔÐÅÏ¢-[·Ç¹Ø¼üÊý¾Ý]
.SizeOfOptionalHeader dw 0E0h ;33 34----OptionalHeader ½á¹¹´óС[¹Ø¼üÊý¾Ý]
.Characteristics dw 103h ;35 36----ÎļþÐÅÏ¢µÄ±ê¼Ç:±ÈÈçÎļþÊÇexe»¹ÊÇdll[¹Ø¼üÊý¾Ý]
Optional_Header:
.Magic dw 10Bh ;37 38----[¹Ø¼üÊý¾Ý]
.MajorLinkerVersion db 0h ;39----[·Ç¹Ø¼üÊý¾Ý]
.MinorLinkerVersion db 0h ;40----[·Ç¹Ø¼üÊý¾Ý]
.SizeOfCode dd 0h ;41 42 | 43 44----[·Ç¹Ø¼üÊý¾Ý]
.SizeOfInitializedData dd 0h ;45 46 | 47 48----[·Ç¹Ø¼üÊý¾Ý]
.SizeOfUninitialzedData dd 0h ;49 50 | 51 52----[·Ç¹Ø¼üÊý¾Ý]
.AddressOfEntryPoint dd code+RVADIFF ;53 54 | 55 56----´úÂë»ùÖ·+RVA=´ËÖµ---ÐèÒª¼ÆËã[¹Ø¼üÊý¾Ý]
.BaseOfCode dd 0h ;57 58 | 59 60----´úÂë»ùÖ·[·Ç¹Ø¼üÊý¾Ý]
;.BaseOfData dd DATA_BASE ;Êý¾Ý»ùÖ·-±»ÏÂÃæµÄ.lfanewÌæ»»ÁË~Õâ¸öÊýÖµ±¾ÉíҲûÓÐʲôÓÃ
.lfanew dd 0Ch ;61 62 | 63 64----±êʶ.PEÍ·²¿µÄÆðʼλÖÃÕâÀïдΪC-¿´ÉÏÃæµÚ13×Ö½Ú
;DOS STUB²¿·ÖµÄ×îºó½áβ²¿·Ö---±êʶ:PEÍ·²¿µÄÆðʼλÖÃ~ËûµÄλÖÃÊǹ̶¨µÄËùÒÔÖ»ÄÜдÔÚ×îºóÁË
;align 16, DB 0
.ImageBase dd imagebase;65 66 | 67 68----ÄÚ´æÓ³Éä»ùÖ·--ĬÈÏΪ00400000h[¹Ø¼üÊý¾Ý]
.SectionAlignment dd 01000h ;69 70 | 71 72----ÄÚ´æÖÐ½Ú¶ÔÆë--Èç¹û¸ÃÖµÊÇ1000hÄÇôÿ½ÚµÄÆðʼµØÖ·±ØÐëÊÇ4096µÄ±¶Êý,
.FileAlignment dd 0200h ;73 74 | 75 76----Îļþ¶ÔÆë[¹Ø¼üÊý¾Ý]..Ã÷°×°É
.MajorOperSystemVersion dw 0h ;77 78--[·Ç¹Ø¼üÊý¾Ý]
.MinorOperSystemVersion dw 0h ;79 80--[·Ç¹Ø¼üÊý¾Ý]
.MajorImageVersion dw 0h ;81 82--win32×Óϵͳ°æ±¾¡£ÈôPEÎļþÊÇרÃÅΪWin32Éè¼ÆµÄ[·Ç¹Ø¼üÊý¾Ý]
.MinorImageVersion dw 0h ;83 84--¸Ã×Óϵͳ°æ±¾±Ø¶¨ÊÇ4.0·ñÔò¶Ô»°¿ò²»»áÓÐ3άÁ¢Ìå¸Ð[·Ç¹Ø¼üÊý¾Ý]
.MajorSubsystemVersion dw 4 ;85 86--[¹Ø¼üÊý¾Ý]
.MinorSubsystemVersion dw 0 ;87 88--[¹Ø¼üÊý¾Ý]
.Reserved1 dd 0 ;89 90 | 91 92----[·Ç¹Ø¼üÊý¾Ý]
.SizeOfImage dd 2000h ;93 94 | 95 96----ÄÚ´æÖÐÕû¸öPEÓ³ÏñÌåµÄ³ß´ç,ËüÊÇËùÓÐÍ·ºÍ½Ú¾¹ý½Ú¶ÔÆë´¦ÀíºóµÄ´óС[¹Ø¼üÊý¾Ý]
.SizeOfHeaders dd code ;97 98 | 99 100---ËùÓÐÍ·+½Ú±íµÄ´óС,Ò²¾ÍµÈÓÚÎļþ³ß´ç¼õÈ¥ÎļþÖÐËùÓнڵijߴç,¿ÉÒÔÒÔ´ËÖµ×÷ΪPEÎļþµÚÒ»½ÚµÄÎļþÆ«ÒÆÁ¿[¹Ø¼üÊý¾Ý]
.CheckSum dd 0h ;101 102 | 103 104----[·Ç¹Ø¼üÊý¾Ý]
.Subsystem dw 2 ;105 106----PEÎļþÊô×Óϵͳ,2=Win32 GUI,3=Win32 Console[¹Ø¼üÊý¾Ý]
.DllCharacteristics dw 0 ;107 108----[·Ç¹Ø¼üÊý¾Ý]
.SizeOfStackReserve1 dd 100000h ;109 110 | 111 112----[¹Ø¼üÊý¾Ý]
.SizeOfStackCommit1 dd 2000h ;113 114 | 115 116----[¹Ø¼üÊý¾Ý]
.SizeOfStackReserve2 dd 100000h ;117 118 | 119 120----[¹Ø¼üÊý¾Ý]
.SizeOfStackCommit2 dd 2000h ;121 122 | 123 124----[¹Ø¼üÊý¾Ý]
.LoaderFlags dd 0h ;125 126 | 127 128----[·Ç¹Ø¼üÊý¾Ý]
.NumberOfRvaAndSizes dd 10h ;129 130 | 131 132----[¹Ø¼üÊý¾Ý]
Data_Directories:
.ExportRva dd 0h ;133 134 | 135 136----µ¼³ö±íÐéÄâÆ«ÒÆ[·Ç¹Ø¼üÊý¾Ý]
.ExportSize dd 0h ;137 138 | 139 140----µ¼Èë±í³¤¶È[·Ç¹Ø¼üÊý¾Ý]
.ImportRva dd import+RVADIFF ;141 142 | 143 144----µ¼Èë±íÐéÄâÆ«ÒÆ[¹Ø¼üÊý¾Ý]
.ImportSize dd code_end-import ;145 146 | 147 148----µ¼Èë±í³¤¶È[¹Ø¼üÊý¾Ý]
;µ¼Èë±í½á¹¹²¿·Ö~Õâ¸öµØ·½ÐèÒª×Ðϸ¹¹Ôì[ÉÐδÑо¿³¹µ×]
;.misc_sectionz times 28 dd 0 ;ÆäËû²¿·Ö~¶ÔÓÚÎÒÃÇÍêȫûÓõÄ
.ResourceRva dd 0h ;×ÊÔ´±íÐéÄâÆ«ÒÆ[·Ç¹Ø¼üÊý¾Ý]
.ResourceSize dd 0h ;×ÊÔ´±í³¤¶È[·Ç¹Ø¼üÊý¾Ý]
.ExceptionRva dd 0h ;Ã»Íæ¹ýÕâ¶«¶«[·Ç¹Ø¼üÊý¾Ý]
.ExceptionSize dd 0h ;Ã»Íæ¹ýÕâ¶«¶«[·Ç¹Ø¼üÊý¾Ý]
.CertificateRva dd 0h ;Ã»Íæ¹ýÕâ¶«¶«[·Ç¹Ø¼üÊý¾Ý]
.CertificateSize dd 0h ;Ã»Íæ¹ýÕâ¶«¶«[·Ç¹Ø¼üÊý¾Ý]
.BaseRelocationRva dd 0h ;»ùÖ·ÖØ¶¨Î»±íÐéÄâÆ«ÒÆ[·Ç¹Ø¼üÊý¾Ý]
.BaseRelocationSize dd 0h ;»ùÖ·ÖØ¶¨Î»±í³¤¶È[·Ç¹Ø¼üÊý¾Ý]
.DebugRva dd 0h ;µ÷ÊÔÐÅÏ¢ÐéÄâÆ«ÒÆ[·Ç¹Ø¼üÊý¾Ý]
.DebugSize dd 0h ;µ÷ÊÔÐÅÏ¢³¤¶È[·Ç¹Ø¼üÊý¾Ý]
.DescriptionRva dd 0h ;Ã»Íæ¹ýÕâ¶«¶«[·Ç¹Ø¼üÊý¾Ý]
.DescriptionSize dd 0h ;Ã»Íæ¹ýÕâ¶«¶«[·Ç¹Ø¼üÊý¾Ý]
.MachineRva dd 0h ;Ã»Íæ¹ýÕâ¶«¶«[·Ç¹Ø¼üÊý¾Ý]
.MachineSize dd 0h ;Ã»Íæ¹ýÕâ¶«¶«[·Ç¹Ø¼üÊý¾Ý]
.TLSRva dd 0h ;Ï̴߳¦ÀíÊý¾Ý[¹Ø¼üÊý¾Ý]
.TLSSize dd 0h ;Ï̴߳¦ÀíÊý¾Ý³¤¶È[¹Ø¼üÊý¾Ý]
.LoadConfigRva dd 0h ;Ã»Íæ¹ýÕâ¶«¶«[¹Ø¼üÊý¾Ý]
.LoadConfigSize dd 0h ;Ã»Íæ¹ýÕâ¶«¶«[¹Ø¼üÊý¾Ý]
.BoundImportRva dd 0h ;°ó¶¨µ¼Èë±íÊý¾Ý[¹Ø¼üÊý¾Ý]
.BoundImportSize dd 0h ;°ó¶¨µ¼Èë±íÊý¾Ý³¤¶È[¹Ø¼üÊý¾Ý]
.IATRva dd 0h ;Ã»Íæ¹ýÕâ¶«¶«[¹Ø¼üÊý¾Ý]
.IATSize dd 0h ;Ã»Íæ¹ýÕâ¶«¶«[¹Ø¼üÊý¾Ý]
.DelayImportDescriptor1 dd 0h ;Ã»Íæ¹ýÕâ¶«¶«[·Ç¹Ø¼üÊý¾Ý]
.DelayImportDescriptor2 dd 0h ;Ã»Íæ¹ýÕâ¶«¶«[·Ç¹Ø¼üÊý¾Ý]
.COMRuntimeHeader1 dd 0h ;COM+ ʱ¼äÁ¬½Ó¿âÐéÄâÆ«ÒÆµØÖ·[·Ç¹Ø¼üÊý¾Ý]
.COMRuntimeHeader2 dd 0h ;COM+ ʱ¼äÁ¬½Ó¿â³¤¶È[·Ç¹Ø¼üÊý¾Ý]
.Reserved1 dd 0h ;Õâ¶«¶«¾ÍÕæµÄûÌý˵¹ýÁË[·Ç¹Ø¼üÊý¾Ý]
.Reserved2 dd 0h ;Õâ¶«¶«¾ÍÕæµÄûÌý˵¹ýÁË[·Ç¹Ø¼üÊý¾Ý]
;ÒÔÉÏÄË~~PE½á¹¹Í·²¿ÐÅÏ¢~Çë°´ÕÕ˵Ã÷½øÐÐÐÞ¸Ä---ллÎÒ×Ô¼º
sections:
.SectionName db ".Anskya",0
.VirtualSize dd CODE_BASE ;ÐéÄâÌå»ý
.VirtualAddress dd CODE_BASE ;ÐéÄâµØÖ·
.SizeOfRawData dd code_end-code;Êý¾ÝÌå»ý
.PointerToRawData dd code ;Êý¾ÝÆ«ÒÆ
.PointerToRelocations dd 0
.PointerToLinenumbers dd 0
.NumberOfRelocations dw 0
.NumberOfLinenumbers dw 0
.Characteristics dd 0E0000060h ;¶ÎÊôÐÔ...²»ÓÃ˵Á˰É
align 200h, DB 0 ;¶ÔÆë0x200
code:
pushad
sub eax,eax
push eax ;0
push 00400105h ;°Ñ½ÚÃû³ÆÑ¹Èë¶ÑÕ»
push 00400002h ;°ÑMZºóÃæµÄ¸öÈËÐÅϢѹÈë¶ÑÕ»
push eax ;MB_OK
call [MessageBoxA] ;µ÷Óõ¼Èë±íµØÖ·
popad
ret
align 16, DB 0
;ÒÔϵ¼Èë±í²¿·Ö....½ö½öΪÁËÑÝʾ¾ÍûÓÐдµ¼³ö±í²¿·Ö...¾ßÌå²Î¼û<<Èí¼þ¼ÓÃܼ¼ÊõÄÚÄ»>>
import dd 0
dd 0
dd -1
dd dll001+RVADIFF
dd api001+RVADIFF
times 5 dd 0 ;¿Õ´¦4*5¸ö00µÄ¿Õλ
dll001 db 'USER32.DLL',0 ;µ¼ÈëDLLÃû³Æ
api001 dd api101+RVADIFF ;¼ÆËãµ¼Èë±íµÄÄÚ´æµØÖ·
dd 0
api101 dw 0
db 'MessageBoxA',0 ;µ¼È뺯Êý
MessageBoxA equ api001+reloc+4*0 ;º¯ÊýµØÖ·ÉùÃ÷...ÈçÓжàÓàµÄº¯ÊýÇëapi00N+reloc+4*N
code_end:
Ïà¹Ø´úÂë¼û¸½¼þ£º nasm.rar