Сейчас на форуме: rmn, exp50848, _MBK_ (+9 невидимых)

 eXeL@B —› Основной форум —› Нормальный API шпийон для висты.
<< . 1 . 2 . 3 . >>
Посл.ответ Сообщение

Ранг: 481.4 (мудрец), 109thx
Активность: 0.180
Статус: Участник
Тот самый :)

Создано: 23 июня 2009 12:08
· Личное сообщение · #1

Нужно мне было недавно отловить с какими параметрами одна прога запускает другой процесс, поитогу выкрутился тем, что приатачился дебагером и поставил брейкпоинт на CreateProcess(). Но до того как я до этого дошел я решил посмотреть, а смогу ли я получить подобную инфу через какой-нить API spy.
Из тех что есть на скачивание на крэклабе:
1) kerberos v1.13 инжектился через раз. Получить хотя бы какой-то лог не получилось.
2) API Monitor 1.5b ловит все что угодно только не CreateProcess.
3) APISpy32 3.0 не работает вообще.
Дальше уже взял Auto Debug System - да он ловит, но не показывает более 32 символов.

Итого получается, что приходится все делать руками.

Есть ли нормальный халявный api spy для висты?

-----
Реверсивная инженерия - написание кода идентичного натуральному




Ранг: 74.1 (постоянный), 34thx
Активность: 0.030
Статус: Участник

Создано: 06 июля 2009 09:39
· Личное сообщение · #2

sendersu
Ну д), е) можно, без напрягов.
Ф) Юникод строки и аскии строки определяюьтся с первой версии.
А с остальнымы: если дашь алгоритм определения что за строка находиитя по указателю (MBCS, UTF8...) то добавлю.



Ранг: 162.2 (ветеран)
Активность: 0.090
Статус: Участник

Создано: 06 июля 2009 14:26
· Личное сообщение · #3

Hexxx пишет:
Мне было не проще. Процесс закрывался быстрее чем я успевал нажать "properties" для процесса в Process Explorer'e


Options->differente highlight duration ставь на максимум(9) и у тебя будет время, чтобы посмотреть его командную строку, даже если он умрёт раньше.



Ранг: 512.7 (!), 360thx
Активность: 0.270.03
Статус: Модератор

Создано: 09 июля 2009 15:58
· Личное сообщение · #4

Rustem
для UTF8 можно пробовать вот так (на Си)

#ifndef UTF8_BYTE
#define UTF8_BYTE BYTE
#endif

BOOL _IsUTF8String(const UTF8_BYTE *pUTF8String)
{
DWORD i = 0;
BYTE b0, b1, b2;

ASSERT(pUTF8String != NULL); if(pUTF8String == NULL) return FALSE;

if(pUTF8String[0] == 0xEF)
if(pUTF8String[1] == 0xBB)
if(pUTF8String[2] == 0xBF) i += 3;

while(1)
{
b0 = pUTF8String[i]; i++;

if(b0 >= 0x80)
{
b1 = pUTF8String[i]; i++;

if((b1 & 0xC0) != 0x80) return FALSE;

if((b0 & 0xE0) != 0xC0)
{
b2 = pUTF8String[i]; i++;

if((b2 & 0xC0) != 0x80) return FALSE;
}
}

if(b0 == 0) break;
}

return TRUE;
}



Ранг: 481.4 (мудрец), 109thx
Активность: 0.180
Статус: Участник
Тот самый :)

Создано: 22 июля 2009 16:20
· Личное сообщение · #5

Я так понимаю API логеры делятся на два вида:
1) Графические.
У них есть GUI. У них есть возможность выбрать птичками те API которые интересны, и скорость программы выполняемой под таким логером будет зависеть от скорости того, насколько быстро gui будет успевать отрисовывать информацию пришедшую с хуков. Если инфы много скрол умирает. И настает смерть. Как правило имеют свою базу верных API (те, которые они могут мониторить), неверные посылаюстся на йух.
2) Не-графические.
Все что надо логировать, надо забивать руками. Надо досконально знать сколько у каждой функции параметров и знать все имена функций наизусть. Лог выписывается в текстовый файл. Просмотреть какие именно параметры пришли в функцию, как правило не возможно, потому что парсинга нет. Все во имя скорости.



Вопрос: а бывают ли какие-нить неграфические апилогеры, которые через msdia из pdb получают инфу о параметрах и пишут текстовый лог с передаваемыми данными?

