攻防世界刷题Crypto篇


文章目录

  • 攻防世界刷题Crypto篇
  • 前言
  • 一、关于uncompyle6
  • 二、解题步骤
    • 1.反编译pyc文件
    • 2.编写Python脚本
  • 总结

前言

昨天去攻防世界网站做了Crypto类的新手练习区题目,今天来记录一下不会做的题。这道题叫easychallenge。

进入题目后下载附件,发现是一个.pyc文件。

用Python IDLE和vs code都打不开(我好无知……),就去搜别人写的wp了。得到如下新知识:

pyc是一种二进制文件,是由py文件经过编译后生成的文件,是一种byte code。py文件编译成pyc文件后,运行加载的速度会有所提高;另一方面,把py文件编译为pyc文件,可以实现部分源码隐藏,保证了Python做商业化软件时的安全性。

求解这道题,首先要想办法得到源码,可以用uncompyle6对题目给的pyc文件进行反编译

本文关于uncompyle6的内容来自:
https://www.jianshu.com/p/aafdedcbab4f
感谢素不相识的大佬的文章,侵删


一、关于uncompyle6

uncompyle6是一个原生Python的跨版本反编译器和fragment反编译器,是decompyle、uncompyle、uncompyle2等的接替者,可将Python字节码转换回等效的Python源代码

github项目地址:https://github.com/rocky/python-uncompyle6

在Python3下安装uncompyle6:
pip3 install uncompyle6

这里很顺利地直接安装成功~

二、解题步骤

1.反编译pyc文件

这里我把题目给出的pyc文件重命名为test.pyc,反编译后的源代码放入test.py中,无需事先创建test.py,直接在pyc文件所在位置打开终端,输入下面这句命令即可:
(我用的是MacBook)
uncompyle6 -o test.py test.pyc

反编译得到的代码如下(得到的是Python2的代码):

# uncompyle6 version 3.8.0
# Python bytecode 2.7 (62211)
# Decompiled from: Python 3.8.10 (v3.8.10:3d8993a744, May  3 2021, 08:55:58)
# [Clang 6.0 (clang-600.0.57)]
# Embedded file name: ans.py
# Compiled at: 2018-08-09 11:29:44
import base64def encode1(ans):s = ''for i in ans:x = ord(i) ^ 36x = x + 25s += chr(x)return sdef encode2(ans):s = ''for i in ans:x = ord(i) + 36x = x ^ 36s += chr(x)return sdef encode3(ans):return base64.b32encode(ans)flag = ' '
print 'Please Input your flag:'
flag = raw_input()
final = 'UC7KOWVXWVNKNIC2XCXKHKK2W5NLBKNOUOSK3LNNVWW3E==='
if encode3(encode2(encode1(flag))) == final:print 'correct'
else:print 'wrong'

2.编写Python脚本

按照反编译得到的加密脚本,把加密过程倒过来进行解密即可。
1)首先对于encode3,解密时,就是对base32解密,调用base64.b32decode()。
备注:base64.b32decode(‘UC7KOWVXWVNKNIC2XCXKHKK2W5NLBKNOUOSK3LNNVWW3E===’)的输出结果是:
b’\xa0\xbe\xa7Z\xb7\xb5Z\xa6\xa0Z\xb8\xae\xa3\xa9Z\xb7Z\xb0\xa9\xae\xa3\xa4\xad\xad\xad\xad\xad\xb2’
2)然后对于encode2,将在1)中得到的bytes,先分出单个数字,然后^36(异或的逆运算还是异或),再-36,最后转回字符,拼接成字符串。
3)最后对于encode3,将在2)中得到的字符串,先分出单个字符,转ascii码十进制数,然后-25,再^36,最后转回字符,拼接成字符串。

这里用到的模块:base64
用到的函数:ord将单个字符转ascii码十进制数,chr将单个ascii码转字符

代码如下(自己写的Python3的代码):

import base64def decode3(ans):m3=base64.b32decode(ans)return m3def decode2(ans):s=''for i in ans:i=(i^36)-36s+=chr(i)return sdef decode1(ans):s=''for i in ans:i=(ord(i)-25)^36s+=chr(i)return s
print(decode1(decode2(decode3('UC7KOWVXWVNKNIC2XCXKHKK2W5NLBKNOUOSK3LNNVWW3E==='))))

贴上自己的运行结果:


总结

以上就是这道题的全部记录了,主要就是新学到了用uncompyle6进行反编译pyc文件得到Python源代码。

