#############################################################################
# ini файл N-Rec 1.2
# здесь задаются файлы с таблицами переходов, типами переходов, количеством 
# наномитов а также дополнительные адреса для дизассемблера
#
# выходным файлом является .DIF файл, который можно применить к основному
# c помощью утилиты PT.EXE 
#
# программа работает в двух режимах - простое дизасемблирование кода начиная 
# от заданных точек входа и режим отладки защищенного файла. Каким режимом
# удобнее пользоваться - решать вам. Теоретически режим дизасма при 
# правильном задании точек входа способен пройти по всем веткам программы
# а в режиме отладки существует вероятность что какой-то код не будет 
# выполнен и соответственно переходы не восстановятся. Поэтому ...
#
# если возникают вопросы что за таблицы нужны и как их получить и как сделать
# дамп защищенной проги - сначала прочтите мануал от dragon (включен в архив)
# 
# для снятия дампа можно воспользоваться утилитой dumper.exe - находится в 
# каталоге dumper. Как ей пользоваться - читайте в ее readme.txt
#
# внимание: все числа в данном файле шестнадцатиричные
#
# в программе использовано ядро дизассемблера OllyDbg (C) 2001 Oleh Yuschuk
#
#############################################################################

#############################################################################
# обязательные параметры для обоих режимов работы
#############################################################################

# количество наномитов
NCNT	0885

# файл с таблицей адресов, по которым находятся байты 0CCh
CCAD	cc_addr.bin

# файл с таблицей типов команд переходов
JTYP	jmp_types.bin

# файл с таблицей размеров команд переходов
JSIZ	jmp_size.bin

# файл с таблицей адресов назначения переходов
# в последних армах он зашифрован, поэтому необходимо указать файл с ключами
JDST	jmp_dest.bin

# файл с ключами для расшифровки таблицы адресов назначения
# длина файла - 40h байт (до версии 3.40 алгоритм не менялся, если он 
# изменился то наобходимо вручную расшифровать файл JDST и 
# закомментировать параметр JDSK
# внимание: этот параметр должен быть после JDST иначе таблица 
# расшифрована не будет
JDSK	jmp_dest_keys.bin

# таблица соответствий кодов в файле JTYP реальным командам переходов
# например в данном случае код 4 соответствует команде JECXZ 
# а код 11 - команде JNS

#     jmp  jnp  jno  jo  jecxz jc   jle  jnc  jp   
JCD1   7    0    5   0b    4    8    0f   0d   10   

#      js   jz   jg   jl   jns  ja   jbe  jge  jnz
JCD2	6   1     e    c    11   3    2    a    9

# для создания таблицы JCDx я использовал следующий код в арме:
#
#.text1:0061099A loc_61099A:                             
#.text1:0061099A                 mov     [ebp-0Ch], eax
#.text1:0061099D                 cmp     dword ptr [ebp-0Ch], 11h
#.text1:006109A1                 ja      loc_610BDF
#.text1:006109A7                 mov     ecx, [ebp-0Ch]
#.text1:006109AA                 jmp     ds:off_610C0E[ecx*4]
#
#.text1:00610C0E off_610C0E      dd offset _00_jnp       
#.text1:00610C12                 dd offset _01_jz
#.text1:00610C16                 dd offset _02_jbe
#.text1:00610C1A                 dd offset _03_ja        
#.text1:00610C1E                 dd offset _04_jecxz
#.text1:00610C22                 dd offset _05_jno
#.text1:00610C26                 dd offset _06_js
#.text1:00610C2A                 dd offset _07_jmp
#.text1:00610C2E                 dd offset _08_jc
#.text1:00610C32                 dd offset _09_jnz
#.text1:00610C36                 dd offset _0A_jge
#.text1:00610C3A                 dd offset _0B_jo
#.text1:00610C3E                 dd offset _0C_jl
#.text1:00610C42                 dd offset _0D_jnc
#.text1:00610C46                 dd offset _0E_jg
#.text1:00610C4A                 dd offset _0F_jle
#.text1:00610C4E                 dd offset _10_jp
#.text1:00610C52                 dd offset _11_jns

#############################################################################
# следующие параметры являются необязательными и используются только для
# работы в режиме дизассемблера
#############################################################################


# программа не обрабатывает косвенные переходы и вызовы. Поэтому для 
# улучшения качества восстановления переходов рекомендуется задать 
# дополнительные стартовые адреса для дизассемблирования. Адреса можно
# задать двумя способами - непосредственно и указанием таблицы указателей
# на функции. Рекомендуется сразу указывать таблицы __cinit для VC и 
# дельфовые/билдеровские таблицы инициализации

# пример задания таблицы смещений:
# тут 5d4000 это адрес начала таблицы, а 5d4470 адрес конца таблицы
OTBL	005d4000	005D4470

# сама таблица из это примера выглядит так:
#.data:005D4000 begin_tbl_2     dd 0              ; DATA XREF: __cinit+1Fo
#.data:005D4004                 dd offset sub_56C313
#.data:005D4008                 dd offset sub_56C587
#.data:005D400C                 dd offset sub_56C5C7
#.data:005D4010                 dd offset sub_56C7A3
# ...
# и так далее. нулевые элементы таблицы будут автоматически пропущены
# однако если вместо кода таблица будет содержать адреса данных то 
# дизассемблер может навосстанавливать такого ...

# пример задания непосредственного адреса для дизассемблера
ADDR	0046E540
ADDR	0041a630

# новое в версии 1.2 - режим полного дизассемблирования выбранного блока
# адресов. Имеет смысл для VC/MFC-шных прог, у которых куча обработчиков,
# которые вызываются косвенно и стандартный режим дизасма их не находит,
# и задать все таблицы через OTBL тоже нереально. Блок задается командой
# CSEG beg_addr end_addr. В процессе обработки кода N-Rec пропускает
# выравнивания кода после команд ret (пока только иструкциями NOP и INT3).
CSEG	00401000	0043B3D5

# несколько советов:
# - добавьте основные таблицы инициализации через OTBL (если они есть 
#   конечно) и запустите N-Rec в режиме дизассемблера
# - после того как он отработает примените полученный файл .DIF и запустите
#   приложение. Если оно падает на INT3 exception то можно посмотреть 
#   в IDA начало процедуры в которой прога падает, добавить этот адрес
#   в ini файл и еще раз прогнать через N-Rec
# - также, особенно если процедуру найти сложно можно использовать режим
#   отладки.
# - в итоге после нескольких прогонов вы получите полностью работоспособное
#   приложение.
# - в случае программ где код идет цельным куском без данных не забывайте
#   использовать команду CSEG 

# эта версия N-Rec находится в процессе разработки. Если у кого-нибудб будут
# пожелания, идеи об ее улучшении - пишите мне на e-mail infern0@tiraet.com 
# или по icq: 23485245
#
# АВТОР НЕ НЕСЁТ НИКАКОЙ ОТВЕТСТВЕННОСТИ ЗА ПРОТИВОЗАКОННОЕ ИСПОЛЬЗОВАНИЕ 
# ДАННОЙ ПРОГРАММЫ. 
#
# (c) 2003 infern0 / TSRh team
# 
# ps: thanks to dragon
#

