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 主站蜘蛛池模板: 湖北省| 青田县| 荥阳市| 德庆县| 邹城市| 社会| 平昌县| 玛多县| 贡觉县| 探索| 酉阳| 宜黄县| 津市市| 广汉市| 宽甸| 黑河市| 奎屯市| 荔波县| 东安县| 延吉市| 府谷县| 上栗县| 青海省| 三门峡市| 建水县| 甘孜| 清涧县| 察雅县| 丰镇市| 苗栗市| 新巴尔虎左旗| 长泰县| 辰溪县| 宁南县| 迁安市| 龙里县| 赤城县| 抚宁县| 巫山县| 台东市| 贡觉县|