请问怎么预防DLL替换呢?

Harryfin 2010-08-05 09:48:06
加精
我们知道,只要DLL的接口函数一定,只要符合这个调用函数,DLL就可以被调用。那么应该怎么防止别人替换系统的DLL呢?是从设计上解决?还是WINDOWS本身就有什么机制呢?请有经验的朋友介绍一下,谢谢。
...全文
2268 107 打赏 收藏 转发到动态 举报
写回复
用AI写文章
107 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhq_0423 2011-02-23
  • 打赏
  • 举报
回复
delphi中可以对dll数字签名吗
jesterjy 2010-08-12
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 oloveuxyz 的回复:]
调用之前,验证DLL文件的MD5值
[/Quote]

版本不一样怎么验证?
mengKzhaoyun 2010-08-11
  • 打赏
  • 举报
回复
观望中,学到了不少破解知识。。。
功夫再高也怕羊刀,需要提高的不仅仅是技术,还有尊重啊。。
喜爱大幂幂 2010-08-11
  • 打赏
  • 举报
回复
还是dll做数字签名的好,Windows 操作系统 中的CSP就是这么搞的。
Reverse.King 2010-08-11
  • 打赏
  • 举报
回复
[Quote=引用 54 楼 icansaymyabc 的回复:]
呵呵,看来大伙都忘了数字签名的作用了。从win98开始系统就提供了数字签名的安全支持了,到了Win7,安全子系统越发的完善。

系统提供了技术保障,基本上可以保证数字签名是不可伪造的。你只需要把你的可执行程序签上名,到时候调用系统接口验证一下签名就解决了。
[/Quote]

弱弱的打击你下,你也不懂数字签名的作用,数字签名不是为了加密仅仅是身份验证而已,想用在加密方面没多大用处,任你再多的签名一样破。
baifucn 2010-08-11
  • 打赏
  • 举报
回复
你是拿着刀砍石头。。。。。
Harryfin 2010-08-11
  • 打赏
  • 举报
回复
非常感谢各位大大捧场,周末结帖,欢迎继续讨论。
zhulinyunhe 2010-08-11
  • 打赏
  • 举报
回复
了不起啊,问这样的WNET
xjq2003 2010-08-11
  • 打赏
  • 举报
回复
[Quote=引用 99 楼 mengkzhaoyun 的回复:]
观望中,学到了不少破解知识。。。
功夫再高也怕羊刀,需要提高的不仅仅是技术,还有尊重啊。。
[/Quote]
我也来学习了
OO_is_just_P 2010-08-11
  • 打赏
  • 举报
回复
曾经看到某个软件,DLL名称是register.dll,里面只有一个函数registered,我写了一行result:=True就破解了。
布道 2010-08-11
  • 打赏
  • 举报
回复
不是的我,我觉得那是扯淡,你网络不行就算了,招个优秀的系统工程师,实时监控,对他们来讲是小儿科的。。。
Harryfin 2010-08-11
  • 打赏
  • 举报
回复
翻页板凳
enderboy520 2010-08-11
  • 打赏
  • 举报
回复
翻页 沙发
enderboy520 2010-08-11
  • 打赏
  • 举报
回复
100 楼
Reverse.King 2010-08-11
  • 打赏
  • 举报
回复
另外补充下X1,X2的位置可以随便放置,或者可以引入X3 ...Xn 越多的话分析也麻烦,当然MyFun里面也需要配合对这些X值做些迷惑处理,如果不引用那么会降低猥琐度。
此外还可以采用隐含传递的方式进行调用校验。
比如调用此函数function MyFun(Param:PParam):E;前先隐含传递一个信号,这个信号可以是createmapfile读写,或者创建信号量,或者全局原子等等,甚至可以写到一块固定内存中,然后在MyFun内进行校验检测,以判断是否是自己在调用。
Reverse.King 2010-08-11
  • 打赏
  • 举报
回复
不过就算这样设计只要分析下MyFun函数体内对参数内存的使用情况也可以反推出参数定义结构,所以矛和盾的故事是永远不会有终结,而取一个平衡点才是这个问题的关键。
Reverse.King 2010-08-11
  • 打赏
  • 举报
回复
这个问题关键不在于做在DLL还是EXE内调用,因为你做在DLL内也是以函数形式调用。任你换造型都是可以分析出来的。
其实可以简单化讨论:
假设这个函数MyFun:
function MyFun(A,B):E;
正常情况调用都是先计算A和B然后 Ret :=MyFun(A,B);
那么如何让调用不至于被简单模拟关键就在于A,B的计算,以我的经验看不这里的参数最好不要太简单比如integer,string类型的,应该是设计成一个结构传递参数:
Type
PParam =^TParam;
TParam= record
X1:[0..n] array of byte; //这里做迷惑作用,大小根据需要定,建议使用长些,赋值可以采用随机数或者其它方式填充
A:X //使用的参数1
X2:[0..n] array of byte; //这里做迷惑作用,大小根据需要定,建议使用长些,赋值可以采用随机数或者其它方式填充
B:X //使用的参数2
CRC:Dword;//校验作用
end;

函数设计成://以指针传递
function MyFun(Param:PParam):E;


使用时候这样:
var MyParam:TParam;

MyParam.a=...;
MyParam.b=...;
MyParam.x1 =...;//随机数
MyParam.x2 =...;//随机数
如果闲不够猥琐那么可以把上面参数加密Encpty(@MyParam.x1[0],sizeof(TParam)-4 ); //-4不加密MyParam.CRC字段.
然后再做一次CRC校验MyParam.CRC:= GetCRC(@MyParam.x1[0],sizeof(TParam)-4);
然后再调用函数Ret:=MyFun(@MyParam);
这样即使得到函数原型,如果不知道参数结构用途和加密方式,那么也就徒劳。



观弈道童 2010-08-10
  • 打赏
  • 举报
回复
函数一定,只要符合这个调用函数,DLL就可以被调用。那么应该怎么防止别人替换系统的DLL呢?是从设计上解决?还是WINDOWS本身就有什么机制呢?请有经验的朋友介绍一下,谢谢。
ahead_8 2010-08-10
  • 打赏
  • 举报
回复
呵呵没有期待……
xueshimeng 2010-08-10
  • 打赏
  • 举报
回复
好深奥 都有大大
加载更多回复(81)

5,388

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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