API Spying
От: Сергей Холодилов Россия  
Дата: 29.10.04 14:19
Оценка: 240 (7) +1
Статья:
API Spying
Автор(ы): Сергей Холодилов
Дата: 27.02.2005
API Spying ­ это слежение за вызовами функций API некоторым приложением. API Spying может использоваться на одном из этапов исследования программы, логика работы которой не до конца понятна.


Авторы:
Сергей Холодилов

Аннотация:
API Spying ­ это слежение за вызовами функций API некоторым приложением. API Spying может использоваться на одном из этапов исследования программы, логика работы которой не до конца понятна.
Делай что должно, и будь что будет
Re: API Spying
От: Аноним  
Дата: 29.03.05 08:38
Оценка: 21 (1)
Здравствуйте, Сергей Холодилов, Вы писали:

СХ>Статья:

СХ>API Spying
Автор(ы): Сергей Холодилов
Дата: 27.02.2005
API Spying ­ это слежение за вызовами функций API некоторым приложением. API Spying может использоваться на одном из этапов исследования программы, логика работы которой не до конца понятна.


СХ>Авторы:

СХ> Сергей Холодилов

СХ>Аннотация:

СХ>API Spying ­ это слежение за вызовами функций API некоторым приложением. API Spying может использоваться на одном из этапов исследования программы, логика работы которой не до конца понятна.

При компилировании под Visual Studio 2003.NET (7.1) spyloader не может найти функцию _startSpy@4
в Visual Studio 6.5 все нормально.
Re[2]: API Spying
От: SergH Россия  
Дата: 29.03.05 11:14
Оценка:
Здравствуйте, Аноним, Вы писали:

А>При компилировании под Visual Studio 2003.NET (7.1) spyloader не может найти функцию _startSpy@4

А>в Visual Studio 6.5 все нормально.

Ошибка в функции OtherProcess::FindName.

// Перебирает массив имён функций, ищет там заданное имя
// Возвращает -1 если что-то не вышло или имени нет
int OtherProcess::FindName(
                    HANDLE hProcess, 
                    const char* baseAddress, 
                    DWORD AddressOfNames, 
                    DWORD count, 
                    const char* name)
{
    // Для сравнения имени его нужно прочитать, для этого нужно знать размер
    int size = lstrlenA(name) + 1;
    std::auto_ptr<char> candidate(new char[size]);

    // Перебираем имена в массиве имён функций
    for (int index = 0; index < count; index++)
    {
        DWORD nameRVA;

        // Читаем адрес начала строки
        if (!ReadProcessMemory(
                hProcess,
                baseAddress + AddressOfNames + index * sizeof(DWORD), 
                &nameRVA, 
                sizeof(nameRVA), 
                0))
        {
            return -1;
        }
            
        // Читаем строку
        if (!ReadProcessMemory( // <-- отсутствовал восклицательный знак
                hProcess,
                baseAddress + nameRVA, 
                candidate.get(), 
                size, 
                0))
        {
            return -1;
        }
        
        if (strcmp(name, candidate.get()) == 0)
        {
            // Она! Сваливаем :)
            return index;
        }
    }

    // Такой функуии нет
    return -1;
}


Добавлял проверку ошибок в самом конце. Каюсь, посыпаю голову пеплом, выложу обновлённые иходники.
А вот почему вдруг работает в 6.5 — тайна веков...
Делай что должно, и будь что будет
Re[3]: API Spying
От: Аноним  
Дата: 31.03.05 14:15
Оценка:
Здравствуйте, SergH, Вы писали:

SH>Здравствуйте, Аноним, Вы писали:


А>>При компилировании под Visual Studio 2003.NET (7.1) spyloader не может найти функцию _startSpy@4

А>>в Visual Studio 6.5 все нормально.

SH>Ошибка в функции OtherProcess::FindName.


SH>Добавлял проверку ошибок в самом конце. Каюсь, посыпаю голову пеплом, выложу обновлённые иходники.

SH>А вот почему вдруг работает в 6.5 — тайна веков...

Спасибо!
Очень полезная функция!!!
Проверил действительно заработало!!!
Re[3]: API Spying
От: Аноним  
Дата: 31.03.05 14:26
Оценка:
Здравствуйте, SergH, Вы писали:

SH>Здравствуйте, Аноним, Вы писали:


А>>При компилировании под Visual Studio 2003.NET (7.1) spyloader не может найти функцию _startSpy@4

А>>в Visual Studio 6.5 все нормально.

