BUUCTF Reverse pyre

这道题算是比较简单的逆算法了,初入逆向,想借这个题来理理自己的思路

拿到附件,发现是一个.pyc文件,这里简单介绍一下

详细介绍可以参考大佬博客:什么是pyc文件,把python的py文件编译成pyc文件,把pyc文件反编译成py文件。以及python编译的如何设置不生成pyc文件_点亮~黑夜的博客-CSDN博客_pyc文件

pyc文件:由Python文件经过编译后所生成的文件,是一种字节码,所以我们直接查看就会是一种乱码的状态,对源码会起到一定的保护作用,但是这种字节码是能够进行反编译的。

所以这里直接搜索在线反编译网站:python反编译 - 在线工具 得到:

print 'Welcome to Re World!'
print 'Your input1 is your flag~'
l = len(input1)
for i in range(l):
    num = ((input1[i] + i) % 128 + 128) % 128
    code += num

for i in range(l - 1):
    code[i] = code[i] ^ code[i + 1]

print code
code = [
    '\x1f',
    '\x12',
    '\x1d',
    '(',
    '0',
    '4',
    '\x01',
    '\x06',
    '\x14',
    '4',
    ',',
    '\x1b',
    'U',
    '?',
    'o',
    '6',
    '*',
    ':',
    '\x01',
    'D',
    ';',
    '%',
    '\x13']

接下来就要反向计算一下了,这里就想记录一下自己做题的思路

这里提两个点:

1.

  • x = 212 转化为二进制为 :11010100
  • y = 155 转化为二进制为:10011011
  • z 等于 x 和 y 异或的结果:x ^ y = 01001111 可知:
  • z=x^y
  • x=z^y
  • y=z^x

 2.模算法的逆运算

如果:A=(B-C)%D

那么:   B=(A+C)%D

    推导过程:假设A、B、C都为正整数

那么由A=(B-C)%D可知B-C=D*n+A,即B=A+C+D*n,当B<D时,两边对D取模,则

B%D=(A+C+D*n)%D=(A+C)%D

3. num其实想当于一个字符,就是用来存放flag变换的每一位,可以理解为就是一个工具人

code是密文,而我们要做的就是将code逆成flag

4.这里((input1[i] + i) % 128 + 128) % 128这么长一串其实就相当于(input1[i]+i)%128,可以自己用数学思维去推一下

理解了这几个点的话就好搞了,附上脚本

code = [
    '\x1f',
    '\x12',
    '\x1d',
    '(',
    '0',
    '4',
    '\x01',
    '\x06',
    '\x14',
    '4',
    ',',
    '\x1b',
    'U',
    '?',
    'o',
    '6',
    '*',
    ':',
    '\x01',
    'D',
    ';',
    '%',
    '\x13']
flag=""
for i in range(len(code)-2,-1,-1):
    code[i]=chr(ord(code[i])^ord(code[i+1]))
for i in range(len(code)):
    num=chr((ord(code[i])-i)%128)
    flag+=num
print(flag)
    

flag为

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值