· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› NdrClientCall2

Посл.отвђт Сообщенiе


Дата: Июн 3, 2004 21:20:15

Всем добрый (Вечер / День / Утро) !

Вопрос немного обширнее. Моя задача всё еще запустить драйвер без прав админа. По крайней мере была, но зашел куда – я сам не знаю. Может исчо куда пригодится…
Короче, не буду много писать «для начала», т.к. на подобные темы общение уже было, но ксожалению, по-моему, безрезультатно.
Начнем: Без прав админа получаем Handle0 от OpenSCManagerA@12, отдаем его OpenServiceA@12 ну типа эта штука прокатывает и дает Handle, но… при последующем вызове StartServiceA@12 ессно ошибка. Если делать то же самое из админа – то всё путем. Так вроде всё обычно… Но если из SoftIce сравнивать работу, и анализ параметров в StartServiceA, то видем следующее.
1) Handle – это указательна место в памяти (Pointer1), которое содержит ссылку на адрес процедуры(Pointer2) из RpCrt4, единственно, что делаюшую: {mov eax,XXX; Ret;} Кстати там таких куча и в ходе StartServiceA часто вызываются.
2) По адресу Pointer1+4 содержится число «89ABCDEF» - при отсутствии которого – ошибка
3) По адресу Pointer2+4 содержится число «FEDCBA98» - при отсутствии которого – ошибка
4) Pointer2+XXX куча параметров, в том чиле таких же заглушек в RpCrt4.
5) Проверяется PEB…
Ну, скажете Вы: и чё теперь ты хочешь, ну и в чем дело-то…
А дело вот в чем:
При запуске OpenServiceA все структуры ПОЛНОСТЬЮ заполняются (если из админа). А вот если не из админа, то только отчасти, но если их заполнять самому, чем, впрочем я и занимался, то всё прокатывает. Прокатывает до определенного момента. Когда заходишь очень глубоко, то путаешься. Да и хоть структура с параметрами чуть-четь известно (уже целый А4 лист), но очень мало. Хотелось бы инфы какой. Почему взялся, может и безрезультатно, но когда видишь проверки в ядре по типу №2 или №3 (описано выше), то что-то вселяет энтузиазм. А самое интересное, так то, что все данные в моем адр. Пр-ве. Можно и автоматически заполнить.
Так вот все это дело всё: OpenServiceA, OpenSCManagerA, StartServiceA уходят в NdrClientCall2. Что это и с чем это есть???
Можа у кого исходники какие есть :-)

Короче, кто чем сможет………… please

З.Ы. Sorry за то, что длинно - короче не получилось.

Заранее благодарен. --==PPS==--


Дата: Июн 3, 2004 21:35:18

NdrClientCall2 - это RPC-колл, который спускается к LPC. Там достаточно наворочено.

Что до остального, то, несмотря на обилие слов, не совсем понятно как ты хочешь достичь своей цели. Хаканьем в ring-3? А ты уверен, что получится?
Как-то тяжело лично мне воспринимать твои изыскания. Очень уж как-то неструктурировано все. Нет бы по порядку изложить валидную последовательность загрузки, наметить векторы исследования, получить всю доступную информацию о структурах... А ты, как мне кажется по описанию, с места в карьер...


Дата: Июн 3, 2004 21:41:43

Что касается ring-3 так говорю же, что сам программно заполняю структуру, покуда знаю. Так вот хотя бы полностью знать бы её. Единственное опасение, что моя нить оставляет данные, а другая их забирает и отследить будет сложно: на всех BPM не хватит. А по поводу неструктурированности и векторов, так вот у меня у же краша и едет... вот за советом и пришел... я бы и сам рад в голове порядок навести... Help!


Дата: Июн 3, 2004 21:44:02

что сам программно заполняю структуру

КАКУЮ структуру?


Дата: Июн 3, 2004 21:52:12 · Поправил: PavPS

