| 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;
 |  ѕри запуске процесса компил€ции все маркеры будут автоматически добавлены в список защищаемых объектов.
 |  
|  |  |