bad_python

news2024/9/27 12:38:01

攻防世界 (xctf.org.cn)

前戏

下载文件,解压完成后是这个

一个pyc文件

这里要用到python的反编译

要用到的工具有两个

1.python自带的uncompyle6

2.pycdc文件——比uncompyle6强大一点

我们一个一个来尝试一下

uncompyle6:

我是直接在pycharm里面终端用的

把文件放在这个目录下

你需要先安装

然后输入这个命令(在cmd里面也行)

一般来说就OK了

但是这道题考点是进一步的

这是运行了,但是运行出错

最后得到的这个py文件是0kb的,什么都没有

至于后续,我先讲另一种方法,比较常用的

pycdc:

首先你要去下载一个pycdc文件(52上面有)

这样输入,你就会得到一个py文件,名字叫做1.py

但是是0kb

修改文件头

这个MAGIC是指pyc的文件头是坏的

pyc的文件头,我用010editor给大家打开看一下

蓝色标记这部分就是pyc文件的文件头

它包含的信息包括:

前四个字节——版本信息,比如python的3.6,3.8等

中间8个字节——不用管,修改时间而已,对我们来说没有

后面四个字节——包含大小信息和校验码(我也不确定,反正有用)

一般这种错误就是因为这个文件的文件头信息被修改了,我们需要去修复,也就是将文件头修复正确中间我们最重要的一步就是找到他是什么版本的pyc文件,不同版本的文件头不同

我们先给出答案,这道题的版本是3.6,我们可以从两个地方看出来

一:文件名字

还记得最开始文件名那么长的字符吗,你是不是就下意识忽略了,我们在回过头看一下(当时我也没看出来)

3.6版本

二:文件头

这个33 0D 就是3.6版本的文件名开头,他只是修改了后面的部分

然后下面就是我们找到正确的3.6版本的文件头是怎样的了

我是直接百度的,当然厉害的就是自己用3.6版本的python写一个pyc文件,放在010里面去看

橘黄色的就是改的

现在跑出来的py文件就有3KB了

后面就算正常的IDA静态分析了

IDA分析

因为这是个py文件,我们可以直接放入python中去看,他也只有3KB,代码不是很多,就不麻烦IDA了,你要放在IDA里面去看也行

# Source Generated with Decompyle++
# File: 1.pyc (Python 3.6)

from ctypes import *
from Crypto.Util.number import bytes_to_long
from Crypto.Util.number import long_to_bytes

def encrypt(v, k):
    v0 = c_uint32(v[0])
    v1 = c_uint32(v[1])
    sum1 = c_uint32(0)
    delta = 195935983
    for i in range(32):
        v0.value += (v1.value << 4 ^ v1.value >> 7) + v1.value ^ sum1.value + k[sum1.value & 3]
        sum1.value += delta
        v1.value += (v0.value << 4 ^ v0.value >> 7) + v0.value ^ sum1.value + k[sum1.value >> 9 & 3]
    
    return (v0.value, v1.value)

if __name__ == '__main__':
    flag = input('please input your flag:')
    k = [
        255,
        187,
        51,
        68]
    if len(flag) != 32:
        print('wrong!')
        exit(-1)
    a = []
    for i in range(0, 32, 8):
        v1 = bytes_to_long(bytes(flag[i:i + 4], 'ascii'))
        v2 = bytes_to_long(bytes(flag[i + 4:i + 8], 'ascii'))
        a += encrypt([
            v1,
            v2], k)
    
    enc = [
        0xEEC7D402L,
        0x99E9363FL,
        0x853BDE61L,
        558171287,
        0x908F94B0L,
        1715140098,
        986348143,
        1948615354]
    for i in range(8):
        if enc[i] != a[i]:
            print('wrong!')
            exit(-1)
    print('flag is flag{%s}' % flag)

就是这么个事

直接开干吧

这段代码可能新手比较懵逼

这个<<4,就是在二进制表示下,把整个数往左边移动4位,就也是变大了2的四次方大

这个>>7就是右移7次,就是表现2的七次方小,向下取整

然后这个&3就是在二进制层面按位与

3是11,8是11000

1000

0011

相同位置如果都是1,那么得到1,不同为0

得到的结果就是

0000

对应这段代码我很懵逼

然后我去实验了下

825307441

然后把1111又换成了aaaa,也是一串数字

得到了这个数字,然后感觉就是把4个字符串转换成为了一个数字,感觉和base64作用差不多

