Программа APIcall

Тема в разделе "WASM.PROJECTS", создана пользователем iNTA_SYS, 7 дек 2007.

  1. iNTA_SYS

    iNTA_SYS New Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2007
    Сообщения:
    38
    Наверно когда нибудь эадавались вопросом передать параметры и вызвать экспортируемую из 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
     
  2. wasm_test

    wasm_test wasm test user

    Публикаций:
    0
    Регистрация:
    24 ноя 2006
    Сообщения:
    5.582
    да, вообщето есть rundll32, правда она не обладает особыми возможностями
     
  3. iNTA_SYS

    iNTA_SYS New Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2007
    Сообщения:
    38
    Да уж чё сравнивать rundll32 годится чисто для запуска специально написанных для этого функций - даже возвращённое значение не показывает.
    А APIcall - интерактивная программа (подобие отладчика всех времён и народов - DEBUG.COM), позволяет нормально заполнять иммедейты и оффсеты на данные и просматривать их.
    С ней любую экспортируемую из библиотеки функцию вызвать и результат посмотреть без проблем.
     
  4. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    iNTA_SYS
    Мессбокс из ReadMe в натуре не выскакивает, - неужто не должон ?
     
  5. iNTA_SYS

    iNTA_SYS New Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2007
    Сообщения:
    38
    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

    Надеюсь после этого описания всем понятно :)
    Будут пожелания и замечания пишите сюда.
     
  6. Mental_Mirror

    Mental_Mirror New Member

    Публикаций:
    0
    Регистрация:
    7 май 2007
    Сообщения:
    431
    Сейчас тоже покурю Ваше произведение =)
     
  7. tclover

    tclover New Member

    Публикаций:
    0
    Регистрация:
    17 май 2007
    Сообщения:
    45
    От занятная вещь, пополнила коллекцию интересных исходников.
     
  8. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    iNTA_SYS
    Мессбокс, конечно, выскакивает (при первом наборе выпало :c).

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

    Пришел тогда к паре multiline edt-ов:
    1) верхний edt - для записи и редактирования похожих на masm32-invoke строк, +/- комменты
    (этот текст можно туда и задрагдропить), вызов нужного API - двойным кликом по соответствующей строке,
    2) нижний edt - техническое сопровождение (лог, ret.value, нутро буфферов, итд).

    Правда, тогда до воплощения в асме дело не дошло, ограничился прикидкой:
    рабочим макетом на s0m-скрипте ("Sign-0f-Misery" by CyberManiac)...
    Чтобы не быть голословным - аттач (exe, описание, примеры).

    APIcall же, по-моему, требует ну уж слишком много ручной (и повторной) работы:
    выполнение API функции дробными шажками, ENTER на каждый параметр - утомляет...
    Хотя, наверное, кому как.
     
  9. iNTA_SYS

    iNTA_SYS New Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2007
    Сообщения:
    38
    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 (так случайно получилось).
     
  10. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    iNTA_SYS
    Фу, какие глупости говорите.

    Лучше подумали бы о том, что "минимум кода" и удобство юзера - вещи не слишком совместные...

    Впрочем, ничего доказывать не собираюсь.
    Но вот какая на самом деле "GUI софтина" - покажу.

    Кнопочки без надобности, если не поняли.
    К двум эдитам добавляются два комбобокса - и это все.
    В верхнем комбо - все наличные 32-bit dll-ки (Apirator сам их туда собирает с компа),
    в нижнем комбо - экспорт из них.
    В верхний комбобокс загоняются также имена дополнительных файлов -
    списки API констант, демо.примеры, итд, выбрать их можно в нижнем комбобоксе,
    и все, что надо, копируется просто кликом в верхний Edit
    (т.е. следить, скажем, за постфиксами A,W, итп - незачем).
     
  11. mc black

    mc black Member

    Публикаций:
    0
    Регистрация:
    19 янв 2005
    Сообщения:
    213
    Адрес:
    Russia, N.Novgorod
    iNTA_SYS
    Прикольная задумка! :) Забавно, потестил и т.п. А логическое продолжение типа примера с .bat или скриптовый язык последует? Или какое может быть применение помимо демонстрации вызова функции?

    kero
    Более юзабельно и поддерживает кодировку 1251 :) А дальше интерфейса apiraror'а с двумя комбо и с двумя текстбоксами что-то делалось?
     
  12. BORYAK

    BORYAK Боран

    Публикаций:
    0
    Регистрация:
    22 апр 2005
    Сообщения:
    33
    Адрес:
    Kazakhstan
    +1
    Unicode-строку как передавать?
     
  13. iNTA_SYS

    iNTA_SYS New Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2007
    Сообщения:
    38
    mc black
    Сначала предпологалось редирект ввода из файла делать, но в ReadFile это глючит частенько. Продолжение наверно скоро будет - реализую некоторые полезные возможности.
    Любые функции которые может использовать ring 3 программа (во внешн.библиотеках) можно вызвать с помощью APIcall.
    А практически же кому GetSerialNumber из pSETUP8.dll надо, а кому с DeviceIoControl поэкспирементировать; или на худой конец PlaySoundA из winmm.dll
    Для юзеров может и юзабельно.
    BORYAK
    Разбавляешь ASCII строку нолями :* 48 00 69 00 ...
    или жди следущую версию.
     
  14. kero

    kero Модератор SOURCES & 2LZ Команда форума

    Публикаций:
    0
    Регистрация:
    4 апр 2006
    Сообщения:
    1.074
    Адрес:
    Москва
    mc black
    Если вы о "дальнейшем развитии" этого интерфейса - то принципиально нет.
    Его вполне достаточно для удобного и быстрого набора "командной API строки".
    Если же вы о функциональности Apirator-а - то конечно да.
    Но закончить тогда не удалось (внешние обстоятельства).
     
  15. iNTA_SYS

    iNTA_SYS New Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2007
    Сообщения:
    38
    Обновлён 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 [команда(не все)] (или ?) - помощь, примеры
     
  16. Lich

    Lich New Member

    Публикаций:
    0
    Регистрация:
    25 апр 2007
    Сообщения:
    7
    замечательная прога!!!...
    СПС, именно то что мне было нужно ;)
     
  17. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    iNTA_SYS
    Не в обиду, а в порядке конструктивной критики.
    нормальный хакерский инструмент, имхо, должен иметь развитый скриптованый или скриптуемый интерфейс и поддерживать работу в составе различных тулчайн в автоматическом режиме. Наподобие юниховых утилит командной строки. Таково мое имхо. А набирать все ручками и просматривать глазками - не по хакерски это. Тут машинистка-секретутка уже нужна (вообще-то это мысль). Энто тоже мое имхо.
     
  18. iNTA_SYS

    iNTA_SYS New Member

    Публикаций:
    0
    Регистрация:
    12 ноя 2007
    Сообщения:
    38
    _basmp_
    Ну вопервых когда я писал APIcall совсем неглубоко знал ассемблер и до этого кодил проги не больше одной страницы
    Во вторых если 'скриптуемый интерфейс' то это уже типа интерпретатор надо, а APIcall - чисто одну-две функции из dll'ки вызвать в порядке хака, и желательно при этом под рукой блокнот

    самое интересное что APIcall я практически не пользовался кроме тест. примеров :)

    p.s. насчёт юниховых утилит то imho надо под *nix и кодить а не пытаться перетаскивать оттуда идеи в винду
     
  19. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    iNTA_SYS
    Отладчики нынче не в моде, лучше в слепую тыкать ?
     
  20. _basmp_

    _basmp_ New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2005
    Сообщения:
    2.939
    ищем в инете слово 'coco/r', читаем 5 страниц доки, смотрим примеры и не делаем больше проблем из парсеров.
    во-во, я ж говорю - неудобно, руки сами поюзать не тянутся.
    Ничего не понял. Почему?