1.安装Clang(如已安装xcode则不需要)
首先打开一个终端,点击Launchpad->其他->终端,在终端中输入clang
并回车,系统会自动检测到我们有没有安装Clang编译器,然后会提示我们是否下载并安装命令行开发者工具。
2.安装 HT editor
可尝试在HT edtior 官网安装 http://hte.sourceforge.net(官网只提供window版本二进制文件,mac上需 ./configure&&make)
本人不建议以上做法
建议在 https://www.cakebrew.com 网站下载 Cakebrew (以后也方便管理)找到ht 安装。
3.Homebrew
在终端中运行 $ /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)
......
会要求输入password 输入电脑密码安装
4.创建文件夹CrackMe01
在终端 $ cd CrackMe01
创建CrackMe 的源代码文件 cm01.c:
$vim cm01.c
按 “a”进入编辑模式,
输入代码
#include <stdio.h>
int main()
{
int secret = 0;
printf("Please enter the secret num:");
scanf("%d",&secret);
if (secret != 123)
{
printf("Incorrect secret num.\n");
return 0;
}
printf("Hello world!\n");
return 0;
}
(学过c语言便可以分析代码)输入完后按"ese"退出编辑模式,输入 :wq 保存并退出vim 若编译错误可重新进行。
然后用Clang 编译 $clang cm01.c -o cm01
分别尝试输入 123 和345
可以得到你分析代码认为得到的结果。
5.使用HT 破解(使得无论输出123 或345 得到的结果都是Hello World)
首先了解
jz
指令:跳转指令,可以理解成如果前面比较指令的比较结果相同则跳转到指定的地址,如果不相等就不跳转,继续执行它下面的指令;jnz
指令:与jz
指令正好相反,不相等则跳转;jmp
指令:不管任何情况都会进行跳转;call
指令:调用过程指令,一般对应高级语言中的函数调用。
开始对生成的文件进行操作 ==
命令行内运行 如图所示
得到
mac上 fn+f3 search Clang cm01.c生成的cm01文件
切到反汇编界面 按fn+f6 得到select mode 对话框
选择 mach-0/image得到
之前知道jz指令为相等跳转指令而jnz为不相等跳转指令
找到jz指令那一行 快捷键control+a
修改jz.......... 改为jnz.........将得到红色的数字85 按fn+f2保存 文件保存后红85消失。
接下来可CrackMe 程序,得到的便是无论输入123或345都是得到hello world的结果。