为何用UltraEdit修改了强签名的DLL后,先前的程序还可以正常调用?

randb 2010-02-24 11:31:55
最近在学习强签名,遇到以下疑问:

我做一个简单的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

不是说经过强签名的程序集是可以防篡改的么?以上的事实哪里证明可以防了?

请各位指教!
...全文
446 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
founderfang 2010-02-28
  • 打赏
  • 举报
回复
引用 8 楼 leafold 的回复:
你能用这个assembly是因为,你没有核对签名。
打个比方,你买了个带防伪标识的iphone,只是这个防伪标识无法到apple那里确认(奸商自己贴的),但这个iphone的一般功能还是能用的,只有那些需要身份验证的功能不能用。

同意,好象.NET可以设置必须核对签名。
li45214521 2010-02-28
  • 打赏
  • 举报
回复
你可以看到C:\Windows\assembly
文件夹中的程序集,里面有同名称程序集,不同版本的程序集
这里就是强命名程序集 强命名程序集也就是为了安装到这个文件夹中
li45214521 2010-02-28
  • 打赏
  • 举报
回复
强命名好像是与程序版本有关的,防止相同名称的程序集,不同版本程序集在系统文件夹可以放在一起而使用的吧
twistmost 2010-02-27
  • 打赏
  • 举报
回复
LZ需要的功能应该是通过Authenticode实现。对于.net assembly,须要先进性StrongName Sign,然后Authenticode Sign。

Authenticode参考:http://msdn.microsoft.com/en-us/library/ms537364(VS.85).aspx
CGabriel 2010-02-26
  • 打赏
  • 举报
回复
引用楼主 randb 的回复:
最近在学习强签名,遇到以下疑问:

我做一个简单的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

不是说经过强签名的程序集是可以防篡改的么?以上的事实哪里证明可以防了?

请各位指教!


用 UltraEdit 直接打开一个 .dll 文件,见到的就是一堆二进制

请问你是这么找到字符串 SSSSSSSSSSS 的?
randb 2010-02-26
  • 打赏
  • 举报
回复
引用 11 楼 cgabriel 的回复:
引用楼主 randb 的回复:最近在学习强签名,遇到以下疑问: 我做一个简单的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 不是说经过强签名的程序集是可以防篡改的么?以上的事实哪里证明可以防了? 请各位指教!

用 UltraEdit 直接打开一个 .dll 文件,见到的就是一堆二进制

请问你是这么找到字符串 SSSSSSSSSSS 的?


UTLTRAEDIT 右边可以显示一些字符串的啊,你没用过?我在里面找了,就一处有SSSSSSSSSS
leafold 2010-02-26
  • 打赏
  • 举报
回复
单个assembly没法防止篡改,多个强签名的assembly,在主调单元中检查签名。
randb 2010-02-25
  • 打赏
  • 举报
回复
还是不明白呀。。倒底强签名怎样做才能完全地将DLL防篡改?
leafold 2010-02-25
  • 打赏
  • 举报
回复
你能用这个assembly是因为,你没有核对签名。
打个比方,你买了个带防伪标识的iphone,只是这个防伪标识无法到apple那里确认(奸商自己贴的),但这个iphone的一般功能还是能用的,只有那些需要身份验证的功能不能用。
randb 2010-02-25
  • 打赏
  • 举报
回复
TO Dobzhansky,不好意思,我看错了,我以为你说我这是在证明可以防篡改。
没错,我的确证明了强签名不能防篡改,哈哈。。。
randb 2010-02-25
  • 打赏
  • 举报
回复
to 楼上,哪里证明到了?我改了里面的字符串,它还可以被调用啊。。
Dobzhansky 2010-02-25
  • 打赏
  • 举报
回复
你证明了强签名的程序集是不可以防篡改的.

randb 2010-02-25
  • 打赏
  • 举报
回复
谢谢楼上两位。不过你们似乎没有解答我的问题啊。。
leafold 2010-02-25
  • 打赏
  • 举报
回复
同意楼上。
单个assembly强“签名”就是给一个标志用于识别,是否通过权威机构公钥体系认证就要看看应用而言了。多个assembly强签名,可以检查体系内部是否倍更改。
qqzeng-ip 2010-02-25
  • 打赏
  • 举报
回复
强签名就是唯一标识一个Assembly文件的名称。它由Assembly的文件名、版本号、区域信息、公钥信息和处理器架构信息组成
张三先将自己的身份和公钥注册在权威机构里面。
张三发送代码给用户。
用户去权威机构去查询张三的身份是否和他声明的相符。
黑客发送代码给用户。
用户去权威机构查处代码声明的身份和它实际的身份不符。因此就可以采取保护措施。
randb 2010-02-25
  • 打赏
  • 举报
回复
自己先支持一下吧~~

17,740

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET Framework
社区管理员
  • .NET Framework社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