2023年第三届陕西省大学生网络安全技能大赛之babypython

前言

第一题做的挺快的,直接动态调试转伪代码就出了,然后接下来就一直坐牢了,babypython本来听说gpt4可以直接输入上万行分析,结果感觉和gpt3的差距也不大,字节码太多了,无从下手😥

字节码分析

根据OrientalGlass师傅说只需要管flag相关区域就行,刚才看了下确实如此,跟着flag和output符号可以定位出主要算法区域
在这里插入图片描述
字节码翻译事实上比汇编感觉要简单得多,完全面向栈编程的,调用函数出栈,load入栈,明白了这个后大部分都可以看懂
https://www.yuque.com/zhao.ming.tai.zi/ksmo0g/trma9l
这段代码可以翻译为

flag ='********************************'
value =''
output =''
temp =flag[i]
for i in range(len(flag)):
	value +=chr(ord(temp) ^8)

在这里插入图片描述
这一部分对x,y,z做了一些加减乘除后并未改变前面参数的值也没有参与后面的运算,发现下面也有一行字符串说明不会运行
在这里插入图片描述

for _ in range(len(flag)):
	temp =value[i]
	output +=chr(ord(temp) +3)

然后后面又出现了一堆没用的东西虽然对output取值了,但并未改变原有值和用到在这里插入图片描述
这一部分有点难理解,但知道用到了base64加密,用gpt翻译了一下为
下面是将给定的字节码片段还原为相应的 Python 代码:

import base64

output = base64.b64encode(output.encode()).decode()
obfuscated_output = obfuscated_output[::-1]
obfuscated_output = obfuscated_output.replace('g', '1').replace('H', '3').replace('W', '9')
invalid_variable = len(obfuscated_output) * 5

print(obfuscated_output)

根据字节码的内容,可以看出它实现了以下功能:

  1. output 进行 Base64 编码,并将结果转为字符串。
  2. obfuscated_output 进行翻转(逆序)操作。
  3. obfuscated_output 中的字符进行替换操作,将字符 ‘g’ 替换为 ‘1’,‘H’ 替换为 ‘3’,‘W’ 替换为 ‘9’。
  4. 根据 obfuscated_output 的长度乘以 5,得到 invalid_variable 的值。
  5. 打印 obfuscated_output
    翻到最后一行发现给出了结果:

=1nb0A3b7AUQwB3b84mQ/E0MvJUb+EXbx5TQwF3bt52bAZncsd9c

当时还在想为什么加密字符串是倒着的

wp

import base64

flag ='=1nb0A3b7AUQwB3b84mQ/E0MvJUb+EXbx5TQwF3bt52bAZncsd9c'
flag =flag[::-1]
#print(flag)
flag =flag.replace('1', 'g').replace('3', 'H').replace('9', 'W')
flag = base64.b64decode(flag.encode()).decode()
temp =''
output =''
for i in range(len(flag)):
	temp =flag[i]
	output +=chr(ord(temp) -3)
value =''
for i in range(len(flag)):
	temp =output[i]
	value +=chr(ord(temp) ^8)
print(value)

flag{5dcbafe63fbf3b7d8647c1aee650ae9c}

参考链接:
OrientalGlass

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值