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

正文內(nèi)容

使用vc自己動(dòng)手編寫加殼程序-資料下載頁(yè)

2025-07-07 12:45本頁(yè)面
  

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