本题目以 <5.2.2 方案二> 参赛
团队名称 : 中午吃什么
团长QQ : 923169932
·
公开的用户名和序列号:
User-Name : 4070382B95A4F0ED
Serial-Number : 47a62c6eb8a72031a27b89abc3d976f7
·
题目答案:
User-Name : KCTF
Serial-Number : 35090e1336f1d1e872ba798256db1bfb
.
.
.
设计说明:
一个Windows的CrakeMe,难度中上。
设计了一个简单的脚本解释器
脚本明文经过加密然后bin2hex转成数组存入全局变量
验证算法为:
文本 = 用户名 + "KCTF2023"
文本 = 自定义异或加密(文本)
文本 = base64(文本)
文本 = 小写32位MD5(文本)
最后判断文本等于序列号则为成功
成功条件为:
小写32位MD5(base64(自定义异或加密(用户名 + "KCTF2023"))) == 序列号
破解难点:
有大量无效代码干扰,增加程序体积,有2个假验证算法干扰破解者,由于函数过大IDA F5会失败。
例如:if(xxx && 1 + 1 == 3) printf("Success")
例如:if(xxx && 1 + 1 == 3) printf("Error")
题目和源码均已上传附件,运行图如下:
·
加密前的脚本明文:
延时(
25
)
控制台输出(
" \n"
)
延时(
25
)
控制台输出(
" _oo0oo_ \n"
)
延时(
25
)
控制台输出(
" o8888888o \n"
)
延时(
25
)
控制台输出(
" 88"
.
"88 \n"
)
延时(
25
)
控制台输出(
" (| -_- |) \n"
)
延时(
25
)
控制台输出(
" 0\ = /0 \n"
)
延时(
25
)
控制台输出(
" ___/`---'\___ \n"
)
延时(
25
)
控制台输出(
" .'\.\| |/./'. \n"
)
延时(
25
)
控制台输出(
" / \.\|| : ||/./ \ \n"
)
延时(
25
)
控制台输出(
" / _||||| -:- |||||- \ \n"
)
延时(
25
)
控制台输出(
" | | \.\.\ - /././ | | \n"
)
延时(
25
)
控制台输出(
" | \_| ''\---/'' |_/ | \n"
)
延时(
25
)
控制台输出(
" \ .-\__ '-' ___/-. / \n"
)
延时(
25
)
控制台输出(
" ___'. .' /--.--\ `. .'___ \n"
)
延时(
25
)
控制台输出(
" ."
" '< `.___\_<|>_/___.' >' "
". \n"
)
延时(
25
)
控制台输出(
" | | : `- \`.;`\ _ /`;.`/ - ` : | | \n"
)
延时(
25
)
控制台输出(
" \ \ `_. \_ __\ /__ _/ .-` / / \n"
)
延时(
25
)
控制台输出(
"=====`-.____`.___ \_____/___.-`___.-'===== \n"
)
延时(
25
)
控制台输出(
" `=---=' \n"
)
延时(
25
)
控制台输出(
" \n"
)
延时(
25
)
控制台输出(
" 佛祖保佑 永无BUG \n"
)
延时(
25
)
控制台输出(
" 看雪 KCTF2023年度赛 \n"
)
延时(
25
)
控制台输出(
" 出题战队:中午吃什么 \n"
)
延时(
25
)
控制台输出(
" \n"
)
延时(
25
)
控制台输出(
" \n"
)
延时(
25
)
控制台输出(
"请输入用户名:\n--> "
)
文本变量_读取单行控制台输入($变量_用户名)
延时(
25
)
控制台输出(
"请输入序列号:\n--> "
)
文本变量_读取单行控制台输入($变量_序列号)
假验证算法
1
($变量_用户名, $变量_序列号)
假验证算法
2
($变量_用户名, $变量_序列号)
文本变量_按长度跳转($变量_序列号, !
=
,
32
, <标记_序列号长度不正确>)
文本变量_赋值变量($变量_临时文本, $变量_用户名)
文本变量_追加文本($变量_临时文本,
"KCTF2023"
)
文本变量_加密_自定义异或($变量_临时文本)
文本变量_加密_BASE64($变量_临时文本)
文本变量_加密_MD5($变量_临时文本)
文本变量_相等跳转($变量_临时文本, $变量_序列号, <标记_匹配>)
跳转到标记(<标记_不匹配>)
设置标记(<标记_序列号长度不正确>)
延时(
25
)
控制台输出(
"error\n\n\n"
)
控制台命令(
"pause"
)
结束进程()
设置标记(<标记_匹配>)
延时(
25
)
控制台输出(
"Success GoodJob!\n\n\n"
)
控制台命令(
"pause"
)
结束进程()
设置标记(<标记_不匹配>)
延时(
25
)
控制台输出(
"error\n\n\n"
)
控制台命令(
"pause"
)
结束进程()
延时(
25
)
控制台输出(
" \n"
)
延时(
25
)
控制台输出(
" _oo0oo_ \n"
)
延时(
25
)
控制台输出(
" o8888888o \n"
)
延时(
25
)
控制台输出(
" 88"
.
"88 \n"
)
延时(
25
)
控制台输出(
" (| -_- |) \n"
)
延时(
25
)
控制台输出(
" 0\ = /0 \n"
)
延时(
25
)
控制台输出(
" ___/`---'\___ \n"
)
延时(
25
)
控制台输出(
" .'\.\| |/./'. \n"
)
延时(
25
)
控制台输出(
" / \.\|| : ||/./ \ \n"
)
延时(
25
)
控制台输出(
" / _||||| -:- |||||- \ \n"
)
延时(
25
)
控制台输出(
" | | \.\.\ - /././ | | \n"
)
延时(
25
)
控制台输出(
" | \_| ''\---/'' |_/ | \n"
)
延时(
25
)
控制台输出(
" \ .-\__ '-' ___/-. / \n"
)
延时(
25
)
控制台输出(
" ___'. .' /--.--\ `. .'___ \n"
)
延时(
25
)
控制台输出(
" ."
" '< `.___\_<|>_/___.' >' "
". \n"
)
延时(
25
)
控制台输出(
" | | : `- \`.;`\ _ /`;.`/ - ` : | | \n"
)
延时(
25
)
控制台输出(
" \ \ `_. \_ __\ /__ _/ .-` / / \n"
)
延时(
25
)
控制台输出(
"=====`-.____`.___ \_____/___.-`___.-'===== \n"
)
延时(
25
)
控制台输出(
" `=---=' \n"
)
延时(
25
)
控制台输出(
" \n"
)
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!
最后于 2023-10-1 14:14
被kanxue编辑
,原因: