Найти - Пользователи
Полная версия: Декомпилирование и расшифровка
Начало » Центр помощи » Декомпилирование и расшифровка
1
LaBr0n
Даётся 3 файла: libprojectone.so, projectone.pyc, secret.
Необходимо декомпилировать projectone.pyc с помощью uncompyle6. Декомпилируется вроде бы хорошо, но не уверен, писал в Ubuntu так : uncompyle6 projectone.pyc > projectone.py . Т.к. он не правильный (код), я добавил в начале #!/usr/bin/python3, и создал через touch message. Всё бы хорошо, скрипт запускается. Только по идее в файле message должна быть расшифровка + secret почему то чиститься, даже и не знаю что делать.
py.user.next
А projectone.py работает правильно? Скинь сюда файл projectone.py .
PEHDOM
LaBr0n
Только по идее в файле message должна быть расшифровка + secret почему то чиститься, даже и не знаю что делать.
хмм давайте посмотрим что делает ваш код, если выкинуть все функции и импорты то там по сути три строчки:
 message = read_message('message')
secret = encrypt_message(message)
write_secret('secret', secret)
итак что же делает первая срочка:
 ...
message = read_message('message')
.....
def read_message(f):
    with open(f, 'r', encoding='utf-8') as (f): 
        return f.read()
открываем файл ‘message’ и возвращаем что удалось прочитать из файла, итого в перемнной message у нас э-э-э-э ничего так файла ‘message’ то нету… по идее оно должно ругнуться No such file or directory и вывалитьтья, но ХЗ предположим что у вас таки есть файл ‘message’ просто пустой . тогда оно дальше отработает.
вторая строчка:
 ...
secret = encrypt_message(message)
...
libprojectone = ctypes.cdll.LoadLibrary('./libprojectone.so')
def encrypt_char(char, key):
    global libprojectone
    return chr(libprojectone.encrypt_char(ord(char), key))
def encrypt_message(message):
    secret = ''
    for i in range(len(message)):
        secret += encrypt_char(message[i], 8)
итак берем наш message пребираем посимвольно и шифруем каждый символ с помощью функции .encrypt_char библиотеки libprojectone.so, естественно поскольку в message у нас дырка от бублика то и secret = ''

и наконец треться строчка:
 ...
write_secret('secret', secret)
...
def write_secret(f, secret):
    with open(f, 'w', encoding='utf-8') as (f):
        f.write(secret)
открыть файл ‘secret’ и записать туды данные из переменной secret в которой , как мы ране выяснили, дырка от бублика, что собственно оно и записывает. С чего вы взяли что в файле message должна быть расшифровка я понятия не имею…
Походу вы перепетали encrypt(зашифровать) и decrypt(расшифровать)
LaBr0n
PEHDOM
А как написать расшифровку(decrypt), так как надо расшифровать secret?
LaBr0n
Он даже с функциями шифрования не справляется.
Вот что он выдаёт при попытке зашифровать:
Traceback (most recent call last):
File “./projectone.py”, line 36, in <module>
secret = encrypt_message(message)
File “./projectone.py”, line 30, in encrypt_message
secret += encrypt_char(message, 8)
File “./projectone.py”, line 24, in encrypt_char
return chr(libprojectone.encrypt_char(ord(char), key))
ValueError: chr() arg not in range(0x110000)
PEHDOM
LaBr0n
Он даже с функциями шифрования не справляется.
да вроде справляеться…

LaBr0n
А как написать расшифровку(decrypt), так как надо расшифровать secret?
по идее ровно так же как и encrypt при условии что в libprojectone.so есть функция decrypt_char или чтото типа того.

На самом деле там шифрование “от дурака” , когда оно шифрует оно переводит символы в числовой вид, и потом просто отнимает 19(при key=8) и обратно переводит в символ.
Соответственно чтобы расшифровать нужно взять символ перевести в числовой вид, добавить 19 и получившееся число опять перевести в символ.
конкретно в вашем случае в файле secret “Первак{помоги_мне}”

единственная проблема это узнать что оно должно делать когда ord(char)<19, тоесть по идее оно должно отнять от максимального значения (19-ord(char)), вопрос как узнать это максимальное значение(предположительно это 0x110000, но это не точно). И соотвевенно какое максимальное значение при достижении которого нужно уже считать с нуля.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB