ASCII_CRACK
https://crackmes.one/crackme/69a806c17b3cc38c80464e06
1. 下载解压
zip解压密码:crackmes.one
2. IDA free
先看字符串

再看结构

3. GDB
- 看到结构图后,基本能猜到,关键分支
1 2 3 4 5 6 7 8 9 10
| 0x55555555644b test al, al
# 比较字符串 0x555555556469 call _Z6verifyNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEE ; verify(std::string)
# 核心编码函数 0x555555556413 call _Z6encodeci
|
- 先跑下
1 2
| ./ascii abcd Try again! You can do it!
|
- 跑gdb
1 2 3 4 5 6 7 8 9 10 11
| # 这个断点可以看到两个字符串在比较 b *0x555555556469
# 这个断点,决定了是做encode,还是比较编码后的结果 b *0x55555555644b
# 这里是对单个char做转化 b *0x555555556413
r abcd
|
4. 编码逻辑说明
1 2 3 4 5 6 7 8
|
s = "IYJ~U4cQ1Q[<mL[(U;`'Ynk/M-i" result = ''.join(chr(ord(c) - (6 - i)) for i, c in enumerate(s)) print(result)
|
5. 验证结果
1
| ./ascii CTF{S3cR3T_AsSc1_Fl4g}{@_@}
|