![]() |
Добро пожаловать, гость ( Вход | Регистрация )
![]() |
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 после расшифровки получается блок с путём установленной программы (там не просто строка, а ещё несколько байт служебных данных перед ней). |
![]() ![]() |
Упрощённая версия | Сейчас: 17th October 2025 - 06:26 |