作者:庄晓立(liigo)
日期:2011-4-8
原创链接:http://blog.csdn.net/liigo/archive/2011/04/08/6310677.aspx
转换请注明出处:http://blog.csdn.net/liigo
天乐软件加密狗(JDProtect),貌似几年前的软件,也很久没人更新了,这个暂且不管。本文并非推荐软件,而是介绍软件用法。本人(liigo)也不对此软件的质量和使用效果做任何评价,因为我也不甚了解。
JDProtect本质上是一个加壳软件,同时又跟硬件加密狗用法比较相似,据说是一款结合了加壳和硬件加密狗双重优势的软件。其作者在文档中介绍说:
JDProtect软件给用户提供一个.lib文件、必要的头文件(C/C++的.h,汇编的.inc),和一个加壳加密加狗处理主程序(以下称为加狗程序)。其使用流程是,用户在自己的软件中调用.lib中的接口函数(进行必要的检测/核对),编译生成EXE后交给加狗程序处理生成新的EXE,后者即可对外发布了。加狗操作时可以指定用户ID、用户INFO、四个暗码(DWORD),还可以定义一个使用伪汇编编写的自定义算法(有诸多限制),用户通过接口函数操作以上数据和算法。
.h里的接口函数:
它的.lib文件是一个空壳导入库文件,并没有实质功能代码,可能只是充当一个占位符,实质的加壳加密保护代码,是在后来加狗程序处理EXE时加进去的。作者提供了汇编语言的头文件.inc和C/C++的.h,并附有VC++6.0调用示例,说明这个JDProtect是主要针对汇编、C/C++用户服务的。作者还在文档中期望Delphi、C++ Builder、VB也能使用JDProtect,并希望有用户协助编写例程。我(liigo)个人对此表示怀疑,因为.lib并不是一个被多种编程语言普遍支持的一项技术(DLL才是)。
易语言可以调用.lib。能被VC++调用的lib,易语言自然也不在话下。在易语言中调用.lib,只需准确填写好函数声明,除了需要填写基本的返回值类型、参数类型、所在lib文件外,最关键的是填写函数在.lib内的符号名称。怎么知道符号名称呢?一个方法是凭经验推断:stdcall的函数Func,其符号名称应该是_Func@n,其中n是函数参数入栈字节数(通常是4的倍数),例如上面GetHardID函数的符号就是_GetHardID@4;cdecl的函数Func的符号名称应该是_Func。更准确的方法是去.lib内部查询到底是什么符号,可以用VC++自带的dumpbin.exe这个小软件,命令行:dumpbin /all tlzj.lib > tlzj.txt,将tlzj.lib信息输出到tlzj.txt文本文件中,结果大致如下图:
有了具体的符号名称,在易语言中声明调用lib中的函数就很简单了,跟声明调用DLL如出一辙(符号名称填写到“在库中对应命令名”一栏):
现在你知道为什么我用“填写”这个词了吧?在易语言中是以填写表格的形式声明和定义函数(如上图)。易语言默认以stdcall调用约定调用lib/dll内的函数;如果被调用的函数是cdecl,可在上图中的“在库中对应命令名”一栏最前面添加字符@,以告知易语言以cdecl调用约定调用该函数。另外多说一句,对于.lib中不是以“extern "C"”导出的C++函数,其符号名称通常怪异如“?vc_time2@@YAHXZ”(参见C++名称修饰(Name mangling)),易语言也同样支持调用它——只要你把符号名称填对了就行。易语言对.LIB和.DLL的调用支持是比较完善的。
为了简化使用,我(liigo)为JDProtect开发了易语言调用模块“天乐软件狗(JDProtect)模块.ec”,易语言的普通用户不用任何技术前提,就可以很方便的调用JDProtect提供的开发接口了。下面是我(liigo)对此模块及其例程编写的简单的使用文档:
下载:JDProtect_0.90e,含易语言开发模块及其源码和例程 ——因为添加了易语言的内容,我(liigo)私自修改版本号为0.90e(原版本号是0.90b),在此向作者说抱歉啦。
全文完,谢谢收看。
转自 http://blog.csdn.net/liigo/article/details/6310677