Debugging 如何判断二进制文件是否经过GS编译,并且没有符号?
我想确定二进制文件是否经过GS编译/GS是缓冲区安全检查,使用cookie。我希望能够找到这个没有符号,在一个通用的方式 BinScope在尝试检查GS时提供以下信息: E_PDB_否_调试_信息(PDB已去除cv信息)Debugging 如何判断二进制文件是否经过GS编译,并且没有符号?,debugging,compiler-construction,compilation,reverse-engineering,reverse,Debugging,Compiler Construction,Compilation,Reverse Engineering,Reverse,我想确定二进制文件是否经过GS编译/GS是缓冲区安全检查,使用cookie。我希望能够找到这个没有符号,在一个通用的方式 BinScope在尝试检查GS时提供以下信息: E_PDB_否_调试_信息(PDB已去除cv信息) 有什么想法吗?如果你没有PDB,除了检查二进制文件和查看函数之外,没有什么好办法。我原以为可以检查记录安全cookie位置的loadconfig目录,但这不好。即使程序是用/GS-编译的,链接的CRT函数仍然使用cookie: >dumpbin /loadconfig t
有什么想法吗?如果你没有PDB,除了检查二进制文件和查看函数之外,没有什么好办法。我原以为可以检查记录安全cookie位置的loadconfig目录,但这不好。即使程序是用/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
>dumpbin/loadconfig test.exe
Microsoft(R)COFF/PE转储程序版本10.00.40219.01
版权所有(C)微软公司。版权所有。
文件test.exe的转储
文件类型:可执行映像
节包含以下加载配置:
00000048大小
0时间日期戳
0.00版本
0个全局滞后清除
0全局滞后集
0关键部分默认超时
0无干扰块阈值
0解除承诺总可用阈值
00000000锁前缀表
0最大分配大小
0虚拟内存阈值
0进程堆标志
0进程关联掩码
0 CSD版本
0000保留
00000000编辑列表
>00408000安全Cookie<
00407840安全异常处理程序表
3安全异常处理程序计数
安全异常处理程序表
地址
--------
004025D0
00404200
00405160
如果您没有PDB,那么除了检查二进制文件和查看函数之外,没有什么好办法。我原以为可以检查记录安全cookie位置的loadconfig目录,但这不好。即使程序是用/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
>dumpbin/loadconfig test.exe
Microsoft(R)COFF/PE转储程序版本10.00.40219.01
版权所有(C)微软公司。版权所有。
文件test.exe的转储
文件类型:可执行映像
节包含以下加载配置:
00000048大小
0时间日期戳
0.00版本
0个全局滞后清除
0全局滞后集
0关键部分默认超时
0无干扰块阈值
0解除承诺总可用阈值
00000000锁前缀表
0最大分配大小
0虚拟内存阈值
0进程堆标志
0进程关联掩码
0 CSD版本
0000保留
00000000编辑列表
>00408000安全Cookie<
00407840安全异常处理程序表
3安全异常处理程序计数
安全异常处理程序表
地址
--------
004025D0
00404200
00405160
如果二进制文件没有“加载配置”(例如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]
.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
然后sub_1007147如下所示:
... [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]
.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
_u_security_cookie将有很多引用,而前面的逆函数只有很少的引用
在init列表中,将有一个函数用一些伪随机值初始化cookie
如果二进制文件没有“加载配置”(例如windows mobile二进制文件),则通过搜索二进制文件中的这些模式可以了解是否使用了/GS。 我认为仍然很容易识别出这种模式: 许多函数如下所示:
... [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]
.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
然后sub_1007147如下所示:
... [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]
.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
_u_security_cookie将有很多引用,而前面的逆函数只有很少的引用
在init列表中,将有一个函数用一些伪随机值初始化cookie
在二进制文件中搜索这些模式会让您知道是否使用了/GS