Сейчас на форуме: laslo, UniSoft, bartolomeo (+6 невидимых)

 eXeL@B —› Программирование —› Любителям Delphi - Native API и т.д.
Посл.ответ Сообщение

Ранг: 135.2 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 06 сентября 2007 08:42
· Личное сообщение · #1

Вот случайно наткнулся:
Jedi API Library
sourceforge.net/projects/jedi-apilib/

сам ещё не юзал, но кое-что интересное там всё-таки есть:


...
{** About the Native API ** }
{********************************************************************* *********}
{** **}
{** The functions herein are usually referred to as the NT Native API. **}
{** The Native API is subdivided into several functional categories, which **}
{** you can distinguish by the function name prefix: **}
{** **}
{** Cc = Cache Controller **}
{** Cm = Configuration Manager **}
{** Csr = Client Server support functions (LPC; related: CSRSS.EXE) **}
{** Dbg = Debugger support functions **}
{** Etw = Event Tracing for Windows **}
{** Ex = Executive **}
{** Fs = File system support functions **}
{** Hal = Hardware abstraction layer functions **}
{** Inbv = Something like: _In_itial _B_oot _V_ideo functions **}
{** Io = I/O manager support functions **}
{** Kd = Kernel debugger support functions **}
{** Ke = General Kernel **}
{** Ki = Kernel internal support functions (???) **}
{** Ldr = PE image loader support functions **}
{** Lpc = LPC support functions **}
{** Lsa = Local security authority support functions **}
{** Mm = Memory manager support functions **}
{** Nls = National Language Support **}
{** Nt = Generic Native APIs **}
{** Ob = Object manager functions **}
{** Pfx = Name prefix support functions (???) **}
{** Po = Power management support functions **}
{** Ps = Process management support functions **}
{** Rtl = Runtime library functions **}
{** Rtlp = Private runtime library functions 1) **}
{** Se = Security support functions **}
{** Wmi = Windows management instrumentation support functions **}
{** Vf = Driver Verifier **}
{** Zw = Nt* counterparts. Zw == "Zero Warranty"??? **}
{** 1) "p" after the prefix means "private" **}
{** **}
{** The Native API is split into a user mode component (mainly NTDLL.DLL) **}
{** and a kernel mode component (mainly NTOSKRNL.EXE). While a large part of **}
{** the Native API is available both from usermode and kernelmode, some **}
{** functions are exclusive to either mode. This unit only deals with **}
{** functions that are available to usermode code. **}
...





Ранг: 271.6 (наставник), 2thx
Активность: 0.30
Статус: Участник

Создано: 06 сентября 2007 10:07
· Личное сообщение · #2

alexey_k
Выпей йаду и убей сибя ап стенку!
Этот сабж проскакивал еще году наверное в 2005.
Тему закрыть нах.

-----
iNTERNATiONAL CoDE CReW




Ранг: 135.2 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 06 сентября 2007 11:07
· Личное сообщение · #3

ой какой грозный, меньше-бы умничал, а больше делом занималсо



Ранг: 117.1 (ветеран)
Активность: 0.050
Статус: Участник

Создано: 06 сентября 2007 11:41
· Личное сообщение · #4

Этот сборник вижу первый раз, хотя неполный, ради интереса посмотрел DbgUiConnectToDbg и обнаружил, что она типа недокументирована ещё. Нормальный сборник, особенно строки описания к ntstatus, экономит время. А про Zw как Zero warranty аффтар отжог.

-----
Security through obscurity is just an illusion




Ранг: 163.7 (ветеран)
Активность: 0.070
Статус: Участник

Создано: 09 сентября 2007 06:39
· Личное сообщение · #5

Юзал как-то Setup API модуль из этой либы. Т.к. плохо знаю Delphi, изначально модуль писался и отлаживался на С++, потом переводил на паскаль. Прототипы функций начал писать сам, но от лени нагуглил это. Собралось, но падало, поскольку руки у меня кривые. Тогда доделал свои - всё ок. Сравнил - в нескольких прототипах передача по ссылке\значению перепутано. С тех пор подобные вещи делаю сам (косяков не меньше, но не так обидно =)



