Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Вниз

Где Розыч узнает про недокументированные функции?   Найти похожие ветки 

 
Slipknot_VEVO   (2012-09-26 22:37) [0]

Они ж недокументированные!
Значит в спраке нет.
Может есть в статьях... А там они откуда узнали?

Вообщем, объясните. :)


 
Юрий Зотов ©   (2012-09-26 22:38) [1]

Он пиво Гейтсу выставил и теперь все из первых рук получает.


 
Jeer ©   (2012-09-26 22:40) [2]

Ему Гейтс пиво выставляет за новые обнаруженные недокументированные функции :)


 
Rouse_ ©   (2012-09-26 23:01) [3]

Что значит где? Там ->>>
Ну а вообще недокументированность это то, о чем не описано, но можно узнать. Возьми любую MS бибилиотеку, посмотри какие она функции экспортирует. Поищи их в справке MSDN. Если не нашел - айда ее под отладчик и разгребаем ее параметры. Как-то так :)
Гораздо интереснее искать недокументированные инструкции, ну например мало кто знает что есть длинные NOP-ы или бряки это не только CC опкод, есть и другие вариации опкодов генерирующих отладочные исключения не описанные с Intel-овском мануале :)
Вот это как раз интересно и находится совершенно случайно, я в свое время часть находил генерируя рандом с целью проверки свое движка дизасма, парралельно проверяя то что он не смог разобрать (но оно выполнилось) с мануалами и сторонними дизасмами...


 
Rouse_ ©   (2012-09-26 23:07) [4]

ЗЫ: а так вообще большая часть это просторы инета (китайцы в этом плане сильно помогают), исходные коды операционок, антивирусов и т.п.

Собственных наработок в плане нахождения новых недокументированных фишек у меня не более 10-15 процентов, и то больше половины получено в результате взлома чужих приложений и изучения новых трюков...


 
Игорь Шевченко ©   (2012-09-26 23:27) [5]


> Они ж недокументированные!


Значит они не нужны. И с выходом очередной версии операционной системы имеют много шансов потерять смысл, назначение и параметры. Займись чем-нибудь более полезным.


 
Petr V. Abramov ©   (2012-09-26 23:28) [6]


> Rouse_ ©   (26.09.12 23:01) [3]

занятно :)
остается вопрос, почему это работает на всех процах и на AMD тоже


 
Rouse_ ©   (2012-09-26 23:30) [7]


> Petr V. Abramov ©   (26.09.12 23:28) [6]
> занятно :)
> остается вопрос, почему это работает на всех процах и на
> AMD тоже

Ну тебе же Игорь ответил - теоретически оно может перестать работать :)


 
Rouse_ ©   (2012-09-26 23:36) [8]


> Petr V. Abramov ©   (26.09.12 23:28) [6]

зы, про sysenter и syscall думаю в курсе, в свое время AMD грозилось вообще sysenter в привелигерованные занести, но воз и ныне там :)


 
Германн ©   (2012-09-27 01:43) [9]


> Rouse_ ©   (26.09.12 23:07) [4]
>
> ЗЫ: а так вообще большая часть это просторы инета

А версия насчёт пива и БГ - всё же более красивая.
:)


 
Rouse_ ©   (2012-09-27 01:45) [10]


> Германн ©   (27.09.12 01:43) [9]
> А версия насчёт пива и БГ - всё же более красивая.

Обе не верные, я ставил Чивас ;)


 
Дмитрий С ©   (2012-09-27 02:08) [11]

можно еще какие-нить недокументированные "вкусняшки"  рассказать?)


 
Дмитрий С ©   (2012-09-27 02:09) [12]

интересно как ты определил, что длинный ноп, всетаки ничего не делает?)


 
Rouse_ ©   (2012-09-27 02:32) [13]


> Дмитрий С ©   (27.09.12 02:09) [12]
> можно еще какие-нить недокументированные "вкусняшки"  рассказать?)
> интересно как ты определил, что длинный ноп, всетаки ничего не делает?)

По поводу недокументированных инструкций и методах их детекта - не расскажу. Ну по крайней мере до тех пор, пока не выведу их из состава своего движка защиты.

По поводу вкусняшек, смотря что интересно. Ну для примера у меня есть варианты генерации BSOD-а из третьего кольца под всеми операционными системами включая восьмерку. Ну или перевод процессора в хитрый режим, в котором он будет генерировать исключение отладки #DB при выполнении любого условного перехода (инструкция Jxx) в теле приложения. Чем-то я могу поделиться, что-то публикую в блоге или на сайте. Задавай вопросы конкретней...


 
Rouse_ ©   (2012-09-27 02:46) [14]


> Дмитрий С ©   (27.09.12 02:09) [12]
> интересно как ты определил, что длинный ноп, всетаки ничего
> не делает?)

А, ну вообще на этот вопрос я могу ответить.
Грубо, т.к. последовательность опкодов недокументированна, а дизассемблер ее пытается преобразовать в что-то, что он знает, например пусть это будет упрощенно:
xor eax, eax
xor ebx, ecx
not ecx

