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

📄 code16.asm

📁 usb加密狗复制小工具 ┆加密狗信息复制工具
💻 ASM
📖 第 1 页 / 共 3 页
字号:
;*****************************************************************************
;*                                                                           *
;* PROT - A softdog killer                                                   *
;* Copyright (C) 1996, by Li Wen_xian                                        *
;* All rights reserved                                                       *
;*                                                                           *
;* This file is: CODE16.ASM, the 16 bit DOS entry/exit code.                 *
;*                                                                           *
;*****************************************************************************

INCLUDE         EQUMAC.INC
CODE16_FILE     EQU    1
INCLUDE         EXTERNAL.INC

CSEG            SEGMENT
                ASSUME CS:CSEG,DS:CSEG
                PUBLIC BACK16
                PUBLIC PM2REAL
                PUBLIC ENTRY
                PUBLIC _TSR
                PUBLIC _RTCSIP
BEG16           EQU     $

IDTSAV          DF      0       ;space to save old IDT
XZRO            DF      0       ;constant to inhibit IDT

;area to save stack pointer
SOFFSAV         DW      0
SSEGSAV         DW      0

TEMP            EQU     THIS FWORD      ;space to load GDT
TLIM            DW      GDTLEN
TEMD            DD      0

;old keyboard interrupt vector -- we have to catch reboots
KEYCHAIN        EQU     THIS DWORD
KEYOFF          DW      ?
KEYSEG          DW      ?

INTM            DB      0       ;interrupt mask - pic 1
INTMAT          DB      0       ;interrupt mask - AT pic 2

;psp
PSP             DW      0
PS2             DB      0       ;1 if PS/2 w/Microchannel
PC386           DB      0       ;1 if INTEL INBOARD PC found
IBPC            DB      'INBRDPC%',0    ;device name for inboard
_RTCSIP         DD      0       ;CS & IP   0
                DW      0       ;FLAGS     4
                DW      0       ;ES        6
                DW      0       ;DS        8
                DW      0       ;SS        A
                DW      0       ;BP        C
                DW      0       ;SP        E
                DW      0       ;DI       10
                DW      0       ;SI       12
                DW      0       ;DX       14
                DW      0       ;CX       16
                DW      0       ;BX       18
                DW      0       ;AX       1A
;error messages
NOT386M         DB      'Error: this program requires an'
                DB      '80386 or 80486'
                DB      'processor.',13,10,'$'
VM86M           DB      'Error: this program will not execute '
                DB      'in VM86 mode!!'
                DB      13,10,'$'
;cane messages
VERS            DB      'Softdog killer v1.0 Copyright (C) 1996, by Li Wenxian',13,10
                DB      'All Rights Reserved',13,10,'$'
HELPMSG         DB      '-------------------------HELP------------------------',13,10
                DB      '  CANE       -----Emulate the softdog',13,10
                DB      '  CANE /Axxx -----Analyse the softdog,xxx=extend mem kept',13,10
                DB      '  CANE /R    -----Read the softdog file',13,10
                DB      '  CANE /W    -----Write the softdog file',13,10
                DB      '  CANE /U    -----Free memory and to dos',13,10
                DB      '  CANE /H    -----Help',13,10,'$'
NOTINMEM        DB      'Softdog killer not in memory!!',13,10,'$'
RIGHTFREE       DB      'Softdog killer has been freed successfully',13,10,'$'
ERRORFREE       DB      'Softdog killer cannot be freed',13,10,'$'
DATAERROR       DB      'File cane.lad error!!',13,10,'$'
NOTCORRECT      DB      'Illegal parametre!!!',13,10,'$'
MEMORYLACK      DB      'Memory not enough!!!',13,10,'$'
FILENAME        DB      'CANE0378.LAD',0
GDTAREA         DB      16 DUP(0)
                DW      0FFFFH          ;src seg limit
                DW      0               ;src ptr low
                DB      0               ;src ptr high
                DB      93H             ;src rights
                DW      0
                DW      0FFFFH          ;desc seg limit
                DW      0               ;desc ptr low
                DB      0               ;desc ptr high
                DB      93H             ;desc rights
                DW      0
                DB      16 DUP(0)
_HANDLE         DW      0
_EXTENDADDR     DD      0
_EXTENDLEN      DD      0
_EXTSIZE        DW      0
_WRITECOUNTER   DD      0
_READCOUNTER    DD      0
RWBUFFER        DB      400H    DUP (0)

;16 bit ss/sp for return to real mode
LOAD16          DD      OFFSET SSEG1
                DW      SEL_RDATA

;**************************************************************************
;*            Begin program                                               *
;**************************************************************************
ENTRY           LABEL FAR

