python逆向
题目:xctf bad_python
题目zip中是一个pyc文件
1、pyc反编译py
pyc文件反编译为py文件的工具:
1、uncompyle6
2、pycdc
uncompyle6
这个工具在python3.8及一下的版本才能使用。
注意使用时python版本切换到3.8
反编译指令
执行该指令后即可生成py文件
pycdc
我将pycdc安装在了kali里面,将pyc文件拖入Linux的桌面处,打开终端执行反编译指令
反编译指令
注意在root下的pycdc终端中执行反编译指令:
1 | ./pycdc /home/anjio/Desktop/文件名 |
2、修改文件头
出现magic表示这个pyc文件头是坏的
用010editor打开pyc文件查看文件头
黄色标记这部分就是pyc文件的文件头
文件头包含的信息包括:
前四个字节——版本信息,比如python的3.6,3.8等
中间8个字节——不用管,修改时间而已,对我们来说没用
后面四个字节——包含大小信息和校验码
一般这种错误就是因为这个文件的文件头信息被修改了,我们需要去修复,也就是将文件头修复正确中间我们最重要的一步就是找到他是什么版本的pyc文件,不同版本的文件头不同。
寻找文件头的方法:
1、查看题目名字
1
由pyc文件名可知这是python3.6版本的pyc文件
2、查看文件头
33 0D 就是python3.6版本的文件名开头
找正确的.pyc文件头方法
知道.pyc对应的正确的python版本之后,修改.pyc文件头
1、搜百度,查找相应版本的python的.pyc文件头是怎样的
2、用相对应的python版本写一个.pyc文件,放到010 editor里面去看
python3.6对应的正确的.pyc文件头
红色部分为修改的内容
将修改后的.pyc文件保存到桌面
再次运行uncompyle6,即可生成py文件
python文件中出现代码,进行解题即可(bad_python的py代码暂时看不懂,之后再解)
IDApython
IDAPython由三个独立模块组成:
第一个是idc,它是封装IDA的IDC函数的兼容性模块。
第二个模块是idautils,这是IDA里的一个高级实用函数。
第三个是idaapi,它允许访问更多低级数据,这些数据能够被类使用通过IDA。
IDA中使用脚本的三种方式:
1、shift+F2
2、File-Script file直接引用脚本文件
3、在IDA底部写入指令
IDAPython入门教程 基于IDA7.5_Python3 第一讲 简介与地址获取 - iBinary - 博客园 (cnblogs.com)
基于python3.x IDAPython第二讲 段 函数 汇编指令等操作 - iBinary - 博客园 (cnblogs.com)