日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

python pyc文件解析_pyc文件(Python.org)

發布時間:2023/12/24 综合教程 27 生活家
生活随笔 收集整理的這篇文章主要介紹了 python pyc文件解析_pyc文件(Python.org) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

code object?

在我們導入 python 腳本時在目錄下會生成個一個相應的 pyc 文件,是pythoncodeobj的持久化儲存形式,加速下一次的裝載。

文件結構?

pyc文件由三大部分組成

最開始4個字節是一個Maigc int, 標識此pyc的版本信息

接下來四個字節還是個int,是pyc產生的時間

序列化的 PyCodeObject,結構參照include/code.h,序列化方法python/marshal

pyc完整的文件解析可以參照

關于co_code

python3.6 以上參數永遠占1字節,如果指令不帶參數的話則以0x00代替,在運行過程中被解釋器忽略,也是Stegosaurus技術原理;而低于python3.5的版本中指令不帶參數的話卻沒有0x00填充

例題?

首先嘗試pycdc反編譯失敗

# Source Generated with Decompyle++

# File: imgenc.pyc (Python 2.7)

import sys

import numpy as np

from scipy.misc import imread, imsave

def doit(input_file, output_file, f):

Unsupported opcode: STOP_CODE

img = imread(input_file, flatten = True)

img /= 255

size = img.shape[0]

# WARNING: Decompyle incomplete

注意到是python2.7,也就是說指令序列共占1字節或3字節(有參數無參數)

使用pcads得到

imgenc.pyc (Python 2.7)

67 STOP_CODE

68 STOP_CODE

69 BINARY_DIVIDE

70 JUMP_IF_TRUE_OR_POP 5

73 LOAD_CONST 3: 0

76 LOAD_CONST 3: 0

79 BINARY_DIVIDE

定位到出錯的地方,觀察發現 LOAD_CONST LOAD_CONST BINARY_DIVIDE STORE_FAST opcodes (64 03 00 64 03 00 15 7d 05 00)被破壞了,根據上下文線索修復后

00000120 64 04 00 6b 00 00 72 ce 00 64 03 00 64 03 00 15 |d..k..r..d..d…|

00000130 7d 05 00 64 03 00 64 03 00 15 7d 05 00 64 03 00 |}..d..d…}..d..|

00000140 64 03 00 15 7d 05 00 64 03 00 64 03 00 15 7d 05 |d…}..d..d…}.|

00000150 00 64 03 00 64 03 00 15 7d 05 00 64 03 00 64 03 |.d..d…}..d..d.|

00000160 00 15 7d 05 00 64 03 00 64 03 00 15 7d 05 00 64 |..}..d..d…}..d|

00000170 03 00 64 03 00 15 7d 05 00 64 03 00 64 03 00 15 |..d…}..d..d…|

00000180 7d 05 00 64 03 00 64 03 00 15 7d 05 00 64 03 00 |}..d..d…}..d..|

00000190 64 03 00 15 7d 05 00 64 03 00 64 03 00 15 7d 05 |d…}..d..d…}.|

000001a0 00 64 03 00 64 03 00 15 7d 05 00 64 03 00 64 03 |.d..d…}..d..d.|

000001b0 00 15 7d 05 00 64 03 00 64 03 00 15 7d 05 00 6e |..}..d..d…}..n|

接下來根據修復好的python源代碼得到flag即可

延伸:

Tools?

將python字節碼轉換為可讀的python 源代碼,包含了反匯編(pycads)和反編譯(pycdc)兩種工具

允許我們在Python字節碼文件(pyc或pyo)中嵌入任意Payload。由于編碼密度較低,因此我們嵌入Payload的過程既不會改變源代碼的運行行為,也不會改變源文件的文件大小

原理是在python的字節碼文件中,利用冗余空間,將完整的payload代碼分散隱藏到這些零零碎碎的空間中.

評論

總結

以上是生活随笔為你收集整理的python pyc文件解析_pyc文件(Python.org)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。