Ранг: 73.1 (постоянный), 130thx
Активность: 0.040.23
Статус: Участник

Создано: 09 сентября 2007 10:00
· Личное сообщение · #6

присоединюсь к Spirit
этой ботве сто лет в обед будет!




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 24 ноября 2011 18:42
· Личное сообщение · #7

Сори что апаю древний топ. Просто хочу предупредить, если кто захочет это заюзать - не стоит. Попробовал. Чтобы сделать банальное перечисление модулей в LDR_DATA пришлось в нескольких местах код пофиксить, хоть там и стоит комент что проверено через WinDbg. Ну а дальше больше, динамический вызов апи не проверяет блокировку пеба, а ведь апи то нативные и он вполне может быть залочен, в общем лучше самому сконвертить для своих дел нужные структуры.

-----
Yann Tiersen best and do not fuck




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 24 ноября 2011 18:48 · Поправил: Clerk
· Личное сообщение · #8

PE_Kill

> банальное перечисление модулей в LDR_DATA

Банальные LdrEnumerateLoadedModules(), LdrQueryProcessModuleInformation(), RtlQueryProcessDebugInformation(); экспортируемо, совместимо и синхронно

Эмсирем снова в деле, хотя он также любил патчи =)

Одно тока не понятно - дельфи конченый конпилятор и суёт стока всякого дерьма, что не понятно зачем нейтив, если есть кернел32. Хотя если приложение нейтивное(SUBSYSTEM_NATIVE), то думаю на дельфяк собирать такое это маразм, как и драйвера..




Ранг: 392.8 (мудрец), 108thx
Активность: 0.260.01
Статус: Участник
REVENGE сила, БеХоЦе могила

Создано: 24 ноября 2011 19:39
· Личное сообщение · #9

Clerk тебе на ХАКЕР надо:
http://www.xakep.ru/magazine/xa/080/112/1.asp

-----
StarForce и Themida ацтой!





Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 24 ноября 2011 19:52 · Поправил: PE_Kill
· Личное сообщение · #10

Clerk пишет:
Банальные LdrEnumerateLoadedModules(), LdrQueryProcessModuleInformation(), RtlQueryProcessDebugInformation(); экспортируемо, совместимо и синхронно

Мне нужно манипулировать данными, причем без API

Clerk пишет:
Одно тока не понятно - дельфи конченый конпилятор и суёт стока всякого дерьма, что не понятно зачем нейтив...

За пределами VX тоже есть жизнь

Ну и топ про делфи библиотека, причем здесь экспортируемые апи, компилятор и прочее?

ЗЫ. Кстати клерк, ты же ядро хорошо знаешь, что такое поле TimeSlip в структуре KUSER_SHARED_DATA?

-----
Yann Tiersen best and do not fuck




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 24 ноября 2011 20:51
· Личное сообщение · #11

Maximus

Я конечно дельфи не юзал(не ну пробовал конечно давным давно), так что не могу предположить что будет в бинаре после компиляции того кода из ксакепа. Но думаю автор там сильно преувеличивает - он показал только одну процедуру, кроме неё по идеи должна быть куча мусора. Если он такой хороший компилятор, то почему такие отвратительные приложения выходят(можно не отвечать, просто мысли вслух)..

PE_Kill

> такое поле TimeSlip в структуре KUSER_SHARED_DATA

Не знаю что это, но судя по хидеру какаято отладочная переменная. Непосредственно в ядре этого смещения нигде нет, сейчас попробовал найти и не нашёл(нтос 5.1). В сурсах(\ntos\kd\) есть функционал типо KdUpdateTimeSlipEvent(), но там апдейтятся внутренние переменные и эта вроде как не затрагивается.

> Мне нужно манипулировать данными, причем без API

Вы же сами утверждаете постоянно что лезть в андок и во всякие внутренние структуры зло. Даже я по этим спискам не лажу, максимум это найти описатель через LdrFindEntryForAddress() и флаг там поправить. Хотя не понятно зачем это делать(в смысле енумить описатели в базе), если есть для етого рантайм хороший. В загрузчик вообще не следует лазить асинхронно, должна быть хотябы синхронизация на LdrpLoaderLock. Чисто ради интереса спрошу, зачем вам такое делать ?

