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 — тайна веков...
Делай что должно, и будь что будет
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.