Все библиотеки новекса используют специфический скремблинг кода - разбавление инструкций командами перехода. Этот прием используется во всех библиотеках API. Дополнительным признаком наличия библиотеки API является строки "\\.\NVKEYNT" и "\\.\NVKEY95.VXD" в теле программы. Если программа защищена конвертом новекса то в начале последней секции должна присутствовать строка "SAAT". Методика снятия конверта тут не рассматривается и дальше предполагается что конверт либо не используется либо уже снят. Если после загрузки программы в IDA и окончания анализа вы видете область кода с хаотическими переходами и есть строки-признаки то скорее всего это гвардант АПИ. Для быстрого определения функция АПИ предлагается следующий метод - нужно определить начало и конец области с мусорными переходами (это достаточно легко, в конце обычно идет серия последовательных переходов в количестве 5-6 штук) и пометить ее как unexplored (выделить удерживая shift и нажать "U").
Теперь нужно выполнить поиск точек входа в эту область. Ида помечает их текстовыми строками "CODE XREF:" - именно эти строки и следует искать (ctrl-t). Определив все вхождения в АПИ нужно идентифицировать какие именно функции вызываются. Для этого нужно по порядку просматривать код в каждой точке входа и сравнивать с масками приведенными ниже. Маски не учитывают команды перехода, предполагается что их надо пропускать вручную в процессе анализа. Метод работает потому что все функции апи отличаются уже на 3-й - 4-й инструкции. После переименования всех точек входа в АПИ можно приступать к анализу программы. Здесь это тоже не рассматривается, статья на эту тему думаю появится несколько позже.
Перечень начальных команд для функций гвардант АПИ:
nskCRC/nnkCRC:
push ebp
mov ebp, esp
push 0
push 0dh
...
nskCheck/nnkCheck:
push ebp
mov ebp, esp
push dword [ebp+8]
push 0
call ...
...
nskCodeInit/nnkCodeInit:
push ebp
mov ebp, esp
push dword [ebp+8]
push 8
call ...
...
nskDecode/nnkDecode:
push ebp
mov ebp, esp
push 0
push 0ah
...
nskDecGP:
push ebp
mov ebp, esp
push dword [ebp+8]
push 0bh
call ...
push ebp
...
nskEncode/nnkEncode:
push ebp
mov ebp, esp
push 0
push 9
...
nskFindFirst:
push ebp
mov ebp, esp
push ebx ecx edx esi edi ds es
xor eax, eax
mov ecx, 40h
...
nskFindNext:
push ebp
mov ebp, esp
push ebx ecx edx esi edi ds es
cmp [...], 40h
...
nskProtect/nnkProtect/nnkProtectLMS:
push ebp
mov ebp, esp
push dword [ebp+8]
push 6
...
nskInit/nnkInit:
push ebp
mov ebp, esp
push dword [ebp+8]
push 5
...
nskRead/nnkRead:
push ebp
mov ebp, esp
push dword [ebp+8]
push 0bh
call ...
mov al, [eb[+12h]
...
nskSetMode/nnkSetMode:
push ebp
mov ebp, esp
mov eax, [ebp+8]
mov [...], eax
mov al, [ebp+12h]
...
nskTransform/nnkTransform:
push ebp
mov ebp, esp
push dword [ebp+8]
push 2
call ...
...
nskWrite/nnkWrite:
push ebp
mov ebp, esp
push dword [ebp+8]
push 0ch
call ...
...
nnkLogout:
push ebp
mov ebp, esp
push dword [ebp+8]
push 41h
...
nnkLogin/nnkLoginLMS:
push ebp
mov ebp, esp
push dword [ebp+8]
push 40h
...
nnkLockEnd:
push ebp
mov ebp, esp
push dword [ebp+8]
push 43h
...
nnkLockBeg:
push ebp
mov ebp, esp
push dword [ebp+8]
push 42h
call ...
push offset ...
...
nnkDecGP:
push ebp
mov ebp, esp
push dword [ebp+8]
push 42h
call ...
push ebp
...
Описание функций, библиотеки АПИ и примеры работы с ним можно скачать по адресу http://www.guardant.ru/mk В этом СДК не хватает только файла setup.exe, найти который несложно.
29-08-2004
infern0 / TSRh team