成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

python編譯后的pyd爆破

開發 后端
軟件啟動后檢查機器碼,然后需要輸入授權碼才可使用,看著很是惱火,所以想嘗試破解。其中關鍵應該是需要爆破pyd里的邏輯,修改匯編代碼來實現繞過授權。

[[380540]]

 最近接觸一個國外某app的協議軟件,是python3.8寫的,它把關鍵模塊都編譯成了pyd,然后使用pyinstaller打包發布給用戶。軟件啟動后檢查機器碼,然后需要輸入授權碼才可使用,看著很是惱火,所以想嘗試破解。其中關鍵應該是需要爆破pyd里的邏輯,修改匯編代碼來實現繞過授權。

前提知識

1. py、pyc、pyo、pyd

py: python 腳本文件(source code)

pyc: 腳本文件編譯得到的字節碼, 二進制文件,python文件經過編譯器編譯之后的文件。可以提高文件加載速度。

pyo: 腳本文件開啟優化編譯選項(-O)編譯得到的字節碼,二進制文件,優化編譯后的文件。可以通過python -O file.py生成。

pyd: 基本的Windows DLL文件,python的動態鏈接庫。

2. 編譯pyd

要編譯的腳本:uitl1.py

 

  1. def fun_hello(s):  
  2.     if s == 1:  
  3.         return 'hello world'  
  4.     elif s == 2:  
  5.         return '222222222' 