-----
Реверсивная инженерия - написание кода идентичного натуральному




Ранг: 512.7 (!), 360thx
Активность: 0.270.03
Статус: Модератор

Создано: 27 августа 2009 23:06
· Личное сообщение · #6

Что имеетсо в виду?
Я так понимаю что декодирование структур?

у логгера Rustem'а целое СДК есть вроде для такого дела...

кстати, Rustem, есть время на апдейт? )))



Ранг: 74.1 (постоянный), 34thx
Активность: 0.030
Статус: Участник

Создано: 28 августа 2009 06:54
· Личное сообщение · #7

Hexxx
У моего апилоггера, досконально знать количество параметров НЕ надо, можешь писать хоть ноль. Просто параметры не будут выведены в лог.
Насчет гуя-мне гораздо удобнее поправить текстовый файл, чтобы объяснить какие функции нужны, чем тыкаться мышкой, и с настройками тоже самое- переделывать интерфейс из-за каждой новой фичи не особо хотелось

sendersu
Версия 1.2 готова давно Пока что поддержку UTF8 не добавлял, т.к. не вижу смысла. Кому надо сами выведут плагином



Ранг: 512.7 (!), 360thx
Активность: 0.270.03
Статус: Модератор

Создано: 28 августа 2009 23:17
· Личное сообщение · #8

Rustem Версия 1.2 готова давно
сцилку в студию?..... )))
на твоем сайте нашел 1.1 только
по ЮТФ8 - согласен



Ранг: 3.5 (гость)
Активность: 0=0
Статус: Участник

Создано: 02 января 2010 22:32
· Личное сообщение · #9

Никто не вникал почему logexts в windbg не работает на 7-ке?



Ранг: 36.2 (посетитель), 1thx
Активность: 0.010
Статус: Участник

Создано: 28 января 2011 18:05
· Личное сообщение · #10

искал свое, наткнулся на эту тему, искал дальше наткнулся на это:
автор старого apimonitor 1.5 после 9 лет перерыва начал заниматься 2-й версией. выглядит впечатляюще. x32 + x64(!) xp vista win7. на сей момент версия имеет статус Alpha r4
www.rohitab.com/apimonitor



Ранг: 590.4 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 28 января 2011 18:21
· Личное сообщение · #11

Оффтоп: Вот интересно на чем у него морда сделана?

-----
старый пень




Ранг: 20.3 (новичок), 2thx
Активность: 0.010
Статус: Участник

Создано: 28 января 2011 20:11
· Личное сообщение · #12

Hexxx
Пробуй от сюда www.rohitab.com/ API Monitor 2.0
Если подойдет - значит не искал в и-нете. Гуглится на раз по тематике API мониторинга.
У меня похожая задача была, тоже многое перепробовал.. это оказался самый профессиональный \ качественный \ удобный вариант.



Ранг: 74.1 (постоянный), 34thx
Активность: 0.030
Статус: Участник

Создано: 28 января 2011 21:18
· Личное сообщение · #13

Еще один апи монитор (32 бита), не такой красивый внешне, но по возможностям не уступает

blackninja2000.narod.ru/rus/api_logger.html

| Сообщение посчитали полезным: sendersu, _ruzmaz_

Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 28 января 2011 22:59
· Личное сообщение · #14

Не совсем в тему. Может кому-то покажется этот способ диким, но я в ntdll запихивал свой асм код, переводил на него управление с интересующей функции интересующей проги и MessageBox'ом выводил инфу Несмотря на кажущейся ужас, при корректной реализации не хуже чем обычный API шпион, при этом протекторы и т.д. ничего не подозревают.



Ранг: 36.2 (посетитель), 1thx
Активность: 0.010
Статус: Участник

Создано: 29 января 2011 00:35
· Личное сообщение · #15

Rustem
да, мегаотличная тулза. я так понял ты автор, респект.

багарепорт:
Tools\imex2spy.exe
не извлекает export без имени, заданный только по Ordinal

хотелка:
можно в лог перед каждой строкой писать время ? а то без него трудно разобраться - подряд идут события или через некоторый промежуток



Ранг: 481.4 (мудрец), 109thx
Активность: 0.180
Статус: Участник
Тот самый :)

Создано: 29 января 2011 01:15 · Поправил: Hexxx
· Личное сообщение · #16

[c4] пишет:
Если подойдет - значит не искал в и-нете.

Если это написал, значит не смотрел дату старта топика. Больше чем полтора года назад не было 2.0.

