我想在Internet上发布故障转储,以便其他人从转储中学习。通常我会使用.dump /ma进行转储,这很好。

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

R(这对我来说很清楚):仅包含模块名称。如果要保护用户目录结构的隐私,这是一个有用的选项。


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


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


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



这是用户模式转储
应用程序本身不存储任何敏感数据,因此,基本上可以提供全部内存。 />

评论

想到的一件事是,如果您的应用程序彼此通信,则有可能泄漏用户转储中的隐私信息。您可以让应用程序A从应用程序B接收消息,然后堆栈将包含应用程序B的消息数据。

在普通VM内生成转储不是一种选择,这样就不可能包含任何个人数据了吗?

#1 楼

请勿使用a in /ma a意味着将所有信息都转储

要包含的小便,请使用

评论


在许多情况下,我需要的内存比仅/ m还要多,所以我使用/ ma。也许我可以将其简化为/ mwdic,但是通常我不讨论开关的细节。实际上,除了PEB之外,我的内存还不错。但是即使在/ mwdic中,PEB也包含在内。

–托马斯·韦勒(Thomas Weller)
2014年3月20日在22:41

d和c不会将peb放进去,因为它们与可执行图像数据和代码w有关,我将添加解析为peb的内存范围,并且如果dump range中有内存范围,peb命令将起作用

– blabb
2014-03-20 23:27



#2 楼

看来以下对我有用。首先,假设我有一个完整的小型转储,不一定由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不再有用: br />
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


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

评论


是的,应该工作,您可以在一行中使用此表达式创建转储,因此f @ $ peb L?@@ c ++(sizeof(ntdll!_peb))0; .dump / marR / u c:\ foo.dmp,但是iirc仍然会在时间戳记中保留您的utc(可能还有区域名称:)

– blabb
2014年3月21日在8:38



但是像这样擦除peb将会使转储损坏,并且不会使windbg读取转储,因为它依赖于某些指示是否存在peb的标志

– blabb
2014年3月21日在8:46