Day4 pyinstaller解包方法(羊城杯login)

python_exe解压包 提取码:bbxb

Pyinstaller介绍
PyInstaller是一个开源的Python程序打包工具,它能够将Python应用程序打包成独立的执行文件,无需
依赖Python解释器即可在多种操作系统上运行。这对于分发Python应用程序非常有用,因为用户无需安装
Python或应用程序所依赖的库,就可以直接运行程序。

经过 PyInstaller 打包的 .exe 文件不能直接用 IDA Pro 顺利分析,因为 PyInstaller 将 Python 字
节码和依赖打包成机器码执行文件,而 IDA Pro 主要用于分析机器码,对字节码的直接分析支持有限,且
打包过程中可能包含的混淆和加密技术增加了分析的难度。
Pyinstaller解包方法(羊城杯login)
  • pyc文件恢复
  • 反编译pyc文件
pyc文件恢复
在将python文件打包成exe文件的过程中,会抹去pyc文件前面的部分信息,所以在反编译之前需要检查并添
加上这部分信息。
抹去的信息内容可以从struct文件中获取,利用010editor添加这部分信息。

方法一(利用pyinstxtractor.py):
# 执行下面命令,会生成 target.exe_extracted 文件,里面会有pyc入口文件
python pyinstxtractor.py target.exe

方法二(archive_viewer.py):
# 执行以下命令,会显示由 PyInstaller 打包的 .exe 文件中的内容,然后利用 x filename 命令提取文件,并命名为.pyc文件。
pos:文件在 .exe 文件中的起始位置。
length:文件在 .exe 文件中的长度(压缩后的长度)。
uncompressed:文件解压后的原始长度。
iscompressed:一个标志,指示文件是否被压缩。
type:文件类型。
name:文件或模块的名称。

python archive_viewer.py target.exe

方法三:
直接使用 EasyPythonDecompiler 工具,可以直接查看 .exe 文件中的内容,并提取出 .pyc 文件。
反编译pyc文件
# 安装 uncompyle6 库
pip install uncompyle6
# 反编译pyc文件
uncompyle6 login.pyc
演示案例:羊城杯login
  • 利用 exeinfo 查看文件的PE信息
  • 利用 pyinstxtractor.py 解包pyc文件
  • 利用 uncompyle6 反编译pyc文件
  • 根据反编译文件 逆向flag
    在这里插入图片描述
# 可以看到,是经过pyinstaller打包的exe文件,python版本为3.6,所以先恢复pyc文件
# 这里用第一种方法,利用Aconada中的python3.6虚拟环境执行以下命令,由于环境正确所
# 以这里不需要额外去对照struct.pyc文件去修复login.pyc文件,如果没有生成login.pyc
# 文件,就利用 010editor 工具对比struct.pyc文件和login.pyc文件的头部信息,为login.pyc
# 并添加上缺少的头部信息
python pyinstxtractor.py login.exe

# 接下来进入到生成的文件夹中,可以看到login.pyc文件,用uncompyle6反编译
uncompyle6 login.pyc

源码如下:
import sys
input1 = input("input something:")
if len(input1) != 14:
    print("Wrong length!")
    sys.exit()
else:
    code = []
    for i in range(13):
        code.append(ord(input1[i]) ^ ord(input1[i + 1]))

    code.append(ord(input1[13]))
    a1 = code[2]
    a2 = code[1]
    a3 = code[0]
    a4 = code[3]
    a5 = code[4]
    a6 = code[5]
    a7 = code[6]
    a8 = code[7]
    a9 = code[9]
    a10 = code[8]
    a11 = code[10]
    a12 = code[11]
    a13 = code[12]
    a14 = code[13]
    if (a1 * 88 + a2 * 67 + a3 * 65 - a4 * 5 + a5 * 43 + a6 * 89 + a7 * 25 + a8 * 13 - a9 * 36 + a10 * 15 + a11 * 11 + a12 * 47 - a13 * 60 + a14 * 29 == 22748) & (a1 * 89 + a2 * 7 + a3 * 12 - a4 * 25 + a5 * 41 + a6 * 23 + a7 * 20 - a8 * 66 + a9 * 31 + a10 * 8 + a11 * 2 - a12 * 41 - a13 * 39 + a14 * 17 == 7258) & (a1 * 28 + a2 * 35 + a3 * 16 - a4 * 65 + a5 * 53 + a6 * 39 + a7 * 27 + a8 * 15 - a9 * 33 + a10 * 13 + a11 * 101 + a12 * 90 - a13 * 34 + a14 * 23 == 26190) & (a1 * 23 + a2 * 34 + a3 * 35 - a4 * 
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值