Быстрая идентификация функций Guardant API в приложении

Все библиотеки новекса используют специфический скремблинг кода - разбавление инструкций командами перехода. Этот прием используется во всех библиотеках 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