懷著無比激動的心情開始學習軟件安全與逆向分析。
今天學習一下Mac 環(huán)境下 使用HT-Editor 破解
前言:
準備工作要做好:clang 安裝—(Xcode安裝過的應(yīng)該都會有)
homebrew: 工具管理套。用過都說好,很方便的裝各種工具。
brew intsll xxx 安裝軟件包
brew update 更新
brew upgrade
brew remove 移除
CommandLineTools 這個東西如果沒有安裝的話 請安裝一下。不然會有彩蛋哦
HT Editor :是一個開源的跨平臺的十六進制編輯器,它的功能還有匯編、反匯編功能,支持x86,x64,ARM,Power等多種處理器。并且支持Windows PE文件,Linux FLE格式 Mac 的Mach-o文件。下載可以去官網(wǎng)下載http://hte.sourceforge.net/ 可能得需要科學上網(wǎng)。建議使用HomeBrew 安裝:
brew install ht
編寫一個c的文件
vim cm.c
編寫
#include <stdio.h>
int main(){
int secret = 0;
printf("please enter the secret number \n");
scanf("%d",&secret);
if (secret!=123) {
printf("incorrect secret num\n");
return 0;
}
printf("hello world! \n\n\n");
return 0;
}
:wq 保存
編譯可執(zhí)行文件
clang cm01.c -o cm01
使用ht 進行調(diào)試匯編代碼
認識幾條匯編指令
///////////////////////////////////////////////
jz指令:跳轉(zhuǎn)指令,可以理解為如果簽名比較指令的結(jié)果相同則跳轉(zhuǎn)到指定的地址,如果不相等,就不跳轉(zhuǎn),繼續(xù)執(zhí)行它下面的指令;
jnz指令:與jz指令正好相反,不相等跳轉(zhuǎn);
jmp指令:不管任何情況下都跳轉(zhuǎn);
call指令:調(diào)用過程指令;一般是對應(yīng)高級語言中的函數(shù)調(diào)用。
///////////////////////////////////////////////
終端 ht,命令即可打開 ht-editor ,

這就是主界面
下面的菜單按鈕 1-10 對應(yīng)按鈕 F1-F10(有的需要fn+F1 --fn+F10);

使用tab鍵 移動光標 選擇我們的cm01 回車

打開文件的16進制界面,我們使用fn+F6 (mode)來打開反匯編界面。


Mach-O/image 與disasm/x86的區(qū)別
Mach-O/image :是根據(jù)Mach-O文件格式對代碼段進行反匯編。
disasm/x86 :整個文件當成二進制文件 從頭開始反匯編
此時此刻,我們要分析他的關(guān)鍵跳,可以使用fn+F7搜索功能,把模式mode選擇為 display:regex 輸入incorrect


回車之后會跳轉(zhuǎn)到當前的地址行 10000ef6
這句匯編代碼的意思是:將100000f88這個地址放到rdi寄存器,100000f88中的內(nèi)容是一個以0結(jié)尾的字符串(strz)內(nèi)容是"incorrect secret num" ht自動將內(nèi)容空格換成了下劃線。

100000f88 這個地址就看到 這個字符串

那上面的這個地方 就是執(zhí)行的判斷跳轉(zhuǎn)。
100000ef0 處的跳轉(zhuǎn)就是跳向成功的關(guān)鍵跳;也就是我們要修改的地方。

使用control +a 修改這里的匯編代碼 。
jnz loc_100000f13

這里修改完成之后會有一個變紅的85 (實際上是一個字節(jié)的機器碼)。但是此時的修改沒有保存到磁盤文件 按fn+F2進行保存。保存完成之后 我們可以在試試這個程序;


判斷邏輯正好相反了。因為我們改的匯編跳轉(zhuǎn)jnz;
我們將 jnz 修改為jmp 試試效果。當然是無論我們輸入的是什么數(shù)字。輸出都是 hello world
到此我們就完成了環(huán)境的搭建 、第一個小程序的破解。
千里之行始于足下,你一定要努力,但是千萬別著急。