python逆向总结
python逆向
使用python2加载python3生成的*.pyc文件也会导致此错误。但似乎有例外
但通常会报出有魔数错误(bad-magic-number-error)以下为Stack Overflow的一篇
re羊城杯 2020 login
pyinstaller编译的exe文件
使用python3
pyinstaller flag.py
在script文件夹里,会生成flag.exe_extracted,在文件夹里找到login
提出index文件加上文件头:
420D0D0A000000000DA91B60A8090000
反汇编 Python 字节码
基本反编译
函数 dis() 打印 Python 代码源(模块、类、方法、函数或代码对象)的反汇编形式。 可以通过从命令行运行 dis 来反汇编诸如 dis_simple.py 之类的模块。
# cat demo.py |
字节码总结
栈基本操作
LOAD_NAME 压栈
LOAD_GLOBAL 全局变量 |
POP_TOP
删除堆栈顶部(TOS)项。
ROT_TWO
交换两个最顶层的堆栈项。
ROT_THREE
将第二个和第三个堆栈项向上提升一个位置,顶项移动到位置三。
DUP_TOP
复制栈顶元素压栈
DUP_TOPX(count)
复制栈顶count个元素再按原顺序压栈 count范围[1,5]
一元操作 一元操作获取堆栈顶部元素,应用操作,并将结果推回堆栈。
UNARY_POSITIVE
实现 TOS = +TOS 。取正
UNARY_NEGATIVE
实现 TOS = -TOS 。取负
UNARY_NOT
实现 TOS = not TOS 。逻辑取反
UNARY_INVERT
实现 TOS = ~TOS 。按位取反
二元操作 从堆栈中删除堆栈顶部(TOS)和第二个最顶层堆栈项(TOS1)。 执行操作,并将结果放回堆栈。
BINARY_POWER
实现 TOS = TOS1 ** TOS 。幂运算
BINARY_MULTIPLY
实现 TOS = TOS1 * TOS 。乘法
BINARY_FLOOR_DIVIDE
实现 TOS = TOS1 // TOS。地板除
BINARY_MODULO
实现 TOS = TOS1 % TOS 取余
BINARY_ADD
实现 TOS = TOS1 + TOS 。加法
BINARY_SUBTRACT
实现 TOS = TOS1 - TOS 。减法
BINARY_LSHIFT
实现 TOS = TOS1 << TOS 。左移
BINARY_LSHIFT
实现 TOS = TOS1 << TOS 。右移
BINARY_AND
实现 TOS = TOS1 & TOS 。与
BINARY_XOR
实现 TOS = TOS1 ^ TOS 。异或
BINARY_OR
实现 TOS = TOS1 | TOS 或
BINARY_SUBSCR
实现 TOS = TOS1[TOS] 。索引