2014-11-06 63 views
0

我有一个Windows引导程序应用程序,我编译自己(深入它使用C#和WPF),但我必须使用编程它的框架不让我改变一个特定的当它安装MSI软件包时,它存储在Windows注册表中的GUID(它迫使我使用XML编程引导程序,并且不会将此GUID作为XML可修改的属性公开),并且我知道此GUID采用特定的,编码值。无论何时我重新编译引导程序可执行文件,此值都会更改。我希望能够在生成后脚本中修改此GUID以保持它不变。如何找到已编译的Windows可执行文件的十六进制GUID

我的问题是这样的,是否有可能从十六进制转储中找到该GUID的位置?我搜查了我的十六进制转储的可执行文件,试图从GUID转换为十六进制,或从GUID字符串转换为ASCII或十六进制等,我尝试使用ILDASM更好地掌握事物,但这并没有帮助。我不知道一个GUID是如何存储在一个编译的可执行文件中的...有没有人有过这方面的成功?如果是这样,GUID是如何存储的以及您需要做些什么来访问它?

它现在安装在注册表中的GUID是{E66D1133-9A23-4E07-8DB1-0A3A4A7F7B35}

+0

@AJHenderson **您将MSI GUID与我的引导程序注册GUID混淆。**对于我所说的GUID的更改将不会破坏任何内容。相信我,我一直在做安装程序很长一段时间。 – Alexandru 2014-11-06 15:02:32

+1

够公平的,但仍然没有看到有关此安全相关的任何事情。即使您为了某种安全目的而需要它是相同的,这也属于技术实现方法,这些方法通常不是主题,而是与实现方法最相关的网站(即本例中的StackOverflow) – 2014-11-06 15:05:11

+0

@AJHenderson那么,我的想法是,它也不是一个编程问题。我不是在寻找代码,而是寻找解释。我认为最好的地方是'security.stackexchange.com' ...我希望人们能够理解Windows中编译器的低级工作方式以及它们如何存储数据。这很容易成为一个安全问题,例如,“如何在应用程序中掩盖GUID以便某人无法从十六进制转储中找到它们?”为此你需要知道如何首先找到它们。就像生活中的任何事情一样,如果不知道如何首先衡量它,你就无法做得更好。 – Alexandru 2014-11-06 15:12:39

回答

0

我相信你有一个WiX引导程序。如果是这样,我们假设它被命名为Wix39.exe并位于当前目录中。

"%WIX%\bin\dark" Wix39.exe -x "%TEMP%\dark.tmp" &&^
find "WixBundleProperties" "%TEMP%\dark.tmp\UX\BootstrapperApplicationData.xml" &^
rmdir /s/q "%TEMP%\dark.tmp" 

您正在寻找WixBundleProperties/@ Id。

+0

Tom在对BootstrapperApplicationData.xml进行更改后,如何重新编译新设置,或将更改追加到现有的可执行文件中? – Alexandru 2014-11-07 14:29:42

+1

我不认为目前的工具支持。您应该着眼于创建刻录的自定义版本;可能会失败[RegistrationDetectInstalled](https://github.com/wixtoolset/wix3/blob/develop/src/burn/engine/registration.cpp)。 – 2014-11-07 18:02:04

+0

我试图摆脱定制刻录工具,因为那样我就不得不在每次更新时编译相同的定制。 :(另外,弄清楚如何从可执行文件的转储中修改GUID将会很酷。 – Alexandru 2014-11-07 18:53:17