И еще одно...
не в тему может Вы, с Вашим оптом знаете или подскжите:
С помощью Вашей программы я внедрился в окно OCX,
причем окно может быть написано и на ATL
и на MFC, и на старых версиях онных.
Как получить IUnknown этого злополучного OCX.
Или метод какой.
ATL AxWindow — хватает только ATL созданные окна.
А может кто-то на Borland-е прогу написал?
Как его подхватить, черт его знает.
Заранее Благодарен.
Re[4]: API Spying
От: SergH Россия  
Дата: 31.03.05 14:36
Оценка:
Здравствуйте, Аноним, Вы писали:

А>И еще одно...

А>не в тему может Вы, с Вашим оптом знаете или подскжите:
А>С помощью Вашей программы я внедрился в окно OCX,
А>причем окно может быть написано и на ATL
А>и на MFC, и на старых версиях онных.
А>Как получить IUnknown этого злополучного OCX.
А>Или метод какой.
А>ATL AxWindow — хватает только ATL созданные окна.
А>А может кто-то на Borland-е прогу написал?
А>Как его подхватить, черт его знает.
А>Заранее Благодарен.

Не совсем понял ситуацию и задачу...
Может http://gzip.rsdn.ru/article/com/qihook.xml
Автор(ы): Алексей Остапенко
Дата: 30.11.2003
Статья описывает возможный метод перехвата вызовов интерфейса IUnknown COM-объекта. В качестве примера создается прокси-объект, позволяющий практически "прозрачно" подменить контекст пользователя, под которым производится вызов удаленного объекта из скриптовых языков.
или http://gzip.rsdn.ru/article/com/comintercept.xml
Автор(ы): Ivan Andreyev
Дата: 25.09.2004
В статье продолжается обсуждение темы перехвата вызовов методов COM-интерфейсов. Рассматривается использование API-функций, позволяющих упростить эту задачу.

?
Ещё, раз уж это COM, он где-то создаётся, можно разматывать его с начала, т.е. с CoCreateInstance[Ex]. Перехватить её, а дальше думать
Делай что должно, и будь что будет
Re[5]: API Spying
От: Аноним  
Дата: 01.04.05 17:10
Оценка:
Здравствуйте, SergH, Вы писали:

SH>Не совсем понял ситуацию и задачу...

SH>Может http://gzip.rsdn.ru/article/com/qihook.xml
Автор(ы): Алексей Остапенко
Дата: 30.11.2003
Статья описывает возможный метод перехвата вызовов интерфейса IUnknown COM-объекта. В качестве примера создается прокси-объект, позволяющий практически "прозрачно" подменить контекст пользователя, под которым производится вызов удаленного объекта из скриптовых языков.
или http://gzip.rsdn.ru/article/com/comintercept.xml
Автор(ы): Ivan Andreyev
Дата: 25.09.2004
В статье продолжается обсуждение темы перехвата вызовов методов COM-интерфейсов. Рассматривается использование API-функций, позволяющих упростить эту задачу.

?

SH>Ещё, раз уж это COM, он где-то создаётся, можно разматывать его с начала, т.е. с CoCreateInstance[Ex]. Перехватить её, а дальше думать

Обьект(OCX) уже создан и находиться в чужом приложении.
Необходимо получить IUnknown чужого OCX и зарегестрировать его в ROT.
А далее хоть из Бейсика подключайся (GetActiveObject)
И используй эту OCX из моего приложения.
С АТL у меня прошло.
Я влез в чужое приложения получил IUnknown

inline HRESULT AtlGetControl(HWND h, IUnknown** pp)
{
ATLASSERT(WM_ATLGETCONTROL != 0);
if (pp == NULL)
return E_POINTER;
*pp = (IUnknown*)SendMessage(h, WM_ATLGETCONTROL, 0, 0);
return (*pp) ? S_OK : E_FAIL;
}

и зарегестрировал его в ROT
HRESULT hr = RegisterActiveObject(pUnk, clsid, ACTIVEOBJECT_STRONG, &m_dwRegister);

но с MFC и Borland это не проходит, может есть более универсальные методы.
Ведь Professional Test программа спокойно подключается к любому, чужому OCX.
Заранее благодарен.
Сергей.
Re[3]: API Spying
От: SergH Россия  
Дата: 19.07.05 11:44
Оценка:
Здравствуйте, SergH, Вы писали:

SH>Добавлял проверку ошибок в самом конце. Каюсь, посыпаю голову пеплом, выложу обновлённые иходники.


Это наконец-то произошло.
Делай что должно, и будь что будет
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.