![]() |
Добро пожаловать, гость ( Вход | Регистрация )
![]() |
PavelDAS |
![]()
Сообщение
#1
|
Newbie ![]() Группа: Authorized Сообщений: 6 Регистрация: 21-September 25 Из: Minsk Пользователь №: 18,037 Спасибо сказали: 0 раз(а) ![]() |
Необходима помощь в расшифровке файлов InstallShield: Uninst.isu
Там должны храниться пути установки, реестр, ... Пробовал как-то через IDA 9 подсмотреть, как идёт расшифровка, но не понял... https://wdfiles.ru/2Qijh Запуск на выполнение: ISUninst_5_51_138.exe -fUninst.isu Сейчас приходится использовать песочнику+отслеживать обращений, чтобы узнать что он пытается удалить. Реестр: HKCU\SOFTWARE\Infogrames Каталоги: C:\Program Files\Infogrames\Bugs Bunny & Taz - Time Buster C:\WINDOWS\Главное меню\Программы\Infogrames\Bugs Bunny & Taz - Time Busters -------------------- |__--__|
***|*** ___|___ |
![]() ![]() |
-=CHE@TER=- |
![]()
Сообщение
#2
|
Walter Sullivan ![]() ![]() ![]() Группа: Root Admin Сообщений: 1,388 Регистрация: 4-February 08 Пользователь №: 3 Спасибо сказали: 322 раз(а) ![]() |
Добро пожаловать на форум!
Формат Uninst.isu: WORD - должно быть всегда 0xA871, иначе формат считается неверным (сигнатура?) DWORD - должно быть меньше, либо равно 0x2010000, иначе формат считается неверным (версия?) DWORD - флаги какие-то? контрольная сумма? Далее идут блоки данных в формате: WORD - размер блока (len) BYTE[len] - блок Первый блок - это строка "Stirling Technologies, Inc. © 1990-1995". У всех последующих блоков размер (len) не зашифрован, зашифровано только само тело блока. Алгоритм дешифровки: CODE // ISUninst_5_51_138.exe at virtual address .40A0D8: void IS_Decrypt(void *b, DWORD size, DWORD key) { DWORD i, *d; BYTE *p, *k; size = (size > 65000) ? 65000 : size; d = (DWORD *) b; for (i = 0; i < (size / 4); i++) { *d -= (((i + 1) * 7) % 191) + key + 0x1429314E; d++; } p = (BYTE *) b; k = (BYTE *) &key; for (i = 0; i < (size % 4); i++) { p[size - 1 - i] -= k[i]; } } В качестве ключа (key) используется 0x12A39F87, но я видел в дизассемблере, что используется также и 0xAF325DE9. От чего зависит я не знаю, рабираться глубоко не стал. И ещё перед функцией расшифровки стоит проверка: if (size > 65000) { size = 65000; } Так что, подозреваю, что либо блоков более 65000 байтов не существует, либо шифруются только первые 65 тысяч байт. После заголовка с парой блоков идёт какой-то кусок нулей затем, со смещения 0x457 снова зашифрованные блоки. В частности по смещению 0x457 после расшифровки получается блок с путём установленной программы (там не просто строка, а ещё несколько байт служебных данных перед ней). |
PavelDAS |
![]()
Сообщение
#3
|
Newbie ![]() Группа: Authorized Сообщений: 6 Регистрация: 21-September 25 Из: Minsk Пользователь №: 18,037 Спасибо сказали: 0 раз(а) ![]() |
После заголовка с парой блоков идёт какой-то кусок нулей затем, со смещения 0x457 снова зашифрованные блоки. В частности по смещению 0x457 после расшифровки получается блок с путём установленной программы (там не просто строка, а ещё несколько байт служебных данных перед ней). Спасибо. Попробую написать расшифровку. Есть три файла, всегда 0xA871 0x2010000 затем fb 12 0a 00 или 7d c8 06 00 или b4 c1 00 00 если попортить их -- пишет, что файл повреждён. пустой блок, не всегда нули ![]() ![]() Похоже на картинку, или шрифт какой. Но, в первом файле есть текст 5.00.000, а это номер версии, который дописывается сборщиком-инсталлером в конец setup.ins Пока что можно просто пропустить этот блок ![]() Размер его во всех файлах одинаков. -------------------- |__--__|
***|*** ___|___ |
![]() ![]() |
Упрощённая версия | Сейчас: 17th October 2025 - 06:26 |