eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 12 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: daFix (+1 невидимый пользователь)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Крэки, обсуждения —› Излечение MSO.dll
Посл.ответ Сообщение

Ранг: 40.3 (посетитель)
Статус: Участник

Создано: 8 января 2016 06:12 · Поправил: 8 января 2016 10:33 FalseMaster New!
Цитата · Личное сообщение · #1

Дело в следующем. После долгих сомнений решил я попытаться портабелизировать мелкомягкй офис без Thinstall'а, а заодно и урезать насколько возможно. Начал с Word'а. Со срачей в реестр справился, но возникла (кто бы мог подумать) проблема. Word стартует, но появляется диалог с сообщением, что "Microsoft Office Word has not been installed for the current user. Please run setup to install the application.", после нажатия "Ok" на котором приложение закрывается. С помощью одной утилитки определил класс этого окошка, который оказался 0x8002 (стандартный диалог), но удивлению моему не было предела, когда я поставил в "ольке" бряки на "CreateWindowExA/W", и выяснилось, что окно такого класса не создаётся… В общем, если кто помнит дела давно минувших дней (офис 2003), подскажите, куда копать.


Ранг: 1091.6 (!!!!)
Статус: Участник

Создано: 8 января 2016 10:49 New!
Цитата · Личное сообщение · #2

поискать строку и посмотреть ссылки на неё?

Ранг: 40.3 (посетитель)
Статус: Участник

Создано: 8 января 2016 13:03 New!
Цитата · Личное сообщение · #3

>> поискать строку и посмотреть ссылки на неё?

Если вы про заголовок, то я его нашёл, как и текст сообщения, но соль в том, что строка присваивается посредством SetWindowTextW, окно же создаётся раньше где-то в другом месте. А когда я по <Ctrl+F9> пытаюсь выйти в предыдущую функцию, вываливаюсь в код системных библиотек и в конце концов дохожу до появления этого диалога без возврата в MSO.dll.


Ранг: 110.0 (ветеран)
Статус: Участник

Создано: 8 января 2016 13:27 New!
Цитата · Личное сообщение · #4

FalseMaster пишет:
CreateWindowExA/W


А если начать с RegisterClass(Ex) ?

Ранг: 40.3 (посетитель)
Статус: Участник

Создано: 9 января 2016 02:50 New!
Цитата · Личное сообщение · #5

>> А если начать с RegisterClass(Ex) ?

И что это даст?


Ранг: 140.5 (ветеран)
Статус: Участник

Создано: 9 января 2016 03:46 New!
Цитата · Личное сообщение · #6

Rainbow пишет:
А если начать с RegisterClass(Ex) ?

afaik свои окна система сразу через syscall создаёт, не поймаешь

Предположение - сообщение это не мессаджбокс а диалог, а SetWindowText вызывается во время обработки WM_INITDIALOG, попробуй поймать user32.DialogBoxIndirectParamAorW или что-то подобное.

А вообще, подход считаю неверным. У офиса ведь куча разной фигни распихана по папкам. К примеру
%COMMONPROGRAMFILES%\Microsoft Shared и %APPDATA%\Microsoft, и для каждого компонента в реестре прописаны пути. Лучше бы взять ProcMon да посмотреть на чём эта длл обламывается, а не просто патчить всё без оглядки.


Ранг: 1091.6 (!!!!)
Статус: Участник

Создано: 9 января 2016 04:12 New!
Цитата · Личное сообщение · #7

-=AkaBOSS=- пишет:
А вообще, подход считаю неверным


да можно начать с самого начала: хардкод вместо промышленного решения (thinstall) имеет смысл для самообразования. В этом случае нужно рыть самостоятельно, а не искать солюшен.

Ранг: 40.3 (посетитель)
Статус: Участник

Создано: 9 января 2016 07:28 · Поправил: 9 января 2016 07:31 FalseMaster New!
Цитата · Личное сообщение · #8

-=AkaBOSS=- пишет:

>> Предположение - сообщение это не мессаджбокс а диалог

Диалог и есть. Знаю точно, т.к. на нём контрол офисовый.

>> а SetWindowText вызывается во время обработки WM_INITDIALOG

У меня тоже такая мысля была (и есть), но что делать-то в таком случае? Ведь из колбека этого диалога мне никак не выйти на инструкцию, следующую за вызовом создающей его функции.

>> попробуй поймать user32.DialogBoxIndirectParamAorW

Так я это первым делом и пробовал вместе с MessageBox(ExA/W). DialogBoxIndirectParamAorW вызывается только один раз при создании главного окна Word'a. Откуда берётся мессаговый диалог, ума не приложу, мистика какая-то.

>> У офиса ведь куча разной фигни распихана по папкам.

