- - * - WhiteUnicorn - * - -




* #WhiteUnicorn/ StartPage/ Heap/ Quest.Estonian >


Как зарегистрировать врЕменное проживание родственника из Эстонии

Серия "Бюрократические квесты"

==================================================================
Tutorial 002
Как зарегистрировать врЕменное проживание родственника из Эстонии 
(c) CS:ED
==================================================================

1. Объект взлома.

   Когда кто-то, проживающий в Эстонии, приезжает к вам погостить, 
   вы _обязаны_ зарегистрировать его врЕменное проживание у вас.
   Защита построена весьма серьезно и это _не_ для новичков. 
   Если вы никогда раньше не пытались исследовать подобные ситуации - 
   не стОит начинать именно с этой. Сначала попробуйте успешно пройти 
   "Получение нового студенческого" (минимальная сложность, решение задачи
   "в лоб") или "Получение вкладыша о гражданстве" (средний уровень, 
   Tutorial 001) К тому же в этом учебнике рассматиривается наиболее сложный, 
   профессиональный, вариант программы.
   Имейте ввиду, что жесткий взлом для программ такого класса лучше не 
   применять - слишком велика вероятность проверки, которую вы не заметите, 
   а потом все ваши пароли достанутся кому надо...

2. Головной модуль, входные параметры.

   Первое затруднение при регистрации встречается уже на этом этапе. 
   В качестве входного параметра имеется "Серый" паспорт (т.е. человек не 
   является гражданином Эстонии)
   Попробуем понять, какой из модулей программы необходимо задействовать
   в этом случае.
   Итак: Эстония - это зарубежное государство. Следовательно можно 
   предположить, что нам подходит модуль ОВИР.exe (r:\SpB\Avangardnaja\ОВИР.exe)
   Попробуем... Запускаем :

   r:\SpB\Avangardnaja\ОВИР.exe /"Серый_паспорт"

   Опа ! Нас обломали :(
   Сообщение об ошибке: 
   "Поскольку чел не является гражданином Эстонии, он не является иностранцем 
   по отношению к РФ"

   Смотрим файл Read.me:

   [skip]

   3.6.7.19 Для регистрации временного проживания родственника, не являющегося 
            гражданином зарубежного государства необходимо использовать модуль 
            ЖЭУ из текущего рабочего каталога

   [skip]

   Так...
   Где там оно... ага, вот: ЖЭУ.exe
   Ну попробуем:

   r:\SpB\MestoGitelstva\ЖЭУ.exe /"Серый_паспорт"

3. Ввод регистрационной информации.

   Отлично ! Прога запускается и предлагает ввести регистрационные данные:

   1. Заявление о необходимости временной прописки чела
   2. Справка формы 9

   Самое время ставить бряк-пойнты на процедуры проверки заявлений и справок:

   bpx CheckZayav
   bpx CheckZayavEx
   bpx CheckSpravka
   bpx CheckSpravkaEx

   Выходим из отладчика и указываем полные пути к требуемым документам. 

   Register... Оопс ! - мы снова в отладчике, сработал бряк на CheckZayavEx.

   Попробуем пройти эту функцию без каких либо вмешательств... - отлично, 
   получаем 1 и это значит, что с заявлением мы угадали. (Или, что более 
   вероятно, оно не проверяется процедурой регистрации). 

   Идем дальше и снова вываливаемся в отладчик, уже на функции CheckSpravkaEx.
   Так. Здесь надо быть внимательнее... 
   Так и есть - проверяется наличие сигнатуры "Председатель ЖСК" в 
   конце справки. 

   Ну что ж - убираем глобальные бряки, ставим бряк прямо перед вызовом 
   CheckSpravkaEx, выходим из отладчика, получаем сообщение программы о 
   некорректных регистрационных данных и идем получать сигнатуру.

4. Получение сигнатуры "Председатель ЖСК"

   Ни в коем случае, никогда, не пытайтесь скорректировать сигнатуры 
   прямо в памяти ! 
   Как правило у программ, использующих идентификацию подобного рода, очень
   изощренная система проверки подлинности сигнатур. В случае обнаружения подделки
   вы можете крепко попасть...
   К тому же, получение подлинного файла сигнатуры стОит не очень дорого, 
   если не бесплатно (как в нашем случае).
   В крайнем случае можно воспользоваться кейгеном типа "Человек, _хорошо_ умеющий
   подделывать подписи", но помните, что это опасно.

   Итак, запускаем сначала модуль ЖЭУ и с помощью мастера справок генерим файл 
   "Справка по форме 9". 
   Потом снова запускаем модуль ЖСК, но уже с такими параметрами:

   r:\SpB\MestoGitelstva\ЖСК.exe /"Справка_9 Get_signatura_predsedatel"

   В результате наш файл проверяется на корректность и получает сертификат 
   подлинности в виде подписи председателя ЖСК.

5. Милиция.

   Снова запускаем 

   r:\SpB\MestoGitelstva\ЖСК.exe /"Серый_паспорт"
   
   (предварительно проверив готовность нашей бряк-точки)

   Замечательно - мы в отладчике, проходим CheckSpravkaEx успешно. 

   И тут... а это еще что за... ?! 8-О

   .....
   push ebx		; заявление
   push esi		; справка по форме 9
   call ЛичноеПрисутствие.ВсеЧленыСемьи
   test eax,eax
   jz   004125a0	; облом :(
   call ЖСК.Registration
   ....

   Это кто же это придумал ?! Один в командировке, другой работает с утра до 
   вечера... Неужели ничего не выйдет ? На всякий случай проверяем 004125a0

   Ага, это уже кое-что:

   ...
   call ЖСК.CheckСобственностьНаКвартиру	; это у нас в порядке
   mov  esi,eax
   call Kernel.Милиция				
   test esi,esi
   jz   00413110	; полный облом :(
   test eax,eax
   jz   00413110	; он же
   call ЖСК.Registration	; нам сюда  :)
   ...

   Все ясно - чтобы выйти на процедуру регистрации мы должны успешно пройти 
   процедуру "Милиция".
   Прежде чем патчить (напоминаю, это очень опасно и потому нежелательно),
   посмотрим, что делается в "Милиции"

   push ebp
   mov  ebp,esp
   mov  eax,[ebp+16]		; там у нас оказался результат ЖСК.CheckСобственностьНаКвартиру
   cmp  eax,00000ah		; т.е. все ли в порядке
   jne  00435a42			; что-то не так -> фиг вам, а не регистрация
   call Kernel.CheckPassport

   На всякий случай зайдем-ка мы в эту функцию...

   Ну конечно ! Ей не понравилось, что паспорт на импортном языке !
   И с нас требуется либо нотариально заверенный перевод (sic !) либо... облом. :(

   Ну что ж, сделать мы тут вроде ничего не можем. Похоже, что обломали нас 
   по полной программе. Но тут мы вспоминаем, что у нас же есть старый паспорт, 
   на основании которого, собственно, и делался этот серый. А что если... 

6. Милиция. Два паспорта.

   Пока мы еще в отладчике, ставим бряк перед вызовом Kernel.CheckPassport, 
   выходим и запускаемся снова, указав старый паспорт в качестве второго 
   входного параметра:

   r:\SpB\MestoGitelstva\ЖСК.exe /"Серый_паспорт Старый_русский_паспорт"

   Ну, по крайней мере до вызова Kernel.CheckPassport мы дошли. 
   Снова идем внутрь.
   
   Вот блин - наличие двух паспортов вызывает exception ! Ладно хоть, это еще 
   не окончательный облом - сначала программа делает попытку решить ситуацию 
   самостоятельно. 
   Для чего вызывается ЖСК.Exceptions. 

   Мда... Хрен редьки не слаще:
   MessageBox: "Перезапустите программу ЖСК с дополнительным ключом except"

   Похоже, скоро командная строка вытянется на пару экранов. :-/

7. ЖСК. Два паспорта.

   r:\SpB\MestoGitelstva\ЖСК.exe /except "Серый_паспорт Старый_русский_паспорт"

   После целого ряда диких сообщений об ошибках и зависаний до нас доходит,
   что этот модуль написан недостаточно аккуратно (видимо разработчики не 
   рассчитывали, что эта часть программы когда-либо сработает). А раз так... ;)
   Находим процедуру, в которой идет попытка решения исключительной ситуации 
   и видим там кучу вызовов, часть из которых ну _очень_ дальние. Ладно, 
   против лома... Начинаем жестко ломиться к цели - после каждого вызова 
   меняем флаги таким образом, чтобы придти к успешному завершению.

   Уфф.. Наконец-то ! :)

8. Получение регистрационного номера.

   Дальше все идет хорошо и без нашего вмешательства - Kernel.CheckPassport 
   была последней критичной функцией. Ret... ret.. retf...ret... Все !

   MessageBox: "Чел успешно зарегистрирован проживающим в этой квартире на 6 месяцев"

   Ух ты ! Мы столько и не просили, вообще-то, нам две недели надо было... 
   Похоже, что-то мы все-таки перебрали в обработке ексцепшена... Ну и ладно. 

Все. К сожалению, без прямого вмешательства в работу проги не обошлось, 
но это было в сравнительно безопасном куске. 

Цели мы добились - не прошло и нескольких дней, как чел, приехавший к 
нам в гости из Эстонии может спокойно жить у нас целых 6 месяцев 
(и кого волнует, что он уедет уже через неделю ? :)

=================================================================================
... Была бы голова, а уж с чем бодаться - мы всегда найдем :)
=================================================================================



* #WhiteUnicorn/ StartPage/ Heap/ Quest.Estonian >



- - * - Anastasija aka WhiteUnicorn - * - - LJLiveJournal
PFPhotoFile