суббота, 30 июля 2011 г.

феерия

сохранил на всякий случай дичайше доставляющий топек на  wasm
Детский юмористический журнал ксакеп докатился до посещения совсем уж маргинальных помоек в поисках аффтаров, бгг
Но наиболее доставляет сеанс саморазоблачения "величайшего российского хакер-гуру":
в хакере писать дважды на одну и туже тему не приветствовалось и потому приходилось писать о вещах в которых нихуа не разбираешься, да еще в ударном темпе. типа один день гуглишь, ночью перевариваешь материал, а на следующий день точишь статью (фуфло полное).

но зато публикации помогли "держать удар" и уметь продавать себя
и так 507 раз, угу
А все потому что "уметь продавать себя". Кто сразу вспомнил термин "дешевая проститутка" ?

четверг, 28 июля 2011 г.

embeddable languages

а вот например поскольку я совсем обленился устал уже писать мегабайты сорцов на C++, то искал давеча subj с целью встроить во всякие свои проекты
Критерии отбора не особо сложные - нужно чтобы:
  • работало на windows 32 & 64 бита
  • легко расширялось кодом на C/C++
  • не тащило с собой кучу runtime как например perl или python - т.е. нужно чтобы оно просто умело быть вкомпиленным внутрь многометрового .exe и никаких больше внешних файлов не требовало
  • более-менее строгую типизацию. Потому что например из скрипта придется общаться с собственным драйвером и потому оно может немножечко посинеть внезапно. По этой причине упячка под названием V8 JavaScript пролетает целиком и полностью
И вы таки мне не поверите, но оказалось что выбор весьма невелик:
  • lua
  • falcon
  • racket, хотя я не смотрел пока как у него с легкостью расширения
Удручает что многие кандидаты под windows de facto 32 bit only. Например ecl под linux поддерживает 64 бита, а под windows нет. Очень грустно

среда, 27 июля 2011 г.

StorPortVerifierFunctionTable

еще один драйвер, поддерживающий Driver Verifier - storport.sys (Microsoft Storage Port Driver)
Списки перехватываемых ф-ций:

вторник, 26 июля 2011 г.

CmControlVector

А вот например у ядра windows есть такой механизм - можно во всяких ключиках реестра задавать разные параметры ядра. Реализована эта штука как массив структур CM_SYSTEM_CONTROL_VECTOR (нагло взято из wrk):

typedef struct _CM_SYSTEM_CONTROL_VECTOR {
  PWSTR   KeyPath;       // path name relative to
                         // current control set
  PWSTR   ValueName;     // name of value entry
  PVOID   Buffer;        // data goes here
  PULONG  BufferLength;  // IN: space allocated
                         // OUT: space used, -1 for no such
                         //      key or value, 0 for key/value
                         //      found but has 0 length data
                         // if NULL pointer, assume 4 bytes
                         // (reg DWORD) available and do not
                         // report actual size
  PULONG  Type;          // return type of found data, may
                         // be NULL
} CM_SYSTEM_CONTROL_VECTOR, *PCM_SYSTEM_CONTROL_VECTOR;


Мне например всегда было любопытно узнать, какие ключики реестра на разных версиях Windows используются. Соотв-но был написан простой perl script для IDA Pro, который сдампил мне массив CmControlVector от разных ядер и потом я все это дело свел в следующую табличку

понедельник, 25 июля 2011 г.

ScsiPortVerifierFunctionTable

а вот например еще scsiport.sys поддерживает Driver Verifier
Список перехватываемых ф-ций одинаков под всеми версиями windows:
  • ScsiPortInitialize
  • ScsiPortGetSrb
  • ScsiPortCompleteRequest
  • ScsiPortGetDeviceBase
  • ScsiPortNotification
  • ScsiPortFlushDma
  • ScsiPortFreeDeviceBase
  • ScsiPortGetBusData
  • ScsiPortGetLogicalUnit
  • ScsiPortGetPhysicalAddress
  • ScsiPortGetUncachedExtension
  • ScsiPortGetVirtualAddress
  • ScsiPortIoMapTransfer
  • ScsiPortMoveMemory
  • ScsiPortSetBusDataByOffset
  • ScsiPortValidateRange
  • ScsiPortStallExecution

