PE病毒就是那種專門搞Windows下PE格式文件的病毒。這種病毒基本上都是用Win32匯編寫出來的。如果你真想搞懂病毒技術,那PE病毒是繞不開的坎兒。只有玩過PE病毒,才知道啥叫真正的牛X技術。
寫一個Win32病毒有幾個關鍵點:
API函數得自己找,不能直接引用DLL庫。意思就是你得想辦法找到API函數的地址,然后直接調用那個地址。
講個背景知識:當PE加載器把程序跑起來之后,堆棧頂的那個地址其實是程序的返回地址,肯定在Kernel里面!所以我們可以順著這個地址往下找,一直找到模塊的起始位置。判斷條件有兩個:PE頭不能超過4096字節,還有PE header里的ImageBase值應該和當前指針一致。
病毒一般沒有.data段,所有變量和數據都塞在.code段里。
還有一個關鍵點是偏移地址的重定位。比如你可以這樣寫:
Call delta
delta:
pop ebp
sub ebp, offset delta
這樣一來,變量var1的真正偏移地址就是var1 + ebp。
想寫Win32病毒你還得了解PE文件格式。
再來說說病毒怎么感染別的文件。常見方法是在目標文件里加一個新的節區(section),在里面放上病毒代碼,還有執行完病毒代碼后跳回原程序的那一段代碼。然后修改PE頭里的入口地址(AddressOfEntryPoint),讓它指向新添加的這個節區,這樣程序一運行就先執行病毒代碼了。
當然還有其他感染方式,比如把病毒代碼分散插入到各個節之間的空隙里。這就不一一說了。
PE文件長啥樣?大概結構就是:
- DOS MZ頭
- DOS stub
- PE header(包含Signature、FileHeader、OptionalHeader)
- 各種節區(Section 1 ~ n)
- 節表(Section table)
PE header其實分成三部分:
1. 簽名字符串PE 主站蜘蛛池模板: 察雅县| 台南市| 盐津县| 中超| 镇康县| 建阳市| 麟游县| 杨浦区| 阿合奇县| 兴和县| 唐山市| 保靖县| 汝城县| 鸡西市| 临漳县| 青州市| 石河子市| 惠州市| 乌拉特前旗| 张家界市| 镇康县| 琼海市| 孝感市| 洛浦县| 伊吾县| 永昌县| 甘孜县| 中方县| 岢岚县| 黄骅市| 左权县| 万宁市| 黑水县| 遂昌县| 元阳县| 廉江市| 普安县| 望城县| 昭苏县| 固原市| 广平县|
寫一個Win32病毒有幾個關鍵點:
API函數得自己找,不能直接引用DLL庫。意思就是你得想辦法找到API函數的地址,然后直接調用那個地址。
講個背景知識:當PE加載器把程序跑起來之后,堆棧頂的那個地址其實是程序的返回地址,肯定在Kernel里面!所以我們可以順著這個地址往下找,一直找到模塊的起始位置。判斷條件有兩個:PE頭不能超過4096字節,還有PE header里的ImageBase值應該和當前指針一致。
病毒一般沒有.data段,所有變量和數據都塞在.code段里。
還有一個關鍵點是偏移地址的重定位。比如你可以這樣寫:
Call delta
delta:
pop ebp
sub ebp, offset delta
這樣一來,變量var1的真正偏移地址就是var1 + ebp。
想寫Win32病毒你還得了解PE文件格式。
再來說說病毒怎么感染別的文件。常見方法是在目標文件里加一個新的節區(section),在里面放上病毒代碼,還有執行完病毒代碼后跳回原程序的那一段代碼。然后修改PE頭里的入口地址(AddressOfEntryPoint),讓它指向新添加的這個節區,這樣程序一運行就先執行病毒代碼了。
當然還有其他感染方式,比如把病毒代碼分散插入到各個節之間的空隙里。這就不一一說了。
PE文件長啥樣?大概結構就是:
- DOS MZ頭
- DOS stub
- PE header(包含Signature、FileHeader、OptionalHeader)
- 各種節區(Section 1 ~ n)
- 節表(Section table)
PE header其實分成三部分:
1. 簽名字符串PE 主站蜘蛛池模板: 察雅县| 台南市| 盐津县| 中超| 镇康县| 建阳市| 麟游县| 杨浦区| 阿合奇县| 兴和县| 唐山市| 保靖县| 汝城县| 鸡西市| 临漳县| 青州市| 石河子市| 惠州市| 乌拉特前旗| 张家界市| 镇康县| 琼海市| 孝感市| 洛浦县| 伊吾县| 永昌县| 甘孜县| 中方县| 岢岚县| 黄骅市| 左权县| 万宁市| 黑水县| 遂昌县| 元阳县| 廉江市| 普安县| 望城县| 昭苏县| 固原市| 广平县|