Перед тем как приступить к основному действу, я расковырял рабочую Thinstall-сборку и воссоздал всю файловую и реестровую структуру офиса – результат был в точности такой же как сейчас.

>> Лучше бы взять ProcMon да посмотреть на чём эта длл обламывается

Я привык по отдельности FileMon и RegMon юзать. Так вот, первый вообще не обламывается, второй конечно выдаёт множество NOT FOUND'ов, но большей части ненайденных ключей нет и в виртуальном реестре Thinstall'а, а те что есть, я загонял из reg-файла перед стартом офиса – никакого влияния их наличие не оказывало. Так что остаётся только патчить со всей жестокостью… знать бы только где.

Gideon Vi пишет:

>> …нужно рыть самостоятельно, а не искать солюшен.

Да мне и самому стрёмно "клянчить", просто рою уже который день, а толку ноль.


Ранг: 140.5 (ветеран)
Статус: Участник

Создано: 9 января 2016 07:44 · Поправил: 9 января 2016 07:50 -=AkaBOSS=- New!
Цитата · Личное сообщение · #9

FalseMaster пишет:
Перед тем как приступить к основному действу, я расковырял рабочую Thinstall-сборку и воссоздал всю файловую и реестровую структуру офиса – результат был в точности такой же как сейчас.

Файловая и реестровая структура, ладно. А переменные окружения процесса?

FalseMaster пишет:
из колбека этого диалога мне никак не выйти на инструкцию, следующую за вызовом создающей его функции.

Ну если возврат идёт в системные библиотеки - тогда поднимаемся докуда можно и делаем поиск референсов к начальному адресу колбэка.


Ранг: 110.0 (ветеран)
Статус: Участник

Создано: 9 января 2016 11:34 New!
Цитата · Личное сообщение · #10

FalseMaster пишет:
И что это даст?


Как известно любое окно имеет свой класс и регается он в системе, как правило, при помощи этой функи. У WNDCLASSEX есть замечательное поле - WNDPROC lpfnWndProc. Выдираем для конкретного окна в нужный момент и смотрим обработчики сообщений оконной процедуры, в т.ч. WM_INITDIALOG. Оно ?


Ранг: 140.5 (ветеран)
Статус: Участник

Создано: 9 января 2016 11:55 New!
Цитата · Личное сообщение · #11

Rainbow, а попробуй сам вызвать тот же мессаджбокс и отследить регу его класса


Ранг: 110.0 (ветеран)
Статус: Участник

Создано: 9 января 2016 12:59 · Поправил: 9 января 2016 15:26 Rainbow New!
Цитата · Личное сообщение · #12

-=AkaBOSS=- пишет:
а попробуй сам вызвать тот же мессаджбокс и отследить регу его класса

Он появляется изниоткуда? o.O ..Демоны !!!

Ранг: 40.3 (посетитель)
Статус: Участник

Создано: 9 января 2016 13:55 · Поправил: 9 января 2016 14:00 FalseMaster New!
Цитата · Личное сообщение · #13

-=AkaBOSS=- пишет:

>> А переменные окружения процесса?

Об этом я как-то не подумал. Дебаггер показал, что читаются две (отсутствующие): "_CLUSTER_NETWORK_NAME_" и "msooaopt". Первая, судя по названию, погоды не делает, а вот вторая – вполне возможно, только мне от этого не легче, значения-то я не знаю.

>> …и делаем поиск референсов к начальному адресу колбэка

Только его для начала надо каким-то образом определить.

Rainbow пишет:

>> Как известно любое окно имеет свой класс

А вот с названием класса я дал маху. С чего-то мне втемяшилось, что значение #32770, выданное утилитой, надо переводить в число, а ведь WNDCLASS(EX).lpszClassName можно присвоить его и в виде строки. Забрезжила надежда, но увы, хоть я и нашёл место, где идёт обращение к упомянутой строке, перехода на этот код не происходит… но, сцуко, как-то же оно работает, не верю я в чудеса (но такими темпами скоро поверю).

>> Он появляется изниоткуда? o.O ..Демоны !!!

Демоны живут в линуксах, а встроенные классы винды создаются ещё на этапе загрузки системы.

Ранг: 366.5 (мудрец)
Статус: Участник
"Тибериумный реверсинг"

Создано: 9 января 2016 14:29 New!
Цитата · Личное сообщение · #14

FalseMaster пишет:
бряки на "CreateWindowExA/W", и выяснилось, что окно такого класса не создаётся

Попробуйте просто поставть на секцию кода user32.dll бряк.
Выложите собственно саму MSO.dll

Ранг: 40.3 (посетитель)
Статус: Участник

Создано: 10 января 2016 03:54 New!
Цитата · Личное сообщение · #15

