mov eax, offset off_4B0F5510 ; указатель на таблицу имен
exported functions
xor esi, esi
loc_4B0DC7A2:
push dword ptr [eax] ; lpProcName
push ?gDllHandle@@3PAUHINSTANCE__@@A ; hModule
call ds:__imp__GetProcAddress@8
test eax, eax
jz loc_4B0DA7A1
cmp eax, ?apfns@@3PAPAXA[esi] ; указатель на таблицу адресов exported functions
jnz loc_4B0DA7A1
inc edi
mov esi, edi
shl esi, 2
lea eax, off_4B0F5510[esi]
cmp dword ptr [eax], 0
jnz short loc_4B0DC7A2
Собственно все понятно - проверка на угон IAT, если имя или адрес, полученный через GetProcAddress не совпали - возвращаем -1 и WSAStartup в свою очередь вернет
10091 (WSASYSNOTREADY)
Угар в том что если пропатчить IAT после вызова WSAStartup - ничего больше не проверится
Ну и традиционно этот массив ?apfns@@3PAPAXA (бгг) не экспортируется, так что юзер лишен воможности запустить проверку IAT в любое другое время
Комментариев нет:
Отправить комментарий