Форум: "Прочее";
Текущий архив: 2009.11.15;
Скачать: [xml.tar.bz2];
ВнизПерехват функций игры Battlefield 2 Найти похожие ветки
← →
Пит (2009-09-17 15:50) [40]Забавно... История разветвляется на два направления )))
1) я попробовал EXE"шник игры более новой версии (вместо версии 1.41 попробовал 1.5). Что забавно - теперь в таблице импорта в модуле BF2.exe (главный файл игры) теперь обнаруживается импорт функций connect и sendto
Но перезапись IAT не происходит. Вот вырезанный код:PThunk := PImageThunkData( InstanceModule + DWORD(PImportDsc^.FirstThunk) ) ;
while DWORD(PThunk^.Thunk.thFunction) <> 0 do
begin
if Pointer( PThunk^.Thunk.thFunction) = CurrentProc then
begin
VirtualProtect(PThunk^.Thunk.thFunction, SizeOf(PThunk^.Thunk.thFunction),
PAGE_EXECUTE_READWRITE, OldProtect) ;
WriteProcessMemory(GetCurrentProcess, @PThunk^.Thunk.thFunction, @NewProc,
SizeOf(NewProc), Size);
VirtualProtect(PThunk^.Thunk.thFunction, SizeOf(PThunk^.Thunk.thFunction),
OldProtect, OldProtect);
//TODO: правка
if Pos("LoadLibrary", FuncName) = 0 then
begin
s := GsExeName+": mod ""+GetModuleName(InstanceModule)+"", ""+string(CalleeModuleName)+">"+FuncName+"", intercept";
OutputDebugStringA(PChar(s));
end;
end;
inc(PThunk);
end;
CurrentProc - адрес настоящих функций, NewProc - подмененных.
По коду - VirtualProtect проходит нормально, а вот WriteProcessMemory вызывает ошибку 998, текст: "Неверная попытка доступа к адресу памяти"
Что может быть причиной?
2) старый EXE занимал 7.22 MB, новый занимает 6.25 MB, возможно там сняли какую-то защиту... Вопрос, интересно, почему в старом EXE не находились экспорты функций connect / sendto? Что за защита могла быть?
← →
Пит (2009-09-17 15:59) [41]запуск с правами администратора принес тоже самое. VirtualProtect проходит нормально, а вот: WriteProcessMemory вызывает ошибку 998, текст: "Неверная попытка доступа к адресу памяти"
← →
Сергей М. © (2009-09-17 16:18) [42]
> почему в старом EXE не находились экспорты функций connect
> / sendto?
Не экспорты, а импорты .. EXE же импортирует , а экспортирует DLL ..
Почему не находились в IAT ?
Да потому что их там, наверно, и не было - загрузка Ws2_32 осуществлялясь в динамике ..
А в новой версии она, видимо, грузится в статике, на этапе инициализации процесса, потому и фигурирует в IAT ..
← →
antonn © (2009-09-17 17:00) [43]
> 2) старый EXE занимал 7.22 MB, новый занимает 6.25 MB, возможно
> там сняли какую-то защиту... Вопрос, интересно, почему в
> старом EXE не находились экспорты функций connect / sendto?
> Что за защита могла быть?
теперь игра не требует диска
← →
Пит (2009-09-17 19:25) [44]Сергей М. © (17.09.09 16:18) [42]
Почему не находились в IAT ?
Да потому что их там, наверно, и не было - загрузка Ws2_32 осуществлялясь в динамике ..
так я LoadLibraryX тоже перехватываю... Я же писал.
В старой версии вообще не обнаруживался перехват, в новой версии (наверное, защиту сняли какую-то) хотя бы обнаруживается...
Собственно, вопросы остаются, озвученные в [40] ))
← →
Сергей М. © (2009-09-18 08:37) [45]
> я LoadLibraryX тоже перехватываю
Ну ты же видишь, что ws2_32 загружен в АП процесса,
Значит перехватываешь позже чем ф-ция вызывается.
Чудес-то не бывает - с луны же этот модуль не свалился)
← →
Пит (2009-09-18 18:03) [46]Сергей М. © (18.09.09 8:37) [45]
Ну в общем, может быть. Ради защиты они могли страдать таким геморроем.
Но если вернуться к версии 1.5, почему WriteProcessMemory выдает ошибку и под админом тоже, хотя на тестовых приложениях все нормально пишется в таблицу импорта даже под правами продвинутого пользователя?
← →
antonn © (2009-09-18 21:04) [47]
> Но если вернуться к версии 1.5, почему WriteProcessMemory
> выдает ошибку и под админом тоже, хотя на тестовых приложениях
> все нормально пишется в таблицу импорта даже под правами
> продвинутого пользователя?
потому что защиту делали не дураки :)
авторы Панкбастера еще выпендривались, что много пофиксили в последнем патче :)
Страницы: 1 2 вся ветка
Форум: "Прочее";
Текущий архив: 2009.11.15;
Скачать: [xml.tar.bz2];
Память: 0.54 MB
Время: 0.006 c