目录

一.获取pyc文件

二.反编译出.py源码

三.程序逻辑

1.第一个限制条件

2.第二段

3.第三段


这题是对python打包成的可执行程序逆向

如果对如何反编译.pyc和.py文件有疑问可以参考:

Python逆向基本操作步骤——以杭电新生赛hgame week2 reverse stream(python3.10逆向)为例

一.获取pyc文件

在qaq.exe所在目录打开cmd使用命令:python pyinstxtractor.py qaq.exe

成功后会输出一个_extracted文件夹

在文件夹内找到qaq.pyc和struct.pyc这两个文件

用winhex或者其他软件打开,查看16进制下的信息,前两行是magic head,这里qaq.pyc和struct.pyc文件的前两行相同,所以不需要修复

二.反编译出.py源码

在qaq.pyc文件所在目录打开cmd,使用命令: pycdc.exe qaq.pyc,成功输出源码

en = [3,37,72,11,6,132]
output = [105,97,23,78,121,48,108,65,99,52,181,177,98,53,67,29,41,120,60,101,51,103,105,109,121,50]
print('welcome to SDPCSEC2023')
flag = input('please input your flag:')
str = flag
a = len(str)    #flag长度>=37
if a < 37:print('lenth wrong!')exit(0)             #前四个字符的限制条件
if ord(str[0]) + 2023 * ord(str[1]) + 2023 * ord(str[2]) + 2023 * ord(str[3]) == 623186:    #第一个限制条件print('good!continue')
else:print('bye~')exit(0)# f}Mj bjk2x1Jg2e516a8f0an7a5éí1z
x = []
k = 5           #中间26个,所以flag[4]需要爆破
for i in range(13): #0到12b = ord(str[k])     #第六个字符,8,10,12c = ord(str[k + 1]) #第七个字符,9,11,13a11 = c ^ en[i % 6]a22 = b ^ en[i % 6]x.append(a11)   #先添加奇数下标对应字符x.append(a22)   #每次循环添加两个字符k += 2
if x == output:print('good!continue')
else:print('oh,you are wrong!')exit(0)
l = len(str)
v1 = ord(str[l - 7])    #倒数第七个
v2 = ord(str[l - 6])
v3 = ord(str[l - 5])
v4 = ord(str[l - 4])
v5 = ord(str[l - 3])
v6 = ord(str[l - 2])    #倒数第二个
#aef_75
if v1 * 3 + v2 * 2 + v3 * 5 == 1003 and v1 * 4 + v2 * 7 + v3 * 9 == 2013 and v1 + v2 * 8 + v3 * 2 == 1109 and v1 * 3 + v5 * 2 + v6 * 5 == 671 and v4 * 4 + v5 * 7 + v6 * 9 == 1252 and v4 + v5 * 8 + v6 * 2 == 644:print('you get the right flag!')

三.程序逻辑

1.第一个限制条件

if ord(str[0]) + 2023 * ord(str[1]) + 2023 * ord(str[2]) + 2023 * ord(str[3]) == 623186:

当时很奇怪的是只有对前四个字符这一条限制条件,这一条方程组如果爆破的话会有很多组解

而且对第五个字符并没有任何操作,后续突然明白前五个字符和最后一个字符是 flag{}

2.第二段

这段代码的作用是对flag[]下标为5到30的共26个字符进行加密,仔细看是简单的异或操作

x = []
k = 5           #中间26个,所以flag[4]需要爆破
for i in range(13): #0到12b = ord(str[k])     #第六个字符,8,10,12c = ord(str[k + 1]) #第七个字符,9,11,13a11 = c ^ en[i % 6]a22 = b ^ en[i % 6]x.append(a11)   #先添加奇数下标对应字符x.append(a22)   #每次循环添加两个字符k += 2
if x == output:

脚本:

out = [105,97,23,78,121,48,108,65,99,52,181,177,98,53,67,29,41,120,60,101,51,103,105,109,121,50]en = [3,37,72,11,6,132]k=0
s=""
for i in range(13):a11=out[k]a22=out[k+1]b=a22^en[i%6]c=a11^en[i%6]s+=chr(b)s+=chr(c)k+=2
print(s)

得到中间26个字符:bjk2x1Jg2e516a8f0an7a5éí1z

3.第三段

这段是对倒数第七个到倒数第二个共6个字符进行限制,这里给了6个判断式也就是6组方程组,所以可以解出这6个字符

不过值得一提的是,题目有点问题: 第四个判断条件 v1 * 3 + v5 * 2 + v6 * 5 == 671 是有问题的,询问过出题人得知v1应该改成v4(这里已经修改过了)

l = len(str)
v1 = ord(str[l - 7])    #倒数第七个
v2 = ord(str[l - 6])
v3 = ord(str[l - 5])
v4 = ord(str[l - 4])
v5 = ord(str[l - 3])
v6 = ord(str[l - 2])    #倒数第二个
#aef_75
if v1 * 3 + v2 * 2 + v3 * 5 == 1003 and v1 * 4 + v2 * 7 + v3 * 9 == 2013 and v1 + v2 * 8 + v3 * 2 == 1109 and v4 * 3 + v5 * 2 + v6 * 5 == 671 and v4 * 4 + v5 * 7 + v6 * 9 == 1252 and v4 + v5 * 8 + v6 * 2 == 644:print('you get the right flag!')

