*Начало * Ответить * Статистика * Задать вопрос * Поиск * FAQ * * |
DotFix Forum / Вопросы программирования и исследования защит / College project / Проект колледжа |
Автор | Сообщение |
beautifulcoder Участник |
Дата: 28 Апр 2008 23:14 I am working on a project for college. An API has been hooked so when trying to call a function from that API using GetProcAddress an error comes up. I think it is hooked using extended code overwriting. I have found this code but I don't have Madshi's madDisAsm.pas so it is useless to me. function GetRealProcAddress(hModule: HMODULE; lpProcName: pchar): pointer; var Proc: pointer; CodeInfo: TCodeInfo; FunctionInfo: TFunctionInfo; begin Proc := GetProcAddress(hModule, lpProcName); Result := Proc; CodeInfo := ParseCode(Proc); if not (CodeInfo.Call or CodeInfo.Jmp) then Exit; FunctionInfo := ParseFunction(Proc); if FunctionInfo.CodeLen <> 5 then Exit; repeat Result := FunctionInfo.FarCalls[Low(FunctionInfo.FarCalls)].Target; FunctionInfo := ParseFunction(FunctionInfo.FarCalls[Low(FunctionInfo.FarCalls)].Target ); until FunctionInfo.CodeLen = 10; end; Does anyone have madDisAsm.pas or can someone help me write another function similar to this one? ////////////////////////////////////////////////////////////////////// // ////////////////////////////////////////////////////////////////////// // РЇ воздейС?твую РЅР° проект РґР»С? колледжа. Программный интерфейС? приложениС? был завербован так, РїСЂРѕР±СѓС? назвать функцию РѕС‚ того программного интерфейС?Р° приложениС?, РёС?пользуС? GetProcAddress, ошибка подошла. РЇ думаю, что С?то завербовано, РёС?пользуС? СЂР°С?ширенное РєРѕРґРѕРІРѕРµ перепиС?ывание. РЇ нашел С?тот кодекС?, РЅРѕ С? РЅРµ имею madDisAsm.pas Мадши, таким образом С?то Р±РµС?полезно РєРѕ РјРЅРµ. function GetRealProcAddress(hModule: HMODULE; lpProcName: pchar): pointer; var Proc: pointer; CodeInfo: TCodeInfo; FunctionInfo: TFunctionInfo; begin Proc := GetProcAddress(hModule, lpProcName); Result := Proc; CodeInfo := ParseCode(Proc); if not (CodeInfo.Call or CodeInfo.Jmp) then Exit; FunctionInfo := ParseFunction(Proc); if FunctionInfo.CodeLen <> 5 then Exit; repeat Result := FunctionInfo.FarCalls[Low(FunctionInfo.FarCalls)].Target; FunctionInfo := ParseFunction(FunctionInfo.FarCalls[Low(FunctionInfo.FarCalls)].Target ); until FunctionInfo.CodeLen = 10; end; Любой имеет madDisAsm.pas, или кто - то может помочь РјРЅРµ РїРёС?ать РґСЂСѓРіСѓСЋ функцию, РїРѕРґРѕР±РЅСѓСЋ С?тому? |