START           PROC    NEAR
                CALL    SETPARALLEL
                CALL    CHECKEXT
                CALL    GETPARA      ;get para 0: cane,    1: cane /a, 2: cane /w
                                     ;         3: cane /u, 4: cane /?
                CMP     AL,0
                JZ      EMULATION
                CMP     AL,1
                JZ      ANALYSIS
                CMP     AL,2
                JZ      WRITEFILE
                CMP     AL,3
                JZ      CANEQUIT
                CMP     AL,4
                JZ      CANEHELP
                CMP     AL,5
                JZ      READFILE
                MOV     AX,4C00H
                INT     21H
EMULATION:
                MOV     AX,DAT32
                MOV     FS,AX
                MOV     FS:EXEFLAG,0   ;emulation
                JMP     CANESTART
ANALYSIS:
                MOV     AX,DAT32
                MOV     FS,AX
                MOV     FS:EXEFLAG,1   ;analysis
                JMP     CANESTART
WRITEFILE:
                CALL    WRITEDATAFILE
                MOV     AX,4C00H
                INT     21H
READFILE:
                CALL    READDATAFILE
                MOV     AX,4C00H
                INT     21H
CANEQUIT:
                CALL    FREESPACE
                MOV     AX,4C00H
                INT     21H

CANEHELP:
                CALL    HELPUSER
                MOV     AX,4C00H
                INT     21H

CANESTART:
                PUSH    CS            ;set up DS segment,save PSP
                POP     DS

                MOV     AX,ES
                MOV     PSP,AX        ;save PSP
                MOV     BX,DAT32
                MOV     ES,BX
                MOV     ES:_PSP,AX    ;save PSP to global var

                ;check to see if we are running on a 386/486
                XOR     AX,AX
                PUSH    AX
                POPF
                PUSHF
                POP     AX
                AND     AX,0F000H
                CMP     AX,0F000H
                JNZ     SHORT NOT86
NOT386:
                MOV     DX,OFFSET NOT386M
NOT386EXIT:
                MOV     AH,9
                INT     21H
                MOV     AX,4C80H
                INT     21H

                ;here if it is 286 or better
NOT86:
                MOV     AX,0F000H
                PUSH    AX
                POPF
                PUSHF
                POP     AX
                AND     AX,0F000H
                JZ      NOT386

                ;if we got here we are on an 80386/486
                ;check PM flag
                SMSW    AX
                AND     AX,1            ;are we in protected mode?
                MOV     DX,OFFSET VM86M
                JNZ     NOT386EXIT

                ;Ok. we are clear to proceed
                ;See if we are on a Micro Channel PS/2
                MOV     AX,0C400H       ;get POS address
                INT     15H
                JC      SHORT TRYIB
                MOV     PS2,1
                JMP     SHORT ATSTYLE

                ;see if we are on an INTEL INBOARD/386 PC is so set flags in
                ;dat32 and in this segment
TRYIB:
                MOV     DX,OFFSET IBPC
                MOV     AX,3D00H
                INT     21H             ;try to open device driver

                ;jump if AT - CLASS machine
                JC      SHORT ATSTYLE
                MOV     BX,AX           ;close device
                MOV     AH,3EH
                INT     21H
                MOV     PC386,1
                MOV     ES:_PC386,1
