// вы читаете...

Новости

Обход SoftIce’а



h := h and $FFFF0000; // как известно, кернел выровнен на границу в 10000h, так что его искать теперь ещё легче.
result:=0;
ied := pointer(h);
L:
f:=false;
try
while (PImageDosHeader(ied).e_magic<>IMAGE_DOS_SIGNATURE) and
(PImageNtHeaders(integer(ied)+PImageDosHeader(ied)._lfanew).Signature<>IMAGE_NT_SIGNATURE) do begin
dec(integer(ied),$10000);
end;
except
dec(integer(ied),$10000);
f:=true;
end;
if f then
begin
f:=false;
goto l;
end;
h:=integer(ied); // после того как ImageBase найден, можно приступить к поиску требуемой функции.
ied := pointer(PImageDosHeader(ied)._lfanew+h);
ied := pointer(h + PImageNtHeaders(ied).OptionalHeader.DataDirectory[0].VirtualAddress);
for i:=0 to ied.NumberOfNames-1 do begin
j:=(pdword(h+integer(ied.AddressOfNames)+i*4))^;
if lstrcmpi(pchar(procname),pchar(h+j))=0 then // сравнение я решил сделать не чувствительным к регистру.
begin
f:=true;
break;
end;
end;
if f then // если процедура найдена,
begin // то проверяем её на наличие 0CCh.
j:=h+(pdword(h+integer(ied.AddressOfFunctions)+i*4))^;
for i:=j to j+range do
if byte(Pointer(integer(i))^) = $0CC then
inc(result);
end;
end;

procedure TForm1.Button2Click(Sender: TObject); // проверяем GetProcAddress
begin
if IsThereDebuggingProcHeader(‘GetProcAddress’,10)<>0 then
Caption:=’Debugging proc present’
else
Caption:=’There»s not debugging proc’;
end;

Теперь мы умеем находить факт отладки… Но как от неё можно уйти? Очень просто! :) Раз мы уже знаем, что SoftIce (или любой другой отладчик) вставляет куда не попадя 0CCh, то мы можем хранить небольшую таблицу восстановления “повреждённых функций”. Суть этого метода проста: мы проверим какую-нибудь функцию на наличие отладки и восстановим её. Т.е. int 3 не будет вызвано, а значит и “злобный дядя крякер“ ничего “лишнего” о началу не увидит. Для примера я выбрал MessageBoxA, потому что именно эта функция чащё всего сигнализирует об удачной или неудачной регистрации приложения. Для этого нам придётся её задизасмить:

Exported fn(): MessageBoxA — Ord:01DDh
:77D5ADD7 833DC4D3D87700 cmp dword ptr [77D8D3C4], 00000000
:77D5ADDE 0F85377E0100 jne 77D72C1B

Страницы: 1 2 3 4 5 6 7

Обсуждене

Отзывов нет на «Обход SoftIce’а»

Ваш отзыв

Рубрики