病毒源代码Java_病毒代码_bat病毒代码_java病毒代码(5)
這里填入節的名字sn1(這個域有8個字節喲),并且給VirtualSize(有的地方稱作PhysicalSize)我的病毒的大小,這個不需要對齊。說到對齊,大家要清楚一個概念就是內存中的數據節對齊,文件中的數據文件對齊。
movecx,DWORDptr[esi38h]
moveax,DWORDptr[edi-28h0ch]
addeax,DWORDptr[edi-28h8h]
movecx,DWORDptr[esi38h]
invokeAlign1
movDWORDptr[edi0ch],eax
取得節對齊后,給節的VirtualAddress成員即在內存中裝入本節時的內存地址賦。方法是取得上一個節的起始地址加上上一節的未對齊的大小即VirtualSize還要經過節對齊,就可以了。
movecx,DWORDptr[esi3ch]
moveax,Virus_End-Virus_Start
invokeAlign1
movDWORDptr[edi10h],eax
現在我們該給節的SizeOfRawData給了。這個域是指節在文件中的大小,必須要經過文件對齊,那好,我們取得病毒大小,文件對齊后就行了
moveax,DWORDptr[edi-28h10h]
addeax,DWORDptr[edi-28h14h]
movDWORDptr[edi14h],eax
還有個節在文件中偏移的叫PointerToRawData,這個的計算方法是上一個節的SizeOfRawData加上上一個節的PointerToRawData。為什么呢?自己動腦殼吧。不動腦殼學會了也沒用。
movDWORDptr[edi24h],0E00000E0h
這個域是最好理解的了,成員名字叫Characteristics中文意思是屬性。有可讀,可讀可寫,可執行,可共享等等,比較重要的幾個屬性就是我列出的幾個,其中可共享是比較難理解的,講講,可共享屬性可以讓該節的數據或代碼拒絕寫時拷貝(CopyOnWrite),什么是寫時拷貝呢,比如記事本有10個實例在運行,Windows就給同樣的程序分配10個同樣大小的進程空間,微軟可沒那么傻,他為了能節省內存使用了一種技術叫寫入時拷貝。10個記事本同時運行就將10個記事本的進程空間映射到1個相同的物理內存上去,當有一個記事本想往里面寫入時,數據一變全變,就會影響了其他9個記事本,但是有了寫入時拷貝技術的干涉,就給那個寫入數據的記事本另外分配塊內存,將新分配的物理內存影射到記事本寫入的那塊進程空間地址上去,并且將原來的數據拷貝到這塊新的內存中去,這樣它再寫入時就是寫的新內存了,高興寫啥都不會影響其他的進程。如果還沒懂的去看看“windows核心編程”內存管理那部分。再回到我們的感染問題上來,如果你的節有共享屬性,就意味著它拒絕寫入時拷貝技術,就是那個寫數據的記事本,將會影響到其他9個記事本了,如果這是個變量的話,就是10個記事本都可以影響到的全局或稱共享變量了。
moveax,DWORDptr[edi0ch]
addeax,Start-Virus_Start
上面兩行代碼是將病毒的代碼入口點計算出來后頭有用,計算方法簡單,是我病毒開始執行地方的標號Start減去病毒開始的地方標號Virus_Start,你可能會有點不理解,這是因為病毒開始的地方不是我病毒開始執行代碼的地方,我病毒開始執行代碼的地方前面有一大段的數據,這些數據也是包含在代碼段里的。就是說我的病毒只有一個節.text。(代碼節叫。Text)-
本文來自電腦雜談,轉載請注明本文網址:
http://www.pc-fly.com/a/jisuanjixue/article-37949-5.html
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的病毒源代码Java_病毒代码_bat病毒代码_java病毒代码(5)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: instanceof java list
- 下一篇: java ssm框架详解_Java的SS