实战分析Cpython逆向

Cpython逆向

Python代码转换为C代码的时候,将会大大增加框架代码量。

1、正向py->c

先有正向,再有逆向

pip install cython

写一个简单的pyx文件

.pyx 文件是由 Cython 编程语言 "编写" 而成的 Python 扩展模块源代码文件

print("hello")

写一个 setup.py文件

from distutils.core import setup
from Cython.Build import cythonizesetup(ext_modules = cythonize("test.pyx")
)

使用命令开始编译

python setup.py build_ext --inplace

生成如下文件

打开test.c发现有几千行代码

单纯的一行python代码,生成为c代码就几千行

调用so文件

2、逆向分析

2.1 字符串类型

_Pyx_CreateStringTabAndInitStrings

全局字符串赋值一般在_Pyx_CreateStringTabAndInitStrings中,该函数中使用的字符串定义数组形如:

typedef struct{
PyObject**p;
constchar*s;
constPy_ssize_t n;
constchar* encoding;
constchar is_unicode;
constchar is_str;
constchar intern;
} __Pyx_StringTabEntry;

而字符串是通过__Pyx_StringTabEntry的数组进行初始化的,也就是说当我们在该函数中看到以下伪代码时:

v8 = _mm_unpacklo_epi64(&qword_28A98, "AttributeError");
v9 = 15LL;
v10 = 0LL;
v11 = 0x100;
v12 = 1;

就代表这是一个{&qword_28A98, "AttributeError", 15, 0, 1, 0, 1}的__Pyx_StringTabEntry,也就是说qword_28A98中将要初始化一个内容是"AttributeError"的字符串对象的地址,在后续调用中,调用到AttributeError字符串的地方都会用&qword_28A98指代

2.2 整数类型

_pyx_pymod_exec_chal

qword_29170 = PyLong_FromLong(113LL, v9, v244, v245);
if ( qword_29170 )

qword_29170中将存储一个值为113的整数类型的Python对象。

qword_29600 = PyLong_FromString("2654435769", 0LL, 0LL);
if ( qword_29600 )

大数会用PyLong_FromString函数来初始化,这里qword_29600中将存储一个值为2654435769的整数类型的Python对象,后续用到2654435769的地方将使用qword_29600。

2.3 import写法