就是把每个字符的ASCII码提出来,然后通过一些算法组合在一起

这里我采用的就是暴力的方法的,硬跑

加上这个直接全部遍历一遍

(抄一个吧,不想写了)

我是废物

enc = [63912563639333235,63912563820295007,63912563319981409,63912564160552784,63912564260890672,63912564074962770,63912563086615890,63912564159242032]
flag = bytearray(32)
for i in range(8):
    flag[4 * i] = (enc[i] >> 24) & 0xFFFFFFFF & 0xFF
    flag[4 * i + 1] = (enc[i] >> 16) & 0xFFFFFFFF & 0xFF
    flag[4 * i + 2] = (enc[i] >> 8) & 0xFFFFFFFF & 0xFF
    flag[4 * i + 3] = (enc[i] & 0xFFFFFFFF & 0xFF)

print(flag)
#bytearray(b'Th1s_1s_A_Easy_Pyth0n__R3veRse_0')

看不懂为啥这样就OK了,我是废物!~

但是废物也要下班拉~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1284346.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

骨传导耳机音量大了有害吗?骨传导能保护听力吗?

无论是传统耳机还是骨传导耳机&#xff0c;只要使用音量过大&#xff0c;都会对有一定的损伤&#xff0c;然而由于骨传导耳机的传声原理和佩戴方式比较特殊&#xff0c;所以对人体的损伤比较小&#xff0c;想要知道骨传导耳机能否保护听力&#xff0c;就要先了解骨传导耳机的传…

Day50力扣打卡

