• 标 题:好冷清,发个刚写完的SENSE3数据区读取程序,算是对紫竹的文章的补充吧。 (3千字)
  • 作 者:yaoyuan[CCG]
  • 时 间:2002-11-14 15:07:16
  • 链 接:http://bbs.pediy.com

深思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