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的四大 ...
随机推荐
- HDU 4009 Transfer water
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4009 题意:给出一个村庄(x,y,z).每个村庄可以挖井或者修建水渠从其他村庄得到水.挖井有一个代价, ...
- codechef Prime Distance On Tree(树分治+FFT)
题目链接:http://www.codechef.com/problems/PRIMEDST/ 题意:给出一棵树,边长度都是1.每次任意取出两个点(u,v),他们之间的长度为素数的概率为多大? 树分治 ...
- php curl 中的gzip压缩性能测试
前因: 请求接口次数很多,每日两亿多次,主要是有些接口返回数据量很大高达110KB(为了减少请求次数,将多个接口合并成一个导致的).后端接口的nginx已经开启gzip,所以做个测试,看看是否在请求时 ...
- bzoj1753 [Usaco2005 qua]Who's in the Middle
Description FJ is surveying his herd to find the most average cow. He wants to know how much milk th ...
- libeXosip2(1-2) -- How-To initiate, modify or terminate calls.
How-To initiate, modify or terminate calls. The eXtented eXosip stack eXosip2 offers a flexible API ...
- Poj3074-Sudoku(数独DLX)
题意: 给出一个9*9的矩阵,有一些格子已经填了数,有一些是.代表未填.求任意一组解使得每行包含1~9,每列包含1~9,每个小矩形(3*3)包含1~9. 解析: 精确覆盖DLX的经典题目,每一行代表要 ...
- SharePoint excel service web part 连接到 filter web part
本文讲述SharePoint excel service web part 连接到 filter web part的一个简单应用场景. SharePoint excel service web par ...
- Handsontable通用方法
1.clear():清空数据 2.createCol(index,amount,createAutomatically):添加列 index:列索引,amount:添加的列总数,crea ...
- Mysql 分别按月, 日为组group,进行统计排序order
在数据库中我们经经常使用sql语句对表进行简单的统计排序,对于日期字段.我们能够简单的对其进行order. 对于复杂一点的能够按日期中的年.月,日分别进行group,order. 按年份进行group ...
- Jquery面试题整合
来自棱镜学院-在线IT教育 www.prismcollege.com 一.Jquery測试题 以下哪种不是jquery的选择器?(单选) A.基本选择器 B.后代选择器 C.类选择器 D.进一 ...