Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 5, 2019 00:37:24

LaBr0n
Зарегистрирован: 2019-12-05
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Декомпилирование и расшифровка

Даётся 3 файла: libprojectone.so, projectone.pyc, secret.
Необходимо декомпилировать projectone.pyc с помощью uncompyle6. Декомпилируется вроде бы хорошо, но не уверен, писал в Ubuntu так : uncompyle6 projectone.pyc > projectone.py . Т.к. он не правильный (код), я добавил в начале #!/usr/bin/python3, и создал через touch message. Всё бы хорошо, скрипт запускается. Только по идее в файле message должна быть расшифровка + secret почему то чиститься, даже и не знаю что делать.

Прикреплённый файлы:
attachment py.rar (1,9 KБ)

Офлайн

#2 Дек. 5, 2019 09:46:11

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9716
Репутация: +  842  -
Профиль   Отправить e-mail  

Декомпилирование и расшифровка

А projectone.py работает правильно? Скинь сюда файл projectone.py .



Офлайн

#3 Дек. 5, 2019 10:01:10

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Декомпилирование и расшифровка

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(расшифровать)



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Дек. 5, 2019 10:17:48)

Офлайн

#4 Дек. 5, 2019 17:56:45

LaBr0n
Зарегистрирован: 2019-12-05
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Декомпилирование и расшифровка

PEHDOM
А как написать расшифровку(decrypt), так как надо расшифровать secret?

Отредактировано LaBr0n (Дек. 5, 2019 18:48:12)

Офлайн

#5 Дек. 5, 2019 18:04:22

LaBr0n
Зарегистрирован: 2019-12-05
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Декомпилирование и расшифровка

Он даже с функциями шифрования не справляется.
Вот что он выдаёт при попытке зашифровать:
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)

Офлайн

#6 Дек. 6, 2019 10:39:47

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Декомпилирование и расшифровка

LaBr0n
Он даже с функциями шифрования не справляется.
да вроде справляеться…

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

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

единственная проблема это узнать что оно должно делать когда ord(char)<19, тоесть по идее оно должно отнять от максимального значения (19-ord(char)), вопрос как узнать это максимальное значение(предположительно это 0x110000, но это не точно). И соотвевенно какое максимальное значение при достижении которого нужно уже считать с нуля.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Дек. 6, 2019 10:57:00)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version