深思III软件狗数据区读取程序
;编译步骤如下:
; 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
- 标 题:好冷清,发个刚写完的SENSE3数据区读取程序,算是对紫竹的文章的补充吧。 (3千字)
- 作 者:yaoyuan[CCG]
- 时 间:2002-11-14 15:07:16
- 链 接:http://bbs.pediy.com