> За пределами VX тоже есть жизнь

Нету




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 24 ноября 2011 21:20
· Личное сообщение · #12

Clerk пишет:
кроме неё по идеи должна быть куча мусора

Нет, при таком подходе не будет.

Clerk пишет:
почему такие отвратительные приложения выходят

Потому что пихает кучу рантайма в PE файл. Собственно студия пихает не меньше, только рантайм у нее внешний, а с MFC так наверное и больше пихает чем делфи и код в десятки раз страшнее.

Clerk пишет:
Вы же сами утверждаете постоянно что лезть в андок и во всякие внутренние структуры зло.

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

Clerk пишет:
Даже я по этим спискам не лажу, максимум это найти описатель через LdrFindEntryForAddress() и флаг там поправить.

К сожалению код поиска API в ntdll (а ее базу тоже как то получить надо) занимает слишком много места, которое и так ограничено.

Clerk пишет:
В загрузчик вообще не следует лазить асинхронно, должна быть хотябы синхронизация на LdrpLoaderLock.

Для ntdll, да еще и в основной нити на EP можно и не лочить.

Clerk пишет:
Чисто ради интереса спрошу, зачем вам такое делать ?

Ммм, если в контексте Delphi, то просто отладка кода для последующего переноса на asm, если глобально, то... ммм, для загрузчика PE файлов.

-----
Yann Tiersen best and do not fuck


| Сообщение посчитали полезным: MasterSoft

Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 24 ноября 2011 22:21
· Личное сообщение · #13

PE_Kill

> К сожалению код поиска API в ntdll (а ее базу тоже как то получить надо) занимает слишком много места, которое и так ограничено.

Точна, я же базу так и получаю - второй описатель модуля. Хотя можно както так(stdcall, на входе ссылка в образ проекции, например PEB.LoaderLock):

Code:
  1. 60 8B 74 24 24 33 DB 6A FC 66 33 F6 6A FC 43 8B C3 8B D4 CD 2E 66 3D 41 01 74 0A 0F BA E3 0C 73
  2. ED 33 C0 EB 2E 56 56 8B C3 8B D4 CD 2E 83 C4 08 85 C0 75 DA 8B FE 56 57 8B C3 8B D4 CD 2E 83 C4
  3. 08 85 C0 75 08 81 EE 00 00 01 00 EB E9 8D 86 00 00 01 00 83 C4 08 89 44 24 1C 61 C2 04 00

или так:
Code:
  1. 55 8B EC 53 56 57 8B 75 08 33 DB 81 E6 00 00 FF FF BA FC 0F FE 7F 8B C3 CD 2E 3C 08 74 10 43 0F
  2. BA E3 0A 73 EC 33 C0 5F 5E 5B C9 C2 04 00 8B D6 E8 5E 00 00 00 75 11 81 EE 00 00 01 00 77 EF 33
  3. C0 5F 5E 5B C9 C2 04 00 8B FE 66 81 3E 4D 5A 75 E6 03 7E 3C 8B D7 E8 38 00 00 00 74 DA 8D 97 F4
  4. 00 00 00 E8 2B 00 00 00 74 CD 81 3F 50 45 00 00 75 BC 66 81 7F 14 E0 00 75 BD 66 81 7F 04 4C 01
  5. 75 B5 66 F7 47 16 00 01 74 AD 8B C7 5F 5E 5B C9 C2 04 00 8B C3 CD 2E 3C 05 C3


> для загрузчика PE файлов.

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




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 24 ноября 2011 22:34
· Личное сообщение · #14

Clerk пишет:
Чтото последнее время все начали лодеры кодить..

Я его давно накодил, просто обновляю время от времени.

Clerk пишет:
я бы заюзал патч(в релоцированной проекции, хотябы в копии нтдлл)

Для чего?

-----
Yann Tiersen best and do not fuck




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 24 ноября 2011 22:40
· Личное сообщение · #15

PE_Kill

> Для чего?

Есть готовый загрузчик системный, его тока подправить немного нужно, статически или динамически.




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 24 ноября 2011 23:09
· Личное сообщение · #16

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

