⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 code16.asm

📁 usb加密狗复制小工具 ┆加密狗信息复制工具
💻 ASM
📖 第 1 页 / 共 3 页
字号:
                MOV     DX,OFFSET VERS
                MOV     AH,09H
                INT     21H
                MOV     DX,OFFSET HELPMSG
                MOV     AH,09H
                INT     21H
                POP     DS
                RET
HELPUSER        ENDP

FREESPACE       PROC    NEAR
                PUSH    BX
                PUSH    CX
                PUSH    DX
                PUSH    SI
                PUSH    DI
                PUSH    DS
                PUSH    ES

                MOV     AX,0FEFEH
                INT     21H        ;get TSR PSP
                CMP     AH,0FEH
                JZ      CANENOTINMEM
                MOV     DX,AX      ;PSP
                MOV     AX,0FEFFH
                INT     21H        ;back to real
                MOV     AX,CS
                MOV     DS,AX
                MOV     AH,52H
                INT     21H
                SUB     BX,2
                MOV     AX,ES:[BX]  ;seg of MB
                MOV     ES,AX
SPACELOOP:
                MOV     AL,ES:[0]   ;FLAG
                CMP     AL,5AH
                JZ      FINDISOVER  ;IS LAST
                CMP     WORD PTR ES:[1],DX
                JZ      FINDCANE    ;IS EQUAL
FREENEXT:
                MOV     AX,WORD PTR ES:[3]
                MOV     BX,ES
                ADD     AX,BX
                INC     AX
                MOV     ES,AX
                JMP     SPACELOOP
FINDCANE:
                PUSH    ES
                MOV     AX,ES
                INC     AX
                MOV     ES,AX
                MOV     AH,49H
                INT     21H
                POP     ES
                JMP     FREENEXT
FINDISOVER:
                MOV     DX,OFFSET RIGHTFREE
                CALL    SHOWSTRING
                MOV     AX,0
                JMP     EXITSPACE
CANENOTINMEM:
                MOV     DX,OFFSET NOTINMEM
                CALL    SHOWSTRING
                MOV     AX,1
EXITSPACE:
                POP     ES
                POP     DS
                POP     DI
                POP     SI
                POP     DX
                POP     CX
                POP     BX
                RET
FREESPACE       ENDP

SHOWSTRING      PROC    NEAR
                PUSH    DS
                PUSH    CS
                POP     DS
                MOV     AH,09H
                INT     21H
                POP     DS
                RET
SHOWSTRING      ENDP

WRITEDATAFILE   PROC    NEAR
                PUSH    AX
                PUSH    BX
                PUSH    CX
                PUSH    DX
                PUSH    ES
                PUSH    DS

                PUSH    CS
                POP     DS
                MOV     DX,OFFSET FILENAME
                MOV     CX,0
                MOV     AH,3CH
                INT     21H             ;CREAT FILE
                JC      CREATERROR
                MOV     CS:_HANDLE,AX   ;HANDLE

                MOV     AX,0FEFDH
                INT     21H             ;get buffer address
                CMP     AH,0FEH
                JZ      CANENOTINMEM2
                MOV     CS:_EXTENDADDR,ECX  ;buffer address
                MOV     AX,CS
                MOVZX   EAX,AX
                SHL     EAX,4
                MOV     BX,OFFSET RWBUFFER
                MOVZX   EBX,BX
                ADD     EBX,EAX
                MOV     EAX,ECX
                MOV     ECX,0400H
                CALL    TRANSMITDATA        ;to base memory
                MOV     EAX,DWORD PTR RWBUFFER[2] ;length
                ADD     EAX,6
                MOV     CS:_EXTENDLEN,EAX
                MOV     CS:_WRITECOUNTER,0
NEXTFILEBLOCK:
                MOV     ECX,CS:_EXTENDLEN
                MOV     EAX,CS:_WRITECOUNTER
                SUB     ECX,EAX
                CMP     ECX,400H
                JB      ISLASTBLOCK
                MOV     ECX,400H
ISLASTBLOCK:
                MOV     EAX,CS:_WRITECOUNTER
                ADD     EAX,ECX
                MOV     CS:_WRITECOUNTER,EAX
                MOV     DX,OFFSET RWBUFFER
                MOV     BX,CS:_HANDLE   ;handle
                MOV     AH,40H
                INT     21H
                MOV     EAX,CS:_WRITECOUNTER
                CMP     EAX,CS:_EXTENDLEN
                JAE     CLOSEFILE
                MOV     AX,CS
                MOVZX   EAX,AX
                SHL     EAX,4
                MOV     BX,OFFSET RWBUFFER
                MOVZX   EBX,BX
                ADD     EBX,EAX
                MOV     EAX,CS:_EXTENDADDR
                MOV     ECX,CS:_WRITECOUNTER
                ADD     EAX,ECX
                MOV     ECX,0400H
                CALL    TRANSMITDATA   ;to base memory
                JMP     NEXTFILEBLOCK

CANENOTINMEM2:
                MOV     DX,OFFSET NOTINMEM
                CALL    SHOWSTRING
CLOSEFILE:
                MOV     BX,CS:_HANDLE
                MOV     AH,3EH
                INT     21H             ;CLOSE FILE
CREATERROR:
                POP     DS
                POP     ES
                POP     DX
                POP     CX
                POP     BX
                POP     AX
                RET
WRITEDATAFILE   ENDP

READDATAFILE    PROC    NEAR
                PUSH    AX
                PUSH    BX
                PUSH    CX
                PUSH    DX
                PUSH    ES
                PUSH    DS

                PUSH    CS
                POP     DS
                MOV     DX,OFFSET FILENAME
                MOV     AL,0
                MOV     AH,3DH
                INT     21H             ;OPEN FILE
                JC      FILEERROR
                MOV     CS:_HANDLE,AX   ;HANDLE

                MOV     DX,OFFSET RWBUFFER
                MOV     CX,6
                MOV     BX,CS:_HANDLE
                MOV     AH,3FH
                INT     21H
                JC      FILEERROR
                CMP     AX,6
                JNZ     FILEERROR
                MOVZX   ECX,AX                     ;transmit counter
                MOV     CS:_READCOUNTER,0
                MOV     EAX,DWORD PTR RWBUFFER[2]
                ADD     EAX,6
                MOV     CS:_EXTENDLEN,EAX
                MOV     BX,CS:_EXTSIZE
                MOVZX   EBX,BX
                SHL     EBX,10
                SUB     EBX,EAX
                ADD     EBX,100000H
                MOV     CS:_EXTENDADDR,EBX        ;the start address
                CMP     EBX,100000H
                JB      MEMNOTENOUGH
                MOV     AX,0FEFCH
                INT     21H
                CMP     AH,0FEH
                JZ      CANENOTINMEM3
TRANSMITNEXTBLOCK:
                MOV     AX,CS
                MOVZX   EAX,AX
                SHL     EAX,4
                MOV     BX,OFFSET RWBUFFER
                MOVZX   EBX,BX
                ADD     EAX,EBX                  ;EAX SRC ADDRESS
                PUSH    EAX
                MOV     EAX,CS:_READCOUNTER
                MOV     EBX,CS:_EXTENDADDR
                ADD     EBX,EAX                  ;EBX DESC ADDRESS
                MOV     EAX,CS:_READCOUNTER
                ADD     EAX,ECX
                MOV     CS:_READCOUNTER,EAX      ;READ BYTE NUMBER
                POP     EAX
                CALL    TRANSMITDATA
                MOV     EAX,CS:_READCOUNTER
                CMP     EAX,CS:_EXTENDLEN
                JAE     CLOSEREADFILE
                MOV     ECX,CS:_EXTENDLEN
                MOV     EAX,CS:_READCOUNTER
                SUB     ECX,EAX
                CMP     ECX,400H
                JB      NOTLASTBLOCK2
                MOV     ECX,400H               ;READCOUNTER
NOTLASTBLOCK2:
                MOV     DX,OFFSET RWBUFFER
                MOV     BX,CS:_HANDLE
                MOV     AH,3FH
                INT     21H
                JC      FILEERROR
                MOVZX   ECX,AX
                JMP     TRANSMITNEXTBLOCK
CLOSEREADFILE:
                MOV     BX,CS:_HANDLE
                MOV     AH,3EH
                INT     21H             ;CLOSE FILE
                CLC
EXITREADDATA:
                POP     DS
                POP     ES
                POP     DX
                POP     CX
                POP     BX
                POP     AX
                RET
FILEERROR:
                CMP     CS:_HANDLE,0
                JZ      NOTCLOSEFILE1
                MOV     BX,CS:_HANDLE
                MOV     AH,3EH
                INT     21H
NOTCLOSEFILE1:
                MOV     DX,OFFSET DATAERROR
                CALL    SHOWSTRING
                STC
                JMP     EXITREADDATA
MEMNOTENOUGH:
                MOV     BX,CS:_HANDLE
                MOV     AH,3EH
                INT     21H
                MOV     DX,OFFSET MEMORYLACK
                CALL    SHOWSTRING
                STC
                JMP     EXITREADDATA
CANENOTINMEM3:
                MOV     BX,CS:_HANDLE
                MOV     AH,3EH
                INT     21H
                MOV     DX,OFFSET NOTINMEM
                CALL    SHOWSTRING
                STC
                JMP     EXITREADDATA
READDATAFILE    ENDP


;****************************************************************************
;* Transmit data  between extend memory and base memory                     *
;* EAX - source address   EBX - destinate address ECX - counter             *
;****************************************************************************

TRANSMITDATA    PROC    NEAR
                PUSH    AX
                PUSH    BX
                PUSH    CX
                PUSH    DX
                PUSH    SI
                PUSH    DI
                PUSH    DS
                PUSH    ES

                MOV     DX,SEG GDTAREA
                MOV     ES,DX
                MOV     SI,OFFSET GDTAREA
                MOV     WORD PTR ES:[SI+12H],AX      ;source
                SHR     EAX,16
                MOV     BYTE PTR ES:[SI+14H],AL
                MOV     WORD PTR ES:[SI+1AH],BX      ;destinate
                SHR     EBX,16
                MOV     BYTE PTR ES:[SI+1CH],BL
                SHR     CX,1                   ;the number of word
                MOV     AH,87H
                INT     15H
                POP     ES
                POP     DS
                POP     DI
                POP     SI
                POP     DX
                POP     CX
                POP     BX
                POP     AX
                RET
TRANSMITDATA    ENDP

CHECKEXT        PROC    NEAR
                PUSH    AX
                MOV     AH,88H
                INT     15H
                MOV     CS:_EXTSIZE,AX
                POP     AX
                RET
CHECKEXT        ENDP

SETPARALLEL     PROC    NEAR
                PUSH    ES
                PUSH    FS
                PUSH    AX
                PUSH    BX
                PUSH    CX
                PUSH    DX

                MOV     AX,0
                MOV     ES,AX
                MOV     AX,SEG _IOPORT
                MOV     FS,AX
                MOV     BX,OFFSET _IOPORT
                MOV     AX,ES:[408H]
                SHR     AX,3
                ADD     BX,AX
                MOV     CX,ES:[408H]
                AND     CX,07H
                MOV     AX,1
                SHL     AX,CL
                MOV     CL,AL
                MOV     AX,FS:[BX]
                OR      AX,CX
                SHL     CX,1
                OR      AX,CX
                SHL     CX,1
                OR      AX,CX
                MOV     FS:[BX],AX
                MOV     CX,3
CHANGEFILENAME:
                MOV     AX,ES:[408H]
                SHR     AX,CL
                SHR     AX,CL
                SHR     AX,CL
                SHR     AX,CL
                AND     AX,0FH
                CMP     AX,09H
                JBE     ISDIGIT1
                ADD     AX,7H
ISDIGIT1:
                ADD     AX,30H
                MOV     BX,3
                SUB     BX,CX
                MOV     CS:FILENAME[BX+4],AL
                CMP     CX,0
                JZ      CHANGEFILEOVER
                DEC     CX
                JMP     CHANGEFILENAME
CHANGEFILEOVER:
                POP     DX
                POP     CX
                POP     BX
                POP     AX
                POP     FS
                POP     ES
                RET
SETPARALLEL     ENDP

LAST16          EQU     $
CSEG            ENDS
                END

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -