一、首先咱們將該文件放到OD插件文件夾裏而後打開od加載發現不能加載。工具
二、此時咱們將該文件拖到OD,首先相似與exe文件的00401000咱們先走到10001000處,而後查找字符串加密
三、咱們在這找到關鍵跳轉,在這咱們有兩處跳轉須要注意,這兩處跳轉實現的狀況下最終到的是同一個位置,所以咱們將跳轉語句直接改爲jmp到該位置,這樣咱們就實現了最終的目的插件
一、patch的原理很簡單,在原先的代碼實現過程當中,EP先將加密的OEP代碼解碼,而後在跳轉到OEP處3d
二、patch運用的是一個洞穴代碼,這個洞穴代碼實現過程是先將解碼後原先跳到OEP的跳轉改跳到一個文件空白區域(即爲洞穴區域),在所跳轉的位置設置修補代碼實現所預期的效果,最後在修補代碼下面加上跳到OEP的代碼實現內嵌patchblog
三、洞穴代碼的設置一般有3種:設置到文件的空白區域、擴展最後節區後設置、添加新的節區後設置字符串
四、在這咱們須要注意一點:有些文件經過校驗和計算方法來驗證特定區域的代碼是否被修改,所以咱們在修改代碼以後必需要修改校驗值或者比較部分。get
五、下面咱們用patch的思路分析一個程序,首先就是查殼,發現是upx的殼class
六、緊接着咱們能夠用esp定律法找oep,這裏首先單步,對應esp數據窗口跟隨,而後下硬件訪問斷點,重載後運行到達以下位置。原理
七、而後咱們找到oep位置爲00448bfd,在此作記錄擴展
八、咱們打開軟件查看有用字符串發現「失敗」
九、咱們查找字符串找到失敗的字符串
十、這裏很簡單就能看到關鍵跳轉,咱們所須要作的知識將je改爲jne,咱們記下該處地址004010f5,對應機器碼爲0F84 22000000,而jne對應機器碼只需將84改爲85
十一、咱們回到以前跳向oep的代碼位置,發現下面有一段空白區域,這裏咱們能夠用來寫洞穴代碼。首先將jmp到oep的代碼改爲如圖所示
十二、編輯該處代碼,將004010f5處的數據中0f84改爲0f85,分別有如下兩種方式:
mov byte ptr ds:[004010F6],85
mov dWOrd ptr ds:[004010F5],0022850f
至於爲何,應該不必多作解釋吧。
1三、緊接着咱們的修補代碼完成,以後咱們須要從新跳回到oep,如圖
1四、這樣,咱們就將內嵌補丁製做完成,保存修改後咱們看下效果如圖:
一、本實例所用工具:OD、PEID
二、實例連接:連接:http://pan.baidu.com/s/1bpx8ybd 密碼:cxf8