buuctf [GWCTF 2019]pyre

前言:补的最后一篇笔记。(两个晚上终于补完 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  吃饭 !睡觉! 休息一天呗【奖励自己】。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值