هل مارست الجنس مع Python 2.7 bytecode؟ دعونا unfuck
.
unfuck هي أداة مساعدة ومكتبة لإزالة التشويش المبهم من كود Python 2.7 الثانوي. إنها في الأساس إعادة تنفيذ لـ Python VM مع تتبع الشوائب. بعض الأشياء التي يمكن أن يفعلها unfuck:
#1 و #2 هما أكبر عنصرين تتعثر فيهما برامج فك ترجمات بايثون عند محاولة إعادة بناء كود مصدر بايثون الأصلي.
unfuck يجعل الرمز الثانوي الخاص بك ينتقل من هذا إلى هذا:
أو من هذا إلى هذا:
نعم، هذه أمثلة من العالم الحقيقي.
يمكن استخدام unfuck كمكتبة أو كأداة مساعدة لسطر الأوامر.
unfuck 0.2.0
USAGE:
unfuck [FLAGS] [OPTIONS] <input-obfuscated-file> <output-path> [graphs-dir] [SUBCOMMAND]
FLAGS:
--dry Dry run only -- do not write any files
-g Enable outputting code graphs to dot format
-h, --help Prints help information
-q Disable all logging
-V, --version Prints version information
-v Enable verbose logging
OPTIONS:
--decompiler <decompiler> Your favorite Python 2.7 bytecode decompiler. This program assumes the decompiler's
first positional argument is the file to decompile, and it prints the decompiled
output to stdout [env: UNFUCK_DECOMPILER=] [default: uncompyle6]
ARGS:
<input-obfuscated-file> Input obfuscated file
<output-path> Output file name or directory name. If this path is a directory, a file will be
created with the same name as the input. When the `strings-only` subcommand is
applied, this will be where the output strings file is placed
<graphs-dir> An optional directory for graphs to be written to [default: .]
SUBCOMMANDS:
help Prints this message or the help of the given subcommand(s)
strings-only
لإلغاء قفل ملف واحد:
# deobfuscated.pyc can also be a directory
unfuck obfuscated.pyc deobfuscated.pyc
يمكنك أيضًا توفير علامات إضافية لتفريغ السلاسل إلى ملف، أو تفريغ الرسوم البيانية dot
التي يمكن عرضها في graphviz:
# -g is for printing graphs
unfuck -g obfuscated.pyc deobfuscated.pyc
# use the strings-only subcommand for dumping just dumping strings -- no deobfuscation is performed
unfuck deobfuscated.pyc ./strings.csv strings-only
يتطلب unfuck وجود Python 2.7 في PATH
الخاص بنظامك. بعد التأكد من وجودها، يجب أن تكون قادرًا على cargo build
فقط. إذا تعذر العثور على المترجم الصحيح لسبب ما، فحاول تعيين PYTHON_SYS_EXECUTABLE
env var على مسار مترجم Python 2.7 الخاص بك.
cargo install --force unfuck
ملاحظة: لم يتم تصميم unfuck في الأصل مع وضع استخدام المكتبة في الاعتبار، وبالتالي فهو يقدم منصة تعدد مؤشرات الترابط الخاصة به (في هذه الحالة، Rayon).
الاستخدام واضح إلى حد ما:
use std :: convert :: TryInto ;
use std :: fs :: File ;
let mut pyc_contents = vec ! [ ] ;
let pyc_file = File :: open ( "obfuscated.pyc" ) ? ;
pyc_file . read_to_end ( & mut pyc_contents ) ? ;
// magic/moddate are specific to the PYC header and are required to be
// a valid PYC file
let magic = u32 :: from_le_bytes ( pyc_contents [ 0 .. 4 ] . try_into ( ) . unwrap ( ) ) ;
let moddate = u32 :: from_le_bytes ( pyc_contents [ 4 .. 8 ] . try_into ( ) . unwrap ( ) ) ;
let pyc_contents = & pyc_contents [ 8 .. ] ;
// Use a standard Python 2.7 opcode table
let deobfuscator = unfuck :: Deobfuscator :: < pydis :: opcode :: py27 :: Standard > :: new ( pyc_contents ) ;
let deobfuscator = if enable_graphs {
deobfuscator . enable_graphs ( )
} else {
deobfuscator
} ;
let deobfuscated_code = deobfuscator . deobfuscate ( ) ? ;
let mut deobfuscated_file = File :: create ( "deobfuscated.pyc" ) ? ;
deobfuscated_file . write_all ( & magic . to_le_bytes ( ) [ .. ] ) ? ;
deobfuscated_file . write_all ( & moddate . to_le_bytes ( ) [ .. ] ) ? ;
deobfuscated_file . write_all ( deobfuscated_code . data . as_slice ( ) ) ? ;
gabe_k، yrp، lpcvoid، الأشخاص من قرص WD، squif، ian، pie doom، saruhan