
破解經常需要改跳轉,跳到指定地點.
000000010036d5f5 je sub_10036c970+3211. 指令代碼: 0F 84 00 00 00 00
這句話的含義是: je 0x10036d5fb 如果相等就是跳到下一行
如果我想將其修改到sub_10036d6d3地址怎么做呢?
我所記得的是je指令編碼是74。 jne指令是75.
而上面的指令編碼是 :0F 84 00 00 00 00 很奇怪?跳到下一行的指令應該是 74 00才對
000000010036d809 je loc_10036d97d (分析: 10036d97d - 10036d809 = 0x174(包含指令長度6))
指令代碼: 0F 84 6E 01 00 00
000000010036d811 je loc_10036d829。(分析: 10036d829 - 10036d811 = 0x18 (包含指令長度2)).
指令代碼: 74 16
=========
總結一點:
sub_xxxxx 的地址位置以函數起始地址開始計算. loc_xxxxx的地址以當前指令位置開始計算
0F 84 6E 01 00 00 因為要跳的距離大於1個字節(FF)所以用 0F 84表示 je.
6E 01 00 00 表示以當前指令地址的結尾處開始算起第016e處就是他的地址,
也就是: 10036d809+6(指令長度) + 016e = 0x10036d97d. 剛好吻合.
歸納:
je 長跳: 0F 84 + 4字節數據
jne長跳: 0F 85 + 4字節數據
je短跳: 74 + 1字節數據
jne短跳: 75 + 1字節數據
=============================
回到之前的問題:
je 0x10036d5fb 編碼: :0F 84 00 00 00 00
改為: je sub_10036d6d3
編碼應該是:
0x10036d5f5 + 6 + x = 0x10036d6d3
x = 0x10036d6d3 -6 - 0x10036d5f5
x = 0xd8
結果:0F 84 D8 00 00 00

完美改造.
說明:這是我在破解010Editor編輯器里的一個點,改完跳轉指令,運行結果:

還沒有完全破解, 以后有時間繼續吧.
冷靜分析: 導出為pdf 從失敗地方開始向上走, 總有一個分支,是區別成功和失敗的.

破解成功:

