从转储文件中删除个人数据

逆向工程 风袋
2021-06-26 11:15:09

我想在网上发布一个崩溃转储,供其他人从转储中学习。通常我会转储,.dump /ma这很好。

但是,我有点担心转储中包含的个人数据,我想将其删除。WinDbg 帮助文件指定了rR标志。

R (这部分对我来说很清楚):

从小型转储中删除完整的模块路径。仅包含模块名称。如果您想保护用户目录结构的隐私,这是一个有用的选项。

r(我不完全理解这如何保护其他应用程序的隐私):

从小型转储中删除堆栈的那些部分并存储对重新创建堆栈跟踪无用的内存。局部变量和其他数据类型值也被删除。此选项不会使 minidump 变小(因为这些内存部分只是被清零),但如果您想保护其他应用程序的隐私,它很有用。

我应该使用哪些选项来重新转储以获得没有个人信息的转储?还有其他开关我应该激活吗?

假设:

  • 这是一个用户模式转储
  • 应用程序本身不存储任何敏感数据,因此提供完整内存基本上是可以的。

更新

我对删除进程环境块特别感兴趣,这样!peb就不会显示所有系统信息。

2个回答

不要使用a in /maa 表示所有信息都被转储

用于包含 peb 使用 /p

a basic dump without pdb will be created by

C:\>cdb -c ".dump /mrR /u c:\foo.dmp;q" calc

0:000> cdb: Reading initial command '.dump /mrR /u c:\foo.dmp;q'
Creating c:\foo_0c84_2014-03-21_03-03-38-328_06fc.dmp - mini user dump
Dump successfully written
quit:

C:\>cdb -z foo_0bd8_2014-03-21_03-02-11-359_0548.dmp

7c90120e cc              int     3

0:000> !peb
PEB NULL...

0:000> q
quit:

C:\>

似乎以下对我有用。首先,假设我有一个完整的小型转储,不一定是由 WinDbg 创建的,而是由 ProcDump、任务管理器或进程资源管理器创建的。在任何情况下,它都相当于

.dump /ma <dumpname>

要删除个人数据,我首先擦除 PEB:

0:000> ? @$peb
Evaluate expression: 2130567168 = 7efde000

0:000> ?? sizeof(nt!_PEB)
unsigned int 0x248

0:000> f 7efde000 L248 0; *** Fill PEB with zeros

此操作后!peb不再有用:

0:000> !peb
PEB at 7efde000
    InheritedAddressSpace:    No
    ReadImageFileExecOptions: No
    BeingDebugged:            No
    ImageBaseAddress:         00000000
    Ldr                       00000000
    *** unable to read Ldr table at 00000000
    SubSystemData:     00000000
    ProcessHeap:       00000000
    ProcessParameters: 00000000
    *** unable to read process parameters

接下来,使用randR开关写入空的 PEB 并删除模块目录名称

0:000> .dump /marR <dumpname>

在该转储上使用SysInternals 字符串不会显示我用于测试的转储中的任何关键信息。