DOSUSB 2.0 免费版的限制原理
两年前,我在写USB的文章时,多次提到了DOSUSB这个东东,这两年也没有关注这方面的变化,最近,有机会重新进入DOSUSB的官方网站(www.dosusb.net),欣喜地发现,这个网站不仅依然存在,而且还有所发展,相继推出了DOSUSB 2.0和DOSUSB3.0,但是不再免费(以前,DOSUSB的二进制代码是免费的,但源代码收费),USB 3.0还不怎么常用(至少在运行DOS的机器上),所以,本文仅对DOSUSB 2.0的免费版做了一个简单的分析,介绍其限制方法,并提出了一个非常简单的破解方法。







两个令人厌恶的提示信息,实际上在告诉我们,DOSUSB已经罢工了。
行号 内存地址 二进制码 反汇编指令 注释 ------------------------------------------------------------------------------------------------ : E93D05 JMP ......(这里是一块数据区) : BBA386 MOV BX,86A3 ; 新分配的段落块(16字节)数量 : C1EB04 SHR BX, ; ES=内存块段地址 : INC BX : B44A MOV AH,4A : CD21 INT ; 修改分配的内存块 :064B B8626B MOV AX,6B62 :064E ADD AX, ; 重新设置堆栈,栈底在6b62h : 8BE0 MOV SP,AX ; 堆栈长度为800h : E8DE72 CALL ; 判断运行环境,设置内存策略 ............(这里省略若干行代码) :069B E82673 CALL 79C4 ; 显示DOSUSB的版本信息 :069E BEBD5E MOV SI,5EBD ; 指向字符串:Time restricted Demo Version :06A1 E83223 CALL 29D6 ; 显示字符串 :06A4 PUSHA :06A5 B42C MOV AH,2C ; DOS功能:取时间 :06A7 CD21 INT (DOS) :06A9 890E0360 MOV [],CX ; CH=小时,CL=分钟 :06AD POPA :06AE PUSHA :06AF 8B0E0360 MOV CX,[] :06B3 33C0 XOR AX,AX :06B5 8AC5 MOV AL,CH ; 小时(--) :06B7 B33C MOV BL,3C ; 3ch=,把小时数换算成分钟数 :06B9 F6E3 MUL BL ; AX中为当前时间的小时部分转换的分钟数 :06BB B500 MOV CH, :06BD 03C1 ADD AX,CX ; 加上当前时间的分钟数,为相对于凌晨的分钟数 :06BF A30F79 MOV [790F],AX ; word [790fh]存储启动程序时的分钟数 :06C2 1E PUSH DS :06C3 33C0 XOR AX,AX :06C5 8ED8 MOV DS,AX :06C7 A0FE04 MOV AL,[04FE] ; :04feh在BIOS数据区,用这个位置记录程序的启动次数 :06CA 3C0A CMP AL,0A ; 当启动次数达到10次时,将不能再次启动,需要重新启动计算机 :06CC JB 06E2 ; <10次启动,可以运行 :06CE NOP :06CF NOP :06D0 1F POP DS :06D1 BEE55E MOV SI,5EE5 ; Terminal Demo Version! :06D4 E8FF22 CALL 29D6 ; 显示一个以\0结尾的字符串 :06D7 BEE15F MOV SI,5FE1 ; 回车,换行 :06DA E8F922 CALL 29D6 ; 显示一个以\0结尾的字符串 :06DD POPA :06DE B44C MOV AH,4C ; DOS功能,退出应用程序 :06E0 CD21 INT (DOS) :06E2 FEC0 INC AL ; 将启动次数+1后存回0:04feh的位置 :06E4 A2FE04 MOV [04FE],AL :06E7 1F POP DS :06E8 POPA :06E9 E9947C JMP ; 继续进行初始化

