Портативный взлом Gelios Спецвыпуск: Хакер, номер #057, стр. 057-066-5 Таким изменением мы просто продублируем команду, идущую до условного перехода, причем это никак не повлияет на содержание регистров. Сохраняем изменения и выходим из редактора. Теперь можно снова запустить этот файл под отладчиком (нажать в нем <F5>) и посмотреть результаты. Возможна такая неприятность, при которой на КПК не закачивается измененный файл, поэтому сначала оттуда удаляется предыдущий exe'шник (отладчик записывает его в корневую папку на КПК). Все бы хорошо, но теперь при нажатии кнопки BUY появляется надпись "Only available in registered version", что вряд ли позволит что-то купить. Попробуем отключить и это. Таким же способом, который уже был описан, доходим до функции, начинающейся с адреса 17834 и содержащей switch, похожий на найденный раньше. Однако если посмотреть, откуда вызывается эта функция, то IDA выдаст 17 таких мест, так что без отладчика не обойтись. Наша программа уже запущена под дебаггером, поэтому переходим (<Ctrl>+<G>) там по адресу 2C017834 (помни, что адрес может начинаться и с других байт, а не только с 2C0), ставим туда breakpoint и в игре жмем кнопку BUY. После срабатывания breakpoint'а в отладчике открывается окно Call Stack (соответствующая кнопка находится на той же панели инструментов, что и кнопка открытия окна регистров). Там можно видеть два адреса: первый – на котором мы сейчас стоим, второй - куда будет произведен возврат после выполнения данной функции. В данном случае это 2C015F28, поэтому открываем IDA, нажав кнопку <G>, вводим 15F28 и смотрим код выше этого адреса. Как теперь дойти до функции по адресу 15F24? Точнее, как сделать так, чтобы этот вызов никогда не происходил ;)? IDA говорит, что первым местом, откуда мог быть произведен переход к этому коду – это адрес 15EF4. Но выполнение этого кода в свою очередь зависит от того, выполняется ли условие по адресу 15EE4. Туда и поставим breakpoint в отладчике. И что произошло? После установки breakpoint'а опять жмем <F5>, так как мы до сих пор стоим на прошлой точке останова, а в игре нажимаем на BUY. Тогда отправит нас по адресу 2C015EE4, где мы и хотели остановиться. Так же, как и в предыдущий раз, смотрим состояние флага Zero. Теперь он равен нулю, значит, условный переход по этому адресу не осуществляется, и таким образом выполнение вполне может дойти до вызова функции вывода строки о регистрации. Меняем флаг на единицу и наблюдаем за результатом. Надо же! Теперь вместо той строки показалась надпись "You can't afford to buy this yet!", следовательно, нам просто не хватает денег и данное ограничение мы успешно обошли. Осталось только поменять в самом файле условный переход на безусловный, для чего байт по адресу 15EE7 меняем с DA на EA. И снова останавливаем отладку, изменяем файл, стираем старый файл с КПК, запускаем отладчик. |