freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

使用vc自己動手編寫加殼程序-資料下載頁

2025-07-07 12:45本頁面
  

【正文】 號數(shù)目//對齊最后一個區(qū)段后的塊大小,來計算殼區(qū)段的虛擬地址。if ((pSectionHeader+dwNumOfSections1)SizeOfRawData % dwSectionAlign){dwAlignLastSection=dwSectionAlign*((pSectionHeader+dwNumOfSections1)SizeOfRawData / dwSectionAlign+1)。}else{dwAlignLastSection=(pSectionHeader+dwNumOfSections1)SizeOfRawData。}//獲取最后一個區(qū)段的相對虛擬地址和虛擬大小=(pSectionHeader+dwNumOfSections1)VirtualAddress+dwAlignLastSection。=(pSectionHeader+dwNumOfSections1)PointerToRawData+(pSectionHeader+dwNumOfSections1)SizeOfRawData。//計算殼區(qū)段表在PE頭中的位置lpShellSecTab=(LPVOID)((DWORD)pSectionHeader+sizeof(IMAGE_SECTION_HEADER)*dwNumOfSections)。//將殼區(qū)段信息拷貝到文件頭中//此方法并不嚴密,因為沒有考慮到PE文件頭中是否還有多余的空間,為簡化,暫如此操作。memcpy(lpShellSecTab,amp。SectionHeaderOfShell,sizeof(SectionHeaderOfShell))。//////////區(qū)段表修改完畢,下面修改PE頭///////////////////////////////////////////////區(qū)段表個數(shù)加1。pNtHeader++。//文件鏡像增加pOptionalHeaderSizeOfImage=SizeOfImage+((SizeOfShell % dwSectionAlign)?(dwSectionAlign*(SizeOfShell/dwSectionAlign+1)):SizeOfShell)。}MakePacking函數(shù)功能是將各個內(nèi)存數(shù)據(jù)輸出,合并為加殼后的文件。其代碼如下://生成加殼后的文件BOOL CPEPackerDlg::MakePacking(HANDLE hFile){DWORD dwBufferRead。//實際讀取字節(jié)大小DWORDdwNumOfSection。//區(qū)段的個數(shù)dwNumOfSection=pNtHeader。//寫入原始文件if (!WriteFile(hFile,lpVirtualtAlloc,SizeOfImage,amp。dwBufferRead,NULL)){return FALSE。}//寫入殼代碼段文件if (!WriteFile(hFile,lpVirtualShell,(pSectionHeader+dwNumOfSection1)SizeOfRawData,amp。dwBufferRead,NULL)){return FALSE。}return TRUE。}修改OnButtonPacking函數(shù),增加函數(shù)調(diào)用。OnButtonPacking代碼如下:void CPEPackerDlg::OnButtonPacking(){// TODO: Add your control notification handler code hereHANDLE hFile。//文件句柄//打開文件hFile=CreateFile(m_FilePathName,GENERIC_READ,FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL)。//如果文件打開失敗,就彈出對話框,并返回。if (hFile==INVALID_HANDLE_VALUE){MessageBox(打開文件失??!,錯誤提示,MB_OK)。return。}/////////////////第三次加的內(nèi)容///////////////////////////////////////////////判斷文件格式if (!IsPE(hFile)){(錯誤提示:文件不是PE格式!\r\n)。MessageBox(文件不是PE可執(zhí)行文件,錯誤提示!,MB_OK)。return。}////////////////////////////////////////////////////////////////////////////////////第四次內(nèi)容。分配內(nèi)存,并載入內(nèi)存////////////////////////////////////////////if (!MemAlloc(hFile)){(錯誤提示:文件加載到內(nèi)存失??!\r\n)。MessageBox(文件加載到內(nèi)存失敗!,錯誤提示!,MB_OK)。return。}//設(shè)定加殼后的文件名,我采取了一個偷懶的簡單方法。//如果要嚴格做,需要獲取文件路徑,擴展名等等。m_FilePathNamePacked=(()4)+。CloseHandle(hFile)。//創(chuàng)建加殼后的文件句柄hFile=CreateFile(m_FilePathNamePacked,GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ|FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL)。if (hFile==INVALID_HANDLE_VALUE){MessageBox(創(chuàng)建加殼后文件失??!,錯誤提示!,MB_OK)。return。}////////第五次增加//////////////////////////////////////////////////生成殼代碼段MakeShell(hFile)。//修改PE文件頭EditHeader()。//輸出加殼后的文件if (!MakePacking(hFile)){MessageBox(生成文件時失??!,錯誤提示!,MB_OK)。return。}//關(guān)閉文件句柄CloseHandle(hFile)。//文件寫入完畢后,釋放內(nèi)存MemAllocFree()。//在編輯框中顯示信息(文件加殼完成!\r\n)。MessageBox(創(chuàng)建文件成功!,成功提示,MB_OK)。}修改MemAllocFree函數(shù),增加對殼內(nèi)存釋放功能。void CPEPackerDlg::MemAllocFree(){//釋放分配的虛擬內(nèi)存VirtualFree(lpVirtualtAlloc,0,MEM_DECOMMIT|MEM_RELEASE)。//釋放殼代碼段的虛擬內(nèi)存VirtualFree(lpVirtualShell,0,MEM_DECOMMIT|MEM_RELEASE)。}至此,整個功能完畢!使用Windows XP系統(tǒng)自帶的記事本程序——。下圖是添加區(qū)段后兩個記事本程序的PE文件頭對比圖??梢钥吹剑瑓^(qū)段個數(shù)由6個變成了7個。文件鏡像大小有0000DC00變成了0000F000。其它的都一樣。以下是用hex_workshop打開的添加區(qū)段后的文件,在最后一個區(qū)段的位置時的數(shù)據(jù)圖。從圖中可以看出,從DC00開始,數(shù)據(jù)都是有8組成,說明添加數(shù)據(jù)成功。加殼前后的區(qū)段表對比圖最開始已經(jīng)放出來了。加殼后的文件多了一個區(qū)段“.bugsky”,該區(qū)段的偏移和地址都是緊靠文件的最后。運行加殼后的記事本程序,也成功?。?)在殼代碼中添加MessageBox并運行上次內(nèi)容是在文件中新添加了一個區(qū)段,本次內(nèi)容將修改添加區(qū)段后的文件OEP,使程序從新區(qū)段先運行,然后再跳到正常的程序運行。程序運行時會先彈出一個MessageBox對話框,然后正常運行程序。本次內(nèi)容將詳細講解使用VC程序添加MessageBox對話框。完成本功能,主要是兩大模塊。一是修改OEP為殼代碼段的運行地址。二是將MessageBox的代碼寫入殼代碼段中。我們知道在VC中編寫的函數(shù),經(jīng)編譯器編譯后就變成了二進制機器代碼,CPU執(zhí)行的就是機器碼。所以現(xiàn)在的問題是將MessageBox函數(shù)的代碼放入殼代碼段中。修改程序OEP,只需要在EidtHeader函數(shù)中增加功能即可,在函數(shù)最后面添加修改OEP代碼,如下所示。//修改PE文件頭信息,主要是區(qū)塊個數(shù)和鏡像大小void CPEPackerDlg::EditHeader(){…………………………//文件鏡像增加dwSizeOfImage=+。//新區(qū)段虛擬大小暫定為0xFFF(4095Bytes),除以0x1000(4096Bytes)目的是為了內(nèi)存對齊。//dwSizeOfImage=(dwSizeOfImage+0x1000)/0x1000 * 0x1000。pOptionalHeaderSizeOfImage=dwSizeOfImage。//修改程序OEPpOptionalHeaderAddressOfEntryPoint=。}在殼代碼段開頭添加跳轉(zhuǎn)到OEP的代碼
點擊復(fù)制文檔內(nèi)容
環(huán)評公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1