行号 内存地址 二进制码 反汇编指令 注释 ------------------------------------------------------------------------------------------------ :06EC EB09 JMP 06F7 :06EE 4F 0A - 2E DOSUSB.... :06F7 2E CS: :06F8 803E3E6B00 CMP BYTE PTR [6B3E], :06FD 740E JZ 070D :06FF NOP : NOP : EA00000000 JMP : : 2E CS: : 80263E6B00 AND BYTE PTR [6B3E], :070C CB RETF :070D 2E CS: :070E 800E3E6B01 OR BYTE PTR [6B3E], : PUSHA : PUSH ES : 1E PUSH DS : PUSH DX : 1E PUSH DS : 0E PUSH CS : 0E PUSH CS :071A 1F POP DS :071B POP ES :071C BF426B MOV DI,6B42 :071F A30D60 MOV [600D],AX : 1F POP DS : 8BF2 MOV SI,DX : FC CLD : B92000 MOV CX, : F3 REPZ :072A A4 MOVSB :072B 0E PUSH CS :072C 1F POP DS :072D PUSHA :072E 1E PUSH DS :072F 0E PUSH CS : 1F POP DS : F8 CLC : B402 MOV AH, ; 取CMOS时间 : CD1A INT 1A (BIOS Clock) : JNB ; 执行BIOS成功 : NOP : NOP :073A 1F POP DS :073B POPA :073C JB 078F :073E NOP :073F NOP : PUSH BX : 8AC5 MOV AL,CH ; 时间的小时部分 : E85523 CALL 2A9B ; 将小时的BCD码转换成十进制数 : 8AF8 MOV BH,AL : 8AC1 MOV AL,CL ; 时间的分钟部分 :074A E84E23 CALL 2A9B ; 将分钟的BCD码转换成十进制数 :074D 8AD8 MOV BL,AL :074F 8BCB MOV CX,BX : 5B POP BX : 33C0 XOR AX,AX : 8AC5 MOV AL,CH ; 时间的小时数 : B33C MOV BL,3C ; , : F6E3 MUL BL ; 将小时换算成分钟数 :075A B500 MOV CH, :075C 03C1 ADD AX,CX ; AX=时间的分钟数 :075E 2E CS: :075F 2B060F79 SUB AX,[790F] ; [790Fh]存着程序启动时时间的分钟数 : 3D1400 CMP AX, ; 20分钟 : 1F POP DS : POPA : JB 078F ; 启动不到20分钟 :076A NOP :076B NOP :076C PUSHA :076D BEE55E MOV SI,5EE5 ; 指向字符串:Terminate Demo Version : E86322 CALL 29D6 ; 显示字符串 : BE015F MOV SI,5F01 ; 指向字符串:please unload DOSUSB : E85D22 CALL 29D6 ; 显示字符串 : BEE15F MOV SI,5FE1 ; 指向一个仅有回车换行的字符串 :077C E85722 CALL 29D6 ; 显示回车换行 :077F B8E803 MOV AX,03E8 ; : E8F521 CALL 297A ; 该子程序根据AX的值,延迟若干毫秒。延迟1秒 : POPA : C606476B42 MOV BYTE PTR [6B47], :078B NOP :078C E9E905 JMP 0D78 ............ :0D78 8B1EA061 MOV BX,[61A0] :0D7C 83FB00 CMP BX,+ :0D7F JZ 0D87 :0D81 NOP :0D82 NOP :0D83 B43E MOV AH,3E :0D85 CD21 INT (DOS) :0D87 2E CS: :0D88 80263E6B00 AND BYTE PTR [6B3E], :0D8D BE426B MOV SI,6B42 :0D90 1E PUSH DS :0D91 POP AX :0D92 5A POP DX :0D93 1F POP DS :0D94 1E PUSH DS :0D95 POP ES :0D96 PUSH AX :0D97 1F POP DS :0D98 8BFA MOV DI,DX :0D9A FC CLD :0D9B B92000 MOV CX, :0D9E F3 REPZ :0D9F A4 MOVSB :0DA0 PUSH ES :0DA1 1F POP DS :0DA2 POP ES :0DA3 POPA :0DA4 CF IRET
这段程序,我们的注释要少一些,因为大多和本文话题不相干。