攻防世界_Crypto_easychallenge相关推荐

  1. 【攻防世界001】Guess-the-Number

    攻防世界之前刷了几十题了,没写wp,感觉很简单没啥意思.后来参加了几次比赛,发现有点干不动,决定还是老老实实刷题好了.这是第一篇wp,这题很简单,是个jar,用jd-gui可以得到java源码. 原来 ...

  2. 攻防世界(pwn)--Mary_Morton 利用格式化字符串+栈溢出破解Canary的保护机制

    ctf(pwn) canary保护机制讲解 与 破解方法介绍 程序执行流程 有三个选项,1是利用栈溢出,2是利用格式化字符串,3是退出;可连续输入多次; IDA分析 解题思路 程序存在canary保护 ...

  3. 攻防世界(Pwn) forgot---栈溢出;(方法二)

    攻防世界(Pwn) forgot-栈溢出:(方法一) 里面对问题描述的更详细一点 返回目标函数 0x80486CC 方法二(爆破流) 因为最终返回的是 v3[0]-v3[9] 之中的一个函数, v3[ ...

  4. 攻防世界(Pwn) forgot---栈溢出;(方法一)

    攻防世界(Pwn) forgot-栈溢出:(方法二) 介绍 这道题表面看起来有点复杂,其实很简单,有两种方法可以来做这一道题; 方法一(精确打击) 文件运行流程是: 1.先输入名字 2. 输入一串字符 ...

  5. 攻防世界misc新手_[攻防世界]mobile新手练习区easy-apk

    [攻防世界]mobile新手练习区easy-apk easy-apk最佳Writeup由129师386旅独立团 • devi1提供 难度系数: 7.0 题目来源: 暂无 题目描述:无 题目场景: 暂无 ...

  6. 攻防世界 ——crypto

    目录 新手区部分题解: 1,easy_RSA 2,Normal_RSA 3, 幂数加密 4,easy_ECC 高手进阶区部分题题解 5, ENC 6,告诉你个秘密 7,Easy-one 8,说我作弊需 ...

  7. 攻防世界———MISC 高手区题解

    目录 1,base64stego 2,easycap 3,Avatar 4,What-is-this 5,签到题 6,Training-Stegano-1 7,Excaliflag 8,Get-the ...

  8. 攻防世界 web(二)

    这周接着刷攻防世界的web题( ̄︶ ̄)↗ 1.command_execution 看提示这题为命令执行漏洞(command_execution),关于命令执行漏洞,我前面有篇博客详细介绍了,大家不了解 ...

  9. misc高阶 攻防世界_攻防世界 Misc 进阶题(一)

    攻防世界 Misc 进阶题(一) 关于隐写术的思路或方法 转载: https://blog.csdn.net/a_small_rabbit/article/details/79644078     隐 ...

最新文章

  1. NGINX发布支持动态配置的开源Web服务器
  2. 人口普查(20) PAT
  3. 俞敏洪在北大2008年开学典礼上的演讲
  4. Java 技术篇 - java同时连接多种数据库执行sql语句的兼容性验证,数据库类型包括:oracle、sqlserver、DB2、人大金仓、达梦、PG、瀚高、polardb
  5. Spring Security OAuth2——自定义OAuth2第三方登录(Gitee)并与UsernamePassword登录关联解决方案
  6. matlab 小括号
  7. 南京大学计算机考研分数线2021,南京大学2021年硕士研究生复试基本分数线
  8. java 记录一个类加载顺序的坑
  9. java并发condition_Java并发之Condition的实现分析
  10. linux 权限测试,linux下检测root权限的shell脚本
  11. 处理大数据需要哪些技术
  12. 使用shadow dom封装web组件
  13. Hue使用之Inceptor篇
  14. 软件测试简历制作技巧与方法
  15. WPS有空白页老删不掉,delete和退格都删不了
  16. [渝粤教育] 武汉大学 自然科学经典导引 参考 资料
  17. boost:math.constants
  18. C++表达式语句实训 对 26 个大写英文字母进行循环加密,输入一个大写英文字母(明文)和一个整数秘钥,输出用秘钥对该大写英文字母加密后的结果(密文)。
  19. 咸阳师范学院计算机学院女生多嘛,咸阳师范学院宿舍条件怎么样
  20. 使用Python按时间顺序批量重命名文件

热门文章

  1. aws 认证_如何在家工作时获得任何AWS认证
  2. linux问题排查工具,几个常见的Linux系统故障及其排查的方法
  3. sklearn中的make_moons函数使用
  4. bat脚本中获取上级目录_批处理bat命令--获取当前盘符和当前目录和上级目录
  5. 15-02 | 一个关于唯一索引的业务场景
  6. 华为鸿蒙系统支持华为些手机,鸿蒙系统支持哪些手机型号?华为首批鸿蒙系统手机名单一览...
  7. 异常信息 : Failed to read candidate component class
  8. 多个软件一齐录屏时卡顿,可能是WINDOWS刷新频率有关
  9. verdi仿真中看波形经常犯的错误
  10. 拯救你寻找资料之苦!浏览器隐藏在角落里的三个神奇搜索技巧,让你叹为观止!