ATSTYLE:
                ;display version information

                MOV     DX,OFFSET VERS
                MOV     AH,09H
                INT     21H

                ;Create segments
                PUSH    GDTSEG
                POP     ES
                MOV     EDX,OFFSET GDT  ;es:edx gdt address
                MOV     EBX,CS
                SHL     EBX,4           ;calc segment base address
                MOV     ECX,0FFFFH      ;64 K limit (don't change)
                MOV     AH,ER_CODE      ;read/exec code seg
                XOR     AL,AL           ;size 16
                MOV     SI,SEL_CODE16   ;descriptor
                CALL    MAKE_DESC       ;make code seg(16 bit/real)
                XOR     EBX,EBX         ;base
                MOV     SI,SEL_DATA0    ;descriptor
                XOR     ECX,ECX
                DEC     ECX             ;ecx=ffffffff
                MOV     AL,1            ;size 32
                MOV     AH,RW_DATA
                CALL    MAKE_DESC       ;make data (4G @ zero base)
                XOR     EAX,EAX
                INT     12H             ;get the actual mem
                MOVZX   ECX,AX
                SHL     ECX,10

                ;get free memory segment
                LOADFREE BX            ;base
                SUB     ECX,EBX
                DEC     ECX            ;limit
                MOV     SI,SEL_FREE    ;descriptor
                MOV     AL,1           ;size 32
                MOV     AH,RW_DATA
                CALL    MAKE_DESC
                XOR     EAX,EAX
                MOV     AH,88H         ;get top of extended memory
                INT     15H
                SHL     EAX,10
                OR      EAX,EAX        ;any extended present?
                MOV     ECX,EAX
                JNZ     SHORT EXTPRES
                MOV     ECX,1
EXTPRES:
                DEC     ECX            ;limit
                MOV     EBX,100000H    ;base
                MOV     SI,SEL_EXT     ;descriptor
                MOV     AL,1           ;size 32
                MOV     AH,RW_DATA
                CALL    MAKE_DESC      ;make extended memory
                XOR     EBX,EBX
                MOV     BX,SEG32
                SHL     EBX,4          ;base
                MOV     ECX,SEG32LEN   ;limit
                MOV     AH,ER_CODE
                MOV     AL,1           ;size 32
                MOV     SI,SEL_CODE32  ;descriptor
                CALL    MAKE_DESC      ;32 bit code segment
                XOR     EBX,EBX
                MOV     BX,USERCODE
                SHL     EBX,4          ;base
                MOV     ECX,USERCODELEN  ;limit
                MOV     AH,ER_CODE
                MOV     AL,1           ;size 32
                MOV     SI,SEL_UCODE   ;descriptor
                CALL    MAKE_DESC      ;make user code
                XOR     EBX,EBX
                MOV     BX,USERDATA
                SHL     EBX,4          ;base
                MOV     ECX,USERDATALEN ;limit
                MOV     AH,RW_DATA
                MOV     AL,1
                MOV     SI,SEL_UDATA    ;descriptor
                CALL    MAKE_DESC       ;make user data
                XOR     EBX,EBX
                MOV     BX,SS32
                SHL     EBX,4           ;always para align stacks !
                MOV     ECX,SSEG32LEN
                MOV     AH,RW_DATA      ;stack seg is data type
                MOV     AL,1
                MOV     SI,SEL_STACK
                CALL    MAKE_DESC       ;make stack

                ;16 bit data for return to real mode
                XOR     EBX,EBX
                MOV     BX,SSEG
                SHL     EBX,4           ;base

                ;real mode limit (don't change)
                MOV     ECX,0FFFFH      ;limit
                XOR     AL,AL           ;size 16bit
                MOV     AH,RW_DATA
                MOV     SI,SEL_RDATA
                CALL    MAKE_DESC
                XOR     EBX,EBX
                MOV     BX,GDTSEG
                SHL     EBX,4
                ADD     EBX,OFFSET GDT
                MOV     ECX,(GDTLEN)
                MOV     AL,1
                MOV     AH,RW_DATA
                MOV     SI,SEL_GDT
                CALL    MAKE_DESC
                MOV     AX,500H         ;set video to page 0
                INT     10H
                MOV     AH,0FH          ;get mode
                INT     10H
                MOV     EBX,0B0000H     ;monochrome
                CMP     AL,7            ;check for mono
                JZ      SHORT VIDEOCONT
                MOV     EBX,0B8000H
VIDEOCONT:
                MOV     ECX,3999        ;limit for text page
                MOV     AL,1
                MOV     AH,RW_DATA
                MOV     SI,SEL_VIDEO
                CALL    MAKE_DESC       ;make video segment
                XOR     EBX,EBX
                MOV     BX,DAT32
                SHL     EBX,4
                MOV     ECX,DAT32LEN
                MOV     AH,RW_DATA
                MOV     AL,1
                MOV     SI,SEL_DATA
                CALL    MAKE_DESC
                XOR     EBX,EBX
                MOV     BX,IDTABLE
                SHL     EBX,4
                MOV     ECX,IDTLEN
                MOV     AH,RW_DATA
                MOV     AL,1
                MOV     SI,SEL_IDT
                CALL    MAKE_DESC
                XOR     EBX,EBX
                MOV     BX,ISR
                SHL     EBX,4
                MOV     ECX,ISRLEN
                MOV     AH,ER_CODE
                MOV     AL,1
                MOV     SI,SEL_ICODE
                CALL    MAKE_DESC

                XOR     EBX,EBX
                MOV     BX,ISR
                SHL     EBX,4
                MOV     ECX,ISRLEN
                MOV     AH,RW_DATA
                MOV     AL,1
                MOV     SI,SEL_ISR
                CALL    MAKE_DESC     ;The alias of ISR

                XOR     EBX,EBX
                MOV     BX,TSSSEG
                SHL     EBX,4

                ;ceat TSSs
                MOV     ECX,TSSLEN
                MOV     AH,RW_DATA
                MOV     AL,1
                MOV     SI,SEL_TSS0
                CALL    MAKE_DESC
                MOV     AH,TSS_DESC
                MOV     SI,TSS0
                CALL    MAKE_DESC
                ADD     EBX,OFFSET TSS1BEG
                MOV     SI,TSS1
                MOV     ECX,TSSLEN

⌨️ 快捷键说明

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