при трассировке ты естественно ожидаешь что все эти три инструкции выполнятся последовательно, и будешь удивлен, когда при выполнении первой-же инструкции EIP уйдет байт эдак на 10 далее, пропуская то, что тебе нагенерировал дизасм...


 
Inovet ©   (2012-09-27 04:37) [15]

> [8] Rouse_ ©   (26.09.12 23:36)

Недокументированные фичи в процессорах как-то используются интеловским компилятором или это технологические артефакты?


 
Anatoly Podgoretsky ©   (2012-09-27 07:08) [16]

> Rouse_  (26.09.2012 23:30:07)  [7]

А практически это доказал Нортон


 
Anatoly Podgoretsky ©   (2012-09-27 07:09) [17]

> Rouse_  (27.09.2012 01:45:10)  [10]

Че Ге Варе?


 
Inovet ©   (2012-09-27 07:55) [18]

> [16] Anatoly Podgoretsky ©   (27.09.12 07:08)
> А практически это доказал Нортон

Это в чём он так?


 
Anatoly Podgoretsky ©   (2012-09-27 08:57) [19]

> Inovet  (27.09.2012 07:55:18)  [18]

Он использовал много недокументированых функий в 95 и при переходе на 98
много прекратило работать или стало работать не так


 
AV ©   (2012-09-27 09:14) [20]

А.. Norton Utilities..
Да, наделали они делов..
Конечно, крутая вещь была, но потом запорола, наверное, не один hdd ^)


 
Anatoly Podgoretsky ©   (2012-09-27 09:25) [21]

> AV  (27.09.2012 09:14:20)  [20]

У меня точно запороло, с тех пор я в удаление от Нортона.


 
Дмитрий С ©   (2012-09-27 10:31) [22]


> Rouse_ ©   (27.09.12 02:46) [14]
>
>

Ну это понятно. А как ты узнал что твоя инструкция ничего не делает?


 
Дмитрий С ©   (2012-09-27 10:31) [23]

ну не твоя, конечно, а найденная.


 
AV ©   (2012-09-27 10:32) [24]

Дык, написано, прыгнуло через нее


 
Дмитрий С ©   (2012-09-27 10:57) [25]


> Дык, написано, прыгнуло через нее
>

Ничего не прыгнуло. Грубо говоря, процессор выполняет 5и байтовую команду, а дизассемблер думает, что это 5 разных команд, получается эффект прыжка.


 
Германн ©   (2012-09-27 14:00) [26]


> Грубо, т.к. последовательность опкодов недокументированна,
>  а дизассемблер ее пытается преобразовать в что-то, что
> он знает, например пусть это будет упрощенно:
> xor eax, eax
> xor ebx, ecx
> not ecx
>
> при трассировке ты естественно ожидаешь что все эти три
> инструкции выполнятся последовательно, и будешь удивлен,
>  когда при выполнении первой-же инструкции EIP уйдет байт
> эдак на 10 далее, пропуская то, что тебе нагенерировал дизасм.
> ..
>


Хм. А если злонамеренно вставить в исполняемый код (в то место, в которое реально никогда программа не заходит) "левый" байт. Не будет ли это попыткой затруднить дизассемблирование?


 
Rouse_ ©   (2012-09-27 15:47) [27]


> Ну это понятно. А как ты узнал что твоя инструкция ничего
> не делает?

Ну это очень просто, у каждой инструкции есть документированное поведение, описанное в интеловском мануале, грубо после ее исполнения меняются состояние регистров и флагов. Зная это, можно определить что перед тобой.
Во, кстати, в последнем интеловском мануале часть данных появилась, в моем данной информации нет:

2 bytes 66 NOP 66 90H
3 bytes NOP DWORD ptr [EAX] 0F 1F 00H
4 bytes NOP DWORD ptr [EAX + 00H] 0F 1F 40 00H
5 bytes NOP DWORD ptr [EAX + EAX*1 + 00H] 0F 1F 44 00 00H
6 bytes 66 NOP DWORD ptr [EAX + EAX*1 + 00H] 66 0F 1F 44 00 00H
7 bytes NOP DWORD ptr [EAX + 00000000H] 0F 1F 80 00 00 00 00H
8 bytes NOP DWORD ptr [EAX + EAX*1 + 00000000H] 0F 1F 84 00 00 00 00 00H
9 bytes 66 NOP DWORD ptr [EAX + EAX*1 +
00000000H]
66 0F 1F 84 00 00 00 00
00H


Часть правда тут не совсем работает, но покажу фишку из того что работает, например возьмем трехбайтный NOP, опкоды $0F, $1F, 0

Пишем код:
 asm
   db $0F, $1F, $00
   xor eax, eax
   inc eax
   neg eax
 end;


а теперь смотрим что получилось в дизассемблере:

004520DE OF            db $0f
004520DE 1F            pop ds
004520E0 0031          add [ecx],dh
004520E2 C040F7D8      rol byte ptr [eax-$09],$d8


Шикарный вид :)

В списке отсутствуют 12 и 14 байтные ноп-ы, я собственно их оычно использую

То-же примерно получится если, как сказал Герман, злонамеренно вставить "левый" байт. Такой подход называют прыжком в середину инструкции, хотя на самом деле конечно это просто прыжок по валидному адресу. Выглядит так:

   db $EB, $01   // jmp +1 (прыжок на xor пропуская "левый байт")
   db $B8        // непосредственно сам "левый" байт
   xor eax, eax  // правильный код


из этого получается вот такая каша:
jmp +$01
mov eax, $d285co31


в кратце как-то так...


 
Rouse_ ©   (2012-09-27 15:54) [28]


> Inovet ©   (27.09.12 04:37) [15]
> Недокументированные фичи в процессорах как-то используются
> интеловским компилятором или это технологические артефакты?

Если чесно не разбирал вопрос с этого ракурса...


 
Дмитрий С ©   (2012-09-27 16:08) [29]

Наверняка современные отладчики умеют с этим бороться. Например переразобрать код если обнаружился EIP в середине инструкции.


 
Rouse_ ©   (2012-09-27 16:14) [30]


> Дмитрий С ©   (27.09.12 16:08) [29]
> Наверняка современные отладчики умеют с этим бороться.

С такими простыми случаями Olly бороться умеет, но это сильно упрощенная схема, ничто не мешает написать код так, что один байт будет реально принадлежать двум, а то и трем различным инструкциям, наложенных друг на друга со смещением. В данном случае поможет только трассировка


 
Дмитрий С ©   (2012-09-27 16:18) [31]

Хм. Теоретически ведь можно написать такой компилятор или конвертер, который весь код "покроет" этим трюком.


 
Дмитрий С ©   (2012-09-27 16:20) [32]

а еще про bsod. А можно не bsod вызвать, а отключить блок питания? Резко и внезапно?


 
brother ©   (2012-09-27 16:25) [33]

> отключить блок питания? Резко и внезапно?

можно! Выдерни шнур из розетки! -_-


 
Rouse_ ©   (2012-09-27 16:27) [34]


> Дмитрий С ©   (27.09.12 16:18) [31]
> Хм. Теоретически ведь можно написать такой компилятор или
> конвертер, который весь код "покроет" этим трюком.

Собственно это одна из моих основных задач :)


> Дмитрий С ©   (27.09.12 16:20) [32]
> а еще про bsod. А можно не bsod вызвать, а отключить блок
> питания? Резко и внезапно?

Конечно, пиропатрон к кабелю и два провода на LPT порт :)
Будет шумно, резко и внезапно!!! :)


 
Дмитрий С ©   (2012-09-27 17:19) [35]

Да уж. Пиропатроны делать я умею и главное есть из чего. но мне бы по проще чего нить и по тише)


 
Игорь Шевченко ©   (2012-09-27 17:43) [36]


> А можно не bsod вызвать, а отключить блок питания? Резко
> и внезапно?


можно


 
TUser ©   (2012-09-27 17:52) [37]

О сбое компьютера вы узнаете по яркой вспышке, клубам дыма и взрыву, который отбросит вас не менее, чем на три метра. (с)


 
no_way   (2012-09-27 18:12) [38]

Rouse_, а зачем вы вообще пишите защиту сами, а не используете vmprotect, например
насколько знаю, автоматом его еще никто не разворачивает
стоит он копейки, а сэкономит кучу времени и сил
и авторы русские, постоянно бывают на рсдн

зы
не реклама, сам его не использую и к нему никакого отношения не имею


 
Slipknot_VEVO   (2012-09-27 18:13) [39]

Удалено модератором


 
Rouse_ ©   (2012-09-27 18:31) [40]


> no_way   (27.09.12 18:12) [38]
> Rouse_, а зачем вы вообще пишите защиту сами, а не используете
> vmprotect, например

Почему не использую? Использую конечно, только ExeCryptor но полагаться только на него одного нельзя, поэтому нужно включать мозги везде где только нужно.
По поводу же VmProt-а, на автомате не разворачивают, но средства помогающие разбирать ВМ есть, что уже чревато...



Страницы: 1 2 вся ветка

Форум: "Прочее";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.56 MB
Время: 0.069 c
15-1337268857
boriskb
2012-05-17 19:34
2013.03.22
Российские студенты выиграли чемпионат мира по программированию


15-1345064533
DevilDevil
2012-08-16 01:02
2013.03.22
IInterface и RTTI по нему


15-1327513350
alexdn
2012-01-25 21:42
2013.03.22
Сервер


2-1329288943
TNK
2012-02-15 10:55
2013.03.22
Как преобразовать строку в дату.


15-1352384190
Artem
2012-11-08 18:16
2013.03.22
Можно ли сменить размер виртуального диска в VirtualBox?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский