首页
社区
课程
招聘
[原创]贴一个可以对付DOS下所有磁盘加密的仿真软件,现在还有用...
发表于: 2005-7-7 17:56 12737

[原创]贴一个可以对付DOS下所有磁盘加密的仿真软件,现在还有用...

2005-7-7 17:56
12737
收藏
免费 7
支持
分享
最新回复 (27)
雪    币: 240
活跃值: (78)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
26
直接I/O的模拟也不难对付,只要在软驱数据线上串进去自己做的一个小东西就可以了。
2005-7-14 17:23
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
m3b
27
最初由 swift 发布
直接I/O的模拟也不难对付,只要在软驱数据线上串进去自己做的一个小东西就可以了。

改造硬件?
2005-7-14 23:00
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
28
看你这个怎么对付,检测FE页映射,直接call F000:EC59,替换中断8h,0eh,15h
.386p
cseg    segment use16
        assume  cs:cseg,ds:cseg
        org     100H
start:
        jmp     begin          ;three byte
;------- Data area --------------------
tmp_sta db      82h dup(?)
drive   db      ?
cs_ip   dd      0
ss_v    dw      0
sp_v    dw      0
t_info  db      'RisingSunH'
nec_va  db      44h,20h,20h,4fh,01h,86h,06h
psp     dw      ?
o_int08 dd      ?
o_int0e dd      ?
o_int15 dd      ?
info    db      'Key disk simular program is in memory !',7,'$'
;------- Initial procedure ------------
begin:
        mov     cs:psp,es                       ; save psp
        add     ax,10H
        add     word ptr cs:cs_ip[2],ax         ; set cs:ip
        add     word ptr cs:ss_v,ax             ; set ss

        int     7h                              ; check SOFT-ICE
        jmp     short no_softice
        nop
        nop
        jmp     exit

no_softice:        
        smsw    dx                              ; test PE
        test    dx,1h
        jne     short prot                      ;protect mode ?
        jmp     no_prot
prot:
        xor     ax,ax
        mov     ds,ax
        mov     si,67h*4h
        lds     di,dword ptr [si]
        mov     ax,ds
        or      ax,ax
        jnz     short emm
        jmp     no_emm
emm:
        mov     ax,0de06h               ; get FEh page ?
        mov     cx,0feh
        int     67h
        or      ah,ah                   ; test FEh page sucess ?
        je      short test_ok
        jmp     test_failed
test_ok:
        cmp     edx,0fe000h             ; test unlock program ?
        jz      short no_unlock
        jmp     display_warn
test_failed:
no_unlock:
        jmp     mem_ok
display_warn:
        mov     ax,cs                   ; display warn message
        mov     ds,ax
        lea     dx,info
        mov     ah,9h
        int     21h
        jmp     exit
no_emm:
no_prot:
mem_ok:
        xor     ax,ax                   ; modify disk para
        mov     ds,ax
        mov     si,1eh*4h
        lds     di,dword ptr [si]
        mov     byte ptr [di+3],4h

        mov     ds,ax                   ; modify int 08h
        mov     si,8h*4h
        les     di,dword ptr [si]
        mov     word ptr cs:[o_int08+2],es
        mov     word ptr cs:[o_int08],di

        cli
        mov     word ptr [si],offset n_int08
        mov     word ptr [si+2],cs
        sti

        mov     si,0eh*4h               ; modify int 0eh
        les     di,dword ptr [si]
        mov     word ptr cs:[o_int0e+2],es
        mov     word ptr cs:[o_int0e],di

        cli
        mov     word ptr [si],offset n_int0e
        mov     word ptr [si+2],cs
        sti

        mov     si,15h*4h                ; modify int 15h
        les     di,dword ptr [si]
        mov     word ptr cs:[o_int15+2],es
        mov     word ptr cs:[o_int15],di

        cli
        mov     word ptr [si],offset n_int15
        mov     word ptr [si+2],cs
        sti

        mov     ah,30h
        int     21h
        cmp     al,6h
        jna     short callr
        mov     ax,3306h
        int     21h
        cmp     bl,6h
        jna     short callr
        jmp     intr
callr:
        mov     ch,79d                  ; set read specail disk
        mov     cl,25d
        mov     dh,01h
        xor     dl,dl
        mov     ax,9000h
        mov     es,ax
        xor     bx,bx
        mov     di,2h
callrl1:        
        mov     si,3h                   ; set count
callrl2:
        mov     ax,0201h
        pushf                           ; call F000:EC59  iret return
        db 9ah                          ; read info
        dw      0ec59h,0f000h
        jnc     short continue_callr
        mov     ax,0000h                ; reset drive A:
        int     13h
        dec     si
        or      si,si                   ; test count
        jnz     short callrl2
        inc     dl
        dec     di
        or      di,di
        jnz     short callrl1
        push    si
        jmp     resint
continue_callr:
        mov     cs:[drive],dl
        xor     ax,ax                   ; modify disk para
        mov     ds,ax
        mov     si,1eh*4h
        lds     di,dword ptr [si]
        mov     byte ptr [di+3],6h
       
        mov     si,3h                   ; set count
        mov     cl,134d
        mov     bx,800h
callrl3:
        mov     ax,0201h
        pushf                           ; call F000:EC59  iret return
        db 9ah                          ; read info
        dw      0ec59h,0f000h
        cmp     ah,10h
        je      short read_ok
        mov     ax,0000h                ; reset drive A:
        pushf                           ; call F000:EC59  iret return
        db 9ah                          ; reset diskdrive
        dw      0ec59h,0f000h
        dec     si
        or      si,si                    ; test count
        jnz     short callrl3
        push    si
        jmp     resint
intr:
        mov     dh,01h
        xor     dl,dl
        mov     ch,79d                  ; set read specail disk
        mov     cl,25d
        mov     ax,9000h
        mov     es,ax
        xor     bx,bx
        mov     di,2h
intrl1:
        mov     si,3h                   ; set count
intrl2:
        mov     ax,0201h
        int     13h
        jnc     short continue_intr
        mov     ax,0000h                ; reset drive A:
        int     13h
        dec     si
        or      si,si                    ; test count
        jnz     short intrl2
        inc     dl
        dec     di
        or      di,di
        jnz     short intrl1
        push    si
        jmp     resint
continue_intr:
        mov     cs:[drive],dl
        xor     ax,ax                   ; modify disk para
        mov     ds,ax
        mov     si,1eh*4h
        lds     di,dword ptr [si]
        mov     byte ptr [di+3],6h

        mov     si,3h                   ; set count
        mov     cl,134d
        mov     bx,800h
intrl3:
        mov     ax,0201h
        int     13h
        cmp     ah,10h
        je      short read_ok
        mov     ax,0000h                ; reset drive A:
        int     13h
        dec     si
        or      si,si                    ; test count
        jnz     short intrl3
        push    si
        jmp     resint
read_ok:
        push    si
resint:
        xor     ax,ax
        mov     ds,ax
        mov     si,8h*4h

        les     di,dword ptr cs:[o_int08]
        cli
        mov     word ptr [si],di
        mov     word ptr [si+2],es
        sti

        mov     si,0eh*4h
        les     di,dword ptr cs:[o_int0e]
        cli
        mov     word ptr [si],di
        mov     word ptr [si+2],es
        sti

        mov     si,15h*4h
        les     di,dword ptr cs:[o_int15]
        cli
        mov     word ptr [si],di
        mov     word ptr [si+2],es
        sti

        mov     si,1eh*4h
        lds     di,dword ptr [si]
        mov     byte ptr [di+3],2h

        pop     si
        or      si,si
        jnz     short test_read
        jmp     exit

test_read:
        mov     ax,40h                  ; test A: head station ?
        mov     ds,ax
        mov     si,94h
        xor     ax,ax
        mov     al,cs:[drive]
        add     si,ax
        mov     ax,[si]
        cmp     ax,79d
        je      short test765
        jmp     exit
test765:
        mov     cx,7h                  ; test NEC 765 value  
        mov     si,42h
        mov     ax,cs
        mov     es,ax
        mov     di,offset nec_va
        repz    cmpsb
        jz      short testinfo
        jmp     exit
testinfo:
        mov     cx,10d                  ; test information ?
        mov     ax,cs
        mov     es,ax
        mov     ax,9000h
        mov     ds,ax
        mov     si,2038d
        mov     di,offset t_info
        repz    cmpsb
        jz      short t_ok
        jmp     exit
t_ok:
        cld
        mov     ax,9000h
        mov     ds,ax
        xor     bx,bx
        xor     si,si     
        mov     di,2
p_c:        
        mov     cx,80d
p_cl1:        
        lodsb
        cmp     al,byte ptr [bx+si]
        jne     short no_eq
        mov     byte ptr [bx+si-1],0     
        jmp     p_cl2
no_eq:        
        mov     byte ptr [bx+si-1],1
p_cl2:
        dec     cx
        or      cx,cx
        jnz     short p_cl1
        dec     di
        jz      short comp
        mov     si,800h+1f30h
        jmp     p_c
comp:
        mov     cx,80d
        mov     ax,9000h
        mov     es,ax
        xor     si,si
        mov     di,800h+1f30h
        repz    cmpsb
        jz      short ok
        jmp     exit
ok:
        mov     ax,cs:psp               ; reset psp
        mov     es,ax
        mov     ds,ax
        mov     ax,cs:ss_v
        xor     bx,bx
        mov     cx,0ffh
        mov     ss,ax
        mov     sp,cs:sp_v
        jmp     dword ptr cs:cs_ip      ; jmp true enter
exit:
        mov     ax,4c01h
        int     21h
n_int08:
        sti
        push ds
        push si
        mov si,40h
        mov ds,si
        mov si,6ch
        add word ptr [si],1h
        adc word ptr [si+2h],0h
        cmp word ptr [si+2h],18h
        jnz short c1
        cmp word ptr [si],0b0h
        jnz c1
        mov word ptr [si],0h
        mov word ptr [si+2h],0h
        mov byte ptr [si+4h],1h
c1:
        pop si
        push ax
        push dx
        db 80h,3eh,40h,00h,00h  ;       cmp byte ptr [40],0
        jz short c2
        db 0feh,0eh,40h,00h     ;       dec byte ptr [40h]
        jnz short c2
        db 80h,26h,3fh,00h,0f0h ;       and byte ptr [3fh],0f0h
        mov dx,3f2h
        mov al,0ch
        out dx,al
c2:
        cli
        mov al,20h
        out 20h,al
        pop dx
        pop ax
        pop ds
        iret
n_int15:
        iret
n_int0e:
        push ax
        push ds
        mov ax,40h
        mov ds,ax
        db 80h,0eh,3eh,00h,80h  ;   or byte ptr [3eh],80h
        mov al,20h
        out 20h,al
        pop ds
        pop ax
        iret
cseg    ends
        end     start
2005-7-15 11:52
0
游客
登录 | 注册 方可回帖
返回
//