И снова вопрос про наболевшую(похоже, только для меня , но тем не менее тему. Дано: выпуск журнала Phrack №59, где рассказывается про установку callgate через \Device\PhysicalЬMemory Номер c исходниками на C++. Закинув файлы kmem.h и chmod_mem.cpp в нужные папки, а также выдрав из XP DDK ntdll.lib(и проставив эту либу в настройках C-шного линкера) я с удивлением обнаружил, что компилироваться это все не хочет ибо: unresolved external ...NtOpenSection и unresolved external ...NtClose. После этого я пробыл в некоем ступоре, перепробовав разные версии DDK(2k,2003) и С++(Visual Studio 2003,2005,Borland). Ничего... Голый номер, те же ошибки. Ладно, решил переписать код на ассемблере. И сразу же уперся в проблему с той же NТеЩзутЫусешщт!!! Проинициализировав макросом значения структуры ObjectAttributes и запустив NtOpenSection вот так(как было сказано в номере журнала): invoke NtOpenSection,OFFSET Section,WRITE_DAC or READ_CONTROL,OFFSET Я увидел в отладчике милую ошибку 80000002h. Переведя ее с помощью программы StatusToError уважаемого Four-F получил: "Неверная попытка доступа к адресу памяти." Собственно на этом мои изыскания закончились. Я пытался использовать макрос InitializeObjectAttributes Four-F'а, но результат был абсолютно тем же. Пробовал получать Юникод-строку не через MultiByteToWideChar а через макрос CCOUNTEDUNICODESTRING из Strings.mac, пробовал менять параметры NtOpenSection(READ_CONTROL и т.п.). Ничего не помогло. Обращаюсь за помощью к форумчанам - может у кого есть идеи почему не работает NtOpenSection и в каком месте у меня кривые руки . Прилагаю исходники программы на ассемблере а также 59-ый номер журнала Phrack, в котором есть исходники программы на C. P.S. Я пользуюсь MASM'ом и если здесь будут исходники на FASM или TASM, то не считайте за труд ответить на возможные вопросы, которые могут возникнуть у меня.
Вот тут есть исходник на С++ с вставками асма, полностью рабочий. Автор - sn0w. http://forum.antichat.ru/thread28545-sn0w.html Посмотри там все действия, которые у тебя не получаются. У меня этот код работает нормально скорее всего ты неправильно выставил тип вызова функции. Все апишки виндовые, в том числе и ядерные и ntdll'ные имеют тип вызова stdcall. Если компилер у тебя MS VC++ (cl.exe), то у него этим заведует параметр /Gz
Насчет stdcall там обьявлено NTSTATUS _declspec(dllimport) _stdcall NtOpenSection - вроде работать должно...
и кстати, нахрена там нужна инструкция ассемблера btr? да, и еще... вышеуказанный пример - это собственно int gate, а не call gate... хотя мне в принципе параллельно
Pinkbyte Я писал int gate на MASM и всё быстро заработало. Не знаю как помочь, если только свой исходник могу приаттачить, но что-то аттачи у меня перестали работать -(.
Нда... Все замечательно, только вышеуказанный пример умирает либо с синим экраном(раз 15 из 20) либо с ошибкой функции NtMapViewOfSection - что тоже не круто... Причем не важно где - на VirtualPC или на простой XP
http://cr4sh.0x48k.cc/r0.rar - вот рабочий пример... немного не в тему т.к. на срр, но вдруг пригодится...