От вызова OpenService выдается handle, который указавает на эту ХХХ структуру. Она и передается NdrClientCall2, поэтому эта штука и заинтересовала. Считаю, что зная, как работает эта ф-я, имея её код (или идею), можно знать структуру. За неимением этого и отслеживаю все обращения к памати от этой ф-ии. Но это архигеморно. Например, сночала всречается обращение:
mov eax,handle
mov eax,[eax]
lea ebx,[eax+0ac]
push [eax+08]
call [ebx]

т.е. размах структуры - до "0AC" параметров.
Опять же черт её знает чё за структура!

Есть еще куча обращений, но по ближе

Все поля заполнены как надо из админа, а не из админа только часть.

И еще всё в моем процессе. данные в него пишутся -> не статические. 95%, что специальная структура


Дата: Июн 3, 2004 22:04:32 · Поправил: volodya

Я начинаю тихо дуреть. Так что же тебя останавливает???
CLIENT_CALL_RETURN RPC_VAR_ENTRY NdrClientCall2(
  PMIDL_STUB_DESC pStubDescriptor,
  PFORMAT_STRING pFormat,
   ...
);

typedef struct _MIDL_STUB_DESC {  
void* RpcInterfaceInformation;  
void* (__RPC_API * pfnAllocate) (size_t);  
void (__RPC_API * pfnFree) (void*);  
union 
{    
handle_t* pAutoHandle;   
handle_t* pPrimitiveHandle;    
PGENERIC_BINDING_INFO pGenericBindingInfo;  
} IMPLICIT_HANDLE_INFO;  
const NDR_RUNDOWN* apfnNdrRundownRoutines;  
const GENERIC_BINDING_ROUTINE_PAIR* aGenericBindingRoutinePairs;  
сonst EXPR_EVAL* apfnExprEval;  
const XMIT_ROUTINE_QUINTUPLE* aXmitQuintuple;  
const unsigned char* pFormatTypes;  
int fCheckBounds;  
unsigned long Version;  
MALLOC_FREE_STRUCT* pMallocFreeStruct;  
long MIDLVersion;  
const COMM_FAULT_OFFSETS* CommFaultOffsets;  
const USER_MARSHAL_ROUTINE_QUADRUPLE* aUserMarshalQuadruple;  
const NDR_NOTIFY_ROUTINE* NotifyRoutineTable;  
ULONG_PTR mFlags;  
const NDR_CS_ROUTINES* CsRoutineTables; 
void* Reserved4;  
ULONG_PTR Reserved5;
} MIDL_STUB_DESC, *PMIDL_STUB_DESC;


Догадайся с трех раз откуда я это взял :)


Дата: Июн 3, 2004 22:17:02 · Поправил: _Juicy

Volodya, а вы уверены, что все умеют в SDK копаться? В МСДНе-то этого нет.

В общем, PavPS, все просто - эти процедуры обращаются по RPC к services.exe, менеджеру служб.
Но вызов по RPC тоже требует аутентификации, с полными криденшлами, и что там ни пропатч в этой структуре, не зная их и не из-под админа вы его не вызовете.
И, между прочим, процедура аутентификации RpcBindingSetAuthInfo всегда возвращает S_OK, даже если не проходит, только вот последующие вызовы слетят.


Дата: Июн 3, 2004 22:22:25

При запуске OpenServiceA все структуры ПОЛНОСТЬЮ заполняются (если из админа). А вот если не из админа, то только отчасти, но если их заполнять самому, чем, впрочем я и занимался, то всё прокатывает. Прокатывает до определенного момента.

Так вот, там и заполняется структура с криденшлами - SEC_WINNT_AUTH_IDENTITY.


Дата: Июн 3, 2004 22:44:14

2 Volodya "Так что же тебя останавливает???"

А я черт его знает... Уже пробую... Спасибо...

_Juicy только вот последующие вызовы слетят
Заметил.

Всем бальшое спасибо. Продолжаю...


Дата: Июн 4, 2004 12:35:30

Volodya, а вы уверены, что все умеют в SDK копаться? В МСДНе-то этого нет
как раз в MSDN это и есть.
хотя я сначала подумал, что это очередная цитата из исходников винды :)


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.047