Vb.net 是否可以更改已编译exe中的硬编码字符串?

Vb.net 是否可以更改已编译exe中的硬编码字符串?,vb.net,Vb.net,假设你的应用程序中有一些带有硬编码字符串的代码 If somevalue = "test123" Then End If 编译应用程序后,是否有人可以修改.exe文件并将“test123”更改为其他文件?如果是这样的话,它是否只在字符串包含相同数量的字符时才起作用?这是可能的,但不一定简单。例如,如果字符串加载到内存中,则有人可以使用内存管理器工具直接修改字符串地址的值 或者,他们可以反编译您的应用程序,更改字符串,然后重新编译它以使用新字符串创建新程序集。然而,这种情况是否可能发生取决于你

假设你的应用程序中有一些带有硬编码字符串的代码

If somevalue = "test123" Then

End If

编译应用程序后,是否有人可以修改.exe文件并将“test123”更改为其他文件?如果是这样的话,它是否只在字符串包含相同数量的字符时才起作用?

这是可能的,但不一定简单。例如,如果字符串加载到内存中,则有人可以使用内存管理器工具直接修改字符串地址的值

或者,他们可以反编译您的应用程序,更改字符串,然后重新编译它以使用新字符串创建新程序集。然而,这种情况是否可能发生取决于你的应用程序以及改变字符串的重要性


您可以使用模糊处理程序使其变得更难,但最终,坚定的破解者将能够做到这一点。问题是,这个字符串是否足够重要,如果是的话,可以考虑一种替代方法,例如使用Web服务来提供字符串。p> 通过在任何十六进制编辑器中打开已编译的可执行文件,可以很容易地在已编译的可执行文件中找到没有任何模糊技术的硬编码字符串。一旦找到,可以通过两种方式替换字符串:

1.简易方法(*适用条件) 如果以下条件适用于您的情况,这是修改可执行二进制文件中硬编码字符串的一种非常快速的方法


  • length(新字符串)你遇到过什么情况,问过这样的问题吗?可以而且已经做到了。我通过互联网销售一个小程序。我创建的唯一版本是硬编码的英文文本。这对中国用户来说可能是个问题,因为几年后我在互联网上发现了我的程序的中文版本。由于他们只能访问可执行文件,因此必须更改.EXE文件中的文本。只需使用ildasm.EXE反编译程序,修改字符串,将其与ilasm.EXE放回一起即可。不到一分钟。修改.net程序集很容易。但是,使用模糊处理、字符串加密以及在某种程度上使用ngen将图像转换为本机图像会变得更加困难。代码签名不会阻止人们更改字符串,但至少会阻止人们修改应用程序并将其作为原始应用程序发布。最终,如果有人被确定,您无法阻止他们修改您的程序集。我之所以感兴趣,是因为我连接到了一个安全的web服务,并且我希望确保正在使用的证书是应用程序期望的证书(例如,不是fiddler根证书)。我有硬编码字符串来检查CheckValidationResult中的证书id,我应该怎么做?HTTPS的一部分(我假设您使用的是HTTPS,否则您应该使用HTTPS)是为了确保证书来自拥有它的站点。任何可以修改您的字符串的人都可以修改您的
    CheckValidationResult
    以始终返回true。我正在使用https。那我该怎么处理呢?你应该如何阻止人们在应用程序之外调用你的Web服务功能呢?不太容易。问题是,客户端的任何安全措施最终都可能被人查看和欺骗。例如,如果您有一个发送到web服务的密钥(使用HTTPS进行加密),则仍有人可以反编译您的应用程序,并查看该密钥是如何生成的。