воскресенье, 24 июля 2011 г.

устанавливая всякое

на новую машинку должен заметить что
  • даже в самом свежем MinGW perl версии 5.8.8. Расскажите уже им про 5.14. Python впрочем нет и вовсе никакого
  • sbcl для 64битной windows так и не осилили 
  • IDAPython c 32битным ActiveState Python 3.2.1 взлетать отказался категорически.PyKd требует в свою очередь 64битного pythonа 2.6. Пребываю в задумчивости
  • python же мне потребовался в свою очередь для сборки yasm (и его приблуды для vs2010 vsyasm) и botan. Характерно, что оба без применения рашпиля собираться отказались. Начинаю думать, что если какая-нть прога требует для сборки pythonа - может ее лучше не собирать вовсе ?
  • pyscripter, как это принято в мире OpenSource, 64битную винду не поддерживает:
    If you are using a 64bit version of Windows note that PyScripter will only work if a 32bit version of Python is installed.
  • сайт intel, посещенный давеча для обретения душевного равновесия intel c++ compiler, c firefoxом не дружит абсолютно - после заполнения их бессмысленной формы на кнопачку "Загрузить сейчас" можно жать до посинения. Пришлось повторить процедуру в ie8. Волнуюсь за линуксоидов - а ну как им захочется оттуда скачать чо-нть, а ie8 в linuxе нету например, бгг