提供編譯腳本:setup.py 

  1. from setuptools import setup  
  2. from Cython.Build import cythonize   
  3. setup(  
  4.     name='test' 
  5.     ext_modules=cythonize('util1.py')  

在setup.py文件所在目錄下進行如下命令:

  1. python setup.py build_ext --inplace 

這樣就能看到同級目錄下生成pyd文件了。32位的python生成pyd文件是32位的,64位的python生成的是64位的。

3. 使用pyd

test.py 

  1. import util1   
  2. if __name__ == '__main__':  
  3.     print(util1.fun_hello(2)) 

4. pyinstaller打包py到exe

  1. pip install pyinstaller 
  1. pyinstaller test.py 

5. 解包pyinstaller打包的exe

pyinstxtractor.py即可。這個代碼不長,可以調試看看,熟悉下打包的exe組成。需要注意的是,被打包的文件都是zlib.compress壓縮過后,再按照固定格式組成exe的,所以直接修改打包后的exe的16進制碼來爆破貌似不好操作。只能解包后修改pyd,然后找齊依賴的庫,重新pyinstaller打包,實現爆破。

https://github.com/countercept/python-exe-unpacker

6. pyc反編譯

uncompyle6支持python3.8的pyc的反編譯。

需要注意的是,如果是pyinstaller解包后取到的pyc文件,文件頭部的magic被抹除過了,所以需要把對應版本python的magic加上來,可以裝對應版本python,然后到安裝目錄下隨便找個pyc文件,看一下頭部,然后用010Editor復制到解包后的pyc,就可以正常反編譯了。

下圖是python3.8_32位的magic頭:

https://github.com/rocky/python-uncompyle6

pyd文件匯編代碼和python腳本的對應關系分析

前面的前提知識,隨便搜搜都能找到。但是如何才能直接修改pyd的匯編代碼,實現python腳本流程的更改呢?

我百度谷歌搜了半天也沒找到合適的資料,也許很少有人破解python編譯打包的exe吧。

那么下面就是我做的工作了,也是本帖的價值所在了。

我自己寫了一個python小腳本,然后編譯成了pyd,它會生成一個中間的util1.c文件,代碼大概有3000多行。只要花時間精力熟悉這個c文件,然后對照著ida就可以了解python腳本轉成C然后編譯成匯編指令,它們3者之間大概對應關系了。

下面略過大概1天的工作量,直接給出我們拿到一個pyd后,怎么快速找到我們要找的關鍵python代碼。然后直接爆破。

把要分析的pyd文件拖到對應32位或64位的IDA:

大概所有的pyd都只有這個一個導出函數,當這個pyd模塊被其他py腳本import時會調用這個導出函數進行模塊初始化。

跳轉到dword_1000634C可以看到一個結構體,里面有一個關鍵的成員__pyx_moduledef_slots。

這個成員是一個結構體數組。

里面有個關鍵函數__pyx_pymod_exec_util1負責初始化python腳本里的所有變量,函數,常量等等,把他們都對應到pyobject,然后就只使用這些pyobject了。所以匯編里看流程就很難,因為沒有明顯的明文了。

定位到 __pyx_pymod_exec_util1后,我們主要的目的是找常量和pyobject的對照表,python腳本里的函數名和匯編函數的對照表,有這2個表,python腳本和匯編的對應關系就明朗了。這里就只能手動往下翻了。

翻到類似調用 PyUnicode_InternFromString 的地方,大概就是我們要找的常量對照表了。

也就是C文件里的這個表。

其中offset dword_10006DFC就是代表字符串"222222222"的pyobject,直接找它的交叉引用就可以定位一些關鍵代碼了。

我們繼續在 __pyx_pymod_exec_util1 里找python腳本函數對應匯編函數的那個表。

跳過去:

aFunHello指向python腳本里的函數名。

__pyx_pf_5util1_fun_hello就是對應的匯編函數。

可以看到,只要找到這個表,就很容易定位我們要找的python腳本函數對應的匯編實現了。

其實我們也可以不必如上這么麻煩。只要在.data段里翻一翻。或者string窗口找到感興趣的字符串交叉引用也能很快找到這個表。

需要知道的就是, aFunHello下面就是對應的匯編實現函數。

現在終于可以去分析fun_hello這個python腳本函數對應的匯編函數了。

可以看到腳本里的 s == 1 對應的匯編就是 __Pyx_PyInt_EqObjC 然后下面會使用PyObject_IsTrue判斷這個函數的返回值。

那么爆破點就找到了。把 jz short loc_10004753 改成jnz short loc_10004753即可。

IDA-》edit-》Patch program-》Assemble修改,然后 IDA-》edit-》Patch program-》Apply patches to input file即可得到修改后的pyd文件。

這樣就實現了修改python腳本的執行邏輯了。

正常腳本應該是輸出22222222才對,因為我們的爆破,輸出了hello world!

這里我只是簡單分析了if語句的修改,可以多寫幾個例子。實現修改其他流程。

在此只是拋轉引玉,給大家一點點參考。省一點點時間。

另:大家看了半天以為我是分析那個國外app協議軟件,其實我還沒有搞定那個破解,所以只把自己這段時間的分析工作貼了上來,僅供參考。 

 

責任編輯:龐桂玉 來源: 馬哥Linux運維
相關推薦

2019-12-06 13:59:37

代碼開發Python

2020-12-04 09:11:45

Python加密文件爆破字典

2013-01-06 14:11:24

Android編譯代碼結構Android開發

2009-07-01 18:41:16

JSP編譯

2010-05-13 09:45:26

Linux地址空間

2018-05-02 14:30:32

2010-02-03 17:29:06

Python編譯

2010-03-19 11:04:20

python模塊

2022-04-14 12:25:13

深度學習方程AI

2010-03-15 11:11:12

Pthon文件編譯

2017-02-20 13:54:14

Java代碼編譯

2010-02-02 17:33:35

Python函數編譯

2010-03-19 08:47:10

Python源代碼

2011-03-14 14:40:11

iptables編譯

2023-01-18 08:00:00

2010-03-23 11:17:16

Python 動態編譯

2024-09-09 15:06:32

2020-03-17 16:15:01

Python編譯代碼

2021-08-10 08:39:06

SSH協議密碼爆破安全工具

2011-03-03 15:54:54

Vsftpd安裝編譯
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 91视频一区 | 亚洲 日本 欧美 中文幕 | 日日夜夜精品视频 | 国产欧美一区二区三区日本久久久 | 97精品国产97久久久久久免费 | 国产精品美女久久久久aⅴ国产馆 | 人人干视频在线 | 欧美综合久久久 | 久久精品国产亚洲一区二区 | 狠狠综合久久av一区二区小说 | 欧美在线一区二区三区 | 久久久久久久香蕉 | 免费v片 | 日本爱爱 | av免费网站在线观看 | 玖玖免费| 亚洲精品视频免费观看 | 日本字幕在线观看 | 91网在线播放| 99视频在线免费观看 | 久草在线青青草 | 精品在线99| 伊人久久麻豆 | 欧美一区二区成人 | 精品国产欧美一区二区三区成人 | 色网站在线 | 国产欧美精品区一区二区三区 | 久久亚洲国产精品日日av夜夜 | 国产日韩欧美在线 | 麻豆一区二区三区精品视频 | 美国黄色毛片 | 九九精品久久久 | wwww.8888久久爱站网 | 天天干狠狠操 | 亚洲精品1区 | 国产精彩视频 | 久久久久无码国产精品一区 | 国产99久久精品一区二区永久免费 | 911精品国产 | 欧美爱爱视频网站 | 亚洲精品国产电影 |