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
PavelDAS
Oct 9 2025, 13:30
Сообщение #3


Newbie
*

Группа: Authorized
Сообщений: 6
Регистрация: 21-September 25
Из: Minsk
Пользователь №: 18,037
Спасибо сказали: 0 раз(а)



QUOTE(-=CHE@TER=- @ Oct 9 2025, 10:47) *

После заголовка с парой блоков идёт какой-то кусок нулей затем, со смещения 0x457 снова зашифрованные блоки. В частности по смещению 0x457 после расшифровки получается блок с путём установленной программы (там не просто строка, а ещё несколько байт служебных данных перед ней).


Спасибо. Попробую написать расшифровку.

Есть три файла, всегда
0xA871
0x2010000

затем
fb 12 0a 00
или
7d c8 06 00
или
b4 c1 00 00

если попортить их -- пишет, что файл повреждён.

пустой блок, не всегда нули


Похоже на картинку, или шрифт какой.
Но, в первом файле есть текст 5.00.000, а это номер версии, который дописывается сборщиком-инсталлером в конец setup.ins

Пока что можно просто пропустить этот блок smile.gif
Размер его во всех файлах одинаков.


--------------------
|__--__|
***|***
___|___
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