Трехмерный взлом. Bumptop или бета-версия будущегоНаверное, каждый человек хочет, чтобы все нужное всегда было с ним и лежало в одном месте. BumpTop придерживается именно такого принципа — это своего рода «коробка», в которой можно все разложить по полочкам или парой кликов мышью обратить в хаос. Ты, наверное, уже догадался, что речь идет о рабочем столе 3D. Приглашаемся на тестированиеГод назад я впервые увидел видео-демонстрацию трехмерного десктопа BumpTop(), тогда же я подал заявку на бетатестирование. Время шло, а инвайт на почту все не приходил, я уже и забыл про него. И вот, на днях в одном из блогов я наткнулся на заметку о BumpTop и вспомнил, что когда-то отправлял заявку на инвайт, и что мне так ничего и не дали. Шаг первыйДля начала я решил поискать, что доступно в Сети. C этой целью я зашел на любимый thepiratebay.org, вбил в строке поиска «BumpTop» и получил всего 1 результат — бета-версию 2008 года. Скачав торрент, я установил и запустил BumpTop. Как и ожидалось, я получил окно с просьбой предъявить инвайт. Инвайта у меня, конечно, не было, так что я сразу открыл bumptop.exe в интерактивном дизассемблере IDA pro. После недолгого анализа IDA замерла, передавая управление мне. И тут понеслось. Для начала нужно было найти код, который определяет, зарегистрирована ли программа. Для этого я открыл окно со Strings (Shift+F12) и нашел там строку «Please enter your invite code:», написанную в окне для ввода инвайта. Кликнул по ней два раза и оказался на адресе .rdata:00647D1C, где эта строка хранится. Затем я вызвал окно jump to xref operand(x), чтобы посмотреть, где наша строка используется. Получил всего один адрес и перешел по нему. Далее, чтобы удостовериться, что это тот код, который мы ищем, я поставил точку останова (F2) и запустил программу (F9). Достигнув бряка, пробежался немного вниз (F8) до адреса 0041B7A7. И... вот оно! Открылось наше окно с запросом инвайта. Теперь следует найти код, который определяет, нужно ли нам показывать это окно. Остановив программу и поднявшись по коду выше, до объявления функции по адресу .text:0041B350, я посмотрел, откуда она вызывается (jump to xref operand). Затем, перейдя по полученному адресу, сразу перед вызовом нашей функции я увидел условный переход:
Я поставил на него точку останова, запустил программу, и она встала на свежеустановленном бряке. Так как здесь условный переход осуществляется с помощью инструкции JNZ (прыгнуть, если не ноль), то, чтобы переход все-таки состоялся, нужно поменять флаг ZF (флаг нуля — единственный флаг, который влияет на инструкции JZ и JNZ) с 1 на 0. Поменяв флаг, в окне General Registers я вдавил Run(f9). Bumptop, радостно мигнув сплешскрином и вызвав несколько исключений, которые я успешно проигнорировал, стартанул! Теперь мне оставалось только сделать битхак файла так, чтобы не выводилось окно с запросом инвайта. Открыв файл bumptop.exe в HIEW, я два раза пушнул <enter> для перехода в режим дизассемблирования. Затем нажал F5, ввел адрес условного перехода (.004862BB) и снова нажал <enter>. После F3 и F2 для редактирования текущей инструкции я изменил текущую инструкцию JNE на противоположную ей JE (JNE/JE это синонимы инструкций JNZ/JZ). Все, дело сделано, и теперь мне оставалось только сохранить (F9) и запустить программу! Но что это? Сразу после запуска BumpTop предложил обновить нашу старую бету на самую последнюю. Ну что ж, я думаю, не стоит отказываться от этого удовольствия. Нажимаем «Yes». Ничего не предвещало беды или bumptop reload...Сразу же после удачного запуска 3D Desktop'a я начал внимательно изучать все его вкусности, но, к моему удивлению, примерно через 5-10 минут работы появилось сообщение с предложением обновить мою beta 12 версию BumpTop'a. «Конечно», — подумал я, кликнув на появившемся сообщении кнопку «Yes». Программа замерла и через несколько мгновений 3D-десктоп пропал с экрана моего монитора, и появилось очередное окно с запросом инвайта: «Authorization failed! Please enter your invite code». Открыв в IDA обновленный BumpTop.exe, я с ухмылкой злодея принялся за дело... Аналогично предыдущей версии я нашел по адресу 0068A2CC объявление строки «Authorization failed!» и место, где она используется по адресу 0041FF23. После нескольких нажатий <PgUp> я увидел объявление функции, вызывающей форму для ввода инвайта. Нехитрым нажатием на клавиатуре <X> и <Enter> переместился к месту вызова функции; им оказался адрес 0042258C. Затем выделил адрес и поставил на него бряк. Запустил программу, она остановилась на бряке, поменял флаг ZF и запустил дальше, тут программа выдала ошибку. Что ж, буду искать дальше... Я поднялся еще выше — снова до объявления текущей функции — и нашел, откуда она вызывается. Это был список из 10 разных адресов. Я прошелся по всем ним, расставляя бряки на каждый вызов нашей функции, дабы определить из какого места она действительно вызывается. В очередной раз запустил программу, и теперь она остановилась по адресу 0041EE54. Я увидел следующий код: Действуя по старой схеме, я поставил точку останова на инструкцию JNZ по адресу 0041EE2F, перезапустил программу и, после успешной остановки, поменял флаг ZF. Все, заработало! Возвратившись в HIEW, я, как и раньше, поменял инструкцию JNZ на JZ, только теперь по адресу 0041EE2F. BumpTop запустился без проблем, и это была уже не 12 версия, а новая BumpTop Beta 19! В итоге я получил последнюю версию программы и удовольствие от процесса добычи инвайта. Можно праздновать победу и любоваться новым 3D Desktop'ом на мониторе железного друга. Послесловие или сделай самВ целом продукт функционален и привлекателен, хотя и обладает пока различными мелкими глюками, не зря ведь разработчики сохраняют за проектом статус закрытой beta. В последний день сдачи статьи разработчики BumpTop преподнесли сюрприз — вышла новая версия. Хорошо это или плохо — решать тебе. |