Аннотация:
API Spying это слежение за вызовами функций API некоторым приложением. API Spying может использоваться на одном из этапов исследования программы, логика работы которой не до конца понятна.
СХ>Авторы: СХ> Сергей Холодилов
СХ>Аннотация: СХ>API Spying это слежение за вызовами функций API некоторым приложением. API Spying может использоваться на одном из этапов исследования программы, логика работы которой не до конца понятна.
При компилировании под Visual Studio 2003.NET (7.1) spyloader не может найти функцию _startSpy@4
в Visual Studio 6.5 все нормально.
Здравствуйте, Аноним, Вы писали:
А>При компилировании под 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-е прогу написал?
Как его подхватить, черт его знает.
Заранее Благодарен.
Здравствуйте, Аноним, Вы писали:
А>И еще одно... А>не в тему может Вы, с Вашим оптом знаете или подскжите: А>С помощью Вашей программы я внедрился в окно OCX, А>причем окно может быть написано и на ATL А>и на MFC, и на старых версиях онных. А>Как получить IUnknown этого злополучного OCX. А>Или метод какой. А>ATL AxWindow — хватает только ATL созданные окна. А>А может кто-то на Borland-е прогу написал? А>Как его подхватить, черт его знает. А>Заранее Благодарен.
? SH>Ещё, раз уж это COM, он где-то создаётся, можно разматывать его с начала, т.е. с CoCreateInstance[Ex]. Перехватить её, а дальше думать
Обьект(OCX) уже создан и находиться в чужом приложении.
Необходимо получить IUnknown чужого OCX и зарегестрировать его в ROT.
А далее хоть из Бейсика подключайся (GetActiveObject)
И используй эту OCX из моего приложения.
С АТL у меня прошло.
Я влез в чужое приложения получил IUnknown
и зарегестрировал его в ROT
HRESULT hr = RegisterActiveObject(pUnk, clsid, ACTIVEOBJECT_STRONG, &m_dwRegister);
но с MFC и Borland это не проходит, может есть более универсальные методы.
Ведь Professional Test программа спокойно подключается к любому, чужому OCX.
Заранее благодарен.
Сергей.