打卡记录 三个无重叠子数组的最大和 链接 滑动窗口 class Solution:def maxSumOfThreeSubarrays(self, nums: List[int], k: int) -> List[int]:n, ans len(nums), []sum1 sum2 sum3 0maxsum1idx, maxsum12idx 0, ()maxsum1 maxsum12 total 0for i in range(2 * …

Mybatis-Plus代码生成器怎么用

下载插件 连接数据库 打开代码生成器 生成代码

几何对象的凸点集

// 引入VTK并初始化 #include "vtkAutoInit.h" VTK_MODULE_INIT(vtkRenderingOpenGL2); VTK_MODULE_INIT(vtkInteractionStyle);#include <vtkActor.h> #include <vtkCamera.h> #include <vtkConvexPointSet.h> #include <vtkDataSetMapper.h&g…

259k+ Star!这是我见过最全的开发者技术学习路线!

大家好&#xff0c;我是 Java陈序员。 自从上班后&#xff0c;身体是一天不如一天了&#xff0c;也很少有时间可以去学习新技术了。程序员如果技术跟不上&#xff0c;很容易就被淘汰。 而碎片化的学习效率又不高&#xff0c;往往今天学了&#xff0c;明天就忘了。有时候更是不…

同旺科技 USB TO SPI / I2C --- 调试W5500_TCP Client接收数据

所需设备&#xff1a; 内附链接 1、USB转SPI_I2C适配器(专业版); 首先&#xff0c;连接W5500模块与同旺科技USB TO SPI / I2C适配器&#xff0c;如下图&#xff1a; 发送数据6个字节的数据&#xff1a;0x11,0x22,0x33,0x44,0x55,0x66 在专业版调试软件中编辑指令&#xff0c…

金融帝国实验室(Capitalism Lab)V10版本城市DLC生存模式新改进

金融帝国实验室&#xff08;Capitalism Lab&#xff09;V10版本城市DLC生存模式新改进 ————————————— ★【全新V10版本开发播报】★ 即将发布的V10版本中的城市经济模拟DLC生存模式改进&#xff1a; ◈ 增加了一个新选项&#xff0c;将第一个城市的初始人口设置为…

Android wifi 框架以及Enable流程

Android P相比于Android O的变化 多了WifiStateMachinePrime&#xff08;状态机的前处理机制&#xff09;&#xff0c;wifiService的相关cmd 不再是直接send 给WifiStateMachine&#xff0c;而是被送到WifiStateMachinePrime先进行处理后&#xff0c;再送往WifiStateMachine也…

【带头学C++】----- 九、类和对象 ---- 9.3 析构函数

目录 9.3 析构函数 9.3.1 如何定义析构函数 看下面这个顺序进行释放&#xff0c;{} 代表一个生命周期&#xff0c;或者说作用域。 对象在生命周期结束就会消亡。 9.3 析构函数 9.3.1 如何定义析构函数 函数名和类名称相同&#xff0c;在函数名前加 ~ &#xff0c;没有返回…

uniapp开发小程序经验记录

uniapp开发小程序的过程中会遇到很多问题&#xff0c;这里记录一下相关工具优化&#xff0c;便于后来者参考。 每次保存代码后&#xff0c;小程序都跳回首页 针对这个问题&#xff0c;常规的做法就是修改pages配置文件&#xff0c;但是这种方式不便于路由参数的设置&#xff…

vue3 中使用 sse 最佳实践,封装工具

工具 // 接受参数 export interface SSEChatParams {url: string,// sse 连接onmessage: (event: MessageEvent) > void,// 处理消息的函数onopen: () > void,// 建立连接触发的事件finallyHandler: () > void,// 相当于 try_finally 中的 finally 部分&#xff0c;不…

用户态和内核态

实际上任何Linux发行版(Centos/RedHat....)&#xff0c;其系统内核都是Linux。我们的应用都需要通过Linux内核与硬件交互。为了避免用户应用导致冲突甚至内核崩溃&#xff0c;用户应用与内核是分离的&#xff1a; 进程的寻址空间会划分为两部分&#xff1a;内核空间、用户空间。…

虾皮数据分析网站:了解Shopee市场趋势与优化运营的利器

在如今的电商时代&#xff0c;越来越多的人选择在虾皮购物&#xff08;Shopee&#xff09;平台上开设自己的店铺。然而&#xff0c;要在这个竞争激烈的市场中脱颖而出并取得成功&#xff0c;并不是一件容易的事情。为了更好地了解市场趋势、优化产品和店铺运营&#xff0c;了解…

百度地图取点 范围绘制 画范围 手工绘制范围

<template><div class"app-container"><div style"margin-bottom:30px"><el-input type"textarea" :rows"2" placeholder"请输入内容" v-model"str"></el-input></div><d…

基于SSM框架的网上书店系统

基于SSM框架的网上书店系统 文章目录 基于SSM框架的网上书店系统 一.引言二.系统设计三.技术架构四.功能实现五.界面展示六.源码获取 一.引言 随着互联网的普及和电子商务的快速发展&#xff0c;网上书店系统成为了现代人购买图书的主要方式之一。网上书店系统不仅提供了便捷的…

MFC发送ZPL指令控制斑马打印机

1、参考1&#xff1a;用Python操控斑马打印机的技术总结 - 重拾初心的青年人 - 博客园 (cnblogs.com) 参考2&#xff1a;VC斑马打印机_vc zpl-CSDN博客 参考3&#xff1a;斑马打印机ZPL语言编程实战_梅长酥的博客-CSDN博客 参考4&#xff1a;关于斑马打印机开发的几种方式_斑马…

AGI智能新时代,大模型为软件开发带来范式变革

导语 | 人工智能作为新一轮科技革命和产业变革的重要驱动力量&#xff0c;尤其是在当下新一轮 AI 大模型、生成式 AI 浪潮背景下&#xff0c;重视通用人工智能&#xff08;AGI&#xff09;成为行业的共识。在当前&#xff0c; AGI 技术背后的逻辑究竟是怎样的&#xff1f;技术创…

【shell】

shell 一、shell简介二、shell脚本的执行方式三、shell变量3.1 shell变量介绍3.2 shell变量的定义3.1.1 基本语法3.2.2 定义变量的规则3.2.3 将命令的返回值赋予变量 四、环境变量的设置4.1 基本语法&#xff1a; 五、位置参数变量5.1 基本介绍5.2 基本语法 六、预定义变量6.1 …

人工智能_机器学习059_非线性核函数_poly核函数_rbf核函数_以及linear核函数效果对比---人工智能工作笔记0099

人工智能_机器学习059_非线性核函数介绍---人工智能工作笔记0099 那么我们应该如何调整这个SVC的参数,也就是我们应该使用哪种核函数,比较合适呢?这取决于我们的数据,适合使用哪个核函数,正好我们有 提供的score = accuracy_score(y_test,y_pred) 这样的评分函数,我们可以根据…

安装Python以及pycharm

Pycharm是编辑器。相当于Word对文字进行编辑。 Python是解释器。讲代码翻译为计算机可以理解的指令。 1、安装Python 官网&#xff1a;Welcome to Python.org 打开的时候有点慢等待一会就好&#xff0c;点击下载&#xff0c;选择Windows版本 等待一会&#xff0c;可以看到如…