FAQ  •  Search  •  Memberlist  •  Usergroups   •  Register  •  Profile  •  Log in to check your private messages  •  Log in
 ѕрименение скриптов на примере расширенных маркеров View next topic
View previous topic
Author Message
Admin
Site Admin


Joined: 21 Aug 2006
Posts: 52
Location: Russia, E-burg

Posted: Sat Aug 18, 2007 11:43 am

ќчень часто в проекте возникает потребность установки маркеров с заданием определенного типа компил€ции дл€ данного маркера. ƒанна€ задача решаетс€ добавлением дополнительных команд к стандартному маркеру и затем определение этих команд с помощью скрипта в процессе обработки защищаемой программы.
Ќапример - дополнительна€ команда дл€ типа "ћутаци€"у нас будет выгл€деть как "lea eax, [eax]", дл€ типа "”льтра" - "lea ebx, [ebx]".
—оздадим собственный маркер кода на основе стандартного:

VMProtectMutation.inc
Code:
asm
  lea eax,[eax+0]
  jmp @1
  db 'VMProtect begin',0
@1:
  lea eax,[eax] // дополнительна€ команда
end;

VMProtectUltra.inc:
Code:
asm
  lea eax,[eax+0]
  jmp @1
  db 'VMProtect begin',0
@1:
  lea ebx,[ebx] // дополнительна€ команда
end;

“еперь с помощью скрипта будем автоматически определ€ть дополнительные команды у стандартного маркера и добавл€ть эти блоки кода в проект с указанием типа компил€ции:
Code:
procedure OnBeforeCompilation;
var R:TIntelRecord;
    CompilationType:TCompilationType;
    Ptr:Int64;
    I:Integer;
    S:String;
begin
  R:=TIntelRecord.Create(nil);
  with VMProtector do
   for I:=0 to InputFile.MapRecords.Count-1 do // цикл по всем известным объектам
    with InputFile.MapRecords.Items[I] do
     if CodeType=otMarker then // если тип объекта = ћаркер
      begin
       Ptr:=Address+$12; // $12=18d размер стандартного маркера VMProtectBegin
       R.ReadFromFile(InputFile,Ptr); // дизассемблируем первую команду за стандартным маркером
       S:=R.CommandText;
       if S='lea eax, [eax]' then
        CompilationType:=ctMutation
       else
       if S='lea ebx, [ebx]' then
        CompilationType:=ctUltra
       else
        CompilationType:=ctVirtualization;
       AddByAddress(Address,CompilationType,True); // добавл€ем новую процедуру в проект с определенным типом компил€ции
      end;
  R.Free;
end;

ѕри запуске процесса компил€ции все маркеры будут автоматически добавлены в список защищаемых объектов.
Display posts from previous:      


 Jump to:   



View next topic
View previous topic
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum

Powered by phpBB © 2001, 2005 phpBB Group