А еще расскажите мне что нынче модно использовать для шифрования всяких нужных директорий ? Я раньше как-то особо не заморачивался, а тут подумал что все же ноут, мало ли потеряю по пьяни например - врагу всякое полезное чтобы не досталось

    суббота, 23 июля 2011 г.

    приобрел себе ноутбук

    например
    8 камней (с AVX, бгг), 6 гигов ram - должно хватить вобщем для скромной деятельности
    Всю ночь теперь буду туда ставить всякое - wdk, vs2010, vbox, кучу windows images
    wincheck на нем работает :-)

    пятница, 22 июля 2011 г.

    ndisVerifierFunctionTable

    вдогон - ndis тоже поддерживает Driver Verifier, только списочек перехватываемых ф-ций сильно короче:
    xp
    • NdisAllocateMemory
    • NdisAllocateMemoryWithTag
    • NdisAllocatePacketPool
    • NdisAllocatePacketPoolEx
    • NdisFreePacketPool
    • NdisQueryMapRegisterCount
    • NdisFreeMemory
    vista & w7
    • NdisAllocateMemory
    • NdisAllocateMemoryWithTag
    • NdisAllocatePacketPool
    • NdisAllocatePacketPoolEx
    • NdisFreePacketPool
    • NdisQueryMapRegisterCount
    • NdisFreeMemory
    • NdisGetRoutineAddress

    FltpFilterVerifierThunks

    а вот например я уже писал про всякие ф-ции, перехватываемые Driver Verifier
    Внезапно оказалось что такие ф-ции могут перехватываться не только из ntoskrnl, но и из любых других драйверов, имеющих соотв-щую поддержку
    Собс-но поддержка заключается в вызове недокументированной ф-ции MmAddVerifierThunks, которой на вход приезжают два параметра:

    struct vrf_thunk
    {
     PVOID original_function;
     PVOID patched_function;
    };

    NTKERNELAPI NTSTATUS MmAddVerifierThunks(struct vrf_thunk *tab, ULONG tabSizeInBytes);


    Driver Verifier патчит IAT подопытного драйвера, заменяя original_function на patched_function, которая в свою очередь делает все необходимые проверки (например своих параметров или IRQL) и вызывает original_function (или DbgPrintEx если чо-нть нашлось).

    Например fltmgr поддерживает driver verifier, регистрируя в DriverEntry табличку FltpFilterVerifierThunks. Интересно, что число поддерживаемых ф-ций отличается в разных версиях windows:

    четверг, 21 июля 2011 г.

    несколько pdb в ida pro

    предыдущий псто я удалил чтобы не позоритца
    Лучше скажите мне - можно ли в ida pro грузить более одной pdb сразу ?
    Нет, я еще с ума окончательно не сошел, если вы вдруг чо-нть не то подумали
    Довольно обычным делом бывает ситуация, когда нужно при ковырянии какого-нть драйвера иметь структуры не только из его pdb, но и от ntoskrnl.exe. А иногда еще и от ndis.sys
    Спрашивается - как это можно сделать ?

    воскресенье, 17 июля 2011 г.

    Managing Projects with GNU Make

    дочитал давеча subj
    Все время меня не покидало ощущение что надо мною всячески глумятся и местами совершенно неприкрыто издеваются и вообще держат за конченного дебила
    Вынужден повторить собственные слова:
    разработчика под linux рассматривают как врага и относятся к нему соотв-но
    Начнем например с того что никакого отладчика для gnu make в природе нет в принципе. Все описанные в главе 12 Debugging Makefiles советы подозрительно попахивают нафталином напоминают техники, рекомендуемые для отладки linux kernel например

    Да чо там отладчика - у них нет даже встроенных арифметических операций (с 1977 года ! адский ад какой-то). Приложение B представляет канешна весьма впечатляющий пример преодоления искусственных трудностей, но это вот именно оно - "рассматривают как врага"

    Более того - я дичайше ржал над главой 10 - Improving the Performance of make. Сначала граждане весьма искусно сделали все чтобы для любой нетривиальной операции нужно было вызывать всякие внешние программы типа sed/awk через shell. Потом внезапно™ оказывается что вызов внешнего shellа на каждый чих - весьма дорогая операция и ее нужно всячески избегать (бгг)

    Казалось бы следующим логичным шагом должно стать встраивание более-менее нормального языка программирования внутрь make вместо его весьма усеченного набора встроенных ф-ций. Я могу даже догадаться какого именно языка - например в том же приложении B только в путь используются идиомы lispа. И у них есть даже функция eval !
    Но хрен там - линуксоиды способны встроить lisp только в свою священную корову emacs, ни во что другое (где оно менее будет смахивать на седло на козе) совершенно не можно - это ересь и Столлман проклянет, бгг

    суббота, 16 июля 2011 г.

    казалось бы

    при чем здесь лужков Спасатели Вселенной™ ?
    С нетерпением ожидаем их искрометных апокалиптических комментариев к другим не менее животрепещущим вопросам, как например виды на урожай, прогноз погоды или там начало отопительного сезона, бгг

    Даже странно как утопление "Булгарии" обошлось без их ценных комментариев. Могли бы на следующий день порадовать публику выходом нового продукта - Kaspersky Abramovych yacht edition например

    wincheck release candidate

    полировать кирпич бесполезно (с), так что я решил выложить в текущем состоянии
    Скачать
    Changelog:
    • новый udis86 с блекджеком и шлюхами ssse3 & sse4
    • добавлена проверка IopDriverReinitializeQueueHead. На всех моих машинах она пуста тем не менее
    • добавлена опция -sdt для проверки KTHREAD.ServiceTable всех потоков в системе (32bit only). Есличо - выдает примерно такое:
      ProcessID 34C (C:\WINDOWS\system32\lsass.exe) ThreadID 76C SDT 81752E88 UNKNOWN
      ProcessID 420 (C:\WINDOWS\system32\svchost.exe) ThreadID 3C4 SDT 81752E88 UNKNOWN
    • добавлена проверка таблиц CSR_SERVER_DLL
    • пофикшен баг с неправильным определением shim. Также достаются и декодируются shim handlers
    Если мне не лень будет - может быть напишу какую-нть доку например

      четверг, 14 июля 2011 г.

      ida 6.1 leak

      ссылок давать не буду, ибо и без меня уже предостаточно
      меня однако поразил до глубины души желудка факт того что лицензия nod была аж на 36 (прописью - тридцать шесть !!!) пользователей
      Я например знаю (не скажу откуда) что у Спасателей Вселенной™ ida куплена на 5 пользователей кажется, а у dr.web - на троих
      а тут 36
      люто-бешенно завидую, чо

      CSR_SERVER_DLL

      а вот например давеча потребовалось мне узнать как выглядит subj на разных версиях windows. Вы таки мне не поверите - не нашел в гугле. Точнее нашел и не одну, но все они не выглядят правильными
      Если меня зрение не обманывает то subj представляет себя примерно так:

      вторник, 12 июля 2011 г.

      задачко

      придумал тут для собеседования вирусных аналитиков
      Вот например у вас есть уязвимый метод xyz в некоем activexе, которому на вход подается слишком длинная строка и по этому признаку можно вполне надежно детектить всякое. Вы смотрите tlb и реализуете свою версию этого activex - с IDispatch и той же tlb, на чем угодно - visual basic/atl/pure asm - неважно
      Запускаем и видим что наш фальшивый объект создается, но метод xyz не вызывается, хотя с оригинальным activex эксплойт вполне себе срабатывает
      Нужно описать ваши действия по выяснению того что пошло не так
      Лично мне например хватило давеча 20 минут чтобы полностью понять что происходит, но в данном случае интересно не конкретное решение (которых кстати может быть несколько (минимум 3 штуки) и гуглить их бесполезно, ага), а именно ход мыслей кандидата и какие инструменты он собирается при этом использовать
      Заодно было бы интересно узнать сколько действующих вираналитиков способны решить подобное

      пятница, 8 июля 2011 г.

      победить диктатуру

      а вот например попробуйте угадать автора цитаты:
      Я считаю, что в мире операционных систем демократия и свобода выбора не просто должны - они обязаны! - победить диктатуру
      Если кто не знал например - это тот же самый человек, который
      • постоянно требует анального зонда предъявления паспорта для каждого пользователя этих ваших интернетов
      • уже лет десять с регулярностью перебравшего несвежих мухоморов баньши воет из каждого утюга про скорую смерть интернета
       демократия и свобода выбора ему должны и обязаны, бгг

      среда, 6 июля 2011 г.

      IoQueueThreadIrp

      Если зрение меня не обманывает, то в vista эта экспортируемая функция потоконебезопасна
      Доказательства:
      в w2k/xp она имеет вызовы KfRaiseIrql/KfLowerIrql
      в w7 KfAcquireSpinLock на ETHREAD.IrpListLock
      в vista никаких ф-ций синхронизации нет
      Это все отчего например ?

      вторник, 5 июля 2011 г.

      cng.sys exports

      если кто не читал например

      déjà vu

      весьма поучительное чтиво
      The developers accounts all indicate that the studio functioned under a decidedly informal hierarchy. If writer/director Brendan McNamara wanted something changed, he'd just go and talk to the staff member implementing it, rather than going through lead staff. "Often the leads weren't involved," remembers a programmer. "If you'd talk to your lead and say, 'Hey, Brendan's making this unreasonable demand,' they'd be understanding, but they're ultimately powerless. They can't go and tell Brendan that it's not feasible, just as much as I couldn't tell him. He just won't listen to reason."
      Фамилия впрочем другая была, да. "Лаборатория имени меня"
      Впрочем туземцам еще бесконечно далеко до передовых технологий потовыжималок:
      "There was simply an expectation that you'd work overtime and weekends," said a source. "I was told that I was taking the piss by saying that I couldn't give every single one of my weekends away. We were looked at as a disposable resource, basically. If you weren't in the 'inner circle'" – an exclusive group which seems to have consisted of the former Team Soho employees – "you were just a resource to be burned through," he says. "Their attitude is: 'it's a privilege to work for us, and if you can't hack it, you should leave'. I heard one of the upper echelons say pretty much that. I thought it was disgusting. I don't understand how they can't see that maintaining talent would actually be good for them."
       бгг

      суббота, 2 июля 2011 г.

      avx не будет

      я давеча посмотрел на адову упячку avx и решил забить на его прикручивание к udis86 по следующим причинам:
      • в некоторых инструкциях avx 4 аргумента, что потребует очень серьезно переписать практически весь код движка. Не говоря уже о том что эти инструкции с вероятностью 99.999% мне лично не встретятся но при этом все таблицы распухнут в размерах
      • если верить сорцам yasm инструкций avx 471 штука. В настоящее время во всем файле x86optable.xml содержится 637 инструкций. Боюсь одному человеку удвоить кол-во инструкций займет довольно таки дофига времени

      пятница, 1 июля 2011 г.

      crc32 instruction

      отвратительно - из-за двух opcodes нужно заводить отдельную таблицу длиной 256 элементов для f2 0f 38 XX
      + 8Kb памяти между прочим
      вот уроды (c)