2015年1月23日 星期五

CRC轉ICS(三)-1

作者:kkmomo
來源:
備註:如果作者不希望被轉帖到此處,請告知,小弟會馬上刪帖。
-------------------------------------------------------------------------------------

CRC轉ICS(三)-1

150.2
早上剛好在維修沒辦法拍CE的圖
這裡來教用CE內建功能的做法
首先移到CRC要改的位址004EC443右鍵"Select current function"

 

它會自動幫你反白整個副程式區塊
雖然有時也有例外要自己判斷
不過大部分都正確



找到副程式的頭後,在該行右鍵"Break and trace instructions"

 

會跳出的小視窗,一般用預設值就好,或是自己增減最大跟蹤數、加停止條件
 

OK後會跳出另一個視窗
一開始可能都沒東西,表示還沒有引發事件執行到這區塊
既然名稱叫物品定位,就回遊戲中做一些跟這相關的事
一處發後,CE就會自動幫你紀錄下來



接著從004EC443往上找把+號一個一個打開來看有沒有call ptr

結果發現一個比較近的
004EC3DC - E8 B4F3FFFF           - call 004EB795
在上一篇中有提到,因為在level 1中的call直接看不確定會不會執行到所以先不予考慮
如果確定一定會經過的話選擇這個比較佳
不過為了配合上一篇,還是以同一個點來做說明
 

首先看到
004EC3A7 - E8 B0F2FFFF           - call 004EB65C
把他底下的節點展開到要的call ptr就好
然後點004EC3A7看他esp的值
這裡是esp=0028C684


接著點
004EB639 - FF 50 04              - call dword ptr [eax+04]
左邊看到ptr下層的第一個位址006F65B8
右邊看到esp=0028C674及ptr 00C22D88


得到這幾個位址就差不多完工了
offset = [level 0 call的esp] - [call ptr的esp] = 0028C684 - 0028C674 = +10
至於00C22D88及006F65B8,就是ptr的位址
在代碼中是
[disable]
00C22D88:
DD 006F65B8

沒有留言:

張貼留言