Наверно когда нибудь эадавались вопросом передать параметры и вызвать экспортируемую из DLL'ки или экзешника функцию вручную, т.е. не писать спецально прогу? Так вот решил написать подобную,называется - APIcall, смысл которой в следующем: > Загрузить библиотеку (DLL или EXE, экспортирующий функции); > Получить аддрес процедуры; > Заполнить область памяти dword'ами :непосредственные, оффсет на dword, оффсет на строку байтов, оффсет на ASCII строку, оффсет на данные из файла; (соотв.примеры: 579FC012, * 11c, * 89 86 dc 42 1e 12, * 'TEXT', & file.ext) > Вызвать процедуру, предварительно заpushив в стек заполненные dword'ы Было бы неплохо если эта тулза попала на wasm.инструменты, однако помойму ещё недостаточно оттестирована и отдебажена; Впрочем распостраняется она по лицензии GNU с исходниками поэтому можете изменять её как хотите. Несколько слов о программе: написана с нуля (первая прог-ма для людей) на fasm'е в хардкорном стиле то есть без всяких макросов и прочей шелухи. ********************************* !UPDATED! version - 1.0
Да уж чё сравнивать rundll32 годится чисто для запуска специально написанных для этого функций - даже возвращённое значение не показывает. А APIcall - интерактивная программа (подобие отладчика всех времён и народов - DEBUG.COM), позволяет нормально заполнять иммедейты и оффсеты на данные и просматривать их. С ней любую экспортируемую из библиотеки функцию вызвать и результат посмотреть без проблем.
kero > Ещё как должон! Выполни следующие шаги: [1] При загрузке либы и получении аддреса функции (.user32!MessageBoxA) возвращённые значения не могут быть нулевыми, если все ноли значит ошибка - проверяй введёные имена, может забыл постфикс A,W,Ex. если появилось примерно следущее: user32 77380000 MessageBoxA 773BD8DE Значит всё впорядке (функция найдена) [2] проверь что будет в стеке перед вызовом командой s Значения в районе 8XXXX - скорей всего указатели на динамически выделеную память (спецификатор '*' в начале данных при заполнении стека командой ss) [3] посмотри что находится по этим адресам командой d [Индекс] (Индекс - это hex значение от 0 до 18, чтобы получить реальный адрес надо адрес начала pstk (проц.стека в тек.версии - 0x401000) сложить с Индекс*4) если что то ввёл не то набираеш ss [Индекс (позиция с которой начать перезаписывать] или очищаешь pstk и Дин.Память командой sr [4] Все впорядке - нажимаеш с (вызвать функцию полученую командой 'точка') Первая строка - начальное значение ESP следущая - откуда начнётся пушится в стек программы (если вызывал MessageBoxA то 0040100C) с уменшением на 4 до начала pstk (401000) включительно. Если в стеке ничего небыло - команда s выдаёт 'proc stack - empty' этой строки небудет После вызова естественно отображается возвращённое в EAX значение, обычно если 0 то ошибка, иначе выполнилась успешно. И последнее - значение ESP после вызова: должно равнятся начальному значению, если другое - произошла разбалансировка стека (но если EBP не тронут программа продолжит работать нормально - обёртка enter|leave). APIcall кончил дописывать только вчера - вероятно не все баги отловил по мере выявления постараюсь фиксить. Хотя тестировал на Win2k3 Srv, XP SP2, WMware XP - работает превосходно тестил на нескольких API функциях. попробуй например GetSystemTime , после ss вводи * 0 посмотреть результат - d 0 Надеюсь после этого описания всем понятно Будут пожелания и замечания пишите сюда.
iNTA_SYS Мессбокс, конечно, выскакивает (при первом наборе выпало :c). Но я ведь вот почему сюда заглянул: когда-то сам набросал кое-что на ту же тему, причем с целью получить инструмент с максимально удобным и естественным интерфейсом. Пришел тогда к паре multiline edt-ов: 1) верхний edt - для записи и редактирования похожих на masm32-invoke строк, +/- комменты (этот текст можно туда и задрагдропить), вызов нужного API - двойным кликом по соответствующей строке, 2) нижний edt - техническое сопровождение (лог, ret.value, нутро буфферов, итд). Правда, тогда до воплощения в асме дело не дошло, ограничился прикидкой: рабочим макетом на s0m-скрипте ("Sign-0f-Misery" by CyberManiac)... Чтобы не быть голословным - аттач (exe, описание, примеры). APIcall же, по-моему, требует ну уж слишком много ручной (и повторной) работы: выполнение API функции дробными шажками, ENTER на каждый параметр - утомляет... Хотя, наверное, кому как.
kero При написании APIcall я как раз уделял большое внимание созданию простого и производительного интерфейса: команды не длинее 1-2 символа, две функции в одной (.), авт.распознавание типа данных (hex или dword), при этом использовано минимум кода. Можно сделать чтение комманд без нажатия <Enter> но это усложнит код и добавление новых возможностей, к тому же может не всем понравится. Конечно работу с файлами добавить не помешает - это и избавит от повторной работы. А то что ты предлагаешь дак лучше наверно написать GUI софтину на c++ со всякими edit-box'ами для ввода, выпадающеми менюшками, кнопками и весом в сотню-другую kb но разве можно будет потом наэвать это нормальным хакерским инструментом ??! :X Кстати раньше при написании APIcall сначала подумывал на пушить параметры в реальный стек а просто ставить ESP на начало pstk а чтобы адреса остались красивыми (401000) зашить ret EIP за секцию данных в PE хейдер, уменьшить ESP на 4 и не вызывать а jmp'ится на вызваемую функцию - это бы прошло если сами функции не юзали бы стек программы. А юзают они его не жалея WriteFile например 368 байт загребает. А кучу использовать в качестве этого смысла особого нет. P.S. глянте ради интереса сколько лишних байт - потери при выравнивании в конце секции данных и кода в APIcall (так случайно получилось).
iNTA_SYS Фу, какие глупости говорите. Лучше подумали бы о том, что "минимум кода" и удобство юзера - вещи не слишком совместные... Впрочем, ничего доказывать не собираюсь. Но вот какая на самом деле "GUI софтина" - покажу. Кнопочки без надобности, если не поняли. К двум эдитам добавляются два комбобокса - и это все. В верхнем комбо - все наличные 32-bit dll-ки (Apirator сам их туда собирает с компа), в нижнем комбо - экспорт из них. В верхний комбобокс загоняются также имена дополнительных файлов - списки API констант, демо.примеры, итд, выбрать их можно в нижнем комбобоксе, и все, что надо, копируется просто кликом в верхний Edit (т.е. следить, скажем, за постфиксами A,W, итп - незачем).
iNTA_SYS Прикольная задумка! Забавно, потестил и т.п. А логическое продолжение типа примера с .bat или скриптовый язык последует? Или какое может быть применение помимо демонстрации вызова функции? kero Более юзабельно и поддерживает кодировку 1251 А дальше интерфейса apiraror'а с двумя комбо и с двумя текстбоксами что-то делалось?
mc black Сначала предпологалось редирект ввода из файла делать, но в ReadFile это глючит частенько. Продолжение наверно скоро будет - реализую некоторые полезные возможности. Любые функции которые может использовать ring 3 программа (во внешн.библиотеках) можно вызвать с помощью APIcall. А практически же кому GetSerialNumber из pSETUP8.dll надо, а кому с DeviceIoControl поэкспирементировать; или на худой конец PlaySoundA из winmm.dll Для юзеров может и юзабельно. BORYAK Разбавляешь ASCII строку нолями :* 48 00 69 00 ... или жди следущую версию.
mc black Если вы о "дальнейшем развитии" этого интерфейса - то принципиально нет. Его вполне достаточно для удобного и быстрого набора "командной API строки". Если же вы о функциональности Apirator-а - то конечно да. Но закончить тогда не удалось (внешние обстоятельства).
Обновлён APIcall, версия 1.0 - типа Release добавлены следущие фитчи: [0]d <address> - просмотр памяти начиная с <address>, если < 19 то определяется как индекс в проц стеке. :d 401000 [1](после ss) @<сколько байт аллокатим>* <данные> :ss 00: @e* 'FSF - forever' [2](после ss) & <имя файла> - грузится файл и берётся оффсет :ss 00: & file.ext [3] w <имя файла> - пишется адрес на DLL, на функцию, также pstk counter (if != 0) и сам проц стек в <имя файла>.Acl [4] r <имя файла> - читается .Acl (одна проблемка - надо перебить указатели на динамически выделеную память и загрузить библиотеку если рестартовали программу) [5] h [команда(не все)] (или ?) - помощь, примеры
iNTA_SYS Не в обиду, а в порядке конструктивной критики. нормальный хакерский инструмент, имхо, должен иметь развитый скриптованый или скриптуемый интерфейс и поддерживать работу в составе различных тулчайн в автоматическом режиме. Наподобие юниховых утилит командной строки. Таково мое имхо. А набирать все ручками и просматривать глазками - не по хакерски это. Тут машинистка-секретутка уже нужна (вообще-то это мысль). Энто тоже мое имхо.
_basmp_ Ну вопервых когда я писал APIcall совсем неглубоко знал ассемблер и до этого кодил проги не больше одной страницы Во вторых если 'скриптуемый интерфейс' то это уже типа интерпретатор надо, а APIcall - чисто одну-две функции из dll'ки вызвать в порядке хака, и желательно при этом под рукой блокнот самое интересное что APIcall я практически не пользовался кроме тест. примеров p.s. насчёт юниховых утилит то imho надо под *nix и кодить а не пытаться перетаскивать оттуда идеи в винду
ищем в инете слово 'coco/r', читаем 5 страниц доки, смотрим примеры и не делаем больше проблем из парсеров. во-во, я ж говорю - неудобно, руки сами поюзать не тянутся. Ничего не понял. Почему?