Python代码转换为C代码的时候,将会大大增加框架代码量。
基础教程 | Cython 官方文档中文版(gitbooks.io)
1、正向py->c
先有正向,再有逆向写一个简单的pyx文件
.pyx 文件是由 Cython 编程语言 "编写" 而成的 Python 扩展模块源代码文件写一个 setup.py文件- from distutils.core import setup
- from Cython.Build import cythonize
-
- setup(
- ext_modules = cythonize("test.pyx")
- )
复制代码 使用下令开始编译- python setup.py build_ext --inplace
复制代码[img=720,138.14744801512288]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202410251530565.png[/img]
生成如下文件
[img=720,441.2283044058745]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202410251530566.png[/img]
打开test.c发现有几千行代码
[img=720,464.79638009049773]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202410251530567.png[/img]
单纯的一行python代码,生成为c代码就几千行
调用so文件
[img=720,149.30526315789473]https://m-1254331109.cos.ap-guangzhou.myqcloud.com/202410251530568.png[/img]
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写法
[code]v539 = _Pyx_ImportDottedModule_constprop_0(random);if ( PyDict_SetItem(_pyx_mstate_global_static, random, v539) ></strong></p>
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |