0 / 0 / 0
Регистрация: 04.08.2024
Сообщений: 1
1

IDA Plugin

04.08.2024, 05:21. Показов 281. Ответов 0

Author24 — интернет-сервис помощи студентам
помогите пожалуйста реализовать xor плагин для ида который отображает в окне резульатат шифрования.
проблема заключается в том что когда окно переоткрывается резульатат пустой, и я хочу сделать как это реализованно в калькуляторе в ида чтобы окно переоткрылось с резульатом

del все сделал

может комуто пригодится
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
from PyQt5 import QtWidgets
import idaapi
 
class XorEncryptPlugin(idaapi.plugin_t):
    flags = idaapi.PLUGIN_UNL  # Плагин может быть выгружен
    comment = "XOR Encryption Plugin"
    help = "A plugin to XOR encrypt a string with a byte."
    wanted_name = "XOR Encrypt"
    wanted_hotkey = "Ctrl-Shift-X"
 
    def init(self):
        self.last_encrypted_str = ""  # Храним последний зашифрованный результат
        self.encrypted_hex = ""  # Храним шестнадцатеричное представление результата
        self.encrypted_hex_string = ""  # Храним строковое представление без пробелов
        return idaapi.PLUGIN_OK
 
    def term(self):
        pass
 
    def run(self, arg):
        # Класс формы для ввода данных и выполнения шифрования
        class XorForm(QtWidgets.QDialog):
            def __init__(self, parent=None):
                super(XorForm, self).__init__(parent)
                self.setWindowTitle("XOR Encryption")
                
                # Устанавливаем минимальные размеры окна в два раза больше, чем ранее
                self.setMinimumWidth(1600)  # Увеличиваем ширину окна
                self.setMinimumHeight(1000)  # Увеличиваем высоту окна
 
                # Создание элементов интерфейса
                self.input_string_label = QtWidgets.QLabel("String to encrypt:")
                self.input_string = QtWidgets.QLineEdit()
                
                self.xor_byte_label = QtWidgets.QLabel("XOR Byte (in hex):")
                self.xor_byte = QtWidgets.QLineEdit()
 
                self.result_label = QtWidgets.QLabel("Encrypted Result:")
                self.result_output = QtWidgets.QTextEdit()
                self.result_output.setReadOnly(True)
 
                self.encrypt_button = QtWidgets.QPushButton("Encrypt")
                self.cancel_button = QtWidgets.QPushButton("Cancel")
 
                # Установка раскладки
                layout = QtWidgets.QVBoxLayout()
                layout.addWidget(self.input_string_label)
                layout.addWidget(self.input_string)
                layout.addWidget(self.xor_byte_label)
                layout.addWidget(self.xor_byte)
                layout.addWidget(self.result_label)
                layout.addWidget(self.result_output)
                layout.addWidget(self.encrypt_button)
                layout.addWidget(self.cancel_button)
 
                self.setLayout(layout)
 
                # Связывание кнопок с действиями
                self.encrypt_button.clicked.connect(self.encrypt_string)
                self.cancel_button.clicked.connect(self.reject)
 
                self.parent = None  # Ссылка на родительский объект
 
            def encrypt_string(self):
                # Получение данных с формы
                input_str = self.input_string.text()
                xor_byte_str = self.xor_byte.text()
 
                # Проверка на пустую строку
                if not input_str:
                    idaapi.msg("Invalid input: The string is empty.\n")
                    return
 
                try:
                    # Проверка на корректный ввод байта
                    xor_byte = int(xor_byte_str, 16) & 0xFF
                except ValueError:
                    idaapi.msg("Invalid input: XOR byte is not valid.\n")
                    return
 
                # Шифрование XOR
                encrypted_bytes = bytes(c ^ xor_byte for c in input_str.encode('utf-8'))
                encrypted_str = encrypted_bytes.decode('latin-1')  # Используем 'latin-1' для получения правильного отображения байтов
                self.parent.last_encrypted_str = encrypted_str
 
                # Формируем шестнадцатеричное представление
                self.parent.encrypted_hex = ' '.join(f'{b:02X}' for b in encrypted_bytes)
 
                # Формируем строку без пробелов
                self.parent.encrypted_hex_string = ''.join(f'{b:02X}' for b in encrypted_bytes)
 
                # Обновляем поле вывода
                self.result_output.setPlainText(
                    f"Encrypted String: {self.parent.last_encrypted_str}\n"
                    f"Encrypted Hex: {self.parent.encrypted_hex}\n"
                    f"Encrypted Hex String: {self.parent.encrypted_hex_string}"
                )
                
                # Сообщаем о результате
                idaapi.msg("Encryption completed successfully.\n")
 
        # Проверяем наличие существующего приложения
        app = QtWidgets.QApplication.instance()
        if not app:
            app = QtWidgets.QApplication([])
 
        form = XorForm()
        form.parent = self  # Устанавливаем родительскую ссылку
        
        # Запуск формы и выполнение шифрования
        if form.exec_() == QtWidgets.QDialog.Accepted:
            # Проверка на результат шифрования
            if self.last_encrypted_str:
                idaapi.msg("Encryption completed successfully.\n")
                idaapi.msg(f"Encrypted Result: {repr(self.last_encrypted_str)}\n")
                idaapi.msg(f"Encrypted Hex: {self.encrypted_hex}\n")
                idaapi.msg(f"Encrypted Hex String: {self.encrypted_hex_string}\n")
            else:
                idaapi.msg("Encryption failed: Result is empty.\n")
        else:
            idaapi.msg("Encryption cancelled.\n")
 
def PLUGIN_ENTRY():
    return XorEncryptPlugin()
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.08.2024, 05:21
Ответы с готовыми решениями:

Написать плагин для IDA PRO на Python
Помогите написать плагин для IDA Pro на python! Суть работы плагина: поиск одинаковых строк в...

PythonScript npp-plugin: форматирование
подскажите как сделать что-бы работало что-то из этого: 4 пробела в только начале строк...

Cannot find existing PyQt5 plugin directories
Добрый вечер, пытаюсь при помощи PyInstaller скомпилировать скрипт с модуем PyQt5 ...

This application failed to start because no Qt platform plugin could be initialized
from PyQt5 import QtWidgets, uic import sys app = QtWidgets.QApplication(sys.argv) window =...

Idea python plugin автодополнение/ Настраивается ли глубина анализатора
Пример: mystr = "mytext" myupperstr = mystr.upper() автокомплит работает. for i in...

0
04.08.2024, 05:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.08.2024, 05:21
Помогаю со студенческими работами здесь

Pyinstaller выдаёт ошибку Cannot find existing PyQt5 plugin directories
Я работаю в python 3.4 и PyQt5. Установил Pyinstaller. Хочу создать из скрипта файл exe....

IDA + plugin STM32F40x как подключить?
Уважаемые форумчане, прошу помочь советом. Мне нужно дизассемблировать код для микроконтроллера...

Ida pro
таварищи подскажите де добыть сей софт(ida pro) с кряком google шо-то не помог

Декомпиляция в IDA
Добрый день! Читаю мануал по IDA - пишут, что F5 декомпилирует функцию... Но мало того, что...

IDA Брейкпоинт
Всем добрый день.:) Заранее прошу прощения, если не в тот раздел запихнула свою тему - не знаю...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru