Skip to content

一种py注入的ctf解题思路

🕒 Published at:

一种py注入的ctf解题思路

目前常见的python题都会使用PyInstaller,Nuitka等工具进行打包

Frame 2147238197

常用的解题思路也是先解包反编译pyc等进行分析

然而这里有一种不同于逆向解包的方式来解题

Python注入!!!

PyInjector使用

pyInjector - 将 Python 代码注入到任何 Python 进程中,或在目标进程内生成交互式 Python shell。

如何使用呢?

  1. 下载PyInjector到本地,解压出其中的dll

  2. 目标execode.py两个文件放在同一目录下。

    9e691a0154f6706e

  3. code.py中编写脚本

    js
    print("Hello from injected code.py")
  4. 运行目标程序

  5. 使用Process Hacker 2 (一个魔改的systeminformer)进行dll注入

    确保目标程序在运行中,右键目标进程选择Miscellaneous/Inject DLL..

    image

    找到刚刚解压的pyInjector的dll,根据系统选择注入的dll

    be648b8f22acff2a

可以看到注入的瞬间执行了code.py

e8b5a054098301dd

每次执行代码只需注入一次dll

不仅如此,注入的环境就是该程序当前运行环境

因此我们可以做到

  1. 打印全局变量

    js
    print(
    dir
    ())

    88719a3512658a9a

    如果是PyInstaller可以看到main函数了_pyi_main_co

    由此我们就可以直接dis出字节码了

    js
    import
    dis
    dis.dis(_pyi_main_co)

    cc8530e0d684e729

  2. 如果是Nuitka,我们不能dis出代码

    Nuitka 将 Python 代码转换为本地代码,而 Python 的反汇编器无法反汇编这种本地代码。

    因此我们只能获取到本地的变量

    比如这个题我们打印dir(),发现了enc_flag和key,同时题名叫XOR

    于是就猜测简单异或,可以得出flag

    9167b9d0fd8ad9a9

附件

这次记得了要上传附件

XOR.exe Nuitka

这个是来自FurryCTF2025的POFP战队AA师傅出的题

https://bluestars.lanzouu.com/iAf2C3hfoa4j

NotNormalExe.exe PyInstaller

这个是来自NewStar的好像是PangBai师傅出的题

https://bluestars.lanzouu.com/ivwkv3hfoauf

*封面的图片使用figma随便画的()