加密与软件保护技术分析
1. MS - DOS 软件中的加密狗应用
在早期的 MS - DOS 时代,有一款 1995 年开发的软件,其开发公司早已消失。在 DOS 扩展器出现之前,MS - DOS 软件大多依赖 16 位的 8086 或 80286 CPU,代码也都是 16 位的。与现代代码不同,16 位代码的寄存器是 16 位的,可用指令也较少。
MS - DOS 环境没有系统驱动,程序可以通过端口直接与硬件交互,因此可以看到 OUT/IN 指令,而在现代操作系统的用户模式下,是无法直接访问端口的。
1.1 加密狗访问端口的代码分析
以一个 Sentinel Pro “哈希”加密狗为例,其通过端口进行访问的代码如下:
seg030:0034
out_port proc far ; CODE XREF: sent_pro+22p
seg030:0034
; sent_pro+2Ap ...
seg030:0034
seg030:0034
arg_0 = byte ptr 6
seg030:0034
seg030:0034 55
push bp
seg030:0035 8B EC
mov bp, sp
seg030:0037 8B 16 7E E7
mov dx, _out_port ; 0x378
seg030:003B 8A 46 06
mov al, [bp+arg_0]
seg030:003E EE
out dx, al
seg030:003F 5D
pop bp
seg030:0040 CB
retf
seg030:0040
out_port endp
</