v539 = _Pyx_ImportDottedModule_constprop_0(random);
if ( PyDict_SetItem(_pyx_mstate_global_static, random, v539) < 0 )
{

导入``random``模块,同``import random

3、实战分析

这里提供一道自己出的题目,采用了RC4加密,流程很简单。

让我们开干

把提供的so文件拖进IDA中

而且这个函数 _Pyx_CreateStringTabAndInitStrings() 非常大,不能反编译

目前不知道这个函数的加密,我们先打印其相关的属性,看看能不能找到蛛丝马迹

import test
dir(test)

发现是RC4加密,这样逻辑就清晰了

所以现在的目标是获得RC4的秘钥和密文咯,假设RC4没有魔改

刚才我们在函数_Pyx_CreateStringTabAndInitStrings 找到了非常类似密文的值

9d7422eabf8baf369c09121f02e940099d9c6b538d88e30aac08

但是没有找到 秘钥,说明秘钥可能就不是字符串,而是byte类型!

我们先搜索RC4相关函数

发现代码非常多,暂时先不去分析RC4算法

看看哪里调用了我们的RC4算法

函数:_pyx_pymod_exec_test

{width=

但是byte类型怎么初始化呢?

我们编写一个demo,然后反编译去查看初始化方式即可

demo.pyx

key = b'mykekekeke'
en_flag = b'12312312312312'

demo_setup.pyx

from distutils.core import setup
from Cython.Build import cythonizesetup(ext_modules = cythonize("demo.pyx")
)

运行命令

python demo_setup.py build_ext --inplace

先看看c文件

还是很清晰的,直接IDA分析so文件

发现byte类型也存储在函数_Pyx_CreateStringTabAndInitStrings

所以我们再翻阅一下,成功找到类似key的代码

DASCTF{cpython_is_so_easy}

4、参考

Cython 二进制库逆向分析全面指南

https://mp.weixin.qq.com/s/2mjjfuEwSDfMB5ssAQDwKQ

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/905588.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Modbus转IEC104网关(三格电子)

产品概述 Modbus转IE104网关型号SG-TCP-IEC104&#xff0c;是三格电子推出的工业级网关&#xff08;以下简称网关&#xff09;&#xff0c;主要用于Modbus RTU/TCP/ASCII数据采集、DLT645-1997/2007数据采集&#xff0c;可接多功能电力仪表、温控仪、电表等&#xff0c;将采集…

智能工具协同赋能STEM教育科研|探索LLM大语言模型和数学软件Maple的创新实践

LLM 与 Maple&#xff1a;开启 STEM 教育科研新范式 在当今数字化浪潮下&#xff0c;教育与科研领域正面临着前所未有的变革机遇。大语言模型&#xff08;LLM&#xff09;的横空出世&#xff0c;为知识生成、问题求解等带来了全新思路&#xff1b;而数学软件 Maple 以其强大的…

专项智能练习(定义判断)_DA_01

1. 单选题 热传导是介质内无宏观运动时的传热现象&#xff0c;其在固体、液体和气体中均可发生。但严格而言&#xff0c;只有在固体中才是纯粹的热传导&#xff0c;在流体&#xff08;泛指液体和气体&#xff09;中又是另外一种情况&#xff0c;流体即使处于静止状态&#xff0…

pandas读取pymysql和解析excel的一系列问题(版本不匹配)

pandas读取pymysql和解析excel的一系列问题&#xff0c;大部分都是版本不匹配导致的 尤其是pandas,numpy,pymysql,openpyxl不匹配导致 from sqlalchemy import create_engine import numpy as np import pandas as pd conncreate_engine("mysqlpymysql://user:passhost:3…

【中级软件设计师】网络攻击(附软考真题)

【中级软件设计师】网络攻击&#xff08;附软考真题&#xff09; 目录 【中级软件设计师】网络攻击&#xff08;附软考真题&#xff09;一、历年真题二、考点&#xff1a;网络攻击1、拒绝服务攻击&#xff08;DoS攻击&#xff09;2、重放攻击3、特洛伊木马4、网络监听5、SQL注入…

20250515配置联想笔记本电脑IdeaPad总是使用独立显卡的步骤

20250515配置联想笔记本电脑IdeaPad总是使用独立显卡的步骤 2025/5/15 19:55 百度&#xff1a;intel 集成显卡 NVIDIA 配置成为 总是用独立显卡 百度为您找到以下结果 ?要将Intel集成显卡和NVIDIA独立显卡配置为总是使用独立显卡&#xff0c;可以通过以下步骤实现?&#xff…

【C++ | 内存管理】C++ 智能指针 std::shared_ptr 详解及使用例子代码

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; &#x1f923;本文内容&#x1f923;&a…

【CF】Day59——Codeforces Round 914 (Div. 2) D

D. Set To Max 题目&#xff1a; Easy 思路&#xff1a; 简单题 由于题目的数据给的很小&#xff0c;所以我们可以用 n 的复杂度过&#xff0c;那我们来观察一下我们应该怎么操作 显然&#xff0c;如果 a[i] > b[i] 时是无法构造的&#xff0c;同时 a[i] b[i] 时就不用管…

解密企业级大模型智能体Agentic AI 关键技术:MCP、A2A、Reasoning LLMs- GPT源代码解析

解密企业级大模型智能体Agentic AI 关键技术:MCP、A2A、Reasoning LLMs- GPT源代码解析 我们可以稍微看一下, 这是我们GPT的基于它的源代码产生的可视化的内容。 这边是model ,我们在谈这个sampling的时候,本身首先就是说它这个probability distribution ,会有很多的参数…

AI 推理 | vLLM 快速部署指南

本文是 AI 推理系列的第一篇&#xff0c;近期将更新与 vLLM 的相关内容。本篇从 vLLM 的部署开始&#xff0c;介绍 vLLM GPU/CPU 后端的安装方式&#xff0c;后续将陆续讲解 vLLM 的核心特性&#xff0c;如 PD 分离、Speculative Decoding、Prefix Caching 等&#xff0c;敬请关…

Python-MCPInspector调试

Python-MCPInspector调试 使用FastMCP开发MCPServer&#xff0c;熟悉【McpServer编码过程】【MCPInspector调试方法】-> 可以这样理解&#xff1a;只编写一个McpServer&#xff0c;然后使用MCPInspector作为McpClient进行McpServer的调试 1-核心知识点 1-熟悉【McpServer编…

Linux 常用命令 -hostnamectl【主机名控制】

简介 hostnamectl 命令中的 “hostname” 顾名思义&#xff0c;指的是计算机在网络上的名称&#xff0c;“ctl” 是 “control” 的缩写&#xff0c;意味着控制。hostnamectl 命令用于查询和修改系统主机名以及相关的设置。它通过与 systemd 系统管理器交互&#xff0c;允许用…

力扣-二叉树-101 对称二叉树

思路 分解问题为&#xff0c;该节点的左孩子的左子树和右孩子的右子树是不是同一棵树 && 该节点的左孩子的右字数和右孩子的左子树是不是同一课树 && 该节点的左右孩子的值相不相同 代码 class Solution {public boolean isSymmetric(TreeNode root) {// 层…

Nginx技术方案【学习记录】

文章目录 1. 需求分析1.1 应用场景1.2 实现目标 2. Nginx反向代理与实现均衡负载2.1 部署架构2.2 架构描述2.2.1 Nginx代理服务器2.2.2 API服务器与API服务器&#xff08;Backup&#xff09;2.2.3 nginx.conf配置文件2.2.4 测试方法 3. 高速会话缓存技术3.1 问题背景3.2 使用 R…

Ubuntu22.04怎么退出Emergency Mode(紧急模式)

1.使用nano /etc/fstab命令进入fstab文件下&#xff1b; 2.将挂载项首行加#注释掉&#xff0c;修改完之后使用ctrlX退出; 3.重启即可退出紧急模式&#xff01;

Unity 红点系统

首先明确一个&#xff0c;即红点系统的数据结构是一颗树&#xff0c;并且红点的数据结构的初始化需要放在游戏的初始化中&#xff0c;之后再是对应的红点UI侧的注册&#xff0c;对应的红点UI在销毁时需要注销对红点UI的显示回调注册&#xff0c;但是不销毁数据侧的红点注册 - …

极新携手火山引擎,共探AI时代生态共建的破局点与增长引擎

在生成式AI与行业大模型的双重驱动下&#xff0c;人工智能正以前所未有的速度重构互联网产业生态。从内容创作、用户交互到商业决策&#xff0c;AI技术渗透至产品研发、运营的全链条&#xff0c;推动效率跃升与创新模式变革。然而&#xff0c;面对AI技术迭代的爆发期&#xff0…

【Redis】SDS结构

目录 1、背景2、SDS底层实现 1、背景 redis作为高性能的内存数据库&#xff0c;对字符串操作&#xff08;如键、值的存储&#xff09;有极高的要求。c语言原生字符串&#xff08;以\0结尾的字符串数据&#xff09;有一些缺点&#xff1a;长度计算需要遍历&#xff08;O(n)时间…

STM32硬件I2C驱动OLED屏幕

本文基于STM32硬件I2C驱动SSD1306 OLED屏幕&#xff0c;提供完整的代码实现及关键注意事项&#xff0c;适用于128x32或128x64分辨率屏幕。代码通过模块化设计&#xff0c;支持显示字符、数字、汉字及位图&#xff0c;并优化了显存刷新机制。 零、完整代码 完整代码: 1&#x…

鸿蒙 PC 发布之后,想在技术上聊聊它的未来可能

最近鸿蒙 PC 刚发布完&#xff0c;但是发布会没公布太多技术细节&#xff0c;基本上一些细节都是通过自媒体渠道获取&#xff0c;首先可以确定的是&#xff0c;鸿蒙 PC 本身肯定是无法「直接」运行 win 原本的应用&#xff0c;但是可以支持手机上「原生鸿蒙」的应用&#xff0c…