是C++ dll,比如sample.dll
限定于只能被我自己写的sample.exe调用
越安全越好,希望在sample.exe被反编译的情况下仍然能够有效(即不能源代码sample.cpp中拷贝出调用sample.dll的源代码,自己写个application调用sample.dll)

解决方案 »

  1.   

    DllMain中的DLL_PROCESS_ATTACH做处理.
      

  2.   

    只能函数的参数上面加点密,如果知道sample的源代码,不可能阻止别人调用........
      

  3.   

    如楼上所说,可以判断attach的进程的一些特征,如文件名,或者事先对exe文件做好校验码保存到dll里。
    另外简单一点也可以直接以序号导出函数,抹掉函数名,这样起码不容易去调用。
      

  4.   

    不过也可以这样来处理,先编译好调用你的那个exe,然后计算出这个exe的crc或其他的特征码,然后在被调用的时候检测这个特征码是否符合.............
      

  5.   

    这个我是正在考虑的,手工做的问题不大
    但要在服务器上编译,有点问题
    在服务器上编译的时候自动修改代码,估计很难实现,比如代码使用perforce管理的
      

  6.   

    尤其是当调用这个sample.dll的程序较多,并且更新较多的时候
      

  7.   


    同意。比如,导出一个接口函数,其参数指定一个回调函数,让客户exe传回一个标志串,类似于sn之类的。根据这个标志串的对比来决定是否要attach。也可采用显示导入的方式使用dll,即ref文件里不指定要导出的函数,客户程序通过包含yourdll.h, 
    yourdll.lib的方式编译链接,来调用dll,不能通过LoadLibrary(),GetProcAddress()的方式来调用。
    这样,只要控制开发时用的yourdll.h, yourdll.lib不外泄就行了。
      

  8.   

    调用sample.dll的程序是C#写的,所以代码不能保证不被反编译
      

  9.   

    参考商业软件的授权方式吧,本质是一样的,只不过一般的
    客户是人,你这里是exe程序
      

  10.   

    我们的代码(所有文件)是由perforce管理的,每次check in都得登陆,关联相关的问题,填写描述,然后再check in
    然后服务器自动编译所有的版本
      

  11.   

    我想采用数字签名的方式,通过signtool可以对application进行签名
    问题是如何在C++中检查签名
    MS的sigcheck.exe可以检查,但是个工具程序,程序中使用它来检查的话,用户如果自己写个sigcheck.exe替换掉安装目录的,就没有效果了
    最好还是有API或者自己写代码检查
      

  12.   

    没用过perforce,我们用的CVS,每天自动构建,构建服务器从CVS服务器上下载代码、编译、压安装,这样做没问题。
      

  13.   

    你的意思说DLL是C++的,调用它的程序是C#的?
      

  14.   

    没办法的,只要别人知道你的导出函数的声明格式,一样可以调用的DLL,
    要想完成的需求,必须在相关函数调用的使用做好身份认证,如何符合则,函数继续运行,
    否则直接返回。但这样做效果不是很好,因为在要求效率高的应用场合每次调用都要身份识别
    那就不好万了。
      

  15.   

    这个好弄吧.你的EXE和你的DLL,这两个就相当于两个人.
    你给这两个人弄一个暗号,比如EXE说"天龙盖地虎",DLL一听,呀,死党来了.就可以放心地跟它走了.
    否则口号不对话,就直接退出.不跟它走.!
      

  16.   

    如何得到自己的dll是被哪个dll/exe调用的?
      

  17.   

    在DllMain中传进来的hModule是dll的Module, 怎么得到上一级调它的模块的module?
    或者能得到当前进程的exe路径也行
      

  18.   

    解决
    GetModuleFileName的第一个参数设为NULL对调用sampledll的exe/dll进行签名,在sampledll的DllMain中检查签名,用CAPICOM的一些函数
      

  19.   

    即不能源代码sample.cpp中拷贝出调用sample.dll的源代码,自己写个application调用sample.dll
    这样就基本不可能了,因为你的调用方式必然在你的.CPP里面
    这样就没有办法了知道了.CPP就知道你是怎么让.DLL知道这个EXE是你自己的.
    所以你只能做到让这个验证过程很复杂,无法让别人短时间内知道是怎么回事
      

  20.   

    动态认证:比如DLL和EXE中都获取CPU的一些参数(或者硬盘的序列号),然后用共同的加密算法得到字符串。
    EXE中将该字符串传递给DLL。
    DLL自己计算结果,并与EXE传递进来的值进行对比。
    符合,则调用。
    否则退出。