Снятие защиты CRC с Auslogics Driver Updater
Снятие защиты CRC с Auslogics Driver UpdaterТема создана для пользователя Dodakaedr. Здесь описывается, как убрать
-
Снятие защиты CRC с Auslogics Driver Updater
Тема создана для пользователя Dodakaedr. Здесь описывается, как убрать двойную защиту CRC в исполняемом файле программы Auslogics Driver Updater.
Первым делом переводим языковый файл enu.lng. Сделано. Но вот беда – некоторые текстовые строки стали длинней и перестали вмещаться на старое место. Теперь нужно менять координаты этих текстовых строк. Сами координаты строк, точнее, их дескрипторы и их параметры, находятся в исполняемом файле DriverUpdater, в секции ресурсов RCData. Да вот еще беда – после любого вмешательства в исполняемый файл программа рушится с сообщением об ошибке. Как оказалось, исполняемый файл содержит CRC защиту. Позже выяснилось, что таких защит аж две.
Итак, грузим экзешник в отладчик Olly Debugger, желательно самой последней версии. После загрузки файла сразу же автоматически проанализируется его код. После этого нужно найти место в коде, где вызывается сообщение об ошибке. Для этого правым кликом в отладчике через контекстное меню выбираем Search for -> All Intermodular calls. После этого появится список со всеми внешними вызовами функций. Далее ищем в этом списке (для упорядочивания можно нажать на колонку Dest name) вызов WindoswAPI функции под названием MessageBox. Данная функция отвечает за выскакивающие окошка с сообщениями. Но в списке этих нужных функций аж 10 штук, какая же из них нам нужна? Для этого на каждую функцию MessageBox в списке поставим точку останова (“бряк”), делается это клавишей F2 или через контекстное меню командой BreakPoint. После этого запускаем через отладчик саму программу клавишей F9 или большим жирным треугольником на панели инструментов. После этого программа запустится и когда дойдет до места, где нужно вывести сообщение об ошибке, то отладчик остановит ее. На экран выведется место в коде, где произошел останов.
Данная подсвеченная строчка как раз и вызывает сообщение об ошибке. Чуть выше находится команда условного перехода - JZ SHORT 00462680.
Команда условного перехода проверяет определенное условие и если условие совпадает, то переходит на указанную строку кода. В данном случае, эта команда проверяет целостность исполняемого файла, и если файл изменен, то переход не осуществляется, а продолжается выполняться код после этой команды. Что и приводит к выводу окна сообщения. Если же файл не изменялся, то условие выполняется, и команда условного перехода срабатывает, вследствие чего и происходит перескакивание места в коде, откуда вызывается сообщение об ошибке. На скрине маршрут объезда кода показан в виде длинной серой стрелки.
Для того чтобы программа всегда обходила проблемное место в коде, нужно команду JZ SHORT 00462680 поменять на JMP SHORT 00462680. Что дает смена команды JZ на JMP? Если команда JZ переходит на нужное место при соблюдении условия, то команда JMP(сокращ. JUMP) не проверяет никаких условий, а прямиком переходит на нужное место. Чтобы сменить значение JZ SHORT 00462680 нужно двойным щелчком по этому месту, или пробелом, вызвать поле редактирования, вписать нужное значение, в нашем случае это JMP SHORT 00462680, а потом нажать Assemble. После этого нужное место в коде изменится, и программа теперь всегда будет обходить место в коде, где вызывается сообщение об ошибке.
На скрине измененная команда подсвечена желтым цветом и от нее уходит длинная красная стрелка, которая означает, что весь проблемный блок кода будет пропущен.
Осталось теперь лишь сохранить измененное значение в сам исполняемый файл. Для этого через контекстное меню правой мыши выбираем Edit -> Copy all modifications to executable. После этого выскочить еще одно окошко, в котором также через контекстное меню нужно выбрать Save file… , где откроется стандартное окно сохранения файла. Сохраняем. А теперь запустим. В результате появится сообщение об ошибке, но уже другое и не такое как в первом случае. Это сработала еще одна CRC защита, и она также находится в исполняемом файле. Данная защита сравнивает контрольные суммы всех файлов программы и если что-то не так, то появляется вот такое сообщение.
Не буду здесь расписывать, как нужно вычислять такую защиту, скажу, что повозился изрядно и в каждого исследователя имеются свои методы поиска таких защит. Забегая наперед, скажу, что благодаря изменению всего одного байта такая защита легко снимается.
Итак, опять грузим в отладчик файл DriverUpdater.exe. Можно загрузить уже измененный файл, где была снята первая защита. А можно при снятии первой защиты не сохранять пока файл и не закрывать отладчик, а сразу тут же приступить к снятию второй защиты. Дело вкуса.
В общем, сначала нужно найти нужное место, где срабатывает защита. Для этого, как в случае с первой защитой, вызываем список всех доступных функций в программе через контекстное меню Search for -> All Intermodular calls. А далее ищем строчку вот такого типа:
CALL JMP.&AxComponentsRTL_bpl.@Auslogics@System@Win@Filetrust@TFileTrust@$bctr$qqrx20S
ystem@UnicodeStringo>
Понятно, что список функций будет просто огромен и найти такую длинную и сложную строку непросто. Но фишка в том, что эта функция уникальна и встречается в программе только в одном единственном месте. После того как данная строка будет найдена нужно по ней щелкнуть, после этого попадаем в код, где и вызывается эта функция. Чуть ниже будет видна команда XOR EAX,EDX. На скрине подсвечена строка с этой командой.
Теперь команду XOR EAX,EDX нужно сменить на XOR EAX,EAX. Делаем такие же самые действия, как и во время снятия первой защиты – редактирование команды и сохранение измененной команды непосредственно в файл. Собственно и все, вторая защита снята.{insert-510}tregalka нравится это сообщение.6 ноября 2014 - 23:59 / #1 -
Dodakaedr, если пытаешься эксперементировать на уже сломанном файле, то ничего не получится. Пробуй на оригинальном, еще не сломанном файле. Так сложилось, что программы Auslogics зависают в отладчике при их запуске.8 ноября 2014 - 13:44 / #2
-
если пытаешься эксперементировать на уже сломанном файле, то ничего не получитсянет, я на оригинальном пробовал. Скиньте плиз свой файл конфигурации ollydbg.ini программы olly debuggerСообщение отредактировал Dodakaedr 8 ноября 2014 - 14:168 ноября 2014 - 14:01 / #3
-
нет, я на оригинальном пробовал.
Так нужно в оригинальном подправить координаты строк через Ресторатор, чтобы потом обязательно выскакивало сообщение об ошибке. Если отлаживать файл, в котором сообщение об ошибке не появляется, то не получится снять зашиту.8 ноября 2014 - 19:30 / #4 -
Так нужно в оригинальном подправить координаты строк через Рестораторэто все сделано, у меня отладчик не запускает программу8 ноября 2014 - 19:35 / #5
-
Таки я дико извиняюсь, но где это место?object lblIgnoreListCheckAll: TAxLabel(требуется удлинение), object lblIgnoreListUncheckAll: TAxLabel(требуется смещение), object lbDescription: TAxLabel(требуется увеличение высоты) и т.д.8 ноября 2014 - 22:16 / #6
-
это все сделано, у меня отладчик не запускает программу
Старнно... Возле нужного MessageBox чуть вверху есть условный переход, тот который нужно править. Попробуй на нем поставить точку прерывания и запустить программу. На скрине это место отчетливо видно. Отладчик должен дойти до этого метса и остановиться, после этого отладчик переключится на экран с кодом.8 ноября 2014 - 23:57 / #7 -
Цитата: NexusИтак, грузим экзешник в отладчик Olly Debugger, желательно самой последней версии. После загрузки файла сразу же автоматически проанализируется его код. После этого нужно найти место в коде, где вызывается сообщение об ошибке. Для этого правым кликом в отладчике через контекстное меню выбираем Search for -> All Intermodular calls. После этого появится список со всеми внешними вызовами функций. Далее ищем в этом списке (для упорядочивания можно нажать на колонку Dest name) вызов WindoswAPI функции под названием MessageBox. Данная функция отвечает за выскакивающие окошка с сообщениями. Но в списке этих нужных функций аж 10 штук, какая же из них нам нужна? Для этого на каждую функцию MessageBox в списке поставим точку останова (“бряк”), делается это клавишой F2 или через контекстное меню командой BreakPoint. После этого запускаем через отладчик саму программу клавишей F9
Скачал Olly Debugger 2.01 и при запуске программы зависает на модуле SensApi.dll. В чем может быть проблема?
{insert-12470}8 ноября 2014 - 23:59 / #8 -
Попробуй на нем поставить точку прерывания и запустить программу.бесполезно, все равно происходит зависание на модуле SensApi.dll. Думаю вся проблема в настройках olly dbg, если не сложно, скиньте свои настройки.9 ноября 2014 - 00:18 / #9
-
Вот INI файл. К самой последней версии. Только он наврядли чем поможет. А на какой системе идет отладка? Дело в том, что на 7 зачастую отладчик хреново программы обрабатывает. На XP самые лучшие результаты. Еще можно отлаживать через IDA, но объяснять как пользоваться этим чудовищем у меня нету желания9 ноября 2014 - 00:37 / #10
Статистика форума, пользователей онлайн: 0 (за последние 20 минут)
---
- Создано тем
- 1197
- Всего сообщений
- 15763
- Пользователей
- 18016
- Новый участник
- gippokrat