2013年8月26日 星期一

<跑跑卡丁車>CRC检测的研究!!! (轉)




From: http://www.ghoffice.com/bbs/read-htm-tid-41361-fpage-45-page-1.html


我知道文章是在廣海社區...
那邊要摳摳才可以辦帳號看。




是幾年前的東西了,而我也沒去研究跑跑。
所以我用我的語言簡單的說一下它文章的內容和bypass CRC就好。
想一探究竟的就買個號去廣海看下唄。

Q: 甚麼是CRC?
A: Cyclic redundancy check)是一種根據網路資料封包或電腦檔案等資料產生簡短固定位數驗證碼的一種雜湊函數,主要用來檢測或校驗資料傳輸或者保存後可能出現的錯誤 維基上就有

我們不需要去讓CRC檢測也就是說只需要跳過CRC就對了。
CE載入後隨便對一個地址用地址訪問,會發現有下面有幾條檢測代碼。

005F2E63    897C24 10          mov dword ptr ss:[esp+10],edi 
005FF390    0FB658 FF          movzx ebx,byte ptr ds:[eax-1] 
005FF396    8A70 01            mov dh,byte ptr ds:[eax+1] 
005FF39F    8A50 FC            mov dl,byte ptr ds:[eax-4] 
005FF3A7    0FB658 FA          movzx ebx,byte ptr ds:[eax-6] 

上面幾條都檢測過我們剛剛下訪問的地址,看一下也知道他就是CRC。


在看下面的幾條。(還有很多算法檢測)
005FF373    8B4424 48          mov eax,dword ptr ss:[esp+48]                ; 指向检测地址 
005FF377    53                  push ebx                                                                ;保存寄存器状态 
005FF378    55                  push ebp                                                                 
005FF379    56                  push esi 
005FF37A    57                  push edi 
005FF37B    894C24 10          mov dword ptr ss:[esp+10],ecx 
005FF38B    EB 03              jmp short trgame.005FF390                             
005FF38D    8D49 00            lea ecx,dword ptr ds:[ecx+00                         
005FF390    0FB658 FF          movzx ebx,byte ptr ds:[eax-1]                        ;算法开始 


可以發現到 : 005FF38B    EB 03              jmp short trgame.005FF390   
作者很可愛的將這個jmp直接跳到最後面,以為可以繞過CRC檢測,
但是沒幾秒就踢開了。


因為CRC還是要檢測,所以繞個彎,直接在內存注入內存鏡象。
先在函數頭下斷點。
005FF373    8B4424 48          mov eax,dword ptr ss:[esp+48]   

可以發現esp是指到檢測的地址,也就是說我們要在CRC檢測開始前,
修改eax讓他指向我們的注入的內存鏡象,這樣CRC就不會報錯了。

具體作法可以在005FF373前面找幾條沒用的代碼跳轉開,並修改EAX。
簡單用CE的儲存內存鏡象在注入到遊戲然後跳轉到我們注入的內存鏡象就可以實現CRC bypass 

當然現在還有HS的檢測... 以及CRC可能不只有一條在跑,
可是這方法確實值得看一下。

那我就說到這裡了
文章還有講很多東西






沒有留言:

張貼留言