Если вы не знаете что такое KdDebuggerDataBlock и зачем оно нужно - дальше лучше не читать. Если знаете - то наверняка и сами умеете находить эту структуру и дальше тоже можно не читать
суббота, 31 июля 2010 г.
pic.plw
Залил например на sourceforge сорцы очередного античного баяна - ida plugin для работы с unix x86 position independent code
Написано это было в те древние времена, когдаVisual C++ 6.0 был крутейшей средой разработки IDA Pro еще не умела правильно работать с PIC. С тех пор мне под unix/linux ничего дизассемблировать особо не нужно, так что я даже не знаю, изменилось ли в IDA Pro с тех пор положение
Поскольку дока давно потеряна - писать новую мне леньтем более что код самодокументирован
Update: рукописи не горят - дока нашлась - спасибо отличному сайту idapalace.net !
Написано это было в те древние времена, когда
Поскольку дока давно потеряна - писать новую мне лень
Update: рукописи не горят - дока нашлась - спасибо отличному сайту idapalace.net !
четверг, 29 июля 2010 г.
ndis!_NDIS_IF_BLOCK
понедельник, 26 июля 2010 г.
McAfee
а вот стоит например у меня на машине McAfee 4.5 и решил я сегодня проверить, что же именно этот тормоз перехватывает.
SSDT не трогает, но угоняет сплайсом в ядре следующие функции:
ZwYieldExecution
NtCreateFile
NtMapViewOfSection
NtUnmapViewOfSection
NtProtectVirtualMemory
NtOpenProcess
NtOpenThread
NtSetInformationProcess
NtCreateProcessEx
NtCreateProcess
NtSetContextThread
NtTerminateProcess
NtQueryValueKey
NtSetValueKey
NtUnloadKey
NtQueryMultipleValueKey
NtRenameKey
NtCreateKey
NtDeleteKey
NtDeleteValueKey
NtEnumerateKey
NtEnumerateValueKey
NtOpenKey
NtQueryKey
NtRestoreKey
NtLoadKey2
NtReplaceKey
NtNotifyChangeKey
Ну что тут сказать - мало того что авторы не знают про древний трюк с AssignProcessToJobObject, так еще и не перехватывают загрузку драйверов -грабь-убивай грузи дрова-ставь руткиты - онтевирус даже ухом не моргнет
Отличный, просто отличный продукт, чо там
SSDT не трогает, но угоняет сплайсом в ядре следующие функции:
ZwYieldExecution
NtCreateFile
NtMapViewOfSection
NtUnmapViewOfSection
NtProtectVirtualMemory
NtOpenProcess
NtOpenThread
NtSetInformationProcess
NtCreateProcessEx
NtCreateProcess
NtSetContextThread
NtTerminateProcess
NtQueryValueKey
NtSetValueKey
NtUnloadKey
NtQueryMultipleValueKey
NtRenameKey
NtCreateKey
NtDeleteKey
NtDeleteValueKey
NtEnumerateKey
NtEnumerateValueKey
NtOpenKey
NtQueryKey
NtRestoreKey
NtLoadKey2
NtReplaceKey
NtNotifyChangeKey
Ну что тут сказать - мало того что авторы не знают про древний трюк с AssignProcessToJobObject, так еще и не перехватывают загрузку драйверов -
Отличный, просто отличный продукт, чо там
воскресенье, 25 июля 2010 г.
Ищем по metal-archives.com
Потребовалось мне тут давеча много и нудно искать всякие разнообразные альбомы на митал-архивах. И поскольку я обладаю всеми доблестями perl программиста (лень, нетерпимость, высокомерие, если кто не знал), то решил я это дело немножечко автоматизировать
Поиск по CPAN не дал ничего (Perl’s killer feature, ага), что очень странно - неужто никто из матерых perlовщиков не слушает металл например ? Пришлось писать самому. Сорец прилагается
Поиск по CPAN не дал ничего (Perl’s killer feature, ага), что очень странно - неужто никто из матерых perlовщиков не слушает металл например ? Пришлось писать самому. Сорец прилагается
суббота, 24 июля 2010 г.
Сплайсер для Windows x64
Disclaimer
Эту заметку я обещал еще ранней весной написать для третьего номера отличного журнала No Bunkum. Но получилось как обычно - сначала я был дико занят, а потом похоже у авторов издания бензина хватило только на два номера. Надеюсь они не сильно обидятся, если я опубликую эти малосвязные жалкие заметки в своем блогеКрякер интернета
А признайтесь мне - бывало ли у вас так, что еще вчера вы бодро и бессмысленно посещали всякие нужные сайты, а после скачивания и запуска какого-нть широко разрекламированного "sms перехватчика" или прочей срани типа "взломщика водноклассников" некоторые сайты больше не открываются а там столько отличной порнушки с немецкими овчарками осталось, а то и вовсе заявляют что ваш аккаунт заблокирован -"дэнги давай" ?
Ладно, можете не признаваться, и не надеялся особо тащемта
Я тут составил небольшой списочек мест где надопобывать с мертвой принцессой посмотреть всякое чтобы может быть (ложная надежда) как-нибудь немножечко исправить положение
Ладно, можете не признаваться, и не надеялся особо тащемта
Я тут составил небольшой списочек мест где надо
среда, 21 июля 2010 г.
Поставил сегодня vista 64bit
поймал сразу два bsod
один - потому что под вистой таки поменялась структура _KINTERRUPT
второй - потому чтодебил неправильно итерировал по спискам _LIST_ENTRY - обычно раньше на всех виндах прокатывал следующий цикл:
под вистой же все списки именно закольцованные - последний элемент содержит адрес List, а не треш какой-нть, т.е. нужно примерно так:
Итого оно бодро и весело сожрало весь и так не великий стек и свалилось в синяк. Забавно что под windows 7 64bit оно таки работало
Обновил кстати все ndis структуры версиями для vista 64 бита
один - потому что под вистой таки поменялась структура _KINTERRUPT
второй - потому что
for ( iter = *List;
(iter != NULL) && MmIsAddressValid(iter);
iter = iter->Flink )
под вистой же все списки именно закольцованные - последний элемент содержит адрес List, а не треш какой-нть, т.е. нужно примерно так:
for ( iter = *List;
(iter != NULL) && MmIsAddressValid(iter) && (iter != (LIST_ENTRY*)List);
iter = iter->Flink )
Итого оно бодро и весело сожрало весь и так не великий стек и свалилось в синяк. Забавно что под windows 7 64bit оно таки работало
Обновил кстати все ndis структуры версиями для vista 64 бита
воскресенье, 18 июля 2010 г.
IDA plug-in writing in C/C++
а вот если кто не знал например или такой же тормоз как я - оказывается есть в природе такая книжка, причем ее можно даже совершенно официально невозбранно скачать на сайте автора Steve Micallef.
Я пролистал ее бегло - на первый взгляд выглядит значительно более толково чем бесполезные чуть более чем полностью фолиантыпыщъх криса касперски
Я пролистал ее бегло - на первый взгляд выглядит значительно более толково чем бесполезные чуть более чем полностью фолианты
Ксакеп
Давным давно в далекой галактике когда я только начал изучать внутренности NDIS, гугль выдал мне ссылку на детский юмористический журнал ксакеп - статья называлась Тушим огненные стены
И все там было понятно и доступно изложено, но была в ней одна маленькая но весьма чреватая падением в BSOD неточность - автор Александр Эккерт описывает структуру NDIS_PROTOCOL_BLOCK так:
Но мы-то знаем как они выглядят на самом деле - нету таких определений под всеми доступными мне windows. Опять же гугл (чтобы мы без него делали) сказал, что данное определение выдрано из Windows Me - prooflink. В самой же статье про это нет ни единого упоминания.
Вы бы это, тщательнее бы проверяли факты, г-н Александр Эккерт.
И все там было понятно и доступно изложено, но была в ней одна маленькая но весьма чреватая падением в BSOD неточность - автор Александр Эккерт описывает структуру NDIS_PROTOCOL_BLOCK так:
typedef struct _NDIS_PROTOCOL_BLOCK {
PNDIS_OPEN_BLOCK OpenBlock;
REFERENCE Reference;
UINT Length;
NDIS50_PROTOCOL_CHARACTERISTICS ProtocolCharacteristics;
struct _NDIS_PROTOCOL_BLOCK *Next;
ULONG MaxPatternSize;
} NDIS_PROTOCOL_BLOCK, *PNDIS_PROTOCOL_BLOCK;
Но мы-то знаем как они выглядят на самом деле - нету таких определений под всеми доступными мне windows. Опять же гугл (чтобы мы без него делали) сказал, что данное определение выдрано из Windows Me - prooflink. В самой же статье про это нет ни единого упоминания.
Вы бы это, тщательнее бы проверяли факты, г-н Александр Эккерт.
ndis!_NDIS_PROTOCOL_BLOCK
RPat
Залил например на заведенный вчера прожект на sourceforge
RPat - тулза на основе binutils, предназначенная для генерации сигнатур для IDA Pro flair.
Flair поддерживает следующие форматы при создании сигнатур (взято из flair\readme):
Если кто не знает например что такое .pat файлы и чего с ними дальше делать - дальше можете не читать
RPat - тулза на основе binutils, предназначенная для генерации сигнатур для IDA Pro flair.
Flair поддерживает следующие форматы при создании сигнатур (взято из flair\readme):
plb parselib processes OMF libraries and creates PAT fileНо как известно форматов объектных файлов существует гораздо больше, и в дикой природе даже уже существует инструмент, грозящийся поддерживать довольно много из них - это пакет GNU binutils. Соотв-но логично использовать его для грязной работы разбора форматов, а самому дописать только выходной генератор .pat файлов, что и было однажды проделано 11 лет назад
pcf parsecoff processes COFF libraries and creates PAT file
pelf parseelf processes ELF libraries and creates PAT file
ppsx parsepsx processes PSX libraries and creates PAT file (Sony Playstation)
ptmobj parsetobj processes Trimedia libraries .... .... ....
pomf166 Keil C166 object files (old format)
Если кто не знает например что такое .pat файлы и чего с ними дальше делать - дальше можете не читать
суббота, 17 июля 2010 г.
завел прожект на sourceforge
сатанинская совершенно технология - почему-то залить файлы в SVN получилось только с третьего раза. Предназначение остальных ихних тысяч всяких кнопачек и ссылочек осталось пока загадочным
Пока залил туда с немалым трудом только сорцы плагина к IDA Pro для конвертации кириллических кодировок cyr.plw - в результате прожект тоже носит гордое и корявое название cyrplw. Впрочем тег idapro выставлен - думаю кому надо найдут
Если мне будет не сильно лень - можно будет в свободное от праздного безделья время залить туда же еще некоторые разной степени античной баянистости вещи для IDA Pro, ныне рассыпанные по всему инторнету
Умная мысль
как обычно чужая
Статья довольно длинная, так что я ключевой кусочек только процитирую:
выберите любые два из трех пунктов
Между прочим из вышесказанного можно по некотором размышлении сделать пару выводов.
Статья довольно длинная, так что я ключевой кусочек только процитирую:
серебряная пуля есть. Вот она:
Необходимо иметь либо работающий макет приложения, который устраивает заказчика, либо глубоко разбираться в предметной области и знать, что же требуется, а еще лучше – и то, и другое.
Надо хорошо знать инструмент, которым пользуешься – в нем не должно быть никаких темных мест и неожиданных свойств. Он должен быть известен досконально, все его сильные и слабые стороны
При реализации проекта должно быть одно ответственное лицо, с одной стороны крайне заинтересованное в результате и, с другой, имеющее власть навязать, пусть и административным путем, свое решение, и группа разработчиков, являющихся его активными сторонниками или по крайней мере возможность активного стимулирования таковых.
Между прочим из вышесказанного можно по некотором размышлении сделать пару выводов.
- Программирование в вакууме - никому не нужно. Т.е. нужно сначала знать предметную область, а уже потом обладать навыками изложения своего желания компьютеру.
Горячий привет факультетам computer science - Имеет смысл писать максимально простые средства разработки для использования Обычными Средними Людьми, чтобы они сами ваяли себе чего им нужно, чем изобретать очередной Универсальный Мегаязык Программирования для гиков.
Здравствуйте, генераторы сайтов и визуальные конструкторы форм a'la delphi или visual basic
ndis!_NDIS_COMMON_OPEN_BLOCK
четверг, 15 июля 2010 г.
Критика perl
если кто не читал например сей античный баян: критический анализ языка perl
вобщем-то ничего особо нового, предъявы в духе "а еще они строем не ходят", но дичайше позабавил следующий фрагмент:
вобщем-то ничего особо нового, предъявы в духе "а еще они строем не ходят", но дичайше позабавил следующий фрагмент:
1.3. Числа
И здесь не обошлось без сюрпризов. Кроме стандартных форм записи целых и вещественных чисел вроде
123 # целое
123.123 # вещественное
.5 # при записи десятичных дробей ноль в целой части можно опускать
.5E-10 # экспоненциальная форма
0xABCD # шестнадцатеричные числа записываются как в C
0377 # если первая цифра - ноль, то это восьмеричное число
PERL поддерживает и такую:
А теперь смотрим тут:9_123_456 # это, видимо, для "удобства чтения"
и даже, как показывает практика, такую:
9_1__2_3___456_____ # что сие означает, надо спросить у Larry Wall
бггThis proposal suggests that Java follow the lead of the Ruby programming language in allowing the underscore character to be inserted into numbers in most positions, for readability purposes. ADVANCED EXAMPLE: long creditCardNumber = 1234_5678_9012_3456L; long socialSecurityNumbers = 999_99_9999L; float monetaryAmount = 12_345_132.12; long hexBytes = 0xFF_EC_DE_5E; long hexWords = 0xFFEC_DE5E; long maxLong = 0x7fff_ffff_ffff_ffffL; long alsoMaxLong = 9_223_372_036_854_775_807L; double whyWouldYouEverDoThis = 0x1_.ffff_ffff_ffff_fp10_23
среда, 14 июля 2010 г.
ndis!_NDIS_MINIPORT_BLOCK
Продолжаем дилетантские ковыряния отверткой в ухе в кишках ndis
В этой заметке описываются структура _NDIS_MINIPORT_BLOCK а также довольно тупой способ узнать смещение на поле NextGlobalMiniport, которое необходимо для создания итератора по этим структурам
В этой заметке описываются структура _NDIS_MINIPORT_BLOCK а также довольно тупой способ узнать смещение на поле NextGlobalMiniport, которое необходимо для создания итератора по этим структурам
воскресенье, 11 июля 2010 г.
Effective Perl Programming
Все же subj задрал своими маловразумительными примерами и даже прямыми очепятками.
Вот например - item 36 (p127):
Или скажем примерчик из item 35 (p121):
Или вот еще примерчик с typeglobs aliasing из item 118 (p423) на самом деле напечатает
Интересно у авторов subj есть страничка куда можно слать bug reports ?
Вот например - item 36 (p127):
$big_str =~ /\Q$little_str/g; # or /og, maybeявная бага, нужно вычитать длину $little_str
my $pos = pos($big_str) - length($big_str);
Или скажем примерчик из item 35 (p121):
# a double-quoted stringИ чего тут поменяется если убрать question mark ? Ровно такой же результат выдается. Для того чтобы результаты были разные нужно добавить в $_ еще что-нть с дополнительными кавычками, вроде
$_ = 'a "double-quoted \"string\042"';
my ($str) = /("(\\["\\]|\\\d{1,3}|.)*?")/;
print $str; # "double-quoted \"string\042"
$_ = "'a "double-quoted \"string\042" some shit"';тогда применение greedy matching против non-greedy выдаст реально разные результаты
Или вот еще примерчик с typeglobs aliasing из item 118 (p423) на самом деле напечатает
yello renа не то что сказано в комментариях
hello stimpy
hello stimpy
Интересно у авторов subj есть страничка куда можно слать bug reports ?
Перечисляем зарегистрированные Callbacks
Callbacks - отличный механизм виндов, позволяющий драйверам получать нотификацию о всяких разных событиях. Если вы когда-либо запускали WinObj, то могли видеть имена этих callbacks в узле Callback
К сожалению как обычно - внутренности их реализации недокументированы. Но кого и когда эта мелкая неприятность останавливала ?
К сожалению как обычно - внутренности их реализации недокументированы. Но кого и когда эта мелкая неприятность останавливала ?
Модульность
Чего-то мне не спится и в голову лезут всякие странные мысли (книжками навеяло):
cpan.org:
Чо-то как-то сравнимые цифры как мне кажется
CPAN is now Perl’s killer featureНу чего - давайте проверим
cpan.org:
2010-07-10 online since 1995-10-26pypi.python.org/pypi:
7182 MB 228 mirrors
8242 authors 18001 modules
There are currently 10474 packages hererubyforge.org:
Hosted Projects: 8,903torry.net - если кто забыл или не знал - сайт с компонентами для delphi:
Registered Users: 52,354
Authors total: | 4688 |
Products total: | 9851 |
суббота, 10 июля 2010 г.
NDIS structs
Будучи хроническим алкоголиком с плохой памятью, записал сугубо для себя некоторые результаты ковыряния ndis.sys, в частности кое-какие его структуры для разных версий windows (чтобы не забыть например. тем более что часто под рукой нету кучи разных версий windows c windbg)
Экспортируемые символы и для 64 бит
Они же для netio.sys и для 64 бит
Определения констант для ndis!_NDIS_OBJECT_HEADER.Type
Экспортируемые символы и для 64 бит
Они же для netio.sys и для 64 бит
Определения констант для ndis!_NDIS_OBJECT_HEADER.Type
IDT x64 win7
Некоторое время назад потребовалось мне узнать формат IDT и структуру _KINTERRUPT для 64битной windows. После недолгого гугления нашел вот этот замечательный пост. Радоваться правда пришлось недолго, ибо все что там описано соответствует исключительно 64битным xp и w2k3. В vista, windows7 (а равно и в более толстой сестре-близнеце ея w2008r2) структура _KINTERRUPT поменялась и выглядит сейчас так:
Соотв-но раньше DispatchAddress был по смещению 0x40 и переход на него выглядел как:
Поскольку в vista/windows7 изменилось как смещение на DispatchAddress так и размер _KINTERRUPT, то сейчас ф-ция обработчика прерывания KiInterruptTemplate выглядит так:
Весьма странно что сии полезные сведения гугл отказался мне выдавать - неужто и впрямь никто не озаботился описать сокровенные знания ?
struct _KINTERRUPT_vista {
{
/* 0x00 */ short Type;
/* 0x02 */ unsigned short Size;
/* 0x08 */ PBYTE Flink;
/* 0x10 */ PBYTE Blink;
/* 0x18 */ PBYTE ServiceRoutine;
/* 0x20 */ PBYTE MessageServiceRoutine;
/* 0x28 */ unsigned long MessageIndex;
/* 0x30 */ PBYTE ServiceContext;
/* 0x38 */ unsigned __int64 SpinLock;
/* 0x40 */ DWORD TickCount;
/* 0x48 */ unsigned __int64 ActualLock;
/* 0x50 */ PBYTE DispatchAddress;
/* 0x58 */ DWORD Vector;
/* 0x5c */ BYTE Irql;
/* 0x5d */ BYTE SynchronizeIrql;
/* 0x5e */ BYTE FloatingSave;
/* 0x5f */ BYTE Connected;
/* 0x60 */ BYTE Number;
/* 0x61 */ BYTE ShareVector;
/* 0x64 */ DWORD Mode;
/* 0x68 */ DWORD Polarity;
/* 0x6C */ DWORD ServiceCount;
/* 0x70 */ DWORD DispatchCount;
/* 0x78 */ unsigned __int64 Rsvd1;
/* 0x80 */ PBYTE TrapFrame; // ptr to KTRAP_FRAME
/* 0x88 */ PBYTE Reserved;
}; /* size: 0x90 */
struct _KINTERRUPT_w7
{
/* 0x00 */ short Type;
/* 0x02 */ unsigned short Size;
/* 0x08 */ PBYTE Flink;
/* 0x10 */ PBYTE Blink;
/* 0x18 */ PBYTE ServiceRoutine;
/* 0x20 */ PBYTE MessageServiceRoutine;
/* 0x28 */ unsigned long MessageIndex;
/* 0x30 */ PBYTE ServiceContext;
/* 0x38 */ unsigned __int64 SpinLock;
/* 0x40 */ DWORD TickCount;
/* 0x48 */ unsigned __int64 ActualLock;
/* 0x50 */ PBYTE DispatchAddress;
/* 0x58 */ DWORD Vector;
/* 0x5c */ BYTE Irql;
/* 0x5d */ BYTE SynchronizeIrql;
/* 0x5e */ BYTE FloatingSave;
/* 0x5f */ BYTE Connected;
/* 0x60 */ unsigned long Number;
/* 0x64 */ BYTE ShareVector[4];
/* 0x68 */ DWORD Mode;
/* 0x6c */ DWORD Polarity;
/* 0x70 */ DWORD ServiceCount;
/* 0x74 */ DWORD DispatchCount;
/* 0x78 */ unsigned __int64 Rsvd1;
/* 0x80 */ PBYTE TrapFrame; // ptr to KTRAP_FRAME
/* 0x88 */ PBYTE Reserved;
}; /* size: 0x90 */
Соотв-но раньше DispatchAddress был по смещению 0x40 и переход на него выглядел как:
push rax
push rbp
mov rbp, rip-0x79 ; 0x70 - sizeof(_KINTERRUPT), 0x9 - offset RIP from KiInterruptTemplate
jmp qword ptr [rbp+0x40] ; _KINTERRUPT.DispatchAddress
Поскольку в vista/windows7 изменилось как смещение на DispatchAddress так и размер _KINTERRUPT, то сейчас ф-ция обработчика прерывания KiInterruptTemplate выглядит так:
push rax
push rbp
mov rbp, rip-0x99 ; 0x90 - sizeof(_KINTERRUPT_w7), 0x9 - offset RIP from KiInterruptTemplate
jmp qword ptr [rbp+0x50] ; _KINTERRUPT_w7.DispatchAddress
Весьма странно что сии полезные сведения гугл отказался мне выдавать - неужто и впрямь никто не озаботился описать сокровенные знания ?
ужасный perl
Дичайше радуют меня книжки про программирование на perl - практически в любой можно узнать много нового, убедиться что perl ты совершенно не знаешь и вообще всю жизнь использовал неправильно что немедленно повергает в пучину тоски и уныния
Вот давеча читаю я например второе издание Effective Perl Programmingисхожу пеной от бессилия и сознания собственной тупости и невежества и в item 33 вижу следующий совет - если вы в своей гениальной программе хотя бы один только раз используете переменные $`, $& или $', то вообще любое регулярное выражение в вашей программе будет заполнять их при выполнении. Естественно не поверив, бросился немедленно в пятитысячный раз перечитывать perldoc perlre и таки да:
чорных магических переменных - практически не используются, разве что в Pod::Html.pm и Tk::Reindex
Заодно нашел аналогичноезловещее предупреждение в B::Lint.pm:
Вот давеча читаю я например второе издание Effective Perl Programming
WARNING: Once Perl sees that you need one ofВсе еще не веря глазам своим сделал grep по стандартным перловым пакетам на предмет использования этих$&
,$`
, or$'
anywhere in the program, it has to provide them for every pattern match. This may substantially slow your program.
Заодно нашел аналогичное
This option warns whenever one of the regexp variables $', $& or $' is used. Any occurrence of any of these variables in your program can slow your whole program downНадо будет прошерстить на следующей неделе всю невероятную кучу своих скриптов и сделать с этим уже чего-нть.