Глава 27
Продолжаем с Visual Basic'ом
Ок, продолжаем с Visual Basic’ом. Здесь у нас крэкми, в котором нужно избавиться от наг-окошка. Я это сделаю это тем способом, который подойдёт для данного конкретного случая (мне нравится размышлять и пробовать новое), но конечно, используя OllyDbg, специально заточенный для VB, тот же, что и в прошлой главе. Потом мы рассмотрим механический способ, позволяющий сэкономить время. Можно было бы сразу дать его, но я считаю, что очень важно самому попытаться это сделать, чтобы понять как его работает, поэтому сначала рассмотрим мой способ снятия нага, а потом – механический способ, потому что вы должны знать и уметь применять оба.
Killme [ссылка] – это крэкми, которое мы будем изучать. В нём нет крэкми, а есть только назойливое наг-окошко, появляющееся при запуске программы и которое нужно убрать.
Если запустим крэкми в OllyDbg, то увидим наг-окошко.
![](https://backoftut.gitbook.io/~gitbook/image?url=https%3A%2F%2F2931627293-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LnwCNY88kcGMCQxNdy6%252Fuploads%252Fgit-blob-3a70c266f08f513125975e1734348117a901f854%252F1.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=9458af6c&sv=1)
Видим, что есть недоступное для нажатия окошко и таймер от пяти до нуля, и когда он становится равным нулю, то кнопку CONTINUE становится возможным нажать.
![](https://backoftut.gitbook.io/~gitbook/image?url=https%3A%2F%2F2931627293-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LnwCNY88kcGMCQxNdy6%252Fuploads%252Fgit-blob-c1b417e8d75c31df5f5b1cf6bb3e4a7149806ef7%252F2.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=a8c95db7&sv=1)
Появляется указанное приложение, которое должно запускать сразу без каких-либо нагов. Изучим немного о том, как работает крэкми, разумеется, с помощью OllyDbg.
Первое побуждение, возникающее при исследовании программы с наг-окном — это посмотреть JMP-переходы, ведущие в разные части программы.
![](https://backoftut.gitbook.io/~gitbook/image?url=https%3A%2F%2F2931627293-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LnwCNY88kcGMCQxNdy6%252Fuploads%252Fgit-blob-37d7201bd2ec4de8f5e0f8df229836adface18c7%252F3.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=6694e84a&sv=1)
Запускаем программу и нажимаем F9.
![](https://backoftut.gitbook.io/~gitbook/image?url=https%3A%2F%2F2931627293-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LnwCNY88kcGMCQxNdy6%252Fuploads%252Fgit-blob-ac00133a3534a280cd52f85e9e5aecaf8df398e8%252F4.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=ad832067&sv=1)
Указанное время прошло и кнопка CONTINUE становится доступной для нажатия.
Знаем, что при закрытии нага осуществляется проход через JMP в секции кода, поэтому устанавливаем BPM ON ACCESS в указанной секции (что в реальности будет BPM ON EXECUTION) и нажимаем кнопку CONTINUE.
![](https://backoftut.gitbook.io/~gitbook/image?url=https%3A%2F%2F2931627293-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LnwCNY88kcGMCQxNdy6%252Fuploads%252Fgit-blob-611dd7c50f93658c5c1b6cc067009ea0f0f0be02%252F5.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=e220b243&sv=1)
![](https://backoftut.gitbook.io/~gitbook/image?url=https%3A%2F%2F2931627293-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LnwCNY88kcGMCQxNdy6%252Fuploads%252Fgit-blob-d841e4ce09ae4831d8d072d2771d0b41db3cc007%252F6.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=2b900f9&sv=1)
Останавливаемся здесь.
![](https://backoftut.gitbook.io/~gitbook/image?url=https%3A%2F%2F2931627293-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LnwCNY88kcGMCQxNdy6%252Fuploads%252Fgit-blob-6d321705b830f0515ac4e1f9c19f376a5ea8a659%252F7.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=a262fadb&sv=1)
То есть видим, что собственно программа начинает выполнение в 40D090, то есть мы видим JMP-переход на 40D090, где начинается указанная часть и видим остальные JMP на разные части программы. Устанавливаем BP на все эти JMP, чтобы куда и в каком случае они ведут.
![](https://backoftut.gitbook.io/~gitbook/image?url=https%3A%2F%2F2931627293-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LnwCNY88kcGMCQxNdy6%252Fuploads%252Fgit-blob-67dea0f01b32c168e99e6d911be5989a364a1a10%252F8.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=5f10dc8f&sv=1)
Перезапускаем программу.
![](https://backoftut.gitbook.io/~gitbook/image?url=https%3A%2F%2F2931627293-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LnwCNY88kcGMCQxNdy6%252Fuploads%252Fgit-blob-c5db1f7471fd0b7884ae3d5d136f00459e58a17a%252F9.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=4dcff213&sv=1)
Видим, что после выхода из нага останавливаемся здесь. Есть большой соблазн поменять JMP на JMP 409090, чтобы происходил прямой переход на программу, но это вызовет ошибку и запуска не происходит, так что опять делаем RUN.
![](https://backoftut.gitbook.io/~gitbook/image?url=https%3A%2F%2F2931627293-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LnwCNY88kcGMCQxNdy6%252Fuploads%252Fgit-blob-4b19b319d25949691431df756359c5bb95491fd6%252F10.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=4aab7547&sv=1)
Видим, что останавливаемся на следующем JMP и если нажмём RUN снова:
![](https://backoftut.gitbook.io/~gitbook/image?url=https%3A%2F%2F2931627293-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LnwCNY88kcGMCQxNdy6%252Fuploads%252Fgit-blob-09f411130274969e9e2abc58f675e63684ed073f%252F11.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=d8fdc7ea&sv=1)
Несколько секунд и останавливаемся снова, и так – 5 раз, что говорит мне о том, что в этой процедуре содержится таймер.
Оттрасируем эту процедуру и посмотрим, что в ней находится.
![](https://backoftut.gitbook.io/~gitbook/image?url=https%3A%2F%2F2931627293-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LnwCNY88kcGMCQxNdy6%252Fuploads%252Fgit-blob-b1a5ed044e42daedd8292c8fb664ff343dacd283%252F12.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=884df00&sv=1)
Ничего хорошего, продолжаем трассировать с помощью F8.
Доходим до каких-то условных переходов. Можно посмотреть, что произойдёт, если заменим их на обратные: перестанет ли работать таймер и станет ли доступной для нажатия кнопка. Попытаемся выяснить, для чего они служат.
![](https://backoftut.gitbook.io/~gitbook/image?url=https%3A%2F%2F2931627293-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LnwCNY88kcGMCQxNdy6%252Fuploads%252Fgit-blob-c4db9fed7ec54551cabf0bb770364d5a4daca479%252F13.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=746cd683&sv=1)
Это сравнение, использующее плавающую точку, пока не знаем, для чего она, так что менять переходы на обратные даст нам не очень много.
![](https://backoftut.gitbook.io/~gitbook/image?url=https%3A%2F%2F2931627293-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LnwCNY88kcGMCQxNdy6%252Fuploads%252Fgit-blob-442d6286e610bf844f7fc1242eb289fb2a2b2555%252F14.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=5adc84b9&sv=1)
Видим, что в первые проходы здесь происходил переход, а в последний раз – нет, делаем вывод, что это и есть сравнение таймера, которое заканчивает работу, когда достигает нуля. Забиваем условный переход NOP’ами и смотрим, что произойдёт.
![](https://backoftut.gitbook.io/~gitbook/image?url=https%3A%2F%2F2931627293-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LnwCNY88kcGMCQxNdy6%252Fuploads%252Fgit-blob-66c6c440ef70141891fb1778ae6e32b46bda5f4d%252F15.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=88f2c490&sv=1)
И нажимаем RUN.
![](https://backoftut.gitbook.io/~gitbook/image?url=https%3A%2F%2F2931627293-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LnwCNY88kcGMCQxNdy6%252Fuploads%252Fgit-blob-070932fdb4517a5340d5d8a91523d85a4b472703%252F16.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=5c0d6046&sv=1)
Видим, что попали в цель, изменили условный переход, прервав тем самым счёт таймера и сделав доступной кнопку CONTINUE, так что пока что нам подойдёт этот вариант. Теперь надо добиться, чтобы кнопка была доступна после возврата из этой процедуры, нужно, чтобы происходил переход в начало программы. Перезапустим программу.
Идём к строке, которую забиваем NOP’ами до запуска чего бы то ни было.
![](https://backoftut.gitbook.io/~gitbook/image?url=https%3A%2F%2F2931627293-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LnwCNY88kcGMCQxNdy6%252Fuploads%252Fgit-blob-6ba584034291ae89dfe8a33d3053135967f99a34%252F17.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=430606a9&sv=1)
![](https://backoftut.gitbook.io/~gitbook/image?url=https%3A%2F%2F2931627293-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LnwCNY88kcGMCQxNdy6%252Fuploads%252Fgit-blob-4fc56486f55326b8aaebab803a0f0e424bf5ae1a%252F18.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=f54923b1&sv=1)
Убираем все BP и ставим один сюда. Теперь делаем RUN.
![](https://backoftut.gitbook.io/~gitbook/image?url=https%3A%2F%2F2931627293-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LnwCNY88kcGMCQxNdy6%252Fuploads%252Fgit-blob-72095428d4a68b656743990d3d504b518e632108%252F19.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=bf9b0b29&sv=1)
Останавливаемся здесь и трассируем, чтобы посмотреть, где завершается процедура и происходит возврат в библиотеку Visual Basic’а.
![](https://backoftut.gitbook.io/~gitbook/image?url=https%3A%2F%2F2931627293-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LnwCNY88kcGMCQxNdy6%252Fuploads%252Fgit-blob-e28926326b62d36800cf5e30e191c97ed744bf08%252F20.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=1a2839e4&sv=1)
Видим, что дошли до RETN, но переходит не в DLL VB, а продолжаем с 40d714.
Продолжаем трассировку.
![](https://backoftut.gitbook.io/~gitbook/image?url=https%3A%2F%2F2931627293-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LnwCNY88kcGMCQxNdy6%252Fuploads%252Fgit-blob-cbc3564433843ccb942f781b7e24e75a46a80495%252F21.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=d73f621f&sv=1)
Здесь видим RETN, который, согласно пояснению, производит возврат в DLL Visual Basic’а, поскольку тут уже всё подготовлено для запуска программы, так что можем попытаться изменить этот RETN 4 на переход в начало программы. Смотрим.
![](https://backoftut.gitbook.io/~gitbook/image?url=https%3A%2F%2F2931627293-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LnwCNY88kcGMCQxNdy6%252Fuploads%252Fgit-blob-eec18cdcefa6f64308efccf1ead1f5786770e3c9%252F22.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=66ae360d&sv=1)
Прыгаем сюда, поскольку здесь достаточно места, чтобы написать всё, что нам нужно, а затем переходим на 40d090, откуда начинается программа.
![](https://backoftut.gitbook.io/~gitbook/image?url=https%3A%2F%2F2931627293-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LnwCNY88kcGMCQxNdy6%252Fuploads%252Fgit-blob-a3ce40faa28a52296bd419fdc13b3252429ef9da%252F23.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=d68e606e&sv=1)
Пробуем, запустится ли. Делаем RUN.
![](https://backoftut.gitbook.io/~gitbook/image?url=https%3A%2F%2F2931627293-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LnwCNY88kcGMCQxNdy6%252Fuploads%252Fgit-blob-3f96b9399166a1fdf229309e4c3c35f8d5ab8d69%252F24.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=7e97291e&sv=1)
Можем сохранить эти изменения, начальные NOP’ы и эти два перехода.
![](https://backoftut.gitbook.io/~gitbook/image?url=https%3A%2F%2F2931627293-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LnwCNY88kcGMCQxNdy6%252Fuploads%252Fgit-blob-5b2fa1160c391c6855c5ac321eb54934763077ab%252F25.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=f6c395ec&sv=1)
Нажимаем правую кнопку мыши – COPY TO EXECUTABLE – ALL MODIFICATION и сохраняем всё, что изменили.
![](https://backoftut.gitbook.io/~gitbook/image?url=https%3A%2F%2F2931627293-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LnwCNY88kcGMCQxNdy6%252Fuploads%252Fgit-blob-d7fc7d9ae8fe360d80427dcff0c8b34dd0734a7f%252F26.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=f5503659&sv=1)
Нажимаем COPY ALL.
![](https://backoftut.gitbook.io/~gitbook/image?url=https%3A%2F%2F2931627293-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LnwCNY88kcGMCQxNdy6%252Fuploads%252Fgit-blob-d75d3c36109ebb5ec48a49088309ab198eab95be%252F27.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=8978b21d&sv=1)
Теперь правая кнопка мыши – SAVE FILE.
![](https://backoftut.gitbook.io/~gitbook/image?url=https%3A%2F%2F2931627293-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LnwCNY88kcGMCQxNdy6%252Fuploads%252Fgit-blob-d34a1a8b6472a6245ad11a0716253473b1c2c737%252F28.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=2d5077aa&sv=1)
Ок, теперь мы гораздо ближе к решению. При запуске наг-окошко появляется и после нескольких секунд исчезает, так что снова устанавливаем BPX на эти JMP-переходы.
![](https://backoftut.gitbook.io/~gitbook/image?url=https%3A%2F%2F2931627293-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LnwCNY88kcGMCQxNdy6%252Fuploads%252Fgit-blob-8ebb782e99d831a40063a4bdaa2f65da0c3a1e2a%252F29.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=d33bddf2&sv=1)
Делаем RUN.
![](https://backoftut.gitbook.io/~gitbook/image?url=https%3A%2F%2F2931627293-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LnwCNY88kcGMCQxNdy6%252Fuploads%252Fgit-blob-28e8e9485fd3a1c5b85fbfad5d7c507ae4efffdd%252F30.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=9324678d&sv=1)
Видим, что сначала происходит остановка на том переходе, который создает наг-окошко (404b7a), а спустя нескольких секунд происходит закрытие окошка и остановка на 404b87, после чего сразу запускается программа благодаря нашему патчу, так что нам нужно изменить переход, который создаёт наг-окно, чтобы сначала выполнялась пропатченная нами процедура, а затем сразу запускалась сама программа.
![](https://backoftut.gitbook.io/~gitbook/image?url=https%3A%2F%2F2931627293-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LnwCNY88kcGMCQxNdy6%252Fuploads%252Fgit-blob-aec4437c2760c64e5a431d012fb7435c8ada314c%252F31.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=1eae3e92&sv=1)
Забиваем переход, который создаёт наг-окно, и идём сразу туда, где инициализируется таймер и начинается программа. Смотрим, что получилось, нажав F9.
![](https://backoftut.gitbook.io/~gitbook/image?url=https%3A%2F%2F2931627293-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LnwCNY88kcGMCQxNdy6%252Fuploads%252Fgit-blob-04ae74f60ff2fef1b58f6f4fc23c1651fc519a33%252F32.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=ba78dc8b&sv=1)
Сохраняем изменения и пробуем ещё раз.
![](https://backoftut.gitbook.io/~gitbook/image?url=https%3A%2F%2F2931627293-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LnwCNY88kcGMCQxNdy6%252Fuploads%252Fgit-blob-3fc7c3ebc97858175e0b28bcb8800246d1628d60%252F33.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=4e0882b1&sv=1)
Происходит "чистый" запуск без каких-либо всплывающих окон – чистый как слеза младенца.
Метод 4c – это механический метод, который очень полезен, чтобы сделать это быстро и просто, и основывается на знании того, как устроен VB-файл.
Посмотрим на точку входа:
![](https://backoftut.gitbook.io/~gitbook/image?url=https%3A%2F%2F2931627293-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LnwCNY88kcGMCQxNdy6%252Fuploads%252Fgit-blob-4dc2a242d86d53b60c4b0366f9474bc434c147a9%252F34.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=d259cee1&sv=1)
Видим, что программы, написанные на VB начинаются с PUSH и CALL (если вам они не встретились, значит, что exe-файл был изменён, тогда необходимо найти PUSH и записать адрес, который кладётся в стек, в данном случае 40436C).
![](https://backoftut.gitbook.io/~gitbook/image?url=https%3A%2F%2F2931627293-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LnwCNY88kcGMCQxNdy6%252Fuploads%252Fgit-blob-25e5ea2cd46d97244df62befe4566f7ee4c09936%252F35.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=f81cd447&sv=1)
Как видим, это адрес VB-заголовка.
К этому адресу необходимо прибавить 4C.
40436c + 4c
![](https://backoftut.gitbook.io/~gitbook/image?url=https%3A%2F%2F2931627293-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LnwCNY88kcGMCQxNdy6%252Fuploads%252Fgit-blob-f6c7ffb158625ca40eca365dd74b1dd4f85a9518%252F36.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=1d7cb877&sv=1)
Это 4043b8.
![](https://backoftut.gitbook.io/~gitbook/image?url=https%3A%2F%2F2931627293-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LnwCNY88kcGMCQxNdy6%252Fuploads%252Fgit-blob-39a75194d89964b7fa93ba3a3a6ded43263786a9%252F37.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=43c380a7&sv=1)
Вот он, теперь ищем адрес, который здесь лежит – это 4044c0.
![](https://backoftut.gitbook.io/~gitbook/image?url=https%3A%2F%2F2931627293-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LnwCNY88kcGMCQxNdy6%252Fuploads%252Fgit-blob-9de10efec2474ee1be72d005562198d1f09f98a0%252F38.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=2c859b6a&sv=1)
Находим данный адрес в DUMP’е.
![](https://backoftut.gitbook.io/~gitbook/image?url=https%3A%2F%2F2931627293-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LnwCNY88kcGMCQxNdy6%252Fuploads%252Fgit-blob-713aee59f0f9a9f3607aea0e65784daf06fb7ee6%252F39.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=d5ff3448&sv=1)
Видим похожие элементы, каждый из которых соответствует какой-то форме (FORM). Двадцать четвёртый байт каждого из этих элементов – это порядок, в котором формы должны появляться. Смотрим:
40440c + 24=404430
![](https://backoftut.gitbook.io/~gitbook/image?url=https%3A%2F%2F2931627293-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LnwCNY88kcGMCQxNdy6%252Fuploads%252Fgit-blob-fef011b48a50a90620b22ba5e6738be67546cac2%252F40.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=7a84e74b&sv=1)
Здесь находится 00, то есть эта форма будет появляться первой, а 01 означает, что это вторая, так что можем изменить порядок.
![](https://backoftut.gitbook.io/~gitbook/image?url=https%3A%2F%2F2931627293-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LnwCNY88kcGMCQxNdy6%252Fuploads%252Fgit-blob-60b3961470796173d1e3c05264b51a40c0763a7e%252F41.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=5848123f&sv=1)
Так что первой появится программа, хе-хе, а наг-окно вторым или вообще не появится, так как при закрытии программы приложение завершится, и у второй формы не будет шансов.
![](https://backoftut.gitbook.io/~gitbook/image?url=https%3A%2F%2F2931627293-files.gitbook.io%2F%7E%2Ffiles%2Fv0%2Fb%2Fgitbook-x-prod.appspot.com%2Fo%2Fspaces%252F-LnwCNY88kcGMCQxNdy6%252Fuploads%252Fgit-blob-bdb0dfe0ed1f9566a970f1bcd4325e0da3c2e43b%252F42.png%3Falt%3Dmedia&width=768&dpr=4&quality=100&sign=17d149c9&sv=1)
Вот мы и решили крэкми с помощью метода 4c, конечно он гораздо легче и быстрее, но всегда полезно понимать как программа работает и сражаться с ней, поэтому я показал вам оба метода, так как автоматический метод подойдёт не во всех случаях, и придётся исследовать программу глубже.
К этой главе прилагаются два крэкми – один простой [ссылка] (для запуска крэкми понадобиться MSVBVM50.dll [ссылка])* и один посложнее [ссылка], посмотрите, сможете ли вы найти серийные номера, избавиться от наг-окон и так далее. В следующей главе мы их решим.
[C] Рикардо Нарваха, пер. Aquila
Last updated