国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 編程 > Java > 正文

還未結(jié)束就能把自身刪除的程序

2019-09-06 23:33:19
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

                    下面的代碼由Gary Nebbett寫(xiě)就.Gary Nebbett乃是WINDOWS NT/2000 NATIVE API REFERENCE的作者.乃NT系統(tǒng)一等一的高手.下面就分析一些他的這段代碼.
這段代碼在PROCESS沒(méi)有結(jié)束前就將啟動(dòng)PROCESS的EXE文件刪除了.
int main(int argc, char *argv[])
{
HMODULE module = GetModuleHandle(0);
CHAR buf[MAX_PATH];
GetModuleFileName(module, buf, sizeof buf);
CloseHandle(HANDLE(4));
__asm {
lea eax, buf
push 0
push 0
push eax
push ExitProcess
push module
push DeleteFile
push UnmapViewOfFile
ret
}
return 0;
}
現(xiàn)在,我們先看一下堆棧中的東西

偏移 內(nèi)容
24 0
20 0
16 offset buf
12 address of ExitProcess
8 module
4 address of DeleteFile
0 address of UnmapViewOfFile

調(diào)用RET返回到了UnmapViewOfFile,也就是棧里的偏移0所指的地方.當(dāng)進(jìn)入U(xiǎn)nmapViewOfFile的流程時(shí),棧里見(jiàn)到的是返回地址DeleteFile和HMODUL module.也就是說(shuō)調(diào)用完畢后返回到了DeleteFile的入口地址.當(dāng)返回到DeleteFile時(shí),看到了ExitProcess的地址,也就是返回地址.和參數(shù)EAX,而EAX則是buffer.buffer存的是EXE的文件名.由GetModuleFileName(module, buf, sizeof buf)返回得到.執(zhí)行了DeleteFile后,就返回到了ExitProcess的函數(shù)入口.并且參數(shù)為0而返回地址也是0.0是個(gè)非法地址.如果返回到地址0則會(huì)出錯(cuò).而調(diào)用ExitProcess則應(yīng)該不會(huì)返回.
這段代碼的精妙之處在于:
1.如果有文件的HANDLE打開(kāi),文件刪除就會(huì)失敗,所以,CloseHandle(HANDLE(4));是十分巧妙的一手.HANDLE4是OS的硬編碼,對(duì)應(yīng)于EXE的IMAGE.在缺省情況下,OS假定沒(méi)有任何調(diào)用會(huì)關(guān)閉IMAGE SECTION的HANDLE,而現(xiàn)在,該HANDLE被關(guān)閉了.刪除文件就解除了文件對(duì)應(yīng)的一個(gè)句柄.
2.由于UnmapViewOfFile解除了另外一個(gè)對(duì)應(yīng)IMAGE的HANDLE,而且解除了IMAGE在內(nèi)存的映射.所以,后面的任何代碼都不可以引用IMAGE映射地址內(nèi)的任何代碼.否則就OS會(huì)報(bào)錯(cuò).而現(xiàn)在的代碼在UnmapViewOfFile后則剛好沒(méi)有引用到任何IMAGE內(nèi)的代碼.
3.在ExitProcess之前,EXE文件就被刪除了.也就是說(shuō),進(jìn)程尚在,而主線程所在的EXE文件已經(jīng)沒(méi)了.(WINNT/9X都保護(hù)這些被映射到內(nèi)存的WIN32 IMAGE不被刪除.)

Gary Nebbett果然是WIN系列平臺(tái)的頂尖高手之一.能寫(xiě)出如此代碼.獨(dú)辟蹊徑啊:)
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 安丘市| 新源县| 射洪县| 竹山县| 马边| 塔河县| 颍上县| 斗六市| 嘉义县| 天气| 灌阳县| 玉门市| 博野县| 林甸县| 临夏县| 孝感市| 古丈县| 湖南省| 龙州县| 城步| 古浪县| 来宾市| 陈巴尔虎旗| 乳源| 邵阳县| 张家口市| 丰台区| 南康市| 宜章县| 西华县| 名山县| 永寿县| 册亨县| 岳普湖县| 东光县| 宣威市| 武强县| 抚州市| 宾阳县| 海淀区| 巴彦淖尔市|