Debugging 如何判断二进制文件是否经过GS编译,并且没有符号?

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

我想确定二进制文件是否经过GS编译/GS是缓冲区安全检查,使用cookie。我希望能够找到这个没有符号,在一个通用的方式

BinScope在尝试检查GS时提供以下信息: E_PDB_否_调试_信息(PDB已去除cv信息)


有什么想法吗?

如果你没有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