實戰分析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.pswp.cn/news/905588.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/905588.shtml
英文地址,請注明出處:http://en.pswp.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…