首页
社区
课程
招聘
[求助]防止别人调用自己做的dll
发表于: 2011-2-23 16:11 16805

[求助]防止别人调用自己做的dll

2011-2-23 16:11
16805
如何防止别人调用自己做的dll,只限自己的程序调用,别的程序调用报错,不知道如何实现,请高手指导!!!

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

收藏
免费 0
支持
分享
最新回复 (18)
雪    币: 458
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
2
用exe的哈希 作为key   
dll里取这个key   搞一段自修改代码用key来解密  如果key不对(即不是自己调用的) 必然解码错误  程序崩溃。
2011-2-23 16:22
0
雪    币: 202
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
高手能不能说明白点,exe的哈希是个随机数吗,如果是的话,好像没有方法验证吧
2011-2-23 16:42
0
雪    币: 280
活跃值: (58)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
数字签名,搞定
2011-2-23 16:43
0
雪    币: 45
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
准备:
1、计算一个你EXE的key
1、将Dll中的关键函数这个key进行加密

DLL工作:
1、在DllMain函数中获取到主模块的信息,通过某些方法计算出一个Key
2、用这个Key来解码Dll中其他加密过的函数
2011-2-24 10:32
0
雪    币: 777
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
学习一下。。
2011-2-24 13:42
0
雪    币: 202
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
但是关键是,如果我的exe文件由于版本更新的问题,经常修改,你这种方法是不是效率太差了,就是说一旦exe发生变化,就意味着哈希值也变了,函数的key也要改变,那就太......
2011-2-24 14:22
0
雪    币: 458
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
8
好吧 来个简单一点的  安全性当然 就会差一些
1.取exe的PE校验和(LordPE就可以取)  假设这个值为A
2.dll里面写一段代码   取exe的校验和 如果不是A就  ExitProcess
这样每次exe修改过后 你只需要 用工具查一下exe的校验和   然后修改一下  dll的一个数值就行了
关于取校验和的代码可以参考这个链接:
http://hi.baidu.com/blueapple_c/blog/item/90ea7b099136ff3be9248885.html
2011-2-24 14:57
0
雪    币: 88
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
mark一下。
2011-2-24 15:46
0
雪    币: 173
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
嗯,这个相对简单点。
2011-2-24 15:56
0
雪    币: 45
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
11
然后一个关键跳就过去了
2011-2-24 15:57
0
雪    币: 458
活跃值: (421)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
12
如果想做的安全一些  
可以在这个关键跳的地方加一些自校验等等
再对这个dll 加一个vmp的壳就更完美了
2011-2-24 20:36
0
雪    币: 544
活跃值: (55)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
13
加个EPE壳,调用壳提供的SDK函数,保证安全。
2011-2-25 13:34
0
雪    币: 359
活跃值: (41)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
14
EPE对我这类半桶水来说还是挺牛的,它用Explorer作调试器,调试运行,这样其他调试器就不能调试运行了,只可惜被牛人做了脱壳机
LZ这个不外乎三种思路,一种是DLL主动并直接地获取EXE的信息进行校验(比如直接计算EXE的MD5值),这种情况下如果DLL用了强壳比如VMP之类的,几乎很难爆破,相对来说比较安全,但是EXE一旦更新DLL就报废了,这样还不如不用DLL,EXE和DLL弄成一个模块;
一种是DLL主动但间接通过一些接口获取EXE信息进行校验(比如通过EXE的导出函数或者系统API等间接获得信息),这类不管DLL有没有加壳,如果别人通过调试手段知道了原理的话,或Hook或Fake这些接口的数据就可以骗过DLL,安全系数也不是太高。
还有一种是DLL被动地被EXE修改信息才能运行,也就是DLL本身就是个半成品,本身是有BUG或者暗桩的,EXE启动DLL后在某些特定的时刻修改DLL的部分代码才能正常运行。如果DLL本身有BUG,基本上很快就会被发现,被人跟踪一遍或许就可以把DLL变“废”为宝,但如果是暗桩的话就没有那么容易发现了,而且修复的代码只在运行到需要修复的地方才会触发,并且不会一次修复全部代码,这样其他人几乎很难得到一个完全正确的DLL。不过这个方法只是浮云,目前应该没有壳可以提供这样的功能,自己实现又太过复杂……
所以还是建议LZ干脆把EXE和DLL两个项目合并到一块算了。
2011-2-26 14:41
0
雪    币: 113
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
- -!直接写段代码自定位自己处理要调用的API函数..加密保存成普通的二进制文件(只要执行代码部分)写个小工具保存出来就是了...主EXE READFILE读上来解密直接跳进读取到内存那位置执行....
2011-2-27 13:26
0
雪    币: 244
活跃值: (189)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
都是好方法啊
2018-8-16 15:54
0
雪    币: 15010
活跃值: (6218)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
取决于你的DLL加壳强度,否则都没什么用。
2018-8-16 16:34
0
雪    币: 558
活跃值: (51)
能力值: ( LV2,RANK:16 )
在线值:
发帖
回帖
粉丝
18
非对称加密。dll生成公私钥与exe通信,正确可以调用,错误返回退出
2018-8-17 09:24
0
雪    币: 29
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
很好很强大,赞一个
2018-8-17 11:28
0
游客
登录 | 注册 方可回帖
返回
//