2023年12月13日發(作者:不亢不卑)

破解XXX游戲驅動保護過程總結
剛剛接觸軟件破解還有驅動編寫,好多東西都不熟,折騰了好久,把中間可能對大家有價值的過程記錄下來。
剛開始碰到的問題就是不能內核調試,因為要寫驅動,需要用到。一般禁用內核調試都是在驅動里調用KdDisableDebugger,往上回溯一個
函數,基本上就是驅動檢測禁用是否成功的代碼,否則就是一個循環不停的調用KdDisableDebugger函數。
我的做法是修改KdDisableDebugger代碼,這樣不管什么時候被調用到,內核調試都不能被禁用,無非就是驅動那個死循環會導致機器卡死
罷了,在KdDisableDebugger上設置一個斷點,中斷后,就把KdDisableDebugger和驅動的代碼都改掉,然后禁用斷點,繼續內核的執行。
我用的是下面這個命令做這段話說的事情:
bp KdDisableDebugger"eb nt!KdDisableDebugger+26 75;eb nt!KdDisableDebugger+41 75;ebTesSafe+5069 74;eb TesSafe+2703 75;bd
0;g"
然后就是把驅動里hook的函數恢復,為了找到內核ssdt表里被hook的函數,看了網上的資料,有工具可以做這個事情,一是那些工具我都沒
有用過,不大會用,二是我想把內核里具體被inline hook的地址找出來,所以我就用了下面這個windbg腳本做這個事情,運行腳本之前需要
記下eax, ebx, ecx的值,等腳本運行完成以后恢復。當然也可以用windbg里的偽寄存器,但是語法還有點不熟,就直接用現成的寄存器了,
在啟動游戲之前,先dump一下:
.logopen c: # 因為dump出來的東西比較多,就放到一個log里
r ebx = 0 # 計數器
# 遍歷ssdt表,把里面每個函數的匯編代碼都dump出來,因為不知道每個函數的大小,所以每個函數都dump 1000行。
r ecx=poi(nt!KeServiceDescriptorTable)
.for (r eax=ecx;@eax < ecx+0x474; reax=eax+4; rebx=ebx+1) { r ebx; u poi(@eax) L1000}
# 保存log
.logclo
接下來,游戲啟動之后,再dump一次,用kdiff3做個對比就知道哪些函數被修改過了。
看到被hook的函數以后,加上網上的資料,主要是參考看雪里的這篇資料:
但是悲劇的是,有的時候修改了TX的代碼,機器直接就重啟了,參考看雪里另外一篇文章,把重啟這個問題也解決了:
很多都是大俠們已經研究了很透的東西,只是我比較愚笨,花了很多時間才搞明白整個過程,完整驅動的代碼可以在我這個求助帖里找到:
本文發布于:2023-12-13 13:10:41,感謝您對本站的認可!
本文鏈接:http://m.newhan.cn/zhishi/a/1702444241245239.html
版權聲明:本站內容均來自互聯網,僅供演示用,請勿用于商業和其他非法用途。如果侵犯了您的權益請與我們聯系,我們將在24小時內刪除。
本文word下載地址:破解XXX游戲驅動保護過程總結.doc
本文 PDF 下載地址:破解XXX游戲驅動保護過程總結.pdf
| 留言與評論(共有 0 條評論) |