RCE.SU - реверсинг, кодинг, выделенные сервера, ICQ, proxy

VBox 4.3


FOR EDUCATIONAL USE ONLY!!!!!!!!!

Этот документ показывает, как снять коммерческую защиту VBox 4.3 с любой программы защищенной VBox 4.3!

Необходимые инструменты:
1. SoftIce 4.x + FrogIce 1.x
2. ProcDump 1.6.2
Все необходимые инструменты лежат тут: http://protools.cjb.net


ПРИСТУПИМ:

Лирическое отступление:
Я не буду описывать как скрыть SoftIce от VBox с этой проблеммой очень хорошо справляется FrogIce, но замечу что для того чтобы VBox не ругался на бряки будем использовать бряки вида bpm <адрес в памяти> x - это стандартный бряк в памяти на исполнение.

Теперь сам процесс снятия защиты:

1. VBox 4.3 шифрует таблицу импортов, но это можно обойти!

Грузим прогу, с которой снимаем VBox в SoftIce и жмем F5. После появления NAG-Screen'а VBox'а жмем ctrl-D (входим в SoftIce) и ставим бряк на GetProcAddress (bpx GetProcAddress) после жмем F5 и в окне NAG-Screen'а жмем кнопку Try. После того как вывалимся в SIce жмем F12 и видим следующий кусок кода:

 
	 017F:0700BB36  PUSH      DWORD PTR [EBP-20]                                    
   	 017F:0700BB39  CALL      [KERNEL32!GetProcAddress]                             
   	 017F:0700BB3F  MOV       EDI,EAX       <-- вы здесь
	 017F:0700BB41  CMP       EDI,EBX                                                
	 017F:0700BB43  JZ        0700BCE6                                               
	 017F:0700BB49  MOV       ESI,[ESI+16]                                           
	 017F:0700BB4C  ADD       ESI,[EBP+08]                                           
	 017F:0700BB4F  CMP       [EBP-24],EBX  <-- вызывалась ли функция закриптовки?
	 017F:0700BB52  JZ        0700BB89      <-- прыжок если нет
	 017F:0700BB54  LEA       EAX,[EBP-0114]       
	 017F:0700BB5A  PUSH      EAX                  
	 017F:0700BB5B  PUSH      DWORD PTR [EBP-20]   
	 017F:0700BB5E  PUSH      EDI                 
	 017F:0700BB5F  CALL      0700BF61             
	 017F:0700BB64  ADD       ESP,0C               
	 017F:0700BB67  TEST      EAX,EAX              
	 017F:0700BB69  JZ        0700BB89             
	 017F:0700BB6B  PUSH      DWORD PTR [EBP+28]   
	 017F:0700BB6E  PUSH      EDI                 
	 017F:0700BB6F  PUSH      DWORD PTR [EBP+24]   
	 017F:0700BB72  PUSH      DWORD PTR [EBP+20]  
	 017F:0700BB75  CALL      0700BDFE            
	 017F:0700BB7A  ADD       ESP,10              
	 017F:0700BB7D  CMP       EAX,EBX             
	 017F:0700BB7F  JZ        0700BDD6               
	 017F:0700BB85  MOV       [ESI],EAX            <-- eax=закриптован
	 017F:0700BB87  JMP       0700BB8B              
	 017F:0700BB89  MOV       [ESI],EDI            <-- eax=не закриптован
	 017F:0700BB8B  INC       DWORD PTR [EBP-28]   
	 017F:0700BB8E  MOV       EAX,[EBP-28]                                           
	 017F:0700BB91  CMP       EAX,[EBP-4C]                                          
	 017F:0700BB94  JL        0700B9E3                                          
Чтобы не дать VBox'у зашифровать всю таблицу имортов достаточно по адресу 0700BB52 заменить jz на jmp и все.
Совет: поставте бряк на этот адрес (bpm 700BB52 x)

2. Делаем дамп.

После того как вы сделали jmp по адресу 700BB52 жмите несколько раз F12 пока не выйдете из такой асм инструкции CALL EDI. Поставте изь на адрес этой инструкции (bpm <адрес> x - я не указываю адресс, т.к. они меняются каждый раз при перезапуске проги) и жмите F5. После того как вы остановитесь на этом бряке входите в него и идите до первого CALL. Входите в этот CALL через несколько строк вы увидите такую иструкцию CALL EAX, где вместо EAX передается функция GetProcAddress выполните несколько интсрукций после этого CALL до следующего и входите в него. После того как вы войдете в последний CALL через несколько строк вы увидите следующий кусок кода (здесь все адреса будут другие):

   
   017F:011604E0  MOV       EDX,[EBP-08]
   017F:011604E3  MOV       EAX,[EDX+14]   <-- берется OEP протгиt
   017F:011604E6  MOV       [EBP-10],EAX
   017F:011604E9  MOV       EBX,[EBP-10]   <-- OEP проги загоняется в EBX
   017F:011604EC  JMP       EBX            <-- Прыжок на реальную OEP
Смотрим значение регистра EBX, записывем его на бумажку (только учитываем что в регистре OEP записана вместе с ImageBase, т.е OEP=EBX-ImageBase или OEP=EBX-400000) На последней иструкции выполняете A JMP EIP и жмете F5. Все можно дампить.

Запускаем ProcDump (GREETZ to G-Rom) в опция ProcDump'а (кнопка Options) в поле Structure выбираем все опции, а в поле Import выбираем опцию Rebuild new import table. Жмем OK в списке процессов выбираем наш процесс делаем Dump (Full) нажав на правую кнопку мыши, сохраняем дапм на диск, например под именем dump.exe. Потом жмем в ProcDump'е кнопку PE Editor выбираем наш дамп и меняем Entry Point на ту которую мы подсмотрели в регистре EBX (уже без ImageBase) и жмем OK и все.

Переименовываем наш дамп в оригинальное имя проги и получаем прогу почти в первозданном виде.

Это все!

Copyright 2001 Kop //KMS//ex-TDS//UOFG

Greetz to KMS, UOFG and Personal to GoKs


<= Вернуться к статьям


Rambler's Top100