社区
C#
帖子详情
c# 加解密DLL的问题
cm200
2009-03-03 02:42:45
我在使用别人的DLL的时候发现不让我调用,原来他的DLL进行了加密保护,现在我在做东西的时候也需要对DLL进行加解密操作,不让别人随意的调用,请问高手 有什么好的解决方案吗?或是有例子可以提供给我参考下吗??谢谢
...全文
583
61
打赏
收藏
c# 加解密DLL的问题
我在使用别人的DLL的时候发现不让我调用,原来他的DLL进行了加密保护,现在我在做东西的时候也需要对DLL进行加解密操作,不让别人随意的调用,请问高手 有什么好的解决方案吗?或是有例子可以提供给我参考下吗??谢谢
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
61 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
品铭工作室
2009-03-03
打赏
举报
回复
[Quote=引用 26 楼 cm200 的回复:]
我看了一个网页 但没明白有什么用 http://www.knowsky.com/339499.html
[/Quote]
这也看不懂,那就没有办法了, 用这种方法只能可以做到编译不通过,但用反编译工具还是可以看到代码的,在这个基础上用上代码混淆器的话再对其密钥加密处理就可以达到目的了
悔说话的哑巴
2009-03-03
打赏
举报
回复
受教了!
Lacsky
2009-03-03
打赏
举报
回复
up
ding5818360
2009-03-03
打赏
举报
回复
受教了!
accpyy
2009-03-03
打赏
举报
回复
关注 学习
cm200
2009-03-03
打赏
举报
回复
放心吧 分肯定汇给你的 谢谢了 呵呵!
beargo
2009-03-03
打赏
举报
回复
private byte[] 加密()
{ 这里是取两随机值先异或随机值num[0]再递增异域再异域随机值num[1].
byte[] data = File.ReadAllBytes("data.dll");
Random r = new Random();
byte[] num = new byte[2];
r.NextBytes(num);
byte[] result = new byte[data.Length + 2];
result[0] = num[0];
for (int i = 0; i < data.Length; i++)
{
result[i + 1] = (byte)(((byte)(data[i] ^ num[0]) ^ (byte)(i % 255)) ^ num[1]);
}
result[result.Length - 1] = num[1];
return result;
}
private byte[] 解密()
{ //按上面的异域先后倒过来再一异或一次就是解密,异或两次是等于本身也即还原,这就是异或加密的特点.
byte[] data = File.ReadAllBytes("data.dll");
byte e = data[data.Length - 1];
byte b = data[0];
byte[] result = new byte[data.Length - 2];
for (int i = 1; i < data.Length - 1; i++)
{
result[i - 1] = (byte)((byte)((byte)(data[i] ^ e) ^ (byte)((i - 1) % 255)) ^ b);
}
return result;
}
Thread th = new Thread(delegate() //这里是反射调用的.
{
Assembly ass = Assembly.Load(解密());
ass.EntryPoint.Invoke(null, null); //调用不带参数的主方法体.
});
th.SetApartmentState(ApartmentState.STA);
th.Start();
再要我写什么我也不懂怎么写了,这里写出来完全是一种思路和做法,加密解密得用自己的方法.公开出来了就等于没用了.呵呵.
cm200
2009-03-03
打赏
举报
回复
很强大,能稍微给点注释吗??分一定会给你的,非常感谢!
beargo
2009-03-03
打赏
举报
回复
至于带参数不带参数的那些你再看看反射教程吧,这个做到这个地步也差不多了.这分也值得我领了吧~~嘻嘻~~
beargo
2009-03-03
打赏
举报
回复
Thread th = new Thread(delegate()
{
byte[] testfile = Test1.Properties.Resources.Test;
Assembly ass = Assembly.Load(解密());
ass.EntryPoint.Invoke(null, null);
});
th.SetApartmentState(ApartmentState.STA);
th.Start();
beargo
2009-03-03
打赏
举报
回复
private byte[] 加密()
{
byte[] data = File.ReadAllBytes("data.dll");
Random r = new Random();
byte[] num = new byte[2];
r.NextBytes(num);
byte[] result = new byte[data.Length + 2];
result[0] = num[0];
for (int i = 0; i < data.Length; i++)
{
result[i + 1] = (byte)(((byte)(data[i] ^ num[0]) ^ (byte)(i % 255)) ^ num[1]);
}
result[result.Length - 1] = num[1];
return result;
}
private byte[] 解密()
{
byte[] data = File.ReadAllBytes("data.dll");
byte e = data[data.Length - 1];
byte b = data[0];
byte[] result = new byte[data.Length - 2];
for (int i = 1; i < data.Length - 1; i++)
{
result[i - 1] = (byte)((byte)((byte)(data[i] ^ e) ^ (byte)((i - 1) % 255)) ^ b);
}
return result;
}
cm200
2009-03-03
打赏
举报
回复
qinggeer 我就是这么做的可是没有用啊
qinggeer
2009-03-03
打赏
举报
回复
http://www.cnblogs.com/easydata/archive/2007/10/28/940415.html
楼主看看这个,可能有用吧? 记得C#中不是有个强名称,(Strong Name Utility,即SN.exe,.NET SDK自带)产生的密钥来加密
beargo
2009-03-03
打赏
举报
回复
性能就看它反射了~~至于解密的仅是第一次启动时解密,这个问题应该不大吧~
cm200
2009-03-03
打赏
举报
回复
ZM27080401 看了你上面的 我有了一个test.snk 在被调用的类中写了 [StrongNameIdentityPermissionAttribute(SecurityAction.LinkDemand,PublicKey =
"0024000004800000940000000602000000240000525341310004000001000100251d8ae0ee656e"+
"bcd95a60b92880549d1b711f5849e15ee194c82e7495a92bfdb0f9afc095581ffd5b8d5e078368"+
"40c845fdf8f8a61e5dfc9cb3d923e8dbdf0018e86433c4c5098186f84de0f40d6e47d1b7e310a3"+
"876afa7f0faeb0d2c7709deea12cf24bb19872bd03d02fdb6345e591fb7ee536b619b0c674891b"+
"43de20c7")]
并在AssemblyInfo.cs中加上了[assembly: AssemblyKeyFile(@"C:\test.snk")]
但是在我的调用的地方任然能够调用里面的方法
怎么回事啊 ?谢谢
beargo
2009-03-03
打赏
举报
回复
对是异或.打错字了~
y9313
2009-03-03
打赏
举报
回复
beargo
你说的是异或吧?
这样在调用的时候的性能会不会损失很多?
cm200
2009-03-03
打赏
举报
回复
道理全明白了,,但现在我的水平可能还真不能吧你上面讲的变成代码写出来呢
ZM27080401
2009-03-03
打赏
举报
回复
http://blog.sina.com.cn/s/blog_45ff92d4010099y6.html 楼主看吧
beargo
2009-03-03
打赏
举报
回复
编译成一个正常DLL以后.你可以用混淆什么给它打乱一遍,完事了,这个混淆过的DLL还是可以让别人调用的,只是方法体里的名称什么的都乱了,要别人不能调用,那只能是把这个DLL变成不是正常的DLL.异域懂吧??就是[^]的一个小东东,嘻嘻,我们可以做个类,以文件流的形式把这个DLL读进去,然后一个byte一个byte的去异域加密一遍它.最好是用一句话去加密N遍它,此时的DLL的byte就是一堆乱码,让谁都猜不出的乱码,呵呵.异域完后保存这个异域过的流.此时的DLL.就不是可调用的DLL了.
自己主程序调用时,导入这个异域过的DLL,然后再用那段文字异域还原回可用DLL.不需要保存.直接用还原回的流可用反射去调用此DLL.
这个方法好处.仅提供此DLL出去给任何高手,我相信是没有人能够破解还原出正确的DLL来使用的,除非知道你异域加密的方法和异域值.
不好的地方.你如果提供了调用的主程序,那别人还是能通过你调用的主程序去知道你的你异域加密的方法和异域值.
要了解的有,异域,反射.
既然有用,这样讲够明白了吧?那给分吧,谢谢谢谢~~
加载更多回复(41)
C#
RSA非对称
加解密
DLL
C#
RSA非对称
加解密
DLL
; 最近抽空写得一个
C#
RSA非对称
加解密
类并已经封装好了。先存在csdn以便以后调用。呵呵
反混淆反编译反加密
C#
DLL
文件解密工具.
用此工具反混淆后 然后用reflector软件反编译下就能还原任何经过混淆后的代码 百度下reflector网上有下载
AES,MD5
加解密
dll
在
C#
代码中的调用.zip
C++编写AES,MD5的动态链接库,导出AES.
dll
,用于unity或者
C#
网络编程中,对网络消息进行
加解密
C#
加密解密,包括DES、MD5、SHA256
C#
加密解密,包括DES、MD5、SHA256
C#
对字符串加密解密
dll
源码
C#
实现对字符串进行完美加密解密,可自定义密匙,给出源码,给出了
dll
文件,直接引用到项目即可
C#
111,126
社区成员
642,541
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章