Как сказать, является ли двоичный файл скомпилированным GS или нет, и без символов?
Я хочу иметь возможность определить, скомпилирован бинарный файл GS или нет? /GS - проверка безопасности буфера с использованием куки. Я хочу быть в состоянии найти это без символов и в общей форме.
BinScope выдает мне следующее при попытке проверить GS: E_PDB_NO_DEBUG_INFO (PDB лишается информации о cv)
Любая идея?
2 ответа
Если у вас нет PDB, нет хорошего способа сделать это, кроме проверки двоичного кода и просмотра функций. Я думал, что можно проверить каталог loadconfig, в котором записано местоположение файла cookie безопасности, но это бесполезно. Даже если программа скомпилирована с /GS-, связанные функции CRT по-прежнему используют cookie:
>dumpbin /loadconfig test.exe
Microsoft (R) COFF/PE Dumper Version 10.00.40219.01
Copyright (C) Microsoft Corporation. All rights reserved.
Dump of file test.exe
File Type: EXECUTABLE IMAGE
Section contains the following load config:
00000048 size
0 time date stamp
0.00 Version
0 GlobalFlags Clear
0 GlobalFlags Set
0 Critical Section Default Timeout
0 Decommit Free Block Threshold
0 Decommit Total Free Threshold
00000000 Lock Prefix Table
0 Maximum Allocation Size
0 Virtual Memory Threshold
0 Process Heap Flags
0 Process Affinity Mask
0 CSD Version
0000 Reserved
00000000 Edit list
> 00408000 Security Cookie <
00407840 Safe Exception Handler Table
3 Safe Exception Handler Count
Safe Exception Handler Table
Address
--------
004025D0
00404200
00405160
Если ваш бинарный файл не имеет 'load config' (как, например, бинарные файлы windows mobile), я думаю, что все еще довольно легко распознать шаблон:
многие функции будут выглядеть так:
... [function entry]
.text:01005188 mov eax, ___security_cookie
.text:0100518D mov [ebp+var_1C], eax
... [function body]
.text:010057F6 mov ecx, [ebp+var_1C]
.text:010057F9 call sub_1007147
... [function exit]
тогда sub_1007147 выглядит так:
.text:01007147 cmp ecx, ___security_cookie
.text:0100714D jnz short loc_1007158
.text:0100714F test ecx, 0FFFF0000h
.text:01007155 jnz short loc_1007158
.text:01007157 retn
ссылка на cookie, который хранится вместе с обратным:
.data:01009600 dword_1009600 dd 0FFFF44BFh
.data:01009604 ___security_cookie dd 0BB40h
__security_cookie будет иметь много ссылок, в то время как предыдущий обратный имеет только несколько ссылок.
в списке инициализации будет функция инициализации куки с некоторым псевдослучайным значением.
поиск в двоичных файлах этих шаблонов должен дать вам представление о том, использовался ли /GS.