Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.11.15;
Скачать: CL | DM;

Вниз

Перехват функций игры 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;
Скачать: CL | DM;

Наверх




Память: 0.56 MB
Время: 0.013 c
2-1254506989
@!!ex
2009-10-02 22:09
2009.11.15
Почему записываются нули вместо значения????


1-1224756258
Tack
2008-10-23 14:04
2009.11.15
Передать RTF-текст из одного RichEdit в другой без Clipboard-а


2-1254223177
defen
2009-09-29 15:19
2009.11.15
вывод значения ключа еестра


15-1253179997
dort12
2009-09-17 13:33
2009.11.15
Может кто делал??


15-1253260531
pe@rl
2009-09-18 11:55
2009.11.15
Еще про GET и POST. Но уже на Perl