DotFix ::: Software protection portal
 *Начало * Ответить * Статистика * Задать вопрос * Поиск * 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, или кто - то может помочь РјРЅРµ РїРёС?ать РґСЂСѓРіСѓСЋ функцию, РїРѕРґРѕР±РЅСѓСЋ С?тому?

Ваш ответ

Bold Style  Italic Style  Underlined Style  Image Link  Insert URL  Email Link  Код 
... Отменить *Что это?


Перед отправкой "нелатинского" текста проверьте кодировку броузера!
 » Логин  » Пароль