-----
Yann Tiersen best and do not fuck




Ранг: 72.1 (постоянный), 30thx
Активность: 0.050
Статус: Участник

Создано: 25 ноября 2011 00:44
· Личное сообщение · #17

Дельфи хороша тем, что там можно быстро и с минимальными затратами собрать Вынь32 приложение. (фактически минимально достаточно dcc32.exe, dccXX.dll, system.dcu, windows.dcu, messages.dcu и sysinit.dcu - от версии компилятора зависит). Если есть время и желание пооптимизировать - можно и ёйный rtl (вы/до)пилить, но сами ж понимаете, оно затачивалось под базы данных, а не под супер тонкие апи приложения.



Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 25 ноября 2011 01:15
· Личное сообщение · #18

PE_Kill

Кстати как вы обошли проблему с NX-SEH(MEM_EXECUTE_OPTION_) и DEP(safeseh, mem_image) ?

Иначе же сех работать не будет в загружаемом модуле. Интересовался этим тока недавно один товарищ




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 25 ноября 2011 07:24
· Личное сообщение · #19

Clerk пишет:
Кстати как вы обошли проблему с NX-SEH(MEM_EXECUTE_OPTION_)

VirtualAlloc(**, PAGE_EXECUTE**)

Clerk пишет:
DEP(safeseh, mem_image)

Эту проблему знаю, но пока не фиксил, не до этого.

-----
Yann Tiersen best and do not fuck




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 25 ноября 2011 08:29
· Личное сообщение · #20

PE_Kill

> VirtualAlloc(**, PAGE_EXECUTE**)

Это не то. Там две проверки - вначале определяется возможность исполнить код за пределами модулей и включается проверка памяти, это через NtQueryInformationProcess. Должен быть флаг MEM_EXECUTE_OPTION_EXECUTE_DISPATCH_ENABLE, его нельзя повторно установить в юзермоде. Если он сброшен начинает неприятная проверка ссылки на сех - принадлежность описанным модулям и тип памяти, сех должен быть не в приватной памяти и не в проекции не файловой секции, он должен быть только в файловой проекции(MEM_IMAGE). Иначе сех работать не будет. Это както проблемно обойти весьма.




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 25 ноября 2011 11:05
· Личное сообщение · #21

Не встречал такого. Как такая ситуация воспроизводится, в настройках винды? Если ограничение только на SEH, тот тут без проблем, пейлоад нормально прогружен и после инициализации находится по своим адресам.

-----
Yann Tiersen best and do not fuck




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 25 ноября 2011 20:33
· Личное сообщение · #22

PE_Kill

> Как такая ситуация воспроизводится, в настройках винды?

RtlDispatchException().

> Если ограничение только на SEH, тот тут без проблем, пейлоад нормально прогружен и после инициализации находится по своим адресам.

Сех неотъемлемая часть любого модуля. В этом случае данный функционал не может быть обработан.

Стоит сказать что решения два и они вам не понравятся, но иначе тока патч тех двух апи. Но это сами понимаете никуда не годно.




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 26 ноября 2011 08:23
· Личное сообщение · #23

Clerk пишет:
RtlDispatchException().

Я имел ввиду, при каких условиях в винде включается режим
Clerk пишет:
MEM_EXECUTE_OPTION_EXECUTE_DISPATCH_ENABLE


Clerk пишет:
Сех неотъемлемая часть любого модуля. В этом случае данный функционал не может быть обработан.

Может, потому что пейлоад внутри модуля, я об этом уже писал.

-----
Yann Tiersen best and do not fuck




Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 26 ноября 2011 10:20 · Поправил: Clerk
· Личное сообщение · #24

PE_Kill

> Я имел ввиду, при каких условиях в винде включается режим

Включается в бут.ини параметром "NOEXECUTE=OPTOUT"(USD.NXSupportPolicy). Тогда флаги не перманентные и можно далее их изменить, в противном случае флаги перманентные и загрузчик запрещает их изменение.

> пейлоад внутри модуля

Тогда будет работать. Обычно при загрузке из памяти такого нет.


 eXeL@B —› Программирование —› Любителям Delphi - Native API и т.д.
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати