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的四大 ...
随机推荐
- Keil C51怎样将子程序段定位在固定的地址位?
以下2问题均要用C51解决1.怎样将1个子程序段定位在1个固定的地址位置?例如将 INT BCD2HEX(INT XX)定位在1000H2.如何在EEPROM 中固定的位置存放1字符串?如在200H处 ...
- 十分钟搭建自己的hadoop2/CDH4集群
版本及准备 我部署的是hadoop-2.0.0-cdh4.2.0.tar.gz,下载地址为http://archive.cloudera.com/cdh4/cdh/4/hadoop-2.0.0-cdh ...
- 对每个用户说hello
#!/bin/bash #对每个用户说hello #用户数 Lines=`wc -l /etc/passwd | cut -d' ' -f1` $Lines`; do echo "Hello ...
- 第12讲- Android之消息提示Toast
第12讲 Android之消息提示Toast .Toast Toast 是一个 View 视图,在应用程序上浮动显示少量的信息给用户,它永远不会获得焦点,不影响用户的输入等操作,主要用于向用户显示一些 ...
- 初学github
在公司一直用的SVN做版本管理,倒也没什么问题.最近想自己在家写点东西,上班的时候又想偷偷地写.代码经常在两个地方同步,很是辛苦.反正写的只是一些用来学习测试的代码,干脆放到github上. 1.登录 ...
- qt model/view 架构自定义模型之QStringListModel
# -*- coding: utf-8 -*- # python:2.x #QStringListModel #QStringListModel 是最简单的模型类,具备向视图提供字符串数据的能力. # ...
- Appstore 创建App步骤
.进入AppInformation界面 defaultLanguage:选择默认语言 AppName:填写在Appstore上显示的名字 SKUNumber:填写一个唯一标示符,这个只要唯一即可,不能 ...
- ionic 图片轮播问题
1.使用ion-slide可以实现图片轮播,但是如果在html中仅仅增加ion-slide是远远不够的,会出现两个问题: (注:使用的是angularjs.首先需要在,js文件中注入:$ionicSl ...
- MongoDB学习笔记06
在shell中删除一个集合,执行db.test.drop()或者db.runCommand({"drop":"test"}),在MongoDB中命令其实是作为一 ...
- MongoDB学习笔记05
count 返回集合中文档数量文档数量 db.foo.count() db.foo.count({}) distinct用来找出给定键的所有不同的值,使用时必须指定集合和键 db.runCommand ...