服务DLL给客户EXE调用,如果能保证该DLL只为某个EXE服务

chenzhichao2008 2012-09-21 11:03:30
加精
假设
A公司开发一个DLL模块:我们叫A.DLL
B公司开发一个EXE程序,我们叫B.EXE

B公司的B.EXE需要A公司的A.DLL,因此B公司向A公司购买A.DLL
但A公司担心B公司会将其A.DLL卖给C公司的C.EXE调用,
因此A公司希望将A.DLL做成只有B.EXE才可以调用,C.EXE不能调用

为了解决这个问题,请您帮A公司想一个好的办法!
注:B.EXE随时都可能改动







...全文
8409 179 打赏 收藏 转发到动态 举报
写回复
用AI写文章
179 条回复
切换为时间正序
请发表友善的回复…
发表回复
bluesen 2014-10-08
  • 打赏
  • 举报
回复
根据网卡和cpu信息生成唯一序列号,然后进行加密。
baddy1211 2014-10-07
  • 打赏
  • 举报
回复
a.dll的任何判断都是无效的,当然,如果你有把握让你的DLL无法被人脱壳,无法反汇编调试,那么可以尝试其他人说的办法。 否则,呵呵,直接反汇编里把真改成假,比如判断失败不应该继续运行了,他给你来一个失败了可以继续使用。 抛开上面说的,说一些技术方面的东西,那么要看场合,如果B的产品只是内部小范围使用,那么可以使用企业注册方式,授权码可以是B公司需要使用这个dll的电脑的比如MAC地址进行计算出授权码授权。 如果B.exe是要发布到网上,给其他人使用的,那么又要允许b.exe会经常进行一次升级改动,那么可以借助互联网。 b.exe在每次更新后,必须让b.exe的自身版本号不同(反正指定一个版本号) 提交B.exe到A网站,并且在页面里,输入当前的版本,比如1.0.0.1,A网站接收到了这个版本号,并计算b.exe的MD5值 通过MD5+版本号比如(123456+1001),并保存到A网站的数据库中(这里可以人工审核)。 A.dll在运行的时候,联网,读取并提交当前调用他的b.exe的版本号1.0.0.1到A网站上,A网站返回123456+1001 A.dll判断123456是否是当前调用他的b.exe的MD5值,如果是,表示正确,否则,OVER
rundll64 2014-04-04
  • 打赏
  • 举报
回复
个人遇见,收购B公司旗下所有产业
  • 打赏
  • 举报
回复
b.exe多变,a,dll不易检测变化。a.dll既然给出了开发接口,难以保证不被移做他用。即便完备识别了b。exe,但是b中依然可以在加载a的情况下加载其他dll或通过进程通信同其他exe进行协同工作,一样被变相挪用。 我认为唯一的办法是认证
BeanJoy 2014-03-24
  • 打赏
  • 举报
回复
看到这个帖子就知道有多少人没有经过认真思考了。 既然B.exe随时在变,而B.exe的公司又可能很无耻的卖给别人,那么A.dll提供的任何信息B.exe都可能给C。 那么只能让A.dll提供一个不能复制无法破解的信息给B.exe,只就能用个像U盾样的东西了,插上电脑上才可以用A.dll。
gomez44944 2014-03-24
  • 打赏
  • 举报
回复
一人在外 2014-02-26
  • 打赏
  • 举报
回复
生成一个key,然后B想使用需要A返回一个KEY,此KEY与MAC地址绑定。
itachi777 2013-11-17
  • 打赏
  • 举报
回复
可以使用加密狗
lm_whales 2013-06-06
  • 打赏
  • 举报
