pyd文件逆向的方法實現(xiàn)
1.何為pyd文件
? .pyd 文件是由非 Python,其它編程語言編寫 (或直接把 .py 文件轉(zhuǎn)換成 .c 中間文件) 編譯生成的 Python 擴展模塊,是類似 .so .dll 動態(tài)鏈接庫的一種 Python 文件。(當(dāng)然,python代碼也可以打包為pyd)
? 為啥要打包成pyd文件呢?因為pyd文件可以更好的防止反編譯,只能反匯編。如果你直接打包將python代碼直接打包為exe,是可以直接反編譯源代碼的。還有可以將c++,c等編譯為pyd給python調(diào)用。
2.淺淺試一下逆向hello,world
? 開始第一次,一般都是從hello,world開始學(xué)習(xí),這里我們也用hello來進(jìn)行逆向。
from distutils.core import setup from Cython.Build import cythonize setup(ext_modules=cythonize("test1.py"))
這個main.py代碼是用來將python代碼編譯為pyd的代碼
#-*- coding : utf-8-*- def say_hello(): print("hello") def say_sorry(): print("sorry")
這個test.py我寫了兩個函數(shù),一個say_hello,一個say_sorry。我們的目標(biāo)就是改變函數(shù)功能,將say_hello輸出sorry,say_sorry輸出hello。
我們現(xiàn)在運行main.py。會直接生成test1.cp38-win_amd64.pyd的文件,這里我們新開一個py文件,名字叫測試.py。在這個代碼里面輸入這樣的代碼。其實這個pyd就是和python的模塊差不多??梢酝ㄟ^import調(diào)用里面的函數(shù)。
import test1 test1.say_hello() test1.say_sorry() #hello #sorry
這樣就會輸出hello和sorry。當(dāng)然,我們可能開始不知道這個里面有啥函數(shù),我們可以利用help命令來開里面的函數(shù)
help(test1)
可以看到以下輸出。
Help on module test1:
NAME
test1FUNCTIONS
say_hello()
say_sorry()DATA
__test__ = {}FILE
e:\xxxx\xxxxx\test1.cp38-win_amd64.pydNone
里面的FUNCTIONS我們可以進(jìn)行調(diào)用。
3.開始逆向
? 這里,我們要用ida進(jìn)行逆向。將pyd文件拿到ida里面。
點擊這個view,選擇里面對的string。查看字符串
這里我們以GCTL為界限,我們查看以上的字符串。
可以看到,我們看到了sorry和hello這兩個字符串。以及我們的函數(shù)名字。這里我們點擊進(jìn)入hello。
可以看到這個玩意,我們現(xiàn)在的任務(wù)就是修改掉這個hello改成sorry。再保存到pyd文件就行。
4.修改字節(jié)
點擊這個edit,選擇這個
選出change byte。
這里是使用的16進(jìn)制,我們隨便找個網(wǎng)站,將sorry轉(zhuǎn)為16進(jìn)制
轉(zhuǎn)完之后,將16進(jìn)制填上去
填完畢后,可以看到。hello已經(jīng)變成了sorry了
這里我們保存一下,還是再patch program里面,選擇apply xxxx input file 保存文件。保存完成后。
5.測試一下修改的pyd
還是同樣的代碼。
import test1 test1.say_hello() test1.say_sorry()
可以看到輸出的兩個sorry??梢钥吹轿覀兊男薷某晒α恕?/p>
6.其他方法
? 當(dāng)然,除了這個ida修改字符串等,還有其他方法,比如hook python代碼。獲取傳參等。比如,你通過dir函數(shù)看到這個pyd文件用了base64模塊。那你可以直接hook base64模塊。來獲取傳參。這里就不展開了,有興趣,可以自己寫個python代碼打包成pyd,自己逆向看看。
到此這篇關(guān)于pyd文件逆向的方法實現(xiàn)的文章就介紹到這了,更多相關(guān)pyd文件逆向內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python3實現(xiàn)163郵箱SMTP發(fā)送郵件
這篇文章主要為大家詳細(xì)介紹了Python3實現(xiàn)163郵箱SMTP發(fā)送郵件,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-05-05python算法學(xué)習(xí)雙曲嵌入論文代碼實現(xiàn)數(shù)據(jù)集介紹
由于雙曲嵌入相關(guān)的文章已經(jīng)有了一系列的代碼。本篇博客主要目的實現(xiàn)最開始的雙曲嵌入論文,將論文中有些直接寫出來的內(nèi)容進(jìn)行了細(xì)節(jié)的推導(dǎo),同時實現(xiàn)對應(yīng)的代碼2021-11-11將Python中的數(shù)據(jù)存儲到系統(tǒng)本地的簡單方法
這篇文章主要介紹了將Python中的數(shù)據(jù)存儲到系統(tǒng)本地的簡單方法,主要使用了pickle模塊,需要的朋友可以參考下2015-04-04Python結(jié)合Redis開發(fā)一個消息訂閱系統(tǒng)
消息訂閱是一種常見的通信模式,用于實現(xiàn)系統(tǒng)之間的解耦和異步通信,本文將詳細(xì)介紹如何使用Python實現(xiàn)一個高效與可靠的消息訂閱系統(tǒng),有需要的可以了解下2025-03-03python threading和multiprocessing模塊基本用法實例分析
這篇文章主要介紹了python threading和multiprocessing模塊基本用法,結(jié)合實例形式詳細(xì)分析了Python中threading和multiprocessing模塊基本概念、功能、使用方法及相關(guān)操作注意事項,需要的朋友可以參考下2019-07-07python解析mdf或mf4文件利器之a(chǎn)sammdf用法
這篇文章主要介紹了python解析mdf或mf4文件利器之a(chǎn)sammdf用法,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-06-06