为何用UltraEdit修改了强签名的DLL后,先前的程序还可以正常调用?
最近在学习强签名,遇到以下疑问:我做一个简单的DLL,将它强签名。强签名的DLL主代码如下:
using System;
namespace NET.SN
{
public class Compile
{
public int I = 9;
public string S = "SSSSSSSSSSS";
public override string ToString()
{
return I.ToString() + "_" + S;
}
}
}
我将此DLL强签名,然后在控制台程序ConsoleApp1中引用该DLL,编译,运行正常。
然后我用UltraEdit打开所引用的强签名的DLL,找到字符串SSSSSSSSSSS的位置,手动改成了SSSSSSSSSSA,保存,然后再运行ConsoleApp1,居然正常运行!打印出来的是SSSSSSSSSSA
不是说经过强签名的程序集是可以防篡改的么?以上的事实哪里证明可以防了?
请各位指教! --------------------编程问答-------------------- 自己先支持一下吧~~ --------------------编程问答-------------------- 强签名就是唯一标识一个Assembly文件的名称。它由Assembly的文件名、版本号、区域信息、公钥信息和处理器架构信息组成
张三先将自己的身份和公钥注册在权威机构里面。
张三发送代码给用户。
用户去权威机构去查询张三的身份是否和他声明的相符。
黑客发送代码给用户。
用户去权威机构查处代码声明的身份和它实际的身份不符。因此就可以采取保护措施。
--------------------编程问答-------------------- 同意楼上。
单个assembly强“签名”就是给一个标志用于识别,是否通过权威机构公钥体系认证就要看看应用而言了。多个assembly强签名,可以检查体系内部是否倍更改。 --------------------编程问答-------------------- 谢谢楼上两位。不过你们似乎没有解答我的问题啊。。 --------------------编程问答-------------------- 你证明了强签名的程序集是不可以防篡改的.
--------------------编程问答-------------------- to 楼上,哪里证明到了?我改了里面的字符串,它还可以被调用啊。。 --------------------编程问答-------------------- TO Dobzhansky,不好意思,我看错了,我以为你说我这是在证明可以防篡改。
没错,我的确证明了强签名不能防篡改,哈哈。。。 --------------------编程问答-------------------- 你能用这个assembly是因为,你没有核对签名。
打个比方,你买了个带防伪标识的iphone,只是这个防伪标识无法到apple那里确认(奸商自己贴的),但这个iphone的一般功能还是能用的,只有那些需要身份验证的功能不能用。 --------------------编程问答-------------------- 还是不明白呀。。倒底强签名怎样做才能完全地将DLL防篡改? --------------------编程问答-------------------- 单个assembly没法防止篡改,多个强签名的assembly,在主调单元中检查签名。 --------------------编程问答--------------------
用 UltraEdit 直接打开一个 .dll 文件,见到的就是一堆二进制
请问你是这么找到字符串 SSSSSSSSSSS 的? --------------------编程问答--------------------
UTLTRAEDIT 右边可以显示一些字符串的啊,你没用过?我在里面找了,就一处有SSSSSSSSSS --------------------编程问答-------------------- LZ需要的功能应该是通过Authenticode实现。对于.net assembly,须要先进性StrongName Sign,然后Authenticode Sign。
Authenticode参考:http://msdn.microsoft.com/en-us/library/ms537364(VS.85).aspx --------------------编程问答--------------------
同意,好象.NET可以设置必须核对签名。 --------------------编程问答-------------------- 强命名好像是与程序版本有关的,防止相同名称的程序集,不同版本程序集在系统文件夹可以放在一起而使用的吧 --------------------编程问答-------------------- 你可以看到C:\Windows\assembly
文件夹中的程序集,里面有同名称程序集,不同版本的程序集
这里就是强命名程序集 强命名程序集也就是为了安装到这个文件夹中
补充:.NET技术 , .NET Framework