Сам себе антивирус Bokiv (Bokiv@yandex.ru) Хакер, номер #089, стр. 089-060-2 7C812E03 MOV EAX,DWORD PTR FS:[18] 7C812E09 MOV EAX,DWORD PTR DS:[EAX+30] 7C812E0C MOVZX EAX,BYTE PTR DS:[EAX+2] 7C812E10 RETN Пройдем до RETN по F8. Вот посмотри: значение регистра EAX равно единице - это результат работы функции IsDebuggerPresent, то есть отладчик обнаружен. Кликни по регистру EAX в отладчике и введи вместо единицы ноль. Дальше можешь выходить из функции по F8. Вышел? Смотрим дальше - видим код: 0041B88C JE SHORT Mytob.0041B890 0041B88E POPAD 0041B88F RETN Интересное место. Если отладчик обнаружен, то переходим на команду POPAD, где искусственно создается исключение, так как POPAD отработал раньше времени! Но мы обманули протектор и поэтому спокойно перепрыгиваем ловушку. Теперь давай искать дальше POPAD’ы. Сразу скажу это примерно на 40 строк вниз. 0041B8F9 POPAD - ставим брейкпоинт 0041B8FA JMP SHORT Mytob.0041B8FE 0041B8FC INT 1 0041B8FE RETN Посмотрим еще ниже и опять: 0041B975 POPAD - ставим брейкпоинт 0041B976 PUSH EAX 0041B977 XOR EAX, EAX 0041B979 PUSH DWORD PTR FS:[EAX] 0041B97C MOV DWORD PTR FS:[EAX],ESP 0041B97F JMP SHORT Mytob.0041B982 Как видишь, я установил брейкпоинты на два найденных мной вызова POPAD. Делай то же самое и запускай программу. Оля остановилась на 0041B975, а дальше (0041B982) идут команды, которых не было, когда мы смотрели код после остановки на IsDebuggerPresent (полиморфный код для сокрытия ЕР upx)! Команда POPAD отработала, а значит, где-то рядом должен быть нужный нам переход. Пройдемся по F8 и посмотрим, что же будет дальше. По адресу 0041B982 происходит исключительная ситуация, проходим ее по Shift+F8 и попадаем в системную библиотеку ntdll: 7C90EAF0 MOV EBX,DWORD PTR SS:[ESP] 7C90EAF3 PUSH ECX 7C90EAF4 PUSH EBX 7C90EAF5 CALL ntdll.7C9377C1 7C90EAFA OR AL,AL 7C90EAFC JE SHORT ntdll.7C90EB0A 7C90EAFE POP EBX 7C90EAFF POP ECX 7C90EB00 PUSH 0 7C90EB02 PUSH ECX 7C90EB03 CALL ntdll.ZwContinue Скажу сразу: если пройти CALL (7C90EB03) по F8, то программа запустится, значит, мы дойдем до адреса 7C90EB02 (F8) и посмотрим содержимое стека. Если не знаешь что это такое, то тебе рановато еще читать эту статью. Будем искать адрес, который меньше, чем EP протектора (0041B060). Просмотрим правое нижнее окно Оли (стек): 0012FD7C 7C910738 ntdll.7C910738 0012FD80 FFFFFFFF 0012FD84 20008332 0012FD88 7C90EB94 ntdll.KiFastSystemCallRet 0012FD8C 0012FFB0 0012FD90 00000000 0012FD94 0012FFC0 0012FD98 00419910 Mytob.00419910 - этот адрес нам подходит! 0012FD9C 0000001B 0012FDA0 00010246 UNICODE "_HOST_CHECK=NO" Итак, сравним: 00419910 - найденный нами адрес. 0041B060 - EP протектора. Ух, я уже на ЕР UPX! Ты еще нет? Тогда быстрей ставь брейкпоинт на 00419910 (bp 00419910), дави Enter, потом F9 — и ты со мной. Если ты видишь кучу нулей, то нажми Ctrl+A — Оля проанализирует код. Тут уже совсем все просто: надо всего лишь распаковать UPX. |