日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

针对某游戏保护DebugPort清零的一次逆向

發(fā)布時間:2024/4/11 编程问答 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 针对某游戏保护DebugPort清零的一次逆向 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
作 者: 悲歌
首先還是先了解一下DebugPort吧,百度之后得到了如下結(jié)果
?-------------------------------此處轉(zhuǎn)貼------------------------------------
每個進(jìn)程都有一個 數(shù)據(jù)結(jié)構(gòu) ,EPROCESS,這個結(jié)構(gòu)是在內(nèi)核里面的,系統(tǒng)用來標(biāo)識和管理每一個win進(jìn)程的基本數(shù)據(jù)結(jié)構(gòu).
?
這個結(jié)構(gòu)中包含了一個重要的字段,DebugPort,如果一個進(jìn)程不在被調(diào)試的時候那么就是NULL,否則他是一個指針,win前,這個成員保存的是用于接收調(diào)試事件的LPC端口對象指針.發(fā)生調(diào)試時,系統(tǒng)會向這個端口發(fā)送調(diào)試信息.
?
Winxp下因為使用了專門用于調(diào)試的內(nèi)核對象DebugObject,所以debugport指向的是一個DebugObject對象,不管是指向LPC端口還是指向調(diào)試對象,雖然類似不同吧~~~
但是他們的作用都是用來傳遞調(diào)試事件的,所以debugport中指向的對象,我們就叫做調(diào)試端口
?
張奎銀大牛,告訴了我們,這個端口是鏈接調(diào)試器進(jìn)程和被調(diào)試進(jìn)程的紐帶~
被調(diào)試程序的事件由這個端口發(fā)送到調(diào)試器進(jìn)程的。??
(so,某些產(chǎn)品,為了不被調(diào)試就一直對這個字段寫入0,導(dǎo)致調(diào)試事件無法發(fā)送,造成了調(diào)試器像傻子一樣~~)
-----------------------------------------------------------
?
調(diào)試內(nèi)核,最先想到的肯定是windbg,于是LZ碰到了第一個問題,那個T什么的保護(hù)禁止了雙機(jī)調(diào)試。下面給出過掉防止雙機(jī)調(diào)試的方法。
?
KDCOM.dll:KdReceivePacket? //這兩個是COM串口的接受和發(fā)送數(shù)據(jù)
KDCOM.dll:KdSendPacket????? //主要用來方式別人雙機(jī)調(diào)試
上面兩個函數(shù)幾乎可以忽略掉,VirtualKD這個工具自己實現(xiàn)了COM通信替代了上面兩個函數(shù)。
?
然后是。。。是。。。
KdDisableDebugger,ok過掉對這個函數(shù)的調(diào)用應(yīng)該就可以進(jìn)行雙機(jī)調(diào)試了。
啟動 虛擬機(jī) 調(diào)試模式,windbg對KdDisableDebugger下斷點(diǎn),然后運(yùn)行游戲。
發(fā)現(xiàn)游戲登陸之前windbg就已經(jīng)斷下來了,eb指令對KdDisableDebugger第一行代碼寫入C3(ret)
?

然后F8單步執(zhí)行找到調(diào)用KdDisableDebugger處
?
仔細(xì)看代碼不難發(fā)現(xiàn)這是一段循環(huán)調(diào)用KdDisableDebugger的代碼。eb對上圖中edcaa6d5出寫入74過掉此處
F5跑起來會再次斷下來,單步執(zhí)行返回到另一處調(diào)用
?
?
尾部mov???? dword ptr [ecx],eax這句很關(guān)鍵,不能讓他執(zhí)行,一旦執(zhí)行windbg就失去通信了
對上圖中edcaa803位置寫入75然后F5跑起來? 再次斷下來發(fā)現(xiàn)調(diào)用位置還是上面這里。
修改CALL EAX上面那行也就是edcaa7c4位置寫入75再次跑起來就不會再斷下來了 游戲正常運(yùn)行。
但是游戲登陸以后,保護(hù)會出現(xiàn)錯誤重新加載一次保護(hù),然后按照上面的方法重新過一次就可以了。
?
接下來就等游戲跑起來以后windbg手動斷下來,命令行鍵入!process 0 0回車
得到當(dāng)前所有進(jìn)程的EPROCESS對象地址
?
注意這里完成后要讓虛擬機(jī)盡快跑起來,中斷久了游戲會和服務(wù)器斷開連接。
好了會找到兩個游戲進(jìn)程,接下來虛擬機(jī)里面打開任務(wù)管理器,查看當(dāng)前游戲的進(jìn)程ID轉(zhuǎn)換16進(jìn)制
?
?
轉(zhuǎn)換后就是上面獲取到的CID:0370 www.2cto.com
然后對PROCESS 85f5d228 這個地址+BC處下數(shù)據(jù)寫入斷點(diǎn),+bc就是DebugPort地址了
指令ba w 4[85f5d228 +bc]?? //ba指令格式ba Access Size [地址] Access為訪問方式Size為監(jiān)控訪問位置大小
?
然后跑起來,立馬就會斷下來,這里注意多跑幾次,有兩個地方做了清零如下圖
第一處:
?
?
?
第二處:
?
?
?
xor???? ecx,ecx
xchg??? ecx,dword ptr [eax]
?
還有。。。
?
xor???? eax,eax
xchg??? eax,dword ptr [edi]
這兩個地方。
好了位置找到了,收工。

總結(jié)

以上是生活随笔為你收集整理的针对某游戏保护DebugPort清零的一次逆向的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。