-----
Реверсивная инженерия - написание кода идентичного натуральному




Ранг: 20.3 (новичок), 2thx
Активность: 0.010
Статус: Участник

Создано: 29 января 2011 07:42
· Личное сообщение · #17

Hexxx
Да, дату не видел



Ранг: 512.7 (!), 360thx
Активность: 0.270.03
Статус: Модератор

Создано: 29 января 2011 10:31
· Личное сообщение · #18

alt76 пишет:
багарепорт:Tools\imex2spy.exeне извлекает export без имени, заданный только по Ordinal


Идея
Сделайте сами да и закиньте автору
подсказка - срц в пакете Kerberos (пред. поколение apilogger'а)



Ранг: 74.1 (постоянный), 34thx
Активность: 0.030
Статус: Участник

Создано: 29 января 2011 11:30
· Личное сообщение · #19

alt76
Да, время тоже хотел добавить. В версии 1.6 будет

Tools\imex2spy.exe этой утилите сто лет в обед, баги могут быть.
Ее переделывать надо полностью



Ранг: 512.7 (!), 360thx
Активность: 0.270.03
Статус: Модератор

Создано: 29 января 2011 13:39
· Личное сообщение · #20

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




Ранг: 36.2 (посетитель), 1thx
Активность: 0.010
Статус: Участник

Создано: 29 января 2011 13:44 · Поправил: alt76
· Личное сообщение · #21

Rustem
Да, время тоже хотел добавить. В версии 1.6 будет
клева, спасибки

Tools\imex2spy.exe этой утилите сто лет в обед, баги могут быть.
Ее переделывать надо полностью

может найдешь как нить время ? плиз...
она, лично для меня, важная часть функционала твоего api_logger.
возможность по быстрому промониторить вызовы с параметрами неизвестной dll с неизвестными функциями - существенное премущество твоего api_logger-а по сравнению с аналогами. а помогает это все сделать легко и быстро именно imex2spy.



Ранг: 74.1 (постоянный), 34thx
Активность: 0.030
Статус: Участник

Создано: 29 января 2011 14:05
· Личное сообщение · #22

alt76
для создания баз от неизвестных длл лучше всего подходит ида. в ней же можно и количество параметров у функции узнать, в болшинстве случаев автоматом (для stdcall)
трудности будут вызывать только функции с fastcall, thiscall итп

IDC скриптом можно пройтись по экспорту, и сохранить в файл, потом скормить шпиону


Насчет неизвестных длл с неизвестными параметрами, да , специально заточил возможности шпиона под реверс.


Скрипт для иды нашел, делает базу шпиона

Code:
  1. //IDC
  2. //Dump DLL Exports. And Create API-Logger database file
  3. //v1.0
  4. #include <idc.idc>
  5.  
  6. //Default parses __stdcall names. Like this  
  7. // "_D3DXBoxBoundProbe@16" => "D3DXBoxBoundProbe"
  8. static MyDemangle(s){
  9.    s = substr(s, 1, -1);
  10.    s = substr(s, 0, strstr(s, "@"));
  11.    return s;
  12. }
  13.  
  14. static main() {
  15.    auto entryPoints, i, ord, addr, name, purged, file, fd;
  16.   
  17.    file = AskFile(1, "*.idt", "Select IDT save file");
  18.    fd = fopen(file, "w");
  19.    entryPoints = GetEntryPointQty();
  20.    Message("Parsing started\n");
  21.    fprintf(fd, "[%s]\n", GetInputFile());
  22.    for (= 0; i < entryPoints; i++) {
  23.       ord = GetEntryOrdinal(i);
  24.       if (ord == 0) continue;
  25.       addr = GetEntryPoint(ord);
  26.       if (ord == addr) {
  27.          continue; //entry point has no ordinal
  28.       }
  29.       name = MyDemangle(Name(addr));
  30.       fprintf(fd, "%s", name);
  31.       purged = GetFunctionAttr(addr, FUNCATTR_ARGSIZE);
  32.       if (purged > 0) {
  33.          fprintf(fd, " %d", purged/4);
  34.       }
  35.       fprintf(fd, "\n");
  36.    }
  37.    Message("End\n");
  38. }




Ранг: 36.2 (посетитель), 1thx
Активность: 0.010
Статус: Участник

Создано: 29 января 2011 14:31 · Поправил: alt76
· Личное сообщение · #23

Rustem
за скрипт спасибо, но это уже для более глубоких исследований.
иногда надо по быстрому вникнуть в логику взаимодействия проги со своими dll и грузить каждую dll в иду, особенно если их штук 10-20 как-то не кошерно
намного проще и эффективнее прогнать их все через imex2spy, запустить твой apilogger, а там по логу уже судить какая dll заслуживает чести быть проанализированной поглубже.

[добавлено]
кста, одна идея появилась - возможно тебе покажется заслуживающей внимания.
если добавить окошко, в которое дублировать вывод лога, то тогда будет хорошо визуально видно то, что на какое-то действие с прогой, идет какой-то вызов функций из выбранных dll.



Ранг: 74.1 (постоянный), 34thx
Активность: 0.030
Статус: Участник

Создано: 29 января 2011 17:49
· Личное сообщение · #24

alt76
Да, идея с окном интересна, только если вызовов много, то все мелькать будет

начет утилиты, как получится, так сделаю
исходники открыты, любой может доработать,

хотя, должны быть готовые утилиты, может кто знает, dumpbin ,от мелкомягких, например



Ранг: 512.7 (!), 360thx
Активность: 0.270.03
Статус: Модератор

Создано: 30 января 2011 00:46
· Личное сообщение · #25

alt76 пишет:
багарепорт:Tools\imex2spy.exeне извлекает export без имени, заданный только по Ordinal


а если так?


c2f1_29.01.2011_CRACKLAB.rU.tgz - imex2spy.exe

| Сообщение посчитали полезным: alt76

Ранг: 36.2 (посетитель), 1thx
Активность: 0.010
Статус: Участник

Создано: 30 января 2011 12:45 · Поправил: alt76
· Личное сообщение · #26

sendersu
а если так?
для apilog15pub.zip должно быть примерно так:
[dllname.dll]
!1 , f1 , 3

а получается так:
[]
!1 , 3

т.е. нет "имени функции" и нет имени dll
то, что нужно еще и "имя функции" это "баг" apilog15pub т.к. к доке написано
;Format of DB
;!Ordinal,ParamsCnt,Options
но такой формат apilog15pub не понимает:
ERROR: Empty function name in line near 2
а вот формат
!Ordinal, FunctionName, ParamsCnt
она понимает и нормально логгирует:
Function "f1" from dllname.dll hooked



Ранг: 512.7 (!), 360thx
Активность: 0.270.03
Статус: Модератор

Создано: 30 января 2011 14:21
· Личное сообщение · #27

есть предложения как назвать функи по ординалу?



Ранг: 36.2 (посетитель), 1thx
Активность: 0.010
Статус: Участник

Создано: 30 января 2011 15:21 · Поправил: alt76
· Личное сообщение · #28

мне кажется было бы удобно {0!R!D_1, 0!R!D_2, ...}
и информативно и заметно и не совпадет случайно ни с каким реальным именем из export

готов быть бета тестером



Ранг: 74.1 (постоянный), 34thx
Активность: 0.030
Статус: Участник

Создано: 30 января 2011 20:33 · Поправил: Rustem
· Личное сообщение · #29

sendersu,alt76
Посоны), легальные символы для имени фунций,
"$@?_" , "a-z" , "A-Z" , "0-9"

т.е. те, которые можно применять в экспортируемых по имени

PS надо будет уточнить в доке к проге




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 30 января 2011 20:54
· Личное сообщение · #30

Что вы колесо изобретаете, в доке по ПЕ в разделе про форвардинг экспорта написан формат форвардинга, если по ординалу: MYDLL.#27, его и возьмите.



Ранг: 512.7 (!), 360thx
Активность: 0.270.03
Статус: Модератор

Создано: 30 января 2011 22:34 · Поправил: sendersu
· Личное сообщение · #31

Archer
согласно текущим правилам парсера шпиона - ".#" невалидные
поетому сделал так, пример

[OLEAUT32.dll]
!16 , OLEAUT32_16 , 3

alt76
а длл-ка ваша с хитринкой, пустое имя от того что *(char*)(imageBase + pExport->Name) == '\0' ;(
в таком случае я теперь беру имя входного файла
пойдет?


36f8_30.01.2011_CRACKLAB.rU.tgz - imex2spy.exe

| Сообщение посчитали полезным: alt76
<< . 1 . 2 . 3 . >>
 eXeL@B —› Основной форум —› Нормальный API шпийон для висты.
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати