小長(zhǎng)假閑的無聊,對(duì)macOS下的掃雷小程序進(jìn)行了簡(jiǎn)單的逆向俱诸。
其中安全帽只有10個(gè)错妖,用完了之后就需要在App Store進(jìn)行購買知押,同時(shí)「高級(jí)」和「自定義」功能也需要在應(yīng)用商店進(jìn)行購買才可以玩。
最終的效果就是無限安全帽以及「高級(jí)」功能可用魄宏,「自定義」功能和「高級(jí)」功能破解手法一樣秸侣,反匯編后的函數(shù)都緊挨著,就懶得去修改了,有興趣的可以參照本文的套路進(jìn)行自行修改味榛。
總的來說椭坚,掃雷這個(gè)小游戲作為單機(jī)的應(yīng)用程序可以歸類為最最簡(jiǎn)單的入門級(jí),破解手法就是連蒙帶猜搏色。當(dāng)然善茎,作為自己第一次完全獨(dú)立的去嘗試破解也著實(shí)花了一番氣力。
工具準(zhǔn)備
bbedit macOS下的一款編輯器频轿,可以識(shí)別二進(jìn)制的plist文件垂涯。如果不想使用這款工具,使用macOS自帶的plutil命令也可以達(dá)到目的航邢。
Hopper 跨平臺(tái)的反匯編靜態(tài)分析工具耕赘。
OK,這兩個(gè)第三方工具已經(jīng)可以了翠忠。
黑暗森林
先來看「安全帽」的破解思路鞠苟。首先「安全帽」是作為漢字出現(xiàn)在菜單欄中的,在內(nèi)部一定有一個(gè)對(duì)應(yīng)的英文字符串秽之,而這個(gè)字符串在代碼中很可能就是相關(guān)的函數(shù)或者變量名字或者是名字的一部分当娱。
使用bbedit打開/Applications/Minesweeper Deluxe.app/Contents/Resources/zh-Hans.lproj/MainMenu.nib文件。
打開之后是一個(gè)轉(zhuǎn)換好的xml格式的文件考榨。這個(gè)文件的具體格式可以參考下面這個(gè)文章:https://www.cclgroupltd.com/geek-post-nskeyedarchiver-files-what-are-they-and-how-can-i-use-them/
「cmd+f」搜索一下「安全帽」->「Find All」
可以看到「5個(gè)安全帽」對(duì)應(yīng)的就是「buy5Robot」跨细,好了,現(xiàn)在可以猜測(cè)與「安全帽」相關(guān)的符號(hào)在代碼中跟「Robot」相關(guān)河质。
下一步就是使用Hopper打開掃雷程序冀惭,在Hopper中搜索Robot相關(guān)的符號(hào)。
可以看到有好多Robot相關(guān)的函數(shù)和變量掀鹅,這里發(fā)現(xiàn)兩個(gè)方法-[GameState robot]和-[GameState setRobot]散休,從名字可以推斷是獲取或者設(shè)置安全帽的方法。
在-[GameState robot]中設(shè)置斷點(diǎn)乐尊,通過Hopper debug server進(jìn)行動(dòng)態(tài)調(diào)試戚丸。
發(fā)現(xiàn)rax中的返回值總是0(事先已經(jīng)消耗光了默認(rèn)的10個(gè)安全帽)。而且每次只要使用安全帽扔嵌,都會(huì)進(jìn)入到這個(gè)函數(shù)限府。通過Debug Console使用lldb臨時(shí)設(shè)置一下rax的值,發(fā)現(xiàn)果然安全帽的數(shù)量被修改了痢缎。
使用Hopper修改0x000000010006381處的指令胁勺,修改為
mov al, 0x1
nop
這樣和原來的指令一樣,占3個(gè)字節(jié)独旷。
這樣修改完成后署穗,每次按住Alt使用安全帽時(shí)獲取的安全帽的數(shù)量總是返回1寥裂。
保存修改后的二進(jìn)制文件,并且替換掉原來的二進(jìn)制程序即可蛇捌。
「高級(jí)」功能的破解也是類似抚恒,先找到跟「高級(jí)」相關(guān)的單詞expert,然后在Hopper中搜索expert络拌,找到方法-[minesweepermacAppDelegate startNewGameExpert:]
然后進(jìn)行分析俭驮,修改0x00000001000589c6位置處的指令為
jne -[minesweepermacAppDelegate startNewGameExpert:]+71
后續(xù)
可以參考網(wǎng)上其他公開的方法來破解。
本文只作記錄逆向?qū)W習(xí)使用春贸,破解完成后切勿公開混萝,支持正版軟件。