(36条消息) GWCTF 2019 pyre YuSec_顾殇の点的博客-CSDN博客https://blog.csdn.net/weixin_43859686/article/details/107877267?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522167109495016800184135082%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=167109495016800184135082&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2~all~first_rank_ecpm_v1~rank_v31_ecpm-2-107877267-null-null.142%5Ev68%5Econtrol,201%5Ev4%5Eadd_ask,213%5Ev2%5Et3_esquery_v3&utm_term=gwctf2019pyre&spm=1018.2226.3001.4187详细的wp这个大佬已经写了,我再细读一下代码。

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   //这里的两次对128求模是多余的,一次对128求模即可。
替代为num = ((input1[i] + i) % 128code += num                  //从下方的代码看出来code是数组,那么这里的+=说明code和num都是数组,所以可以把它看成code[i]+=num[i]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']

这里的是原题的代码。

第一个for循环是对数组code的每一个元素进行加密。

第二个for循环是对新得到的数组code中的元素对其下一位进行异或。

需要注意,只有最后一位是没有异或时改变的。

那么把代码逆向写出来也是需要分成两步。

这里是wp的代码

print('Welcome to Re World!')
print('Your input1 is your flag~')code = [0x1f,0x12,0x1d, 0x28,0x30,0x34, 0x01,0x06,0x14, 0x34,0x2c, 0x1b, 0x55,0x3f,0x6f,0x36,0x2a,0x3a, 0x01, 0x44,0x3b,0x25, 0x13]      //全部转化成十六进制的样子code.reverse()
l = len(code)for i in range(l-1):code[i + 1] = code[i] ^ code[i + 1]code.reverse()for i in range(len(code)):if code[i] - i < 0:code[i] = code[i] + 128 -ielse:code[i] -= iflag = ''.join(chr(i) for i in code)
print(flag)# GWHT{Just_Re_1s_Ha66y!}

异或的基本知识,同0异1。

a=1001,b=0100。a对b异或,得到c=1101。

不知道a时,b对c异或,得到a=1001。

所以想对异或进行还原,就要从没有改变的最后一位往前进行异或。

code.reverse()        //先把code数组倒序一下,再正常用for循环
l = len(code)for i in range(l-1):                     //注意这里l-1是开区间,只能取到[0,l-1)code[i + 1] = code[i] ^ code[i + 1]  //举例最后一位,如果10个元素,l=10,code[9]=code[8]^code[9]

第一步完成


第二步:求出flag明文input[i]。

原代码中num = ((input1[i] + i) % 128

所以想求出input1[i]有两种情况

(1)input1[i]+i<128,此时num[i]=num[i]-i=input1[i]

(2)input1[i]+1>128,此时num[i]=num[i]+128-i=input1[i]

又有code[i]=num[i],代码如下了

code.reverse()                 //再把code数组正过来for i in range(len(code)):         if code[i] - i < 0: code[i] = code[i] + 128 -i   else:code[i] =code[i]-i

再一次用code.reverse()还原回来,是因为原代码第一个for循环中,在算用于加密num时是用到了i的,所以要返回code原来的顺序。

注意,这里得到的code[i]都是数字(wp代码中把字符都转化成十六进制数了),所以需要chr(i)打印出来

flag = ''.join(chr(i) for i in code)
print(flag)

buuctf GWCTF2019 pyre相关推荐

  1. BUUCTF Reverse pyre

    这道题算是比较简单的逆算法了,初入逆向,想借这个题来理理自己的思路 拿到附件,发现是一个.pyc文件,这里简单介绍一下 详细介绍可以参考大佬博客:什么是pyc文件,把python的py文件编译成pyc ...

  2. buuctf逆向pyre

  3. buuctf pyre

    buuctf 逆向pyre 最近看到不少py逆向,记录一道题 下载原件发现是pyc文件,先利用uncompyle生成py文件(之前用py3.8.6的版本下载死活不行,在老学长的帮助下发现uncompy ...

  4. BUUCTF pyre

    BUUCTF pyre 拿到的文件是一个后缀是.pyc的文件,有点迷糊,百度了一下发现可以用网上的python反编译在线工具反编译,反编译之后得到代码: #!/usr/bin/env python # ...

  5. BUUCTF Reverse/[GWCTF 2019]pyre

    BUUCTF Reverse/[GWCTF 2019]pyre 下载得到一个pyc文件,用这个在线反编译pyc,pyo反汇编出代码 print 'Welcome to Re World!' print ...

  6. [BUUCTF]REVERSE——[GWCTF 2019]pyre

    [GWCTF 2019]pyre 附件 步骤: 1.附件是pyc文件,用python打不开,百度后得知用python反编译工具打开,分享一个python反编译在线网站 反编译后是这段代码 #!/usr ...

  7. buuctf/re/近日总结/rome,pyre等(详细解释)

    rome: 检测到无壳,32位 直接用IDA打开,转到main函数 int func() {int result; // eaxint v1[4]; // [esp+14h] [ebp-44h]uns ...

  8. BUUCTF 逆向工程(reverse)之[GWCTF 2019]pyre

    下载好题目后,发现后缀名为:.pyc 所以使用python这些反编译工具:https://tool.lu/pyc/ 利用这个网站反编译一下就可以得到Python的源代码 #!/usr/bin/env ...

  9. buuctf GWCTF 2019 pyre

    下载题目发现是一个pyc文件,关于pyc的详细解释,我看到了这篇文章(6条消息) .pyc是什么?_loveliuzz的博客-CSDN博客_.pyc pyc文件是PyCodeObject的一种持久化保 ...

最新文章

  1. python如何定义一个简单的队列
  2. (转载)Linux信息资源
  3. 未来的数据中心(三)
  4. 疯狂打地鼠游戏核心代码(鼠标变锤子)
  5. 实训09.11:数据库一些简单操作
  6. 吴恩达《机器学习》学习笔记三——多变量线性回归
  7. 这些Windows 10隐藏秘技,你知道几个?
  8. 海量数据处理简要说明(一)
  9. c#虹软2.0免费人脸识别 实例
  10. XCAP发包工具的使用
  11. Python3.6之py文件转exe文件
  12. OpenCV第十四讲: Fast特征点与ORB特征点原理详解
  13. unity游戏开发之游戏过审后 国行PS4将在3月20日发售
  14. 【论文笔记】CVR预估之ESMM模型
  15. ERROR 2003 (HY000) Can‘t connect to MySQL server on ‘localhost3306‘ (10061)解决办法
  16. Resharper简介
  17. C语言中宏定义和函数的区别
  18. 设计模式之禅-二《上卷》
  19. 电脑一般预装access吗_新买的电脑预装的系统是不是正版的呢?
  20. 设计模式(C++实例)

热门文章

  1. php发卡8.0源码_老米卡php发卡系统源码
  2. 玻璃电极的测定原理是什么?
  3. python中的类实例的属性查找过程
  4. iOS开发必不可少的76个工具
  5. VSCode_ 配置C++调试和运行环境_VSCode输出乱码问题
  6. 面向电力安全的智能视频分析解决方案
  7. 规模效应的几种形成机理
  8. Mac电脑上最好用的3个mobi阅读器
  9. JSON和SAP内表转化
  10. 关于远程桌面访问没有登录权限的解决办法