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 主站蜘蛛池模板: 黄浦区| 蓝山县| 康定县| 贡嘎县| 万安县| 新和县| 镇沅| 稻城县| 溧水县| 黑水县| 灵山县| 景洪市| 潍坊市| 南靖县| 荥经县| 鸡西市| 卢湾区| 永平县| 南开区| 库尔勒市| 石泉县| 辽阳市| 云南省| 开封县| 桐柏县| 青州市| 大埔区| 加查县| 隆林| 都兰县| 滦平县| 忻州市| 宽城| 新化县| 楚雄市| 朝阳区| 区。| 吉木乃县| 吉安市| 徐闻县| 成安县|