From b0b7c7b140ca56093fc195e292503e792609e237 Mon Sep 17 00:00:00 2001 From: serr Date: Sun, 16 Mar 2025 17:20:45 +0300 Subject: [PATCH] start --- .gitignore | 2 + __pycache__/i64tosqlite.cpython-312.pyc | Bin 0 -> 2077 bytes comp.py | 89 ++++++++++++++++++++++++ i64tosqlite.py | 46 ++++++++++++ output.xlsx | Bin 0 -> 7252 bytes 5 files changed, 137 insertions(+) create mode 100644 .gitignore create mode 100644 __pycache__/i64tosqlite.cpython-312.pyc create mode 100644 comp.py create mode 100644 i64tosqlite.py create mode 100644 output.xlsx diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..6a09e50 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +venv +.xlsx \ No newline at end of file diff --git a/__pycache__/i64tosqlite.cpython-312.pyc b/__pycache__/i64tosqlite.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bce8d4cefb54827b7383e7d5070b7cd949385cbe GIT binary patch literal 2077 zcmbtVU2GIp6uz@FyF1(69iX&ON|Z}~u$xHbudQilN!hk(rL?s_iELIT%gz+G-R`V2 zv$nh0nu3~0FljLoNkA#_K@2`rBB7DL1bp-5jDV~|UyM(_RnWx1i}%iS7K$+@dXhc& z-1GCDGv}Ur_xoV51QELV(~pNQ@d*7wHx7B0g-1O^_ykEvVv;CguS|rIT<@WXOJ*f@ ztPUZyOyVM(>so=# z=3Oh1^GG7SwY7QXFgL|X9?6quCGS~w%I!nC&-va_>pY#Ez2>>RTjIa+U8Mab#2`Ir zO9)9NdG^^{ja~(cH;jQ z9sKv`2{g$bKod+z$lN73C72MLhZ}GOzJYn;q;U)nzTT72Wei`#JX|r}#nb@T;kt3c zcpt+8T*38;#$As6#7etyl(-m2;U8Cer$f7}wUeoNMc#$!rg?X0W}xt-q^p zpiOKW9_lmK7q`QM9b$V&xNm=dcTdNFSynW3ywTq`FeG*o^-#!VvU2Ke(;Yt|$H#J8 zmU}J5NTo4N##$yGmo;r9lT2oDT$N+GOsmEns;a2AB9S`m9FY^&jC*sdhEroHWg>-T z>e`G$KGUUWCYO%sM@)}Anb362T+>NDyjRgXX*VoPvqZ}rN~;RZYO-o3WxCU9BBh(9 z;aD;$OZ~RV_Vsm4#^to0P*NeUDI}zr__WI=PliIYvXx28hb-F7w6Mo(vSQF|*% z#>>{R@o`C|H^gLQjlMK=90~n#kjUZY=&&ZMS~Np=v|ZN5bR`{y&*2L=1t(!P+CV4w z6r7F199cdhzd1M`g)=Zq&3FffkKr>o7qzR1lKOPT&R(C+n(OTLI`xdG%D6~e)Jl?? zKBroMJc85c_W%kAGfl^vW?GN8p02;^4=oCtplbKRLD<~`c>f)t7x>;qf3WCNch_HS z`7|x?^EtqK?+9Vw!_T-tCBb>c@@awA0caTnJak7G27Y*nN51t1K2RtLKyWhzs(`O9 z@T-@6Zog+byi|%RUno>>Dc~Kyc{xiH@VILi`O+ETxG<~Du@`pTkNP0L&UfnEr)IMYvx%HcHQS248GyXqQ8vV2v~4-)f{tL1EKmp zUt{n!PnKAsf2`GzuH35FvUd-Ic4hz`w~4O9H|=!d(7`1SENi*ZdEstE&b=yIte2m%`gv; z?*Ur#kgH;9m%13l1wP3Az-}m%zdYSrSoP9$S7GBG;3^6mb^^EVXRh*e>xEaLp&RzS Qd5=4|6hvI5`XYh)3qh!0PXGV_ literal 0 HcmV?d00001 diff --git a/comp.py b/comp.py new file mode 100644 index 0000000..5d1b557 --- /dev/null +++ b/comp.py @@ -0,0 +1,89 @@ +import sqlite3 +import os, time +import subprocess + +# для работы с ida +from i64tosqlite import create_sqlite_from_i64 + +# для работы с excel +import pandas as pd +from openpyxl.styles import PatternFill +from openpyxl import load_workbook +# + +def main(): + + # эти пути необходимо задавать вручную + ida_executable = r"C:\tools\IDA\ida.exe" + diaphora_dir = r"C:\tools\diaphora" + i64_1_path = r"C:\tools\ilya.exe.i64" + i64_2_path = r"C:\tools\my.exe.i64" + # + + # генерация sqlite базы из i64 + start = time.perf_counter() + diaphora_script_path = diaphora_dir + r"\diaphora_ida.py" + diaphora_path = diaphora_dir + r"\diaphora.py" + sqlite1_path = i64_1_path+'.sqlite' + sqlite2_path = i64_2_path+'.sqlite' + create_sqlite_from_i64(ida_executable, i64_1_path, diaphora_script_path, sqlite1_path) + create_sqlite_from_i64(ida_executable, i64_2_path, diaphora_script_path, sqlite2_path) + # + + # создание выходного файла + sql_output_path = r'result.sqlite' + excel_output_path = r'output.xlsx' + generate_output_db(diaphora_path, sqlite1_path, sqlite2_path, sql_output_path) + result_data = read_results_table(sql_output_path) + elapsed = time.perf_counter() - start + # + + os.remove(sqlite1_path) + os.remove(sqlite2_path) + os.remove(sql_output_path) + + export_to_excel(result_data, excel_output_path, elapsed) + print(f"\033[92mResults exported to\033[0m {excel_output_path}") + print(f'\033[92mAnalysis time\033[0m {elapsed} sec') + os.startfile(excel_output_path) + +def generate_output_db(diaphora_path, sqlite1_path, sqlite2_path, output_path): + cmd = f'py {diaphora_path} {sqlite1_path} {sqlite2_path} -o {output_path}' + try: + # capture_output=True подавляет вывод сообщений от субпроцесса + subprocess.run(cmd, check=True, capture_output=True) + print(f"\033[92mSuccess subprocess run\033[0m") + except subprocess.CalledProcessError as e: + print(f"\033[31mError subprocess run: {e.stderr}\033[0m") + +def read_results_table(output_path): + conn = sqlite3.connect(output_path) + cursor = conn.cursor() + cursor.execute("SELECT * FROM results") + rows = cursor.fetchall() + columns = [description[0] for description in cursor.description] + result_list = [] + for row in rows: + result_list.append(dict(zip(columns, row))) + + conn.close() + return result_list + +def export_to_excel(result_data, excel_output_path, elapsed_time): + df = pd.DataFrame(result_data) + df = df[['type', 'name', 'name2', 'description']] + df['matches'] = ' ' + df['elapsed'] = ' ' + df.at[0, 'matches'] = len(result_data) + df.at[0, 'elapsed'] = f'{elapsed_time:.2f} sec' + df.to_excel(excel_output_path, index=False) + wb = load_workbook(excel_output_path) + ws = wb.active + green_fill = PatternFill(start_color="90EE00", end_color="90EE00", fill_type="solid") + light_green_fill = PatternFill(start_color="90EE90", end_color="90EE90", fill_type="solid") + ws['E2'].fill = green_fill + ws['F2'].fill = light_green_fill + wb.save(excel_output_path) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/i64tosqlite.py b/i64tosqlite.py new file mode 100644 index 0000000..9a8f34d --- /dev/null +++ b/i64tosqlite.py @@ -0,0 +1,46 @@ +import os +import subprocess + +def create_sqlite_from_i64(ida_executable, i64_path, diaphora_script_path, output_sqlite_path): + """ + Создаёт SQLite базу данных из .i64 базы данных с использованием Diaphora. + + Пример использования в блоке if __name__ == "__main__" + """ + if not os.path.exists(ida_executable): + raise FileNotFoundError(f"IDA executable not found: {ida_executable}") + if not os.path.exists(i64_path): + raise FileNotFoundError(f".i64 file not found: {i64_path}") + if not os.path.exists(diaphora_script_path): + raise FileNotFoundError(f"Diaphora script not found: {diaphora_script_path}") + + # Формируем команду для запуска IDA Pro с Diaphora + cmd = [ + ida_executable, + "-A", # Автоматический режим (без GUI) + f"-S{diaphora_script_path}", # Скрипт Diaphora + i64_path # Входной .i64 файл + ] + + # Устанавливаем переменные окружения для Diaphora + env = { + "DIAPHORA_AUTO": "1", # Автоматический режим + "DIAPHORA_USE_DECOMPILER": "1", # Использовать декомпилятор (если доступен) + "DIAPHORA_EXPORT_FILE": output_sqlite_path, # Путь для сохранения SQLite + } + + try: + subprocess.run(cmd, env=env, check=True) + print(f"SQLite database successfully created: {output_sqlite_path}") + except subprocess.CalledProcessError as e: + print(f"Error creating SQLite database: {e}") + except Exception as e: + print(f"Unknown error: {e}") + +if __name__ == "__main__": + ida_executable = r"C:\tools\IDA\ida.exe" # Путь к IDA Pro + i64_path = r"C:\tools\ilya.exe.i64" # Путь к .i64 файлу + diaphora_script_path = r"C:\tools\diaphora\diaphora_ida.py" # Путь к скрипту Diaphora + output_sqlite_path = r"C:\tools\123.exe.sqlite" # Путь для сохранения SQLite + + create_sqlite_from_i64(ida_executable, i64_path, diaphora_script_path, output_sqlite_path) \ No newline at end of file diff --git a/output.xlsx b/output.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..444079e392f84249a9eae4b6f352e1305b819e2d GIT binary patch literal 7252 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 K8T?O{0sIeofgj!g literal 0 HcmV?d00001