Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Хакер за июнь. Программная оборона

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Журнал Xakep] >> Хакер за июнь. Программная оборона
Имя
Сообщение << Старые топики   Новые топики >>
Хакер за июнь. Программная оборона - 2007-08-12 01:04:03.170000   
The Svin

Сообщений: 24
Оценки: 0
Присоединился: 2007-08-12 00:10:43.296666
Начал читать сабжевую статью Исупова.
Наткнулся на странно написанный код:

00401000: jmp 00401028 ;Hex-коды перехода - EB26h 00401002: .... ;закодированные инструкции 00401028: mov ecx,27 0040102D: push edx 0040102E: push ecx 0040102F: mov edx, [ecx+00401000] 00401035: xor edx,35 00401038: mov [ecx+00401000], edx 0040103E: pop ecx 0040103F: pop edx 00401040: loop 0040102D 00401042: jmp 00401002
Далее идут слова
Знаю, что ты скажешь: "Это неправильно! Кодироващик затерает байт перехода
Ну и так далее.
Даже не знаю, с чего правильно начать.
Ну, пусть с "мелочей". Понятно, что целей оптимизации тут не преследовалось, но код сам по себе странный.
1. Зачем например push и pop ecx делать, если между этими инструкциями ecx не меняется?
2. Зачем вообще помещать что-то в регистр edx, когда можно просто ксорить память на непостредственный операнд?
Весь код:
0040102D: push edx 0040102E: push ecx 0040102F: mov edx, [ecx+00401000] 00401035: xor edx,35 00401038: mov [ecx+00401000], edx 0040103E: pop ecx 0040103F: pop edx 00401040: loop 0040102D Можно было свести к двум! инструкциям, без всяких особенных хитрых оптимизаций, просто убрав лишнее:
@@: xor byte ptr [ecx+00401000], 35 loop @@ Ладно, понято, что статья не о программировании, хотя речь тут идёт не о хитростях, а просто о непонятном коде, который написан больше чем нужно но не делает его понятней читателю, а просто запутывает странностями и нелогичностью.

Рассмотрим саму цель декларированную автором:
Отксорить весь программный код на 35. При этом и инструкцию перехода.
Сразу обратим внимание на адресацию [ecx+401000] цель была видимо изменить байты в диапазоне [401000:401027] используя косвенно ecx, который изменяет loop.
Но loop нерестанет джампить как только в ecx окажется 0. И при ecx=0 уже тело цикла не будет выполнено.
А это значит, что байт по адресу 401000 никогда бы при такой адресации и алгоритме не изменился.
Post #: 1
RE: Хакер за июнь. Программная оборона - 2007-11-25 21:43:42.236666   
CrawlerLOL

Сообщений: 2
Оценки: 0
Присоединился: 2007-11-21 13:56:10.350000
Привет. А вот и автор в студии (Исупов aka Cr@wler).
Отвечу на вопросы, хотя и поздно. Думаю, читателям тоже будет интересно.

Как ты можешь понять, приведенный код - это каркас для многих методов кодирования, отсюда вытекают и ответы на твой вопрос.
Инструкции push\pop (конечно, можно и pushad\popad) оставлены для того, чтобы при применении других методов (не банального ксора) элементарно, не запариваясь, поменять (де)криптующий код.

Из этого вытекает и ответ на твой вопрос:

quote:

2. Зачем вообще помещать что-то в регистр edx, когда можно просто ксорить память на непостредственный операнд?


Ксор на операнд - слишком сложно для понимания новичка. Для нового человека гораздо понятнее будет объяснить на пальцах, вроде "берем яблоко, грушу и делаем пюре" )). Кроме того, в сложных схемах все же более удобным будет алгоритм, который оперирует с регистрами.

Спасибо за замечания по оптимизации, это выдает твой высокий уровень технических знаний. Удачи в кодинге!

Post #: 2
RE: Хакер за июнь. Программная оборона - 2007-11-25 21:50:28.293333   
CrawlerLOL

Сообщений: 2
Оценки: 0
Присоединился: 2007-11-21 13:56:10.350000

и еще…
quote:

Но loop нерестанет джампить как только в ecx окажется 0. И при ecx=0 уже тело цикла не будет выполнено.
А это значит, что байт по адресу 401000 никогда бы при такой адресации и алгоритме не изменился.

а это уже невнимательность (не моя, а Ваша =) по отношению к использованному алгоритму. Даже если бы тело цикла и НЕ выполнялось, в задачи алгоритма не входит правка верхнего байта, так как, по крайней мере, 2 байта были заменены на машинные коды eb 26.
Post #: 3
RE: Хакер за июнь. Программная оборона - 2007-12-11 10:22:06.340000   
MaZaHaKa90

Сообщений: 2
Оценки: 0
Присоединился: 2007-12-10 22:52:32.643333
привет всем!!! у меня знания на уровни Юзера
Post #: 4
RE: Хакер за июнь. Программная оборона - 2007-12-11 10:24:16.800000   
MaZaHaKa90

Сообщений: 2
Оценки: 0
Присоединился: 2007-12-10 22:52:32.643333
кто может взломать сервак?:)
Post #: 5
Страниц:  [1]
Все форумы >> [Журнал Xakep] >> Хакер за июнь. Программная оборона







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.