IPB

Добро пожаловать, гость ( Вход | Регистрация )

> InstallShield расшифровка Uninst.isu
PavelDAS
Oct 9 2025, 09:00
Сообщение #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


--------------------
|__--__|
***|***
___|___
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
 
Reply to this topicStart new topic
Ответов
-=CHE@TER=-
Oct 9 2025, 10:47
Сообщение #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 после расшифровки получается блок с путём установленной программы (там не просто строка, а ещё несколько байт служебных данных перед ней).
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

Сообщения в этой теме


Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0 -

 



Упрощённая версия Сейчас: 17th October 2025 - 06:26