前言:补的最后一篇笔记。(两个晚上终于补完 T^T)
笔记,自我感觉,是相对于我目前这种程度的reverse 一种完美的解释。
吐槽ing:
最开始,学reverse (入坑时间:2024.7.24正式开始打ctf reverse)完全看不懂,完完全全看着别人的wp、博客等【没有人带[不重要]】
更重要的是!!! wp等 基本都是python写的脚本。。。 C的很少。 沃趣,虽然python写着简单,,但是咱python,,,不太熟练,,,
没事T^T
C咱熟练一些,那咱就用C代码去实现。能跑出flag的代码就是好代码 T^T
常规:下载 解压 查壳。
OK,沃趣,说啥来啥,,,
.pyc是.py的保护格式>>>使用在线python反汇编就可以使 .pyc>>>.py
咱用sublime来瞅瞅分析看看。
正向分析:
程序逻辑:
猜测>>>先提示 啊啊啊,欢迎来到\(`Δ’)/【呸,还Re World O.o?】
再输入 your flag~~~ (ꐦÒ‸Ó)你个老六
然后 通过 flag的长度进行 循环一 再进行 循环二
最后输出经过 往后异或操作 的code。【code长度和input1相等。】
逆向C脚本:
哎,就是不用python写 ε=ε=(>Д<)ノノ!!
C脚本思路:
逆向还原,通过code 往前推,去得到input1的值。
即code 要先经历 循环二 再经历循环一 >>>最终得到input1【也就是flag】
循环二注意点:(关键循环/难点循环)
code最后一位没有进行异或操作(此时值不改变,保留) 所以>>>>倒数第二位往前推至code[0]
循环一注意点:(看不懂,,,直接抄,)【说笑ing】
进行还原,逆推,所以【(input1[i] + i】应该是>>> 【code[i]-i】
128猜测表示为ASCII码的最后一位,推测,input1的值肯定是在ASCII码表中。
((input1[i] + i) % 128 + 128) % 128
可以化简 【但也没必要,因为并不影响最终结果。】主打一个怎么来,怎么回去!!o.O? O.o?
C脚本:
(吃教训T^T>>>先把code统一了来T^T)
OK!
到此,笔记补完啦~终于不用熬夜了 T^T 吃饭 !睡觉! 休息一天呗【奖励自己】。