回复
引用 83 楼 clever101 的回复:
[Quote=引用 19 楼 的回复:] 这个我觉得不难,如果想防止除了一些特别的技术,还要加一些验证信息,如果是公司性质,第一,软件发布后肯定都是有数字签名,第二,软件会有软件的发布公司、名字等信息,这些可以在卖A.DLL之前向B公司确认和索取,并添加验证代码到A.DLL,当有EXE调用A.DLL的时候,在A.DLL里获取调用它的EXE的信息,跟事前B公司提供的是否相符,如果相符则是合法的,否则退出动态库,拒绝EXE的调用。获取软件的…… [/Quote] 这个办法好!
++ 并和名字一起使用,虽然名字法过于简单,但是也可以过滤大多数程序了。
wbj2008 2013-03-07
  • 打赏
  • 举报
回复
你们那个程序有window操作系统卖的一样多吗?如果没有,不会有人没事天天想破解来用,如果有,那么你在怎么加密也没有用。
alexander_david 2012-10-30
  • 打赏
  • 举报
回复
看楼主的意思,不想明确地对B做什么约束,那么似乎只有用加密狗了。

找一个比较难破解的加密狗好了。
sunshinebean 2012-10-30
  • 打赏
  • 举报
回复
[Quote=引用 121 楼 的回复:]

这个可以这样做吧,设一个密码啊,要使用A.DLL,B.EXE调用的时候,必须给一个参数,这个参数就是密钥啊,
A.DLL检查这个KEY正确 就执行,不正确就直接退出
那这个密钥,就是签保密协议了.
[/Quote]

截下就能把参数截出来你信不,哈哈
fenghaibo00 2012-10-19
  • 打赏
  • 举报
回复
[Quote=引用 94 楼 的回复:]

总结一下,上面几位大牛的回答:

他们的基本意思应该是:
B.exe要发布时,先将B.exe提交给A网站
A对B.exe进行人工审核(这点,我加的,防止C.exe也通过这种方式提交)
A取得B.exe的数字签名x
A将x写入A.dll
A将A.dll发给B

还有没更好的方法???
[/Quote]
1. 保密协议,是他违法成本远远大于出卖你的DLL收入
2. 就是人工审核
你不想控制B,又想控制B以外的人,那得先解决了怎么区分B以及B 以外的人?
从技术上来讲,我认为很难满足楼主的要求,况且DLL也是可以逆向出代码的
1 + 2组合用比较现实
bobob 2012-10-18
  • 打赏
  • 举报
回复
最核心的就是直接调用dll的那个程序的最后一次改动必须你自己很清楚,除此之外其他办法都没用
所以最靠谱的就是他们要发布新版本的时候给你发个b.exe,你修改b.exe,更新你的dll,一起发给他,这个不麻烦,版本更新能有多频繁?熟手做这个事情最多半个小时
赵4老师 2012-10-18
  • 打赏
  • 举报
回复
木马面前,一切加密形同虚设。
Daisy__Ben 2012-10-17
  • 打赏
  • 举报
回复
各位难道都忽略了 dll加载不上 模块是不能运行的?! 汗~各位牛人 N种超现实解释
I_ask_who 2012-10-17
  • 打赏
  • 举报
回复
如果DLL是COM组件的话,可以通过IClassFactory2接口进行授权
如果是一般的,hehe
bluedoctor 2012-10-17
  • 打赏
  • 举报
回复
在.NET里面通过反射就知道谁在调用本程序集了,看了大家的回答怎么觉得那么麻烦呢?
YFLK 2012-10-17
  • 打赏
  • 举报
回复
还是在A.DLL中加上B.EXE的hash码这样靠谱。A.DLL加载时先检查主运行程序的Hash值。
jintian01 2012-10-17
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 的回复:]

引用 16 楼 的回复:
逻辑混乱!
假设 B 公司 和 C 公司 让同一个程序员完成 B.exe 和 C.exe 呢?


跟是否是同一个程序员完成没有直接关系

最主要的目的:
是如何防止A公司的客户(B公司)将A公司的A.dll偷偷转卖给C公司
[/Quote]
这可能么?B.exe 随时有可能发生变更。那你怎么知道 B.exe 如何不会变更成C.exe!
加载更多回复(136)

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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