DOSUSB 2.0 免费版的限制原理的更多相关文章
- Vue3.0工程创建 && setup、ref、reactive函数 && Vue3.0响应式实现原理
1 # 一.创建Vue3.0工程 2 # 1.使用vue-cli创建 3 # 官方文档: https://cli.vuejs.org/zh/guide/creating-a-project.html# ...
- hadoop入门(2)——HDFS2.0应用场景、原理、基本架构及使用方法
一.HDFS概述 优点:高容错性.适合批处理.适合大数据处理.流式文件访问:一次写入,多次读取. 缺点:不适合低延迟数据访问.不适合小文件存取(受限于NameNode) ...
- OAuth2.0认证和授权原理
什么是OAuth授权? 一.什么是OAuth协议 OAuth(开放授权)是一个开放标准. 允许第三方网站在用户授权的前提下访问在用户在服务商那里存储的各种信息. 而这种授权无需将用户提供用户名和密 ...
- hOAuth2.0认证和授权原理
原文地址: http://www.6zou.net/tech/what_is_oauth.html http://www.phpddt.com/%E4%BA%8C%E6%AC%A1%E5%BC%80% ...
- [转载] OAuth2.0认证和授权原理
转载自http://www.tuicool.com/articles/qqeuE3 什么是OAuth授权? 一.什么是OAuth协议 OAuth(开放授权)是一个开放标准,允许第三方网站在用户授权的前 ...
- Android 7.0 启动篇 — init原理(二)(转 Android 9.0 分析)
======================================================== ================================== ...
- Android 7.0 启动篇 — init原理(一)(转 Android 9.0 分析)
======================================================== ================================== ...
- .NET Core 3.0 可卸载程序集原理简析
因为最近在群里被问到如何理解 .NET Core 3.0 可卸载程序集,所以就写了这篇简单的分析. 因为时间实在很少,这篇文章只简单的罗列了相关的代码,请配合官方说明文档理解. 另外,书籍<.N ...
- Android 7.0 中 ContentProvider 实现原理
欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 作者:汪毅雄 导语: 本文描述了ContentProvider发布者和调用者这两在Framework层是如何实现的. 作为Android的四大 ...
随机推荐
- 常用IC封装技术介绍
1.BGA(ball grid array)球形触点陈列,表面贴装型封装之一.在印刷基板的背面按陈列方式制作出球形凸点用 以 代替引脚,在印刷基板的正面装配LSI 芯片,然后用模压树脂或灌封方法进行密 ...
- winform程序中Label自动换行
参考的是网上这篇文章:http://www.cnblogs.com/qb371/archive/2011/09/20/2366310.html 不过貌似注释有点问题,我的代码如下,我是将label放在 ...
- 【转】notepad++设置字体和字体大小
原文网址:http://www.aichengxu.com/view/604 今天很多朋友问我怎么设置notepad++的代码字体和代码字体的大小,习惯了editplus的朋友可能会在notepad+ ...
- windows下搭建NFS服务器
Win7除了旗舰版和企业版其他版本没有NFS客户端,windows2000,windowsXP,windows2003有个sfu(windows services for unix)工具貌似比较强大, ...
- 如何使用WCF调试器WcfTestClient.exe
如果启用服务出现如下异常 请启用下面该服务 C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE 文件->添加服务 地 ...
- OSCLI
- python高级编程之超类02:super的缺陷
# -*- coding: utf-8 -*- # python:2.x __author__ = 'Administrator' #当使用多重继承层次结构时,再使用super的时候是非常危险的,主要 ...
- [Ext JS 4] 实战之Grid, Tree Gird编辑Cell
前言 本篇这里以稍微复杂一点的Tree Grid 来介绍. 在写编辑grid 之, 先来看一下 grid 的 selType 的配置. 先给一个简单的Tree grid 的例子: Ext.onRead ...
- hdu 2612 Find a way(BFS)
题目链接:hdu2612 思路:题意是求两个人到某一个KFC花费时间和最小,其实就是求最短距离和,用两个BFS,分别以两个人为起点,分别记录下两人到每个KFC的距离,然后求出最小的和 #include ...
- mysql忘记密码时如何修改root用户密码
1.关闭正在运行的MySQL服务. 2.打开DOS窗口,转到mysql\bin目录. 3. 输入mysqld --skip-grant-tables 回车.--skip-grant-tables 的意 ...