;编译步骤如下:
; Turbo Assembler:
; tasm demov6.asm
; tlink demov6.obj sense3.obj
;pass0,pass1,pass2为用户口令
;read_FunctionCode为软件狗入口,即从哪一行代码开始执行。
;本程序针对狗内代码如下
;ReadMemory:
; mov ax1,[bx0]
; ret 4
;其它方式可据具体情况处理。
include sense3.inc
Pass0 equ ????
Pass1 equ ????
Pass2 equ ???? ;user password
read_FunctionCode equ ? ;FunctionCode(0-47)
MainData segment public word 'DATA'
ssd dw SenseDataLength dup(0) ;sense3 data buffer
head_prompt db 0dh,0ah,'Sense3 doggie date ares readtiils Demo Program by yaoyuan[CCG]',0dh,0ah,0
Init_error db 0dh,0ah,'Initialize sense3 doggie error !',0dh,0ah,0
Init_succ db 0dh,0ah,'Initialize sense3 doggie success !',0dh,0ah,0
read_error db 0dh,0ah,'Read Sense3 doggie date ares error !',0dh,0ah,0
read_succ db 0dh,0ah,'Read Sense3 doggie date ares success !',0dh,0ah,0
cre_error db 0dh,0ah,'Create file snesedog.dat error !',0dh,0ah,0
cre_succ db 0dh,0ah,'Create file snesedog.dat success !',0dh,0ah,0
file_name db 'SENSEDOG.dat',0
file_buff db 128 dup(0)
handle dw 0
MainData ends
MainCode segment public word 'CODE'
assume cs:MainCode
assume ds:MainData
main proc far
push ds
xor ax,ax
push ax ;return address
mov ax,MainData
mov ds,ax
mov es,ax ;set ds,es
lea si,head_prompt
call dis_string ;display header
initdog:
mov ssd[Password],pass0
mov ssd[Password+2],pass1
mov ssd[Password+4],pass2
mov word ptr ssd[FunctionCode],-1
push ds ;call far _SENSE3
mov ax,offset ssd
push ax
call far ptr _SENSE3
pop ax
pop ax
mov ax,ssd[ReturnFlag] ;return flag
test ax,ax
jz open_success
lea si,Init_error ;error
call dis_string
jmp exit
open_success:
lea si,Init_succ ;success
call dis_string
jmp read_dog
read_dog:
mov cx,0h
mov di,offset file_buff
start_read:
mov ssd[OutWords],4
mov ssd[OutBuff+6],0h ;out ax0
mov ssd[OutBuff+4],0h ;out ax1
mov ssd[OutBuff+2],cx ;out bx0
mov ssd[OutBuff],0 ;out bx1
mov word ptr ssd[FunctionCode],read_FunctionCode
push ds ;call far _SENSE3
mov ax,offset ssd
push ax
call far ptr _SENSE3
pop ax
pop ax
mov ax,ssd[ReturnFlag] ;return flag
test ax,80h
jz read_success
lea si,read_error ;error
call dis_string
jmp exit
read_success:
mov ax,ssd[InBuff+4]
stosw
cmp cx,3fh
ja create_file
inc cx
jmp start_read
create_file:
lea si,read_succ ;read succse
call dis_string
mov ah,3ch ;create file "sensedog.dat"
xor cx,cx
mov dx,offset file_name
int 21h
jnb cre_ok
lea si,cre_error ;create file error
call dis_string
int 20h
cre_ok:
mov handle,ax
mov ah,40h ;write file
mov bx,handle
mov cx,128
mov dx,offset file_buff
int 21h
mov bx,handle
mov ah,3eh ;close file
int 21h
lea si,cre_succ ;create file succse
call dis_string
jmp exit
main endp
;---------------------------------------------------------
; subroutine: dis_string
; description: display a ascii_zero_end string
; input: ds:si (point to string)
; output: none
;---------------------------------------------------------
dis_string proc near
push ax
push bx
xor bx,bx
mov ah,0eh
cld
dis_str0: lodsb
test al,al
jz dis_str1
int 10h
jmp dis_str0
dis_str1: pop bx
pop ax
ret
dis_string endp
exit:
mov ah,4ch
int 21h
MainCode ends
end main