2022逆向挑战赛中一道简单的C逆向,由于作者能力有限先写了这一篇writeup,其他的还在弄懂中。。
比赛官网:https://decompetition.io/
github:https://github.com/decompetition/challenges-2021
baby-c
1 | ; This is the disassembly you're trying to reproduce. |
写完注释感觉好一些了,对自己的逆向燃起了一丢丢希望。
一共用到了两个变量:[rbp-0x15]
和 [rbp-0x14]
补充知识:__ctype_b_loc
函数
这个函数定义在 ctype.h标准库 ,参考这篇文章。
1 | v3 = __ctype_b_loc(); |
我们可以看到0x2000是isspace,可以使用它来实现。
运行一下:
1 | fr3y@ubuntu:~$ ./baby-c |
功能就是把首字母大写,其余小写。
不过刚刚作为一个废物发现自己并不能直接对着汇编写源码,所以用IDA反汇编了给出的可执行文件,稍微修改了一下。
1 |
|
运行结果:
Source | Score | Weight | Total |
---|---|---|---|
Test Cases | 100% | 20% | 20% |
ASM Diff | 100% | 60% | 60% |
Perfect Match Bonus | 100% | 20% | 20% |
Latest Submission | 100% |
IDA真的牛,我不如IDA…T_T
对于这道题我同样试了下ghidra,发现结果不如IDA清楚。。(
贴下这道题的源码:
1 |
|
确实用了isspace…
我确实是一个逆向小菜鸡。。。