>> Попробуйте просто поставть на секцию кода user32.dll бряк.

И? К этой библе 100500 обращений в секунду.

>> Выложите собственно саму MSO.dll

Я отсюда брал (та что для Office 2003).


Ранг: 140.5 (ветеран)
Статус: Участник

Создано: 10 января 2016 05:10 · Поправил: 10 января 2016 05:10 -=AkaBOSS=- New!
Цитата · Личное сообщение · #16

Ну всё оказалось как и предполагалось ранее
30F45991 - обработка WM_INITDIALOG
30F46A54 - собственно сам DialogProc
Референсы ведут в офигенно большую процедуру 30F45DF8
Поднимаясь выше по вызовам, выходим на развилку - 30F4673E. Дальше надо отладчиком мониторить, откуда её зовут.

| Сообщение посчитали полезным: FalseMaster


Ранг: 40.3 (посетитель)
Статус: Участник

Создано: 12 января 2016 20:07 New!
Цитата · Личное сообщение · #17

От треклятого диалога я таки избавился (благодаря подсказке AkaBOSS'а), и Word отрабатывает до конца. Я уж было обрадовался в предвкушении победы, но не тут-то было – практика показала, что номер проходит только под отладчиком, и не просто под отладчиком, а патчи (2 шт.) приходится вводить последовательно по HBP, если же вписать оба патча на первом бряке, в ходе дальнейшего выполнения происходит выброс на какой-нибудь левый адрес. Более того, установка INT3-бряка в любом месте кодовой секции MSO.dll приводит к тому же эффекту. Похоже, что в отдельном потоке периодически проверяется целостность кода. Обнаружилась очень подозрительная процедура по адресу 315FD360, в которую в качестве параметра передаются указатели на секцию кода. В свою очередь, адрес сей процедуры выступает аргументом 5-ти процедур по адресам: 30CA4C53,30CA6864,30CA7208,30CA557C,30CA5ED7, вызываемых из 35 мест. Скипанье любой из процедур ведёт к описанному выше плачевному финалу… В общем жопа полная, полнейшая. Теперь я понимаю, почему в своё время крякнут был инсталлятор офиса, а не он сам – мелкомягкие индусы вместо оптимизации своего блевотного кода и устранения багов, занимались и занимаются вставлянием палок в колёса приличным людям.


Ранг: 140.5 (ветеран)
Статус: Участник

Создано: 12 января 2016 20:30 · Поправил: 12 января 2016 20:32 -=AkaBOSS=- New!
Цитата · Личное сообщение · #18

FalseMaster
а проверить условие долбанного диалога не, никак?
изменив условие - избавляемся от необходимости патча.
в противном случае - придётся инлайнить. Перехватывать ближайшие к месту патча апи и проверять рва возврата, после чего патчить


Хотя если во время работы ворда все эти мегапроверки не вызываются, можно попробовать запатчить и их (разумеется, проследив, куда и что онм сохраняют).

Ранг: 40.3 (посетитель)
Статус: Участник

Создано: 15 января 2016 05:26 New!
Цитата · Личное сообщение · #19

-=AkaBOSS=- пишет:

>> а проверить условие долбанного диалога не, никак?

Если б я был ядрёным кулхацкером, то может и как, но увы и ах… Для изменения условий требуется знание структуры файла "%ALLUSERSPROFILE%\Application Data\Microsoft\Office\Data\opa11.dat" и ветки реестра "[HKEY_CURRENT_USER\Software\Microsoft\Office\11.0\Common\BaseSuite]", по сути ты предлагаешь мастырить keygen.

>> в противном случае - придётся инлайнить.

Так я и поступил. Но пошёл напролом и засплайсил не ближайшие API'шки, а саму проверочную процедуру, точнее 3 из 5 (как выяснилось по ходу колупания… даа, хитры мелкомягкие), и подсовываю им оригинальные байты. В общем с грехом пополам Word завёлся, но тестировать конечно надо тщательно – на 90% уверен, что в самый неожиданный момент вылезет какая-нибудь бяка, да и портабелизации ещё непочатый край – на данный момент я только предохранился от создания новых ключей реестра (файлы/папки вообще не трогал), но существующие подвержены изменениям, и, как я успел заметить, сие непотребство имеет место. Такие дела.

За помощь премного благодарен. Если б ты мне не подарил адрес диалоговой функции, ничего бы у меня не вышло. Кстати, не сочти за наглость, но очень хочется узнать, как ты его выудил (если конечно это не профессиональный секрет) – в будущем мне это знание может пригодиться, версий-то у этой DLL'ки немало.
 eXeL@B —› Крэки, обсуждения —› Излечение MSO.dll

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS