九色国产,午夜在线视频,新黄色网址,九九色综合,天天做夜夜做久久做狠狠,天天躁夜夜躁狠狠躁2021a,久久不卡一区二区三区

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
【原創(chuàng)】PE區(qū)塊添加工具
標(biāo) 題: 【原創(chuàng)】PE區(qū)塊添加工具
作 者: riusksk
時(shí) 間: 2009-10-24,20:15:45
鏈 接: http://bbs.pediy.com/showthread.php?t=100004


標(biāo)題:【原創(chuàng)】PE區(qū)塊添加工具v1.0
作者:riusksk
主頁:http://riusksk.blogbus.com
操作環(huán)境:windows vista sp1, RadASM

本工具主要是向PE文件中添加一個(gè)節(jié)塊,參考了玩命版主的代碼而寫成的,效果圖如下:


源碼如下:
xTiNt
00000: .386
00001: .model flatstdcall  ;32 bit memory model
00002: option casemap :none  ;case sensitive
00003: 
00004: include windows.inc
00005: include kernel32.inc
00006: include user32.inc
00007: include comdlg32.inc
00008: include SkinH.inc
00009: 
00010: includelib kernel32.lib
00011: includelib user32.lib
00012: includelib SkinH.lib
00013: includelib comdlg32.lib
00014: 
00015: _PEAlign   proto   dwTarNum : DWORD, dwAlignTo : DWORD
00016: _AddSection   proto   pMem : LPVOID, pSectionName : LPVOID, dwSectionSize : DWORD
00017: DlgProc    proto  :HWND,:UINT,:WPARAM,:LPARAM
00018: 
00019: .const
00020: 
00021: IDD_DIALOG1      equ 101
00022: IDC_FILENAME      equ 1001
00023: IDC_OPEN      equ 1002
00024: IDC_SECTIONNAME      equ 1003
00025: IDC_SECTIONSIZE      equ 1004
00026: IDC_ABOUT      equ 1005
00027: IDC_ADD        equ 1006
00028: IDC_EXIT      equ 1007
00029: ICO_MAIN         equ 1010
00030: 
00031: ;#########################################################################
00032: .data
00033: szSHE      db  'china.she',0
00034: szAboutCaption    db  '關(guān)于',0
00035: szAbout      db  'PE區(qū)塊添加工具v1.0',0dh,0ah
00036:       db  '作者:riusksk(泉哥)',0dh,0ah
00037:       db  'QQ: 444748653',0dh,0ah
00038:       db  'E-mail: riusksk@qq.com',0dh,0ah
00039:       db  'Blog: http://riusksk.blogbus.com',0dh,0ah
00040:       db  '鳴謝: 玩命、eASYSCt、moonife',0
00041: lpstrFilter    db  'Exe Files(*.exe)',0,'*.exe',0
00042:       db  'All Files(*.*)',0,'*.*',0,0
00043: szErr      db  '錯(cuò)誤',0
00044: szAlert      db  '提示',0
00045: szSuccess    db  '區(qū)塊添加成功!',0
00046: szOpenFileFailed  db  '文件打開失??!',0
00047: szGetFileSizeFailed     db   '獲取文件大小失敗!',0  
00048: szCreateMapFailed       db   '創(chuàng)建文件映射失敗! ',0
00049: szMapFileFailed    db  '映射文件到內(nèi)存失敗!',0
00050: szInvalidPE    db  '無效PE文件',0
00051: lpstrFile    db  255 dup (0)
00052: lpSectionName    db  20 dup (0)
00053: lpSectionSize    db  20 dup (0)
00054: bError      db  0
00055: dwNewSectionSize  dd  0
00056: ;#########################################################################
00057: 
00058: .data?
00059: 
00060: hInstance      dd ?
00061: 
00062: ;#########################################################################
00063: 
00064: 
00065: .code
00066: 
00067: start:
00068: 
00069:   invoke GetModuleHandle,NULL
00070:   mov  hInstance,eax
00071:   invoke DialogBoxParam,hInstance,IDD_DIALOG1,NULL,addr DlgProc,NULL
00072:   invoke ExitProcess,0
00073: 
00074: ;########################################################################
00075: _CryptFile proc szFname : LPSTR,szSectionName:LPSTR,dwSectionSize:DWORD
00076:      LOCAL hFile : HANDLE
00077:      LOCAL hMap : HANDLE
00078:      LOCAL pMem : LPVOID
00079:      LOCAL dwOrigFileSize : DWORD
00080:      LOCAL dwNTHeaderAddr : DWORD
00081: 
00082:      xor eaxeax
00083:      mov bError, al    ;錯(cuò)誤標(biāo)志
00084:      mov eax, dwSectionSize
00085:      mov dwNewSectionSize, eax
00086: 
00087:      ;打開PE文件
00088:       invoke CreateFile, szFname,\
00089:                           GENERIC_WRITE + GENERIC_READ,\
00090:                           FILE_SHARE_WRITE + FILE_SHARE_READ,\
00091:                           NULL,\
00092:                           OPEN_EXISTING,\
00093:                           FILE_ATTRIBUTE_NORMAL,\
00094:                           0
00095:      .if   eax == INVALID_HANDLE_VALUE
00096:            jmp OpenFileFailed                
00097:      .endif
00098:      mov hFile, eax 
00099:      invoke GetFileSize, hFile, NULL
00100:     .IF eax == 0
00101:         invoke CloseHandle, hFile  
00102:         jmp GetFileSizeFailed
00103:     .ENDIF
00104:      mov dwOrigFileSize, eax     ;原始PE文件大小
00105: 
00106:      add eax,2000h
00107:      xchg eaxecx
00108:      xor ebxebx     
00109:      invoke CreateFileMapping, hFile, ebx, PAGE_READWRITE, ebxecxebx    ;創(chuàng)建內(nèi)存映射
00110:      .if eax == 0
00111:          invoke CloseHandle, hFile
00112:          jmp CreateMapFailed                
00113:      .endif
00114:      mov hMap, eax
00115:      
00116:      ;將文件映射到內(nèi)存中
00117:      invoke MapViewOfFile, hMap,
00118:                            FILE_MAP_WRITE+FILE_MAP_READ+FILE_MAP_COPY, 
00119:                            ebxebxebx
00120:      .if eax == 0
00121:          invoke CloseHandle, hMap
00122:          invoke CloseHandle, hFile
00123:          jmp MapFileFailed
00124:      .endif
00125:      mov pMem, eax                               
00126:      ;檢測(cè)文件是否為PE格式
00127:      xchg eaxesi
00128:      assume esi : ptr IMAGE_DOS_HEADER
00129:      .if [esi].e_magic != 'ZM'
00130:          invoke UnmapViewOfFile, pMem
00131:          invoke CloseHandle, hMap
00132:          invoke CloseHandle, hFile
00133:          jmp InvalidPE        
00134:      .endif       
00135:      add esi, [esi].e_lfanew      ;PE頭指針
00136:      assume esi : ptr IMAGE_NT_HEADERS   
00137:      .if word ptr [esi].Signature != 'EP'
00138:          invoke UnmapViewOfFile, pMem
00139:          invoke CloseHandle, hMap
00140:          invoke CloseHandle, hFile
00141:          jmp InvalidPE        
00142:      .endif
00143:      mov dwNTHeaderAddr, esi    
00144:     invoke _AddSection, pMem,szSectionName,dwNewSectionSize  ;添加PE節(jié)塊的關(guān)鍵函數(shù)
00145:     push eax
00146:     mov esi, dwNTHeaderAddr
00147:     assume esi : ptr IMAGE_NT_HEADERS
00148: 
00149: LogicShellExit:
00150:      ;關(guān)閉句柄
00151:      invoke UnmapViewOfFile, pMem
00152:      invoke CloseHandle, hMap
00153:      invoke CloseHandle, hFile
00154:      .if bError == 0
00155:          invoke MessageBox, NULL, offset szSuccess, offset szAlert, MB_ICONINFORMATION  ;提示成功
00156:      .endif        
00157:      ret
00158: ;提示錯(cuò)誤 
00159: OpenFileFailed:
00160:      lea eax,szOpenFileFailed
00161:      jmp ShowErr
00162: GetFileSizeFailed:
00163:      lea eax, szGetFileSizeFailed
00164:      jmp ShowErr    
00165: CreateMapFailed:
00166:      lea eax, szCreateMapFailed
00167:      jmp ShowErr
00168: MapFileFailed:
00169:      lea eax,szMapFileFailed
00170:      jmp ShowErr        
00171: InvalidPE:          
00172:      lea eax,szInvalidPE
00173:      jmp ShowErr   
00174: ShowErr:
00175:      invoke MessageBox, NULL, eaxoffset szErr, MB_ICONERROR
00176:      mov al, 1
00177:      mov bError, al  ;設(shè)置錯(cuò)誤標(biāo)志
00178:      jmp LogicShellExit
00179: 
00180: _CryptFile endp 
00181: 
00182: _AddSection proc uses ebx ecx edx esi edi, pMem : LPVOID,
00183:                                           pSectionName : LPVOID,
00184:                                           dwSectionSize : DWORD
00185:                                           
00186:     ;添加PE節(jié)塊,返回值eax為新加節(jié)塊的文件偏移地址
00187:     LOCAL dwNTHeader : LPVOID
00188:     LOCAL dwLastSecTbl : LPVOID    
00189:     LOCAL dwFileAlig : DWORD
00190:     LOCAL dwSecAlig : DWORD
00191: 
00192:     mov esi, pMem
00193:     add esidword ptr [esi+3ch]  ;PE頭地址
00194:     mov dwNTHeader, esi  
00195:     assume esi : ptr IMAGE_NT_HEADERS
00196:     ;更改節(jié)塊數(shù)目
00197:     mov cxword ptr [esi].FileHeader.NumberOfSections
00198:     movzx ecxcx
00199:     inc word ptr [esi].FileHeader.NumberOfSections  ;節(jié)塊數(shù)目加1
00200:     push dword ptr [esi].OptionalHeader.FileAlignment  ;文件對(duì)齊值
00201:     pop dwFileAlig
00202:     push dword ptr [esi].OptionalHeader.SectionAlignment  ;節(jié)塊對(duì)齊值
00203:     pop dwSecAlig        
00204:     add esisizeof IMAGE_NT_HEADERS     ;令esi指向節(jié)塊表section table
00205:     mov eaxsizeof IMAGE_SECTION_HEADER  ;節(jié)塊大小
00206:     mov ebxecx  ;節(jié)塊數(shù)目
00207:     imul ebx    ;指向最后一塊節(jié)塊
00208:     add esieax  ;esi為原始最后一節(jié)塊結(jié)尾處的文件偏移地址
00209:     push esi
00210:     sub esisizeof IMAGE_SECTION_HEADER    ; esi為原始最后一節(jié)塊起始處的文件偏移地址
00211:     mov dwLastSecTbl, esi
00212:     pop esi
00213:     assume esi : ptr IMAGE_SECTION_HEADER
00214:     ;設(shè)置節(jié)塊名
00215:     push esi
00216:     lea edi, [esi].Name1
00217:     mov esi, pSectionName
00218: CopySectionNameLoop:   
00219:     lodsb
00220:     test alal
00221:     jz EndCopySectionNameLoop
00222:     stosb
00223:     jmp CopySectionNameLoop
00224: EndCopySectionNameLoop:  
00225:     pop esi  
00226: 
00227:     push 0E00000E0h    ;設(shè)置節(jié)塊屬性為可讀可寫可執(zhí)行
00228:     pop dword ptr [esi].Characteristics
00229: 
00230:     push dwSectionSize    ;設(shè)置內(nèi)存中節(jié)塊大小
00231:     pop dword ptr [esi].Misc.VirtualSize
00232: 
00233:     invoke _PEAlign,dwSectionSize,dwFileAlig  ;設(shè)置新增節(jié)塊進(jìn)行文件對(duì)齊后的大小
00234:     mov dword ptr [esi].SizeOfRawData, eax
00235:     
00236:     ; 新節(jié)的內(nèi)存偏移 = 上一節(jié)的內(nèi)存偏移 + 上一節(jié)經(jīng)過節(jié)對(duì)齊后的長(zhǎng)度
00237:     ; 新節(jié)的文件偏移 = 上一節(jié)的文件偏移 + 上一節(jié)進(jìn)過文件對(duì)齊后的長(zhǎng)度
00238:     mov eax, dwLastSecTbl                      
00239:     assume eax : ptr IMAGE_SECTION_HEADER
00240:     mov ecxdword ptr [eax].VirtualAddress    ; 新增節(jié)塊的相對(duì)虛擬地址
00241:     add ecxdword ptr [eax].Misc.VirtualSize        
00242:     mov ebxdword ptr [eax].PointerToRawData    ; 新增節(jié)塊的文件偏移地址
00243:     add ebxdword ptr [eax].SizeOfRawData           
00244:     invoke _PEAlign, ecx, dwSecAlig    ;設(shè)置新增節(jié)塊進(jìn)行節(jié)塊對(duì)齊后的偏移地址
00245:     mov dword ptr [esi].VirtualAddress, eax
00246:     invoke _PEAlign, ebx,dwFileAlig    ;設(shè)置新增節(jié)塊進(jìn)行文件對(duì)齊后的偏移地址  
00247:     mov dword ptr [esi].PointerToRawData, eax  
00248: 
00249:     mov eaxdword ptr [esi].VirtualAddress
00250:     add eaxdword ptr [esi].Misc.VirtualSize
00251:     invoke _PEAlign, eax,dwSecAlig    ;設(shè)置新增節(jié)塊進(jìn)行塊對(duì)齊后的大小+內(nèi)存偏移
00252:     mov edx, dwNTHeader
00253:     assume edx : ptr IMAGE_NT_HEADERS
00254:     mov dword ptr [edx].OptionalHeader.SizeOfImage, eax  ;修改PE文件的映射大小
00255:     push dword ptr [esi].PointerToRawData    ;PE文件中最后節(jié)塊的文件偏移
00256:     pop edi
00257:     add edi, pMem
00258:     
00259:     ;清零工作
00260:     mov ecx, dwSectionSize
00261:     xor eaxeax
00262:     cld
00263:     rep stosb
00264: 
00265:     mov eaxesi  ;返回值為新增節(jié)表的文件偏移
00266:     assume esi : nothing
00267:     assume eax : nothing
00268:     assume edx : nothing
00269:     ret
00270: _AddSection endp
00271: 
00272: _PEAlign proc uses ecx edx, dwTarNum : DWORD, dwAlignTo : DWORD
00273:     ; 用于計(jì)算節(jié)對(duì)齊后的大小   
00274:     ; Algorithms:
00275:     ; $1 = dwTarNum / dwAlignTo
00276:     ; if remain != 0
00277:     ; $r = $1 + 1 * dwAlignTo
00278:     ; return $r
00279:     mov ecx, dwAlignTo
00280:     mov eax, dwTarNum
00281:     xor edxedx
00282:     div ecx
00283:     cmp edx, 0
00284:     jz AlreadyAligned
00285:     inc eax
00286: AlreadyAligned:
00287:     mul ecx      
00288:     ret
00289: 
00290: _PEAlign endp   
00291: 
00292: 
00293: _WindowCenter    proc    hWnd:DWORD
00294:         local    @stRectDeskTop:RECT,@stRectWin:RECT
00295:         local    @dwWidth:DWORD,@dwHeight:DWORD
00296: 
00297:         invoke    GetWindowRect,hWnd,addr @stRectWin
00298:         invoke    GetDesktopWindow
00299:         mov        ebx,eax
00300:         invoke    GetWindowRect,ebx,addr @stRectDeskTop
00301: 
00302:         mov    eax,@stRectWin.bottom
00303:         sub    eax,@stRectWin.top
00304:         mov    @dwHeight,eax
00305:         mov    eax,@stRectWin.right
00306:         sub    eax,@stRectWin.left
00307:         mov    @dwWidth,eax
00308: 
00309:         mov    ebx,@stRectDeskTop.bottom
00310:         sub    ebx,@dwHeight
00311:         shr    ebx,1
00312:         mov    ecx,@stRectDeskTop.right
00313:         sub    ecx,@dwWidth
00314:         shr    ecx,1
00315: 
00316:         invoke    MoveWindow,hWnd,ecx,ebx,@dwWidth,@dwHeight,FALSE
00317:         ret
00318: 
00319: _WindowCenter     endp
00320: 
00321: _LpstrToHex proc uses esi edi ecx edx ebx, lpstr:LPSTR
00322: 
00323:     LOCAL dwM:DWORD
00324:     mov ebx,10h
00325:     mov edi,lpstr
00326:     mov dwM,0
00327:     invoke lstrlen,lpstr
00328:     mov esi,eax
00329: looop3:  
00330:         .if esi>0
00331:         mov al,byte ptr [edi]
00332:                 .if al>=30h
00333:               .if al<=39h
00334:             sub al,30h
00335:                         jmp looop
00336:               .elseif al>=61h
00337:                    .if al<=66h
00338:                 sub al,61h
00339:                 add al,0ah
00340:                 jmp looop
00341: 
00342:                    .elseif al>=41h
00343:                         .if al<=46h
00344:                     sub al,41h
00345:                     add al,0ah
00346:                     jmp looop
00347:                     .endif
00348:                    .endif
00349:               .endif
00350:         looop:  
00351:                 movzx eax,al
00352:             mov ecx,esi
00353:             dec ecx
00354:             looop2: 
00355:                     .if ecx>0
00356:                 mul ebx
00357:                 dec ecx
00358:                 jmp looop2
00359:             .endif
00360:             add dwM,eax
00361:             inc edi
00362:             dec esi
00363:             jmp looop3
00364:         .endif
00365:     .endif
00366:     mov eax,dwM
00367:     ret
00368: 
00369: _LpstrToHex endp
00370: DlgProc proc hWin:HWND,uMsg:UINT,wParam:WPARAM,lParam:LPARAM
00371:   LOCAL   stOFN:OPENFILENAME
00372:   
00373:   mov    eax,uMsg
00374:   .if eax==WM_INITDIALOG
00375:     invoke  SkinH_AttachEx,addr szSHE,0
00376:     invoke  LoadIcon,hInstance,ICO_MAIN
00377:     invoke  SendMessage,hWin,WM_SETICON,ICON_BIG,eax
00378:     invoke  _WindowCenter,hWin  ;將對(duì)話框設(shè)置在窗口中心
00379:     
00380:   .elseif eax==WM_COMMAND
00381:     mov  eax,wParam
00382:     .if  ax == IDC_OPEN
00383:       invoke RtlZeroMemory,addr stOFN,sizeof stOFN
00384:       push hWin
00385:       pop stOFN.hwndOwner
00386:       mov stOFN.lStructSize,sizeof stOFN
00387:       mov eax,offset lpstrFilter
00388:       mov stOFN.lpstrFilter,eax
00389:       mov eax,offset lpstrFile
00390:       mov stOFN.lpstrFile,eax
00391:       mov stOFN.nMaxFile,sizeof lpstrFile
00392:       mov stOFN.Flags,OFN_FILEMUSTEXIST or OFN_PATHMUSTEXIST
00393:       invoke  GetOpenFileName,addr stOFN
00394:       .if   eax == 1
00395:         invoke  SetDlgItemText,hWin,IDC_FILENAME,stOFN.lpstrFile
00396:       .endif
00397:     .elseif  ax == IDC_ABOUT
00398:       invoke MessageBox,hWin,addr szAbout,addr szAboutCaption,MB_OK or MB_ICONINFORMATION
00399:     .elseif  ax == IDC_ADD
00400:       invoke GetDlgItemText,hWin,IDC_FILENAME,offset lpstrFile,255
00401:       invoke GetDlgItemText,hWin,IDC_SECTIONNAME,offset lpSectionName,8
00402:       invoke GetDlgItemText,hWin,IDC_SECTIONSIZE,offset lpSectionSize,8
00403:       invoke _LpstrToHex,offset lpSectionSize    ;十進(jìn)制數(shù)轉(zhuǎn)換成十六進(jìn)制數(shù)
00404:       invoke _CryptFile,offset lpstrFile,offset lpSectionName,eax
00405:     .elseif ax == IDC_EXIT
00406:       invoke EndDialog,hWin,0
00407:     .endif
00408:   .elseif eax==WM_CLOSE
00409:     invoke EndDialog,hWin,0
00410:   .else
00411:     mov    eax,FALSE
00412:     ret
00413:   .endif
00414:   mov    eax,TRUE
00415:   ret
00416: 
00417: DlgProc endp
00418: 
00419: end start
附件下載:
PE區(qū)塊添加工具.rar.                                 
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
2004字符型液晶模塊編程資料
ShellCode的另外一種玩法(遠(yuǎn)程線程注入ShellCode)
12864液晶原理+程序+ 照片+電路圖
JPEG轉(zhuǎn)AVI
中考數(shù)學(xué)壓軸題分析:隱圓與折疊問題
【2020浙江湖州中考試卷23】【軸對(duì)稱】
更多類似文章 >>
生活服務(wù)
熱點(diǎn)新聞
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服