首页
社区
课程
招聘
[求助]如何使dll只能被指定程序调用?
发表于: 2012-6-24 01:09 9972

[求助]如何使dll只能被指定程序调用?

2012-6-24 01:09
9972
比如我有个a.dll和b.exe,我想限定a.dll只能被b.exe调用,其他程序都不可以调用。

实现这一功能一般都有哪些思路呢?需要说明一点的是要将a.dll和b.exe脱离开来,因为b.exe程序经常更新,所以不能在a.dll里对b.exe进行文件校验。

我个人觉得是否可以在a.dll里检测exe进程里是否有指定的模块,从来来判断是否为b.exe?

希望各位能不吝赐教,谢谢!

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (17)
雪    币: 3741
活跃值: (1792)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
肯定可以的,DLL被宿主加载就跟宿主混为一体了,在DLL里面的可以得到宿主的一切,一般做法是在DLL里面写个导出函数,EXE调用传个参数进去运算下效验是不是B调用,这样来判断,如果参数传的不正确 直接EXITPROCESS(0);
2012-6-24 06:46
0
雪    币: 25
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢你的回答!
主要是现在a.dll和b.exe是完全分离的,exe不会去校验是否为a.dll,就是说这个工作要让a.dll完成,这样也可以吗?比如我另外一个c.exe同样的参数来调用a.dll,那么a.dll是怎么区分是b调用还是c调用?

谢谢
2012-6-24 09:38
0
雪    币: 337
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
DllMain
2012-6-24 10:58
0
雪    币: 2290
活跃值: (2180)
能力值: (RANK:400 )
在线值:
发帖
回帖
粉丝
5
在DLL中计算下当前进程的hash值。
2012-6-24 10:59
0
雪    币: 25
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
这方法不适合调用exe经常更新的吧?如果exe更新了,这个hash不也变了?
2012-6-24 12:50
0
雪    币: 2134
活跃值: (14)
能力值: (RANK:170 )
在线值:
发帖
回帖
粉丝
7
可以在dll中检查进程名;进程pe中也可以加上一些固定偏移的特征来校验。
2012-6-24 21:15
0
雪    币: 70
活跃值: (74)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
Aker的方法挺好,可以同时校验EXE PE中几处的和的HASH值,话说回来。。你把DLL校验函数再弄个自己的VM保护
2012-6-24 21:32
0
雪    币: 25
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
再说明白一点吧。

比如我要做一个dll给别人,但是要限定只能被他的exe调用。由于exe是他的,所以会随时更新,因此不能用校验文件MD5之类的来限制。这种情况下,是不是只能判断进程名?
2012-6-25 15:13
0
雪    币: 2134
活跃值: (14)
能力值: (RANK:170 )
在线值:
发帖
回帖
粉丝
10
可以提供一个动态dll/一个静态lib给对方,对方使用dll,同时也要静态链接lib,lib中包含你有的一些特征,规定对方以一定规则调用;这样,dll许可方就可以用dll,dll被第三方拿了是没有办法正常用的。

再考虑多点,可以尝试服务器验证。开始几次连接不管,多次连接你通过之后,做一些猥琐的验证,让他时而正常,时而不正常。
2012-6-25 15:23
0
雪    币: 165
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
好办法,学习了
2012-6-25 15:32
0
雪    币: 703
活跃值: (327)
能力值: (RANK:380 )
在线值:
发帖
回帖
粉丝
12
在exe后面附加一个固定的bin校验这个文件就行了
2012-6-25 15:38
0
雪    币: 2134
活跃值: (14)
能力值: (RANK:170 )
在线值:
发帖
回帖
粉丝
13
exe不是楼主可控的~
2012-6-25 15:54
0
雪    币: 25
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
这个不错
2012-6-25 16:10
0
雪    币: 25
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
检测模块的方法有没有可行性?因为对方的exe运行过程中有一个模块,一般别的进程是没有的。
2012-6-25 16:11
0
雪    币: 2134
活跃值: (14)
能力值: (RANK:170 )
在线值:
发帖
回帖
粉丝
16
可以做,没有关系的,跟对方说好了,你做了很多检查,如果有修改要和你的版本一起做;或者提供可选的配置。
2012-6-25 16:19
0
雪    币: 0
活跃值: (954)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
17
我个人觉得是否可以在a.dll里检测exe进程里是否有指定的模块,从来来判断是否为b.exe?

这个没用的,别人可以直接根据你检测的模块进行偷梁换柱。

1:最保险的方法,把DLL的区段直接跟EXE拼接。然EXE动态查找DLL的导出函数。
2:写一个pe_loader 把DLL切分成5份,然后映射到内存中进行解密。
2012-6-26 11:18
0
雪    币: 229
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
写个验证函数,导出,让exe调用。
比如
void Verify(char *username,char *password);
如果传入值错误,调用其他函数就失败。
2012-6-26 15:19
0
游客
登录 | 注册 方可回帖
返回
//