系数矩阵:

3 2 5 0 0 0 |1003
4 7 9 0 0 0 |2013
1 8 2 0 0 0 |1109
0 0 0 3 2 5 |671
0 0 0 4 7 9 |1252
0 0 0 1 8 2 |644

在线解方程:

这六个字符是:aeff73

所以最后的flag是:flag{bjk2x1Jg2e516a8f0an7a5éí1zaeff73}

黄河流域公安院校网络空间安全技能挑战赛 QAQ 题解相关推荐

  1. 黄河流域公安院校网络空间安全技能挑战赛

    babyPHP 源码 <?php highlight_file(__FILE__); error_reporting(0);$num = $_GET['num'];if (preg_match( ...

  2. 2020年“磐云杯”网络空间安全技能竞赛全国拉赛

    2020年"磐云杯"网络空间安全技能竞赛全国拉赛 一.竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第一阶段 单兵模式系统渗透测试 任务1 Wireshark数据包分析 ...

  3. 2020年“磐云杯”网络空间安全技能竞赛武汉拉练赛赛题及解析(超详细)

    2020年"磐云杯"网络空间安全技能竞赛全国拉赛 "磐云杯"竞赛阶段 "磐云杯"任务拓扑图 "磐云杯"武汉拉练赛竞赛任务 ...

  4. 2019全国职业院校“网络空间安全”MS17-010安全自制题

    2019年全国职业院校技能大赛"网络空间安全" MS17-010安全自制题 一.竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第一阶段 单兵模式系统渗透测试 任务1 Wi ...

  5. 中职网络空间安全技能竞赛A模块解析

    第一次写文,请多理解 有什么问题可以联系博主 目录 一.登录安全加固 二.Web安全加固 三.流量完整性保护 四.本地安全策略(windows) 五.中间件服务加固SSH\VSFTPD\IIS\HTT ...

  6. 中职网络空间安全技能大赛22广东省赛

    Apache安全配置 1.打开服务器场景,通过命令行清除防火墙规则.在服务器场景上查看apache版本,将查看到的服务版本字符串完整提交: 2.检测服务器场景中此版本apache是否存在显示banne ...

  7. 2021年武汉市中等职业学校学生技能大赛“网络空间安全”赛项技术规程

    1 / 24 武汉市中等职业学校技能大赛 "网络空间安全"赛项规程 一.赛项名称 赛项名称:网络空间安全 英语翻译: Cyberspace Security 赛项组别:中职 赛项归 ...

  8. 2019年全国职业院校技能大赛中职组“网络空间安全”正式赛卷及其“答案”

    2019年全国职业院校技能大赛中职组 "网络空间安全"正式赛卷 环境需要可以私信博主,答案在文章最末尾 一.竞赛阶段 竞赛阶段 任务阶段 竞赛任务 竞赛时间 分值 第一阶段 单兵模 ...

  9. 2023年安徽省职业院校技能大赛“网络空间安全”A模块

    目录 2023年安徽省职业院校技能大赛"网络空间安全"

最新文章

  1. linux磁盘满处理
  2. python的__init__几种方法总结【转载】
  3. GetHashCode() 的研究
  4. 听说你想去大厂看妹子,带你看看字节跳动数据挖掘面试是啥样?
  5. python 井字游戏
  6. 让Python pip下载速度加速
  7. Fast R-CNN整体把握
  8. 请MVC5 WebApi2 支持OData协议查询
  9. vue商品列表滚动效果_vue+帧动画 实现 获奖奖品列表滚动循环展示
  10. linux系统命令行方式复制文件
  11. 原来javaeye变成iteye了
  12. arcgis地理配准_【更新70篇】地理数据科学技术文章合集,欢迎大家点赞、在看、转发三连!...
  13. 你知道Excel中身份证号码提取年龄的公式吗?
  14. LabVIEW编程LabVIEW控制THM1176三维磁场强度测试仪例程与相关资料
  15. 解决Win10 无线显示器功能安装时失败
  16. 开关电源输入:共模电感,X电容,Y电容,差摸电感理论计算!
  17. react中使用eslint+prettier+airbnb校验代码风格
  18. uni-app 父传子、子传父、路径传参、本地存储
  19. VUE项目学习(四):编写个人页面和配置路由
  20. 崇闵摄影课·10款日常后期视频调色LUT 支持PR/达芬奇/FCPX

热门文章

  1. SpaceShooter打飞机教程笔记(三)
  2. Python批量删除文件名中带小括号数字(1)(2)(3)...
  3. HTML简单静态页面的编写
  4. 高中python教程_杭师大顶级初高中Python课程师训,酷哥优秀教师授课获赞!
  5. JAVA爬需要账号登录的网_如何用 Python 爬取需要登录的网站?
  6. 计算机视觉技术学习路线(3D视觉)
  7. html页面整体缩小,浏览器缩放原理以及窗口、html页面大小
  8. TDengine创始人陶建辉:基础软件不开源必死无疑
  9. 2021年“上海区块链周”参会随感(二)2021-04-12
  10. 计算机科学与技术补中益气丸的成分,经典名方,补中益气丸运用解析