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