Помогите автоматизировать тестинг АПИ

Тема в разделе "WASM.WIN32", создана пользователем dyn, 25 ноя 2009.

  1. dyn

    dyn New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2009
    Сообщения:
    566
    Что я хочу сделать.
    1. Загрузить дллку
    2. Начать по очереди вызывать все функции ею экспортируемые
    3. Сохранить ззначение стека до вызова и после. И по разнице найти количество аргументов функции.
    4. Сохранить код ошибки


    Подводные камни:
    1. В функции может быть вызван ExitThread, ExitProcess либо необрабатываемое исключение.
    2. Функция самостоятельно может изменять обработчики исключений.

    По умолчанию все функции _stdcall


    Помогите решить проблему с подовдными камнями, т.к. я не знаю, как обойти ни первый ни второй. =(
     
  2. x0man

    x0man New Member

    Публикаций:
    0
    Регистрация:
    23 мар 2008
    Сообщения:
    358
    1. В функции может быть вызван ExitThread, ExitProcess либо необрабатываемое исключение.
    Лочь функи через хуки.

    2. Функция самостоятельно может изменять обработчики исключений.
    хз
     
  3. n0name

    n0name New Member

    Публикаций:
    0
    Регистрация:
    5 июн 2004
    Сообщения:
    4.336
    Адрес:
    Russia
    а чем второй пункт нервирует?
     
  4. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    подводных камней тут гораздо больше. например, как вы узнаете какие параметры передавать функциям?
     
  5. deLight

    deLight New Member

    Публикаций:
    0
    Регистрация:
    26 май 2008
    Сообщения:
    879
    dyn, qqwe
    "подводных камней тут гораздо больше. например, как вы узнаете какие параметры передавать функциям?"
    Брут для любого устраивающего диапазона параметров, для которых значение ошибки будет одинаковым.
    Похучить все что может вызвать неприятности как предложил x0man.
    Сделали, занесли в базу а-ля:
    push <0x0000 - 0x0F400>
    push <0x0000 - 0x10000>
    call <Lib.Func>
    # EAX = 0xC0FFEE
    # EDX = 0
     
  6. deLight

    deLight New Member

    Публикаций:
    0
    Регистрация:
    26 май 2008
    Сообщения:
    879
    Для 99 per cent случаев будет достаточно.
     
  7. onSide

    onSide New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    476
    А не легче ли статическим анализом найти конец ф-ции и посмотреть на сколько байт делается ret ?
    Помоему как раз в 99% будет креш еще до окончания ф-ции, и ты нифига не сможешь узнать.

    Даже если внутри этих ф-ций будет устанавливатся сех и ошибки будут обрабатыватся, ret она сделать все равно не сможет, т.к. возьмет из стека неправильный адрес возврата. ИМХО гемор полный все это, зачем это нужно? Для генерации фейковых вызовов апишек ? Ну так можно распарсить либ файлы и вытащить оттуда параметры.
     
  8. deLight

    deLight New Member

    Публикаций:
    0
    Регистрация:
    26 май 2008
    Сообщения:
    879
    onSide
    Свой хэндлер на крeш?

    Нет, RET заберет адрес возврата, который лежит на стеке над параметрами, и только потом откорректирует ESP.
    Т.е. худший случай - ESP будет выше чем нужно, что и даст понять после вызова, сколько функция принимает на вход.
     
  9. qqwe

    qqwe New Member

    Публикаций:
    0
    Регистрация:
    2 янв 2009
    Сообщения:
    2.914
    onSide
    имхо > 99%. и это хорошо если просто сбойнет, а не сделает чегонить, чего делать не стоит.
    вообще, подобные дубовые способы лучше испытывать в виртуалке.

    (а про время какое на это пойдет я вообще молчу. быстрее рары брутить)
     
  10. dyn

    dyn New Member

    Публикаций:
    0
    Регистрация:
    30 окт 2009
    Сообщения:
    566
    onSide
    ПРо либ-файлы - хорошая идея. Спасибо. Формат где-либо описан? :)
    PS: нет, это не для фейковых апи. Это для системы саморазмножения
     
  11. TriX

    TriX Member

    Публикаций:
    0
    Регистрация:
    7 мар 2008
    Сообщения:
    68
    dyn
    дык описание в доке по РЕ-формату от ms.
     
  12. onSide

    onSide New Member

    Публикаций:
    0
    Регистрация:
    18 июн 2008
    Сообщения:
    476
    Угу, насчет этого я протупил, ночью вспомнил и понял что сморозил чушь))
    Свой обработчик то можно поставить, тока что ты с ним будешь делать дальше? Допустим func1->func2->crash, ты его словил и что дальше, ты же не знаешь что это func2 крешнулась или func1...
    Формат либов да, описан )
     
  13. deLight

    deLight New Member

    Публикаций:
    0
    Регистрация:
    26 май 2008
    Сообщения:
    879
    Если я примерно правильно понял для каких это целей, тому кто делает, всегда очень интересно иметь какой-то предсказуемый результат на выходе =)
    Ну да ладнл....
     
  14. Booster

    Booster New Member

    Публикаций:
    0
    Регистрация:
    26 ноя 2004
    Сообщения:
    4.860
    А для чего такой тестинг? Даже если не упадёт и вернётся, то наобум передавать параметры это мягко говоря странно. А вообще можно забить в стек много адресов возврата и тогда оно должно с большой вероятностью благополучно вернуться. Правда не факт, что от таких параметров всё-равно крышу не снесёт.
     
  15. deLight

    deLight New Member

    Публикаций:
    0
    Регистрация:
    26 май 2008
    Сообщения:
    879
    Booster
    Signature found / push rnd / push rnd / call / not found!! / pro fit!
    :)