首页 > 编程语言 >CPython逆向实战分析

CPython逆向实战分析

时间:2024-10-25 16:45:51浏览次数:6  
标签:实战 逆向 pyx CPython RC4 setup qword Pyx import

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

基础教程 | Cython 官方文档中文版(gitbooks.io)

1、正向py->c

先有正向,再有逆向

pip install cython

写一个简单的pyx文件

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

print("hello")

写一个 setup.py文件

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

使用命令开始编译

python setup.py build_ext --inplace

image

生成如下文件

image

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

image

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

调用so文件

image

2、逆向分析

2.1 字符串类型

_Pyx_CreateStringTabAndInitStrings

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

typedef struct {
    PyObject **p;
    const char *s;
    const Py_ssize_t n;
    const char* encoding;
    const char is_unicode;
    const char is_str;
    const char 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​指代

 

【----帮助网安学习,以下所有学习资料免费领!加vx:dctintin,备注 “博客园” 获取!】

 ① 网安学习成长路径思维导图
 ② 60+网安经典常用工具包
 ③ 100+SRC漏洞分析报告
 ④ 150+网安攻防实战技术电子书
 ⑤ 最权威CISSP 认证考试指南+题库
 ⑥ 超1800页CTF实战技巧手册
 ⑦ 最新网安大厂面试题合集(含答案)
 ⑧ APP客户端安全检测指南(安卓+IOS)

 

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加密,流程很简单。

让我们开干

image

把提供的so文件拖进IDA中

image

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

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

import test
dir(test)

image

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

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

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

9d7422eabf8baf369c09121f02e940099d9c6b538d88e30aac08

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

我们先搜索RC4相关函数

image

image

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

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

image

函数:_pyx_pymod_exec_test

image

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

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

demo.pyx

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

demo_setup.pyx

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

运行命令

python demo_setup.py build_ext --inplace

先看看c文件

image

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

image

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

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

image

DASCTF{cpython_is_so_easy}

image

更多网安技能的在线实操练习,请点击这里>>

  

标签:实战,逆向,pyx,CPython,RC4,setup,qword,Pyx,import
From: https://www.cnblogs.com/hetianlab/p/18502867

相关文章

  • HarmonyOS NEXT实战教程:菜谱App
    随着鸿蒙系统5.0的发布,兼容的机型越来越多,对于开发者来说机会也越来越多,大家不要气馁,学习鸿蒙肯定会有用武之地,我们要做的就是做好准备。今天跟大家分享实战教程是一个菜谱App。首页这个页面可能会让初学者望而生畏,看起来比较复杂。但是仔细分析一下并不太难。幽蓝君再啰嗦一句......
  • 实战网络攻防中的高版本JDK反射类加载浅析
    就是要打骨折http://mp.weixin.qq.com/s?__biz=MzkwNjY1Mzc0Nw==&mid=2247486065&idx=2&sn=b30ade8200e842743339d428f414475e&chksm=c0e4732df793fa3bf39a6eab17cc0ed0fca5f0e4c979ce64bd112762def9ee7cf0112a7e76af&scene=21#wechat_redirect《Java代码审计》http:......
  • 【MySQL】实战篇—项目需求分析:如何进行需求分析与数据库设计
    在软件开发中,数据库是应用程序的核心组成部分。一个良好的数据库设计能够提高系统的性能、可维护性和扩展性。因此,进行需求分析与数据库设计是开发过程中的重要环节。通过合理的设计,可以确保数据的完整性、一致性和安全性。需求分析的定义需求分析是指在软件开发过程中,收集、......
  • 【MySQL】实战篇—项目需求分析:ER图的绘制与关系模型设计
    在软件开发中,数据库是信息系统的核心部分,合理的数据库设计能够显著提高系统的性能和可维护性。ER图(实体-关系图)是数据库设计的重要工具,它通过图形化的方式描述了数据实体及其相互关系,帮助开发者和设计者更好地理解数据结构和业务逻辑。ER图的定义ER图是一种用于表示数据模型......
  • 【MySQL】实战篇—数据库设计与实现:根据需求设计数据库架构
    在设计数据库架构时,开发者需要遵循一系列步骤,以确保数据库能够高效、可靠地满足系统需求。以下是设计数据库架构的理论知识和步骤说明。1.需求分析需求分析是数据库设计的第一步,旨在理解系统的功能需求和数据需求。通过与利益相关者(如用户、开发人员和业务分析师)进行沟通,明......
  • 《三国志14》游戏辅助工具风灵月影修改器:全面解读与实战指南
    《三国志14》是一款由光荣特库摩(KoeiTecmo)开发的历史策略游戏,玩家可以在游戏中扮演不同的历史人物,通过内政、外交和军事手段来统一中国。风灵月影修改器是为该游戏设计的一种第三方辅助工具,它提供了多种作弊功能来增强游戏体验或简化游戏过程。使用风灵月影修改器前的注意......
  • 实战篇:(二十一)Java 开发指南:避免 18个常见错误,提升你的编码效率
    实战篇:(二十一)Java开发指南:避免18个常见错误,提升你的编码效率Java作为一门成熟的编程语言,拥有丰富的生态系统与广泛的应用。然而,即使是经验丰富的开发者,也时常会在日常开发中犯一些常见的错误。这些错误不仅会影响代码的可读性,还可能造成性能问题甚至难以调试的Bug。本......
  • 34.第二阶段x86游戏实战2-游戏数据保存与定位(特征码定位基址)
    免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!本次游戏没法给内容参考于:微尘网络安全本人写的内容纯属胡编乱造,全都是合成造假,仅仅只是为了娱乐,请不要盲目相信。工具下载:链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd=6tw3提取码:6tw3复制这......
  • 【Python入门】7天速成Python网络爬虫高手,urllib从零基础到实战只需一篇
    ......
  • python实战(二)——房屋价格回归建模
    一、任务背景    本章将使用一个经典的Kaggle数据集——HousePrices-AdvancedRegressionTechniques进行回归建模的讲解。这是一个房价数据集,与我们熟知的波士顿房价数据集类似,但是特征数量要更多,数据也要更为复杂一些。下面,我们将使用这个房价数据进行机器学习中......