HDCTF-easypyc-python文件格式

前记

拿到题目是一个pyc文件,像往常一样,直接往Easy Python Decompiler里丢,但是却出现了文件头错误的信息。。放入winhex中改了文件头,再反编译没用。。。然后发现一些列东西与网上的pyc文件格式不同。。之后就改格式放入工具,改放入工具。重复了n次。。就放弃了这道题。

解题过程

赛后看了wp,才知道不同版本python格式还是不同的

基本格式
pyc 文件一般由 3 个部分组成:
最开始4个字节是一个 Maigc int,标识此 pyc 的版本信息,不同的版本的 Magic 都在 Python/import.c 内定义
接下来四个字节还是个 int,是 pyc 产生的时间 (TIMESTAMP,1970.01.01 到产生pyc时候的秒数)
接下来是个序列化了的 PyCodeObject(此结构在 Include/code.h 内定义),序列化方法在 Python/marshal.c 内定义

而上文中提到的Easy Python Decompiler工具我查看了一下他只能逆向2.5,2.6,2.7版本。而文件给的是
在这里插入图片描述
运行也同样需要python3来运行
在这里插入图片描述
这题我们用直接去网站上用在线工具解

import marshal
from binascii import unhexlify
exec(marshal.loads(unhexlify(b'faa7696d706f7274206d61727368616c0a66726f6d2062696e617363696920696d706f727420756e6865786c6966790a66726f6d2062617365363420696d706f7274206236346465636f64650a7072696e742822446f20796f75206b6e6f77207079633f22290a61203d20223d51324e314d444e32516d4e6d56444e32556d4e78596a5a314d6a4e3563444d3359574e35637a4d33456a4e31596a5933636a4e78597a5932596a4e22'))

查一下各个函数的意义
exec:动态执行Python代码。也就是说exec可以执行复杂的Python代码。
unhexlify:将十六进制字符串变为字符例:

>>> b=68656c6c6f 
>>> unhexlify(b) 
'hello'

将转换成的字符转换一下即可查看真正的源码
在这里插入图片描述
得到一个反序的base64拿去解密一下,得到一串字符

666c61677b656173795f7079635f616e645f6d64357d
看起来像base16再去解密一下得到flag
flag{easy_pyc_and_md5}

总结

一道很简单的题目,由于自己的惯性思维以及过分依赖一个工具没有处理的好。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值