home *** CD-ROM | disk | FTP | other *** search
/ Collection of Hack-Phreak Scene Programs / cleanhpvac.zip / cleanhpvac / CRYPT19.ZIP / ENCRCOM.ASM < prev    next >
Assembly Source File  |  1993-08-05  |  10KB  |  322 lines

  1. ;─────────────────────────────────────────────────────────────────────────────
  2. ;                   Black Wolf's File Protection Utilities 2.1s
  3. ;
  4. ;EncrCOM - This program encrypts specified file and attaches the decryption
  5. ;          code from EN_COM onto the file so that it will decrypt on
  6. ;          each execution.  It utilizes ULTIMUTE .93ß to protect then EN_COM
  7. ;          code from easy manipulation.
  8. ;
  9. ;LISCENSE:
  10. ;    Released As Freeware - These files may be distributed freely.
  11. ;
  12. ;Any modifications made to this program should be listed below the solid line,
  13. ;along with the name of the programmer and the date the file was changed.
  14. ;Also - they should be commented where changed.
  15. ;
  16. ;NOTE THAT MODIFICATION PRIVILEDGES APPLY ONLY TO THIS VERSION (2.1s)!  
  17. ;I'd appreciate notification of any modifications if at all possible, 
  18. ;reach me through the address listed in the documentation file (bwfpu21s.doc).
  19. ;
  20. ;DISCLAIMER:  The author takes ABSOLUTELY NO RESPONSIBILITY for any damages
  21. ;resulting from the use/misuse of this program/file.  The user agrees to hold
  22. ;the author harmless for any consequences that may occur directly or 
  23. ;indirectly from the use of this program by utilizing this program/file
  24. ;in any manner.
  25. ;─────────────────────────────────────────────────────────────────────────────
  26. ;Modifications:
  27. ;       None as of 08/05/93 - Initial Release.
  28.  
  29. .model tiny
  30. .radix 16
  31. .code
  32.        
  33.        org 100
  34.  
  35.         extrn   _ULTMUTE:near, _END_ULTMUTE:byte, Get_Rand:near
  36.         extrn   Init_Rand:near
  37.  
  38. start:
  39.         call    GetFilename
  40.         call    Init_Rand
  41.         call    Get_Rand
  42.         mov     [Key1],ax
  43.         call    Get_Rand
  44.         mov     [Key2],ax
  45.         call    Get_Rand
  46.         mov     [Key3],ax
  47.         call    Get_Rand
  48.         mov     [Key4],ax
  49.         call    Do_File
  50.         mov     ax,4c00
  51.         int     21
  52. ;---------------------------------------------------------------------------
  53. GetFilename:
  54.         mov     ah,09
  55.         mov     dx,offset Message
  56.         int     21
  57.  
  58.         mov     dx,offset Filename_Data
  59.         mov     al,60
  60.         call    gets
  61.         ret
  62. ;---------------------------------------------------------------------------
  63. ;---------------------------------------------------------------------------
  64. Message:
  65.         db      'EncrCOM 2.0 (c) 1993 Black Wolf Enterprises.',0a,0dh
  66.         db      'Enter Filename To Protect -> $'
  67. ;---------------------------------------------------------------------------
  68. gets:
  69.         mov     ah,0a
  70.         push    bx
  71.         mov     bx,dx
  72.         mov     byte ptr ds:[bx],al
  73.         mov     byte ptr ds:[bx+1],0
  74.         pop     bx
  75.         int     21
  76.         push    bx
  77.         mov     bx,dx
  78.         mov     al,byte ptr ds:[bx+1]
  79.         xor     ah,ah
  80.         add     bx,ax
  81.         mov     byte ptr ds:[bx+2],0
  82.         pop     bx
  83.         ret
  84. ;---------------------------------------------------------------------------
  85. Do_File:        
  86.         mov     ax,3d02
  87.         mov     dx,offset Filename
  88.         int     21
  89.         jnc     No_Terminate
  90.         jmp     Terminate
  91. No_Terminate:
  92.         xchg    bx,ax
  93.         call    GetTime
  94.         call    BackupFile
  95.  
  96.         mov     ah,3f
  97.         mov     cx,4
  98.         mov     dx,offset Storage_Bytes
  99.         int     21
  100.  
  101.         mov     ax,[Key1] 
  102.         xor     word ptr [Storage_Bytes],ax
  103.         mov     ax,[Key2]
  104.         xor     word ptr [Storage_Bytes+2],ax
  105.  
  106.  
  107.         mov     ax,4200
  108.         xor     cx,cx
  109.         xor     dx,dx
  110.         int     21
  111.  
  112. Encrypt_Entire_File:
  113.         mov     ah,3f        
  114.         mov     cx,400
  115.         mov     dx,offset Encrypt_Buffer                ;Read in buffer full
  116.         int     21
  117.  
  118.         or      ax,ax
  119.         jz      Add_Protection_Code                     ;None left? leave...
  120.         
  121.         push    ax
  122.         call    EncryptBytes                            ;Encrypt buffer
  123.         pop     ax
  124.         push    ax
  125.  
  126.         xor     dx,dx
  127.         sub     dx,ax
  128.         mov     cx,0ffff                                ;Go back to where we
  129.         mov     ax,4201                                 ;read from
  130.         int     21
  131.  
  132.         mov     ah,40
  133.         pop     cx
  134.         mov     dx,offset Encrypt_Buffer                ;Write it back
  135.         int     21
  136.  
  137.         cmp     ax,400                                  ;Buffer full? loop...
  138.         je      Encrypt_Entire_File
  139.  
  140. Add_Protection_Code:
  141.         mov     ax,4202
  142.         xor     cx,cx
  143.         xor     dx,dx
  144.         int     21
  145.         sub     ax,3
  146.         mov     word ptr [JumpBytes+1],ax
  147.         
  148.         push    bx        
  149.         mov     si,offset begin_password        ;On Entry -> CS=DS=ES
  150.         mov     di,offset _END_ULTMUTE          ;SI=Source, DI=Destination
  151.         mov     bx,ax                           ;BX=Next Entry Point
  152.         add     bx,103
  153.         mov     cx,end_password-begin_password+1 ;CX=Size to Encrypt
  154.         mov     ax,1                             ;AX=Calling Style
  155.         call    _ULTMUTE                
  156.                                                 ;On Return -> CX=New Size
  157.         pop     bx
  158.         
  159.         mov     dx,offset _END_ULTMUTE
  160.         mov     ah,40
  161.         int     21
  162.         
  163.         mov     ax,4200
  164.         xor     dx,dx
  165.         xor     cx,cx
  166.         int     21
  167.         
  168.         mov     ah,40
  169.         mov     cx,4
  170.         mov     dx,offset JumpBytes
  171.         int     21
  172.         
  173.  
  174.         mov     ax,5701
  175.         mov     cx,word ptr cs:[Time]
  176.         mov     dx,word ptr cs:[Date]
  177.         int     21
  178.  
  179.         mov     ah,3e
  180.         int     21
  181.         ret
  182.  
  183. GetTime:
  184.         mov     ax,5700
  185.         int     21
  186.         mov     word ptr cs:[Time],cx
  187.         mov     word ptr cs:[Date],dx
  188.         ret
  189.  
  190. Terminate:
  191.         mov     ah,09
  192.         mov     dx,offset BadFile
  193.         int     21
  194.         ret
  195. BadFile db      'Error Opening File.',07,0dh,0a,24
  196. JumpBytes       db      0e9,0,0,'ß'
  197.  
  198. EncryptBytes:
  199.         push    ax bx cx dx si di
  200.         
  201.         mov     si,offset Encrypt_Buffer
  202.         mov     di,si
  203.         mov     cx,200
  204.  
  205. Decrypt_Loop:        
  206.         lodsw
  207.         
  208.         ror     ax,1
  209.         add     ax,[Key4]
  210.         xor     ax,[Key3]
  211.         rol     ax,1
  212.         sub     ax,[Key2]
  213.         xor     ax,[Key1]
  214.         
  215.         stosw
  216.         loop    Decrypt_Loop
  217.         
  218.         pop     di si dx cx bx ax
  219.         ret
  220. Time    dw      0
  221. Date    dw      0
  222.  
  223. BackupFile:
  224.         mov     si,offset Filename
  225.         mov     cx,80
  226.  
  227.   Find_Eofn:
  228.         lodsb
  229.         cmp     al,'.'
  230.         je      FoundDot
  231.         or      al,al
  232.         jz      FoundZero
  233.         loop    Find_Eofn
  234.         jmp     Terminate
  235. FoundZero:
  236.         mov     byte ptr [si-1],'.'
  237.         inc     si
  238. FoundDot:
  239.         mov     word ptr [si],'LO'
  240.         mov     byte ptr [si+2],'D'
  241.         mov     byte ptr [si+3],0
  242.  
  243.         
  244.         mov     dx,offset Filename
  245.         mov     word ptr [SourceF],bx
  246.         mov     ah,3c
  247.         xor     cx,cx
  248.         int     21
  249.         jnc     GCreate
  250.          jmp    Terminate
  251. GCreate:
  252.         mov     word ptr cs:[Destf],ax
  253. BackLoop:
  254.         mov     ah,3f
  255.         mov     bx,word ptr cs:[Sourcef]
  256.         mov     cx,400
  257.         mov     dx,offset Encrypt_Buffer
  258.         int     21
  259.  
  260.         mov     cx,ax
  261.         mov     ah,40
  262.         mov     bx,word ptr cs:[Destf]
  263.         mov     dx,offset Encrypt_Buffer
  264.         int     21
  265.  
  266.         cmp     ax,400
  267.         je      BackLoop
  268. DoneBack:
  269.         mov     ah,3e
  270.         mov     bx,word ptr cs:[Destf]
  271.         int     21
  272.  
  273.         mov     ax,4200
  274.         xor     cx,cx
  275.         xor     dx,dx
  276.         mov     bx,word ptr cs:[Sourcef]
  277.         int     21
  278.         ret
  279.  
  280. SourceF dw      0
  281. DestF   dw      0
  282.  
  283.  
  284.  
  285. begin_password:
  286. ;------------------------------------------------------------------------
  287. db 0e8h, 090h, 00h, 08dh, 0b6h, 02bh, 01h, 08dh, 0beh, 093h
  288. db 01h, 0b9h, 034h, 00h, 0fch, 0ebh, 01h, 0eah, 0ach, 04fh
  289. db 08ah, 025h, 088h, 064h, 0ffh, 088h, 05h, 0e2h, 0f5h, 02eh
  290. db 083h, 0beh, 0c0h, 01h, 04h, 072h, 052h, 081h, 0aeh, 02ch
  291. db 01h, 00h, 01h, 0ffh, 0ffh, 00h, 00h, 0eah, 0c3h, 01h
  292. db 08eh, 086h, 0c6h, 02eh, 058h, 05bh, 059h, 058h, 0e3h, 08bh
  293. db 0d0h, 08eh, 093h, 050h, 0dch, 08bh, 0d0h, 08ch, 051h, 053h
  294. db 050h, 0dbh, 0ebh, 0f8h, 08bh, 0f0h, 08bh, 00h, 02fh, 0e8h
  295. db 0c0h, 033h, 01h, 02h, 06h, 031h, 01h, 0c8h, 086h, 08bh
  296. db 01h, 00h, 06h, 031h, 01h, 0c6h, 086h, 08bh, 0a5h, 0a5h
  297. db 01h, 0c2h, 0b6h, 08dh, 057h, 01h, 00h, 0bfh, 0c3h, 01h
  298. db 052h, 086h, 0c6h, 0e8h, 0e2h, 0abh, 0c0h, 0d1h, 01h, 0cch
  299. db 086h, 02bh, 01h, 0cah, 086h, 033h, 0c8h, 0d1h, 01h, 0c8h
  300. db 086h, 03h, 01h, 0c6h, 086h, 033h, 0adh, 041h, 0e9h, 0d1h
  301. db 0cdh, 08bh, 0feh, 08bh, 01h, 00h, 0beh, 05dh, 0ebh, 01h
  302. db 0eah, 055h, 081h, 0edh, 03h, 01h, 0e8h, 01h, 00h, 0c3h
  303. db 050h, 06h, 01eh, 033h, 0c0h, 08eh, 0d8h, 08eh, 0c0h, 033h
  304. db 0f6h, 033h, 0ffh, 0b9h, 08h, 00h, 0adh, 035h, 0dh, 0d0h
  305. db 0abh, 02eh, 0ffh, 086h, 0c0h, 01h, 0e2h, 0f4h, 01fh, 07h
  306. db 058h, 0c3h, 00h, 00h
  307. ;------------------------------------------------------------------------
  308. Storage_Bytes   db      90,90,0cdh,20
  309.  
  310. Key1    dw      0
  311. Key2    dw      0
  312. Key3    dw      0
  313. Key4    dw      0
  314. ;------------------------------------------------------------------------
  315. end_password:
  316.                 dw      0
  317.                 dw      0
  318. Filename_data   dw      0
  319. Filename        db      80 dup(0)
  320. Encrypt_Buffer  db      400 dup(0)
  321. end start
  322.