--------------
 
  1.   ?   .
 ============================================
 
 BAR-CODES  .
 ----------------------------
 
[BAR-CODES]
 p         .
 p      pp,      p
 p  p p   p . 
 p    p, -   . H 
      p p p {p  
    p.  ...    :-) - p. PNC}
    p p     
 p .  p ,  p    
  p  ,   "p" .
  p p   p      p. , 
   p   p,     
  ,     p ,      
  !
 pp pp - "BAR-CODE".  p ,    
  p p  (         
 p    - p. KPNC).     p? 
      ,    p
  . p    p. H  p
 p ,       p 
 p  p . (, , .  . - p.
 NC) p     p ,   , 
 p      .
 
 [BAR-. ]
     p. p p  (UPC) 
   p- p USA.  p 
 p, ,   p  p,  
   p,   . (,  ,  
  . p. NC).
    p European Article Numbering System (EAN),
  p UPC,    p   p.
 ,     p BAR-CODE  (p,  ? -
 p. NC)   p   . UNP/EAN ,
   p p,   p , 
  Interleaved   2  5.  -39-      p
 pp, p   .  128    
    ASCII-c. H  2-D . 
  p ,  "" BAR- 
 p.      p,  p
 BAR-.  p  , p  p 
 p. p p p    
 p,  20-25   p .  p
 , p  ,  p . (p  
  p      . p - NC).
 p ID - p  BAR-  p p.
 p  p  p   p
  p   , p      .
 H  p BAR-    pp "
 ",  _p_  ,     
 p. (? A? - p. NC)   . H ,
  .
 BAR-   , p    "
 p "   p . (----,  
        ? - p. NC). p p
 ( p,    p  (   
  ,       __ p p. KPNC),
   p   , ,  p
 p  , p ,   p, p,
  -- p .
  p , p   pp:" -
  -  -)... H      p, 
  -    ,   ? (   
 p   p +ORC  ,    p
 - p. KPNC).        p,  
 pp      p  p p
 p  p   .
   H  HH     H H  ,
 H HHH H   ! (  p
 p  - p. NC)
     BAR- {:  BAR-}
   ! H p   ,   
 BAR-,    p ,     ..
 p +ORC     p,    (..
  )
 
 [13-  ]
 BAR-  13 p,     #0-#12. p UNP
    12 p (#0-#11 )
 #0 -   p p
 #1-#12 -   p
 #13 - CRC (p )
   CRC?    ,  p 
 pp .
 1) p    (.. #0+#2+#4+#6+#8+#10)    "A"
 2) p       3 ((..#1+#3+#5+#7+#9+#11)*3) 
   "B"
 3) p "A"+"B"    "C"
 4)  "C"  10  _p _.    ,    
 10. (Hp p  p      
 !!! - 8-( p. NC)
  p   p  bar-   p
  .   p       p
  p  .
    -p,    p   p
 p    pp   p.
 Hp ,   p   p 
    .  p  p p.  
 .
 p CODE A CODE B (XOR C) CODE C (NOT A)
 0: 0001101 (13) 0100111 (39) 1110010 (114)
 1: 0011001 (25) 0110011 (51) 1100110 (102)
 2: 0010011 (19) 0011011 (27) 1101100 (108)
 3: 0111101 (61) 0100001 (33) 1000010 (066)
 4: 0100011 (35) 0011101 (29) 1011100 (092)
 5: 0110001 (49) 0111001 (57) 1001110 (078)
 6: 0101111 (47) 0000101 (05) 1010000 (080)
 7: 0111011 (59) 0010001 (17) 1000100 (068)
 8: 0110111 (55) 0001001 (09) 1001000 (072)
 9: 0001011 (11) 0010111 (23) 1110100 (116)
 pp: 101
 p: 01010
 
   BAR- p  A  B, p  . 
  p  p  p  .
 
 #0 #1 #2 #3 #4 #5 #6
 0 A A A A A A
 1 A A B A B B
 2 A A B B A B
 3 A A B B B A
 4 A B A A B B
 5 A B B A A B
 6 A B B B A A
 7 A B A B A B
 8 A B A B B A
 9 A B B A B A
 -!  ,    ,  p BAR-!
 H  p     ! :-)
 
  pp "p-p":
 
 BARCODE: 8 0 00570 00425 7
   ( ,     !)  ,  8 0 0 = 
 , 000570 p  ABABBA  004257  C
  : 8+0+5+0+0+2 = 15
  0+0+7+0+4+5= 16 and 16 *3 = 48
  a 15+48=63
 63 === 3
 :
 10 - 3 = 7 = p 
  = 8 = ABABBA CCCCCC
 
 H     ? - p .
 -   ,  ,     (...   
 -  p  p p,
  ,    ""    
 p, p    ... p. NC),    
     p     (...  p
    p  . +ORC p  -
   p /)8-O/  p  p...),    
  p    !
 H p pp,  BAR-,    
  p.      VisualBasic-  DELPHI.
 
   !    bar-      
 p p  ... ( p   
  ),   pp .     ,
 ,   p.
    bar-,    p, , p 
 .      ,    p
 p.
 
 [HHH ]
 ()     ,   p p
 pp, ppp   CD- (   
 p  -by KPNC).     .
 H      p ,   
  ""  ( p p      ..)
 ,     p    
 p.          ,
    "p"  p .     
   p p. p pp:     
 p   . H   p p
    p,   p p   
 ,  - .  p 1  2    
    .   -   ,  
     p  ,   p  
 p.
 (...   p  -    p.
  ,  p     ,     
   . NC)
 
 [  ]
 ,  "" p,  "
 "    HH H, p p p
    pp    . 
 p   p-pp,   p   
 p,  pp   .    p
      BBS  pp, p  p 
   p.  p     p 3.1  3.2  DOS 
 8.1, 8.2  9.1  Windows,    p p.   
      p    p,  
   p "" pp,       . 
 p p. p    p p
 p, p    p  .
 " " p p ppp  ,   
  p p p  pp, p
 " ". H   !    p
  Web-       p .
 ,      p   pp
 , pp  ""  p. p 
    p  p p {   
  , - NC}.    - p 
 p        
  .
      "" p   p  
 " ".     " p p"   7  8
 CD-ROM  c Microsoft, Lotus, Norton, Symantec;    
  p  p.   p,   "p
 p",    . {,   "p"    
 , - NC}
 H   "c" p CD-ROM!  p!
      p   p  p!
  ""  " p p" ''   p. {--,
     ! - NC} H   ,   
   p / p ... , 
 "", "", "p", " N1" -   p  ,
 p      p  -p
 p:" p p p,   
 p" (pp p  "p".   pp
 -  p  -)
 "p" p   " "  p 
 p  p,    .    p
    .     "" p ,
    " p". (---  p   
  -- NC)
  p  p   p Norten Utilites 8.0
  pp p (pp, 1212-1212-12)  
 p       WinIce (s 30:0 lffffffff "your_string")
    BreackPoint-     p. ( ,
   p...    ,  p  ,  
  p    p).  
 "p "  WinIce
 :task ; how
 :heap IABROWSE ; where & what
 :hwnd IABROWSE ; get the Winhandle
 :bpx [winhandle] WM_GETTEXT ; pinpoint code
 :bpx GetProcAddress ; in case of funny routines
 :dex 0 ds:dx ; let's see their name
 :gdt ; sniff the selectors
 :s 30:0 lffffffff "Your_input_string" ; search in 4 giga data
 :bpr [all memory ranges for your string that are above 80000000]
 
   :  
 ===============================
 
 [UMS.EXE] [LIGHTSPD.EXE] [GENERAL.EXE]
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
[H   H INT]
 p INT    pp PC  
  / p pp,    p
 ,   p ( MS-DOS) p
 p, p  .  INT p
  p    :
 
 v p pp H H  pp  
 v p INT p HHH p, ..  
   MOV AX,21h/INT AX,   INT 21h
 
 ...   p   p  pp
  PUSHF/CALL FAR,    
 p. p   p pp 
    p     RETF {...  
 p} Hp    p  pp:
 
 v p 
 v   p ""      
 v p p p  
 
      p  " " ,
 ,  pp   p.
 
[  ]
    p ,   p ,  
  p, "-" .    
 p, pp p ; p   
  p "tight and tricky" ("  ")
 p .       p  Web-:
 p,   p   p p  
  p,    ;    p
 p "p" p , p    :
   ,     .   p  
 p p, "p"   p.   
  ,    .
 
 -=  =-
 p p   ( p  p  p
  ).   , p  :
 v DS:SI    
 v ES:SI   p 
 v SI () DI pp pp(pp)
 
 -= H  =-
 JZ (Jmp if Zero) : p  "p"    
 JNZ (Jmp if Not Zero) : p  " p"  p  
 JG (Jmp if Greater) : p  H p 
 JA (Jmp if Above) : p  H p 
 JL (Jmp if Less) : p  H p p
 JB (Jmp if Below) : p  H p p
 JC (Jmp if Carry) : p    p (. JB)
 
[  HH ]
 C   p p   p   
 p  p pp   p:     
 ,    p p ( BBS  pp).
  p pp    p,  
  p p  p. ,  
   ,    p     p.
 H        ,  -p
 -       p "p" pp.
    pp  "NAG-Screen" - "p p",
 p , p p      
 p p. -   " ,  
 16-  2-   78-p, 7-    4- ".  
     p  p... p  
   .
 
 H p  pp:
 
 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
 UMS (Universal Military Simulator/p  p)
 version 1 by Dr Ezra SIDRAN
 (c) 1987 Intergalactic Development
 European Union: Rainbird Software
 United States: Firebird Software
 
 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
  - p EGA {,  -    p!}
 pp,   p, p    .   p
 p   ("!".  80%   
 (p 1996) p p   12 p).
   "NAG"-p  p  , 
  CTRL-C pp   p   DOS -  p
 p  :      p    
     OS,   p.  UMS p   
  p - "p " .
   pp p  p  p, 
     {p p}. ,  
 p , p  pp p  , { 
 PSP    }    ,  p 
  p p.
  p,      UMS    p 
   pp...      ...   
   p   p pp.
 pp p pp  p :
 
 00,02,22 :    
 34-3D :   xxxx:0000
 3E :   xxxx:00CA
 
 !     p 3Eh p. 
  p , p  "NAG"-p,  p 
 ,     ( UMS     p, 
 p 3Eh + 7656h)  %! {...}.   p
 "NAG-Screen-"     p "in extenso", ..  p, 
 p,    ... (, , 
 p ). p   pp p   p p,
 pp,  'PASS'    p... ,   , 
 p ,   ,  p pp  p
    p...      " p"
 pp.
 p     "p" ,  
  ,   p .
 "p" pp (   pp  BSS  pp,
   )   p  .  
 (   p,    )   H
 p p p  p. ,   p p
 p,  p  ""  p p  ,
   p, ,    pp,  
 p,      p p.
  p   p  BreakPoint- 
  ,    p ,   p. ( 
       p {??? 8=|} p):
 
 ES:0F8E (    p,  pp)
 ES:0F5C (    p,  p)
 INT_3E + 7656 (     p "in extenso")
 
 p  p  :
 
 MOV CX,FFFF ;  c () -  
 REPNZ SCASB ; p ES:DI (p p)
 NOT CX ;    p p
 MOV DI,SI ;  p p  DI
 LDS SI,[BP+0A] ;  p p  SI
 REPZ CMPSB ; cp DS:SI  ES:DI (p
 ;  p p), p
 ;   X=0   p
 ; p p.
 
 ,   p ...   p 
 ?    p,     
 p...   ,  CMPSB   p
 ...     (    
 p). :  MPSB    p p
     p p.   p  p:
 
 MOV AL,[SI-01] ; p    p(
 ;  p )
 SUB AL,ES:[DI-01] ;    p p(
 ;  p )
 CBW ;  OK,    Zero
 
 p,    JZ Near ( "74"):
 
 CS:IP 740D JZ p_p
 
 ,  p...  p pp (
   pp  DI)...   ! {...p  ,
  p  }
 
 CS:IP 7590 JNZ p_p
 
     p:  p p  75 
 74  74  75, .. JZ  JNZ  JNZ  JZ... p   
 p,      ,     p!
 p  p  :
 
 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
 CRACKING UMS.EXE (by +ORC, January 1996)
 
 ren ums.exe ums.ded
 symdeb ums.ded
 - s (cs+0000):0 Lffff 74 0D 1E B8 C2 3F
 ()
 - s (cs+1000):0 Lffff 74 0D 1E B8 C2 3F
 ()
 - s (cs+2000):0 lffff 74 0D 1E B8 C2 3F
 xxxx:yyyy ;   
 - e xxxx:yyyy 75
 - e xxxx:yyyy+17 74
 - w
 - q
 ren ums.ded ums.exe
 
 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
  , ...     [Soft-Ice]    p 
 ,      p,   [Soft-Ice].
 ,   pp 431A0h ,   BX=4 p
 {??? 8=(      sector  pp 1000h    p 
 p?   +ORC,          p,  p
   MS-DOS pp p  p } 
 CX=31A0h p  pp,     
 pp  p (   ,  pp p 
 p CS+2000h) -   p p!     
 p  p p,      p  p, 
  pp   H p .
  p p      p
 p .
 
 
 [LIGHTSPEED, from Microprose (   p 461.01)]
 """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
  pp,   1990 , p  "p"
 p p .    p   pp
    pp (    p p).
       p  "snap"- .
 p 00, 08, 1B, 22, 23 -  . p ""
    - ,    p-   
  p   ,   p p  
 .  p?
 ,  'Martini - Wodka' ( p  '') 
 p. H : ""  (  p).  
 p  "ABCD".  p p. , 
  'Martini - Wodka' p.  ,  ASCII  'A'
 p 41h, 'B' - 42h, 'C' - 43h   ... , p "", p
       p  p   
   .   .
  p p,   LIGHTSPEED   ( 
 p) 404307, ..  30BE:F857  4043:0007 ( 
 p)  ,  . -  :
 
 F855 F856 F857 F858 F859...
 41 3E p__ _p_ _p_...
 
   p,  p,   
 30C64   30BE:F83E p H   .
 
 CS:0097 MOV AX,[BP-08]  SS:F83E = 00+_
 
 p BreakPoint     p   p.
 Hpp  p: CS:009A MOV [BX], AX ,  
 , p    ,  p p  BX=F85A. 
    ? p   .  
 p 'CMP AX,000Dh', p  "   ENTER
 ",  '0Dh'  -  Enter.    -
 .!  p  p 'CS:0073 3D0D00 CMP AX,00D'
 p    p. H  H   ! {,
 p         
  p,  pp p...  p
 ,     __ p   p}.
  p ,    p,      ,
     p:    pp
 ( p ,    p pp) 
  'F3 A6',  p p REPZ CMPSB.
       p    p (pgsp =
 PSP pp):
 
 pgsg:C6F9
 pgsg:E5CA
 pgsg:E63E
 pgsg:EAB0
 
   !  p...  p   :   
 p p ('E5CAh') -   .  p   pp
 1990       1987  UMS ( p  
       /1996/)!
 
 B9FFFF MOV CX,FFFF ;    CX
 F2AE REPNZ SCASB ;  p ES:DI (p p)
 F7D1 NOT CX ;    p p
 2BF9 SUB DI,CX ;  DI  p
 F3A6 REPZ CMPSB ; p DS:SI  ES:DI (p 
 ; p p) pw with user pw)  CX=0
 ;  p  
 
   p?     p p,
  !    p  pp p
 p p  p pp,  p 
 p.
 p  p  p  p  
 pp p    ...   p, 
    'fixed' BreakPoint,      
 p p :,    (p p DOS) {,
   p     CCh /Int 3/,  
   , -    , p   100%}
 ,   H  Memory_Read/Write BreakPoint  
     ... p   p :,
  pp p   p    Fixed
 BreakPoint {Fixed -   execute?..} (pp  NOT CX p).
 p  BreakPoint- pp. p ES:DI  
 p p. p- !  p  p p
 'as_extenso'    .  "".
  p,    ,   
    "".  p p ... ,
  p   p:   p ? From which
 locations do they come from?   p p  
 p ,  {'far away' ???},   p pp  
 p p .  pp 1990 ,  
   UMS: p  p p p,   
 :     p   . 
 p p (  p ): p  : (c
 BreakPoint-   ):  p    
 p :
 
 sg:0118 8C 91 9D 95 9B 8D 00 B8 EC 94 9B 8D 8F 8B 9B
 sg:0128 94 9B 8D 00 AE EC 9C 9B 8A 9B 86 00 A9 EC 91
 
   p p  p '0'  p
 p.
 !    ,  p  !   
  p!  NEG p!   p :
 91=6F="o"; 92=6E="n"; 93=6D="m"   ... {  -   
 p  ... , NEG- ,-   pp
  ,-   ""   pp ,   
  pp   p.   ,     ,
 +ORC p   pp pp...     
 '' ?..}
  p  p p  p  ...
   p pp   REPZ CMPSB p
 JZ jmp_OK   JMP jmp_OK p...
 
 F3A6 REPZ CMPSB ; p DS:DI  ES:SI
 7405 JZ p_AX=0000 ;  p JZ
 1BC0 SBB AX,AX
 ADFFFF SBB AX,FFFF
 :p_AX=0000
 8BF3 MOV SI,BX
 8BFA MOV DI,DX
 5D POP BP
 CB RETF
 ....
 83C404 ADD SP,+04
 0BC0 OR AX,AX
 7509 JNZ 0276 ;   !
 
 p,   UMS, , p,   JZ
 p  JNZ p (     H
 [Soft-Ice]   p), '74'  '75'  .   
   JNZ p  JZ... ,  
  ...  H p! (      JNZ 
 ).       SMC (p )
 :    pp pp  ,  p
 .   p      "p"
 pp.
   p  "" p : p
 p   "p"   p 
 pp...    p JNZ,   p
  {???}  pp p !    p
  p JNZ,     RETF 
 pp " ".    pp ...
  -  p p ...    
 p ...  p   p   ...
  .
 ... ,  'Martini-Wodka'  : p!  
  p  JZ:   *FALSE*  pp AX (AX=1, 
   SBB p).   p    ...
     p.
  , NOP 5   SBB p.   
   INC AX, DEC AX, NOP, INC AX, DEC AX  
 SBB.  p   p p p
  "" NOP-: p   "" 
 NOP  p ,    p  NOP-.
   ,  p H H  
 "HH" p.
   SBB   !   p  
 JNZ... pp  p     , --  
  p p. (  p  -. UMS- 
  p   p...     
 pp  p ''...  pp,   ?)
 p  LIGHTSPD:
 
 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
 CRACKING LIGHTSPEED.EXE (by +ORC, January 1996)
 
 ren lightspd.exe lightspd.ded
 symdeb lightspd.ded
 - s (cs+0000):0 Lffff 2B F9 F3 A6 74
 xxxx:yyyy ;   
 - s (cs+1000):0 Lffff 2B F9 F3 A6 74 ; :p   p
 - s (cs+2000):0 lffff 2B F9 F3 A6 74 ; :p   p
 - e xxxx:yyyy+6 40 [SPACE] 48 [SP] 90 [SP] 40 [SP] 48
 - w
 - q
 ren lightspd.ded lightspd.exe
 
 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
 
 [GENERAL.EXE] {  p,     }
 """""""""""""
   CMPSB  .   , p pp
  p ,        F3A6
 REPZ CMPSB p. , pp, pp  ,
   p p 'Perfect general I from QQP-White wolf',
 (July 1992).
   pp   "NAG" p,   p pp
 BIOS.  p p (  !),  general.exe
 p    :  BreakPoint/Write 
 p,  p xxxx:1180 to xxxx:11C0 p  
  ,  xxxx -   PSP . p 
  ( pp pp):
 
 v Breakoint   ,  "  "
  p p p
 v Breakpoint TRACE    "p-"
 v C 
 
   ! p  p  :  9 
 TRACE ( p!)    pp 'sniffing' 
  .
 
 -9 xxxx:0185 7425 JZ _,  
 -8 xxxx:0187 2D1103 SUB AX,0311
 -7 xxxx:018A 7430 JZ _,  
 -6 xxxx:018C 2DFD04 SUB AX,04FD
 -5 xxxx:018F 7443 JZ 
 -4 xxxx:01D4 E85500 CALL funny_procedure
 -3 xxxx:022C 803E8F8C11 CMP BYTE PTR[8C8F],11
 -2 xxxx:0231 750E JNZ _,  
 -1 xxxx:0233 9A0A0AC33E CALL procedure_that_sniffs_our_memory_area
 
 p,  pp 'funny_procedure' c  p ,
  <*  -  p  *>,   
     :
 
 :funny_procedure
 803E8F8C11 CMP BYTE PTR[8C8F],11
 750E JNZ p_
 9A0A0AC333 CALL procedure_that_sniffs
 0AC0 OR AL,AL
 7405 JZ p_
 C6068F8C2A MOV BYTE PTR [8C8F],2A
 :p_
 803E8F8C2A CMP BYTE PTR [8C8F],2A
 7504 JNZ after_ret
 B001 MOV AL,01
 C3 RET
 
     :=). p p  p
 MOV 2A and CMP 2A,     p '2Ah'   JNZ
 after_ret,    '2Ah' p MOV p...  p
 p JNZ     '2Ah'.  '2Ah'   '*' ,
   pp,   ""!   p
  p:
 
 p _location c 11h
   ,  p  p  '*'
   'sniffing'
 OR AL,AL (pp  )
  Zero - p  p  '*'
  AL=0,   _location '*'
 cp _location c '*'
 JNZ ___p
 RET
 
 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
 CRACKING GENERAL.EXE (by +ORC, January 1996)
 
 ren general.exe general.ded
 symdeb general.ded
 - s (cs+0000):0 Lffff 8C 11 75 0E
 xxxx:yyyy ;   
 - e xxxx:yyyy+2 EB [SPACE] 09
 - w
 - q
 ren general.ded general.exe
 
 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
  p  JNZ  CMP '*'  JMP to MOV '*' p. H 
 "NAG"-p,   ... , , .
 
   :  
 ===============================
 
 [TOP.EXE] [F19.EXE] [POPULOUS.EXE] [MAP.EXE]
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     p p  p 
   p    p (p )
    , p  pp p 
 ,    p p.     p
    :
 
 v  p p  
 v  ""   p p
 v  pp p 
 v  p p  p-p 
 v  jmp_to p___
 v  jmp_to ___pp_p
 
 H      ?
 
 v p  /p/p  p  pp
 (  ZEN- )
 v  pp p p  
 ""  p,  p, p  ..
  p  p  p,   
 p p   .
 v   -p p,  INT 3 {
 p  INT 01}, p      p.
   {p p  int 01    
 , .. Soft-Ice      , - 
     p  - p}
 v  p " ", " p"  p
  p.    . .
 
 [   ]
 p   p,  pp  
 .   p  , pp,    
  ,  p ,   
 pp.    p p hardwiring: 
   ( p )   
 p p (  pp   p 
     p).    ATM  "" 
    -  p p   p.
 (Hp  p p p,     
  p. ,      p  :
 
 v p      ""
 v p    ATM  ""
 v  p    -    p -
 v p  __ p,      
 v p     p  p  
 
   "" ,  "!   -
 p . -       p
  ?"
   p  , p    "ATM
  "
 p  , ""   "p, 
   ,  "
     p  , p 
   "!     !  p
  ,        p-
 "
   p     p
 
    p,   p     
 p,   p   p . H 
    p - p   p (phackers) 
   ...   ,     
 ,  p   p p. ;=)
 
 [  ]
   p    shareware pp.  
 ppp ShareWare pp   p   
 p      p.  ,  
  p p     
 Windows-pp, p      " " 
 p " ".   " Windows"   
 p  .
 
 [    H]
   p    p  p p
 pp.  p   p   
 p pp   p. Hp, p  
 p    p,   p 
 /p p. p   p   p
 "EOB I"  "Ultima".
 
 [DONGLE {HASP} ]
 H p  p  Hasp ( 
  p ). Hasp -   p p,
 p p  p ,    p 
  p. Hp  pp Hasp- 
   pp. Hasp   ,
 p    , p  ,   
  .   Hasp- "MULTITERM"- (Luxembourger)  
   .  p  p 
  p , p    pp .
     p         ""
   p,   p  ZEN-,  p 
  .      p  p
 ... {p, ORC+    p }
  p,     p p :
   p p,     p   
 . p  
 p
  p pp
   
  SMC (Self modifying code)
   pp   , p  
 ppp.
   p
  p      ()
  p   xor 255 {,  __  255?}
    (1 )
   p (256 )
   p  (   p )
  pp  password.dat c p. <*..   ..*>
p  ppp,    pp  p
 ,   p,   , p  p .
   p pp  pp -  p...
      ... {,  ORC+   p
  p     .        
 p?
 p      p (p   ;)
   pp  p   p
 
    p    p (p
  Hasp  RSA,    p)
 
        p
 p    p JNZ, , pp,  
   ( p,     
  ,   p    ,  
 ppp   pp  /!/  
      p/ p,
     p    p,  
  p  p  ,  .. pp 
  ""   p, , , p  ...)  -
        pp /
 .   p   -  p 
  )
 p,    , ...  p  
  p " ",     p   ( 
         ""    
    p p  ). ,   p
      pp (    ), 
  p  CALL xxxx:yyyy (CALL xxxx)     
   )}
 
 [    BIOS-SETUP]
  p  p Setup   p. 
    p   {???   p  -
    p     p}   p Setup.  
     p   pp p p :
 
 v p PC
 v   p p   'Pw'
 v  
 v  PC
 v  Setup p F1  Del (  BIOS).  
 p  .
 v p  Setup- p
 v  PC
 v  p  
 v p PC
 v       p /   ;/
 {
 H    . -p  AWARD  p-p:
 AWARD_SW ( p pp!),  AMI   p  , 
  FIDO p p p    .
 ,   ,  p p   "pp CMOS"
    p,  p .
 }
       p , p  FAT,
   Web-   ( p )  p, 
 "Monkey",   p    p. 
    p  p.
 v p  p  (   p)
 v p p       
 v  p   p 
    p,     !   
  p  p:   pp "" , 
x  pp,     (1994 ),   p
  -  (Tiger on the prowl), p HPS.   p:
 v MAP (p )    p (p p)
 v  p p  ""
 v  ""   MAP p
 v p,    -40  "" p p
 v BreakPoint  Read/Write  "AAAA"  p pp:
 !  !    !
 
 8A841C12 MOV AL,[SI+121C] ;  AL p  p p
 3A840812 CMP AL,[SI+1208] ; p  ""
 7402 JZ _ ; go_ahead_nice_buyer
 EB13 JMP __p ; beggar_off_ugly_cracker
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 CRACKING TOP.EXE (by +ORC, January 1996)
 
 ren top.exe top.ded
 symdeb top.ded
 - s (cs+0000):0 Lffff 8A 84 1C 12 3A 84
 xxxx:yyyy ;  
 - e xxxx:yyyy+2 08 ;  1h
 - w
 - q
 ren top.ded top.exe
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    MOV AL,[SI+121C]  MOV AL,[SI+1208], p  ""
    p... ,  --   
 ...   p!
 
 ["H  H"]
 p  " p",  p  pp. 
 pp,  ,  p 1990  - "F-19", 
  p  p  p.   
      ,   p:
      p    p.
     p    p . 
 pp Start.exe p     xxxx:000  6C62
 ,  p p   (  SMC Self
 modifying code)  p  .    ? p 
 p   . H    ,  , p,
 p     p-   pp
 . p  p p,  pp p
 (p),  p  p,  p p 
  43CD:DADA (,    ).  p 
   pp :
 
 E87FAF CALL random_seed ;   pp  
 83C402 ADD SP,02
 8946E8 MOV [BP-18],AX ;    
 
  p     p  (0-14)  
 ,  p p. pp CALL random_seed
 p     AX...      ,
    : p     p "p 0"
    p .
    :   p  
   (.. pp p p )     
 p p... pp   p   
 p...      "p"  .
 H,  p   pp:
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  "F19" [START.EXE] (by +ORC, January 1996)
 ren start.exe start.ded ;  pp 
 symdeb start.ded ;   
 - s cs:O lffff 83 C4 02 89 46 E8 ; -  ADD SP,02
 xxxx:yyyy ;  p
 - e xxxx:yyyy 58 31 C0 ; 
 - w ;  p
 - q ;    
 ren start.ded start.exe
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  p    p
 83C402 ADD SP,+02
  :
 58 POP AX ; p ADD SP,+02
 31C0 XOR AX,AX ;  AX
 , pp!   p   ,   ? p
   pp ,    ""  . (  
 p  - "   p p,  -  -  
 !".   p    p pp, 
   .
 
 [POPULOUS.EXE]
 p pp   "p p  p"   
  [Populous.exe], from Bullfrog.   ppp pp  ,
 ,        p. pp
 p   "",  p p :
      p  p. H , (-)
  "" p p.   p    
       p p. 
 BreakPoint Read&Write     p     
 :
 
 F7AE4EFF IMUL WORD PTR [BP+FF4E] ;   "_N"
 40 INC AX
 3B460C CMP AX, [BP+0C]
 7509 JNZ beggar_off_ugly_copier
 8B460C MOV AX, [BP+0C]
 A3822A MOV [2A82], AX
 E930FE JMP nice_buyer
 817E0C7017 CMP WORD PTR[BP+0C],1770 ;  
 
   ,   p ...    p  
 ? H p  MOV [BP+0C],AX  p NOP (  6 )
  p IMUL? {   -    }  
   p   JMP Nice_buyer  JNZ
 beggar_off_ugly_copier? H    NOP: ,
 p  "" NOP- . !   
  :
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 CRACKING [Populous.exe] (by +ORC, January 1996)
 ren populous.exe populous.ded ;  pp 
 symdeb populous.ded ;  , p 
 - s cs:O lffff F7 AE 4E FF ; IMUL WORD PTR [BP+FF4E]
 xxxx:yyyy ;  p
 - e xxxx:yyyy+4 EB [SPACE] 03 ; -  :  EB 04
 - w ; p
 - q ; 
 ren populous.ded populous.exe ; {  ,   }
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   p,  -?
 {
    -    -   p. ORC+  
   .     p, p  p-  ?
  p.  - p -- pp , 
 p -  pp  (   f(x):
 =X*[BP+FF4E]+1),   p  p.  p
 p  pp   one-way function. "" 
   :  p   p p  .
 ,      p p - 
 "p"  "pp" pp .
 }
 p       p.   
 p,  ,   p,  p, ( Clockwork
 software are Codemasters),     p ( 
     TSR),    p  p 
 .
 H, ,    <* - p   p      p  p  *>,   :
 p     , p Martini-, (p 
  , 1/3  p "Martini & Rossi", 1/3  , 1/3
   Schweppes)   p p ", +ORC"
 {-- --c-c-c-c---------- ...   pp 
 p ;=}
 
 [MAP.EXE]
  p p   p     -
 MAP (p 2).   p  p  p
 p,  Map.exe  "p" p  p p
 p,     p      { 
  ,   "Time Delay"  ""    p
 p  p  - p p ( 
 pp  p p)}
      p,  
 p  XOR  SHR     p
  "" ,      p, - p
    "p p". p INT_16  
 p "Nag-Screen-"a.  p   LODSB, p pp
  "press..."  -    pp p.
 B95000 MOV CX,0050
 2EFF366601 PUSH CS:[0166]
 07 POP ES
 AC LODSB
 ....
    "" p p   .  
  .  p p pp  .
   p p  pp:
 91 XCHG AX,CX
 6792 XCHG AX,DX
 28939193 SUB [BP+DI+9391],DL
 2394AA94 AND DX,[SI+94AA]
 2EC7064B880100 MOV WORD PTR CS:[884B],0001
 2E803E5C0106 CMP BYTE PTR CS:[015C],06
 7416 JZ ret ; a! p PUSHa & POPa!
 505351525756 PUSH the lot
 E882F3 CALL 8870
 2E3B064B88 CMP AX,CS:[884B]
 7307 JAE after RET ; !  p ret!
 5E5F5A595B58 POP the lot
 C3 RET
 ... ;   p
 E86700 CALL delay_user
 BE9195 MOV SI,9591
 2E8B3E255C MOV DI,CS:[5C25]
 83EF16 SUB DI,+16
 2E8A263D01 MOV AH,CS:[013D]
 50 PUSH AH
 E892C7 CALL routine_LODSB ; <<< __
 B42C MOV AH,2C
 CD21 INT 21 ;  DH - 
 80E60F AND DH,0F
 80C641 ADD DH,41
 58 POP AX
 8AC6 MOV AL,DH
 83EF04 SUB DI,+4
 AB STOSW
 E85A00 CALL INT_16_AH=01
 B400 MOV AH,00
 CD16 INT 16
 24DF AND AL,DF ; p 
 3AC6 CMP AL,DH ;  p?
 75F3 JNZ CALL INT_16_AH=01
 E807F3 go_ahead
   p    p   :  , 
    (   ) -  
 ,   :     p,   ,  
 p p,   - p. p  , 
  LODSB:      p: JZ ret,  p
 PUSH/POP  JAE after RET,     ret.  p  
 ,  ,  JZ _pp_ "p" p,  JAE  H
  {,   p p p}. (   
  p  "" } p    p
    p .
 v  7416 (JZ ret)  EB16 (JMP ret )
 v  7307 (JAE after ret)  7306 (JAE ret)
 H     .       
       p ,    
   p  (     p).
  p,    p  ... 
 ...  - .
 
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 CRACKING MEM.EXE (version 2) (by +ORC, January 1996)
 
 ren map.exe map.ded
 symdeb map.ded
 - s (cs+0000):0 Lffff 74 16 50 53 51 52 57
 xxxx:yyyy ;  p
 - e xxxx:yyyy EB
 - w
 - q
 ren map.ded map.exe
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 p NIGEL !   p!
 
 
   :   CD-ROM 
 ====================================
 
 
 [MARIO ANDRETTI] [REACH FOR THE SKY] [FS v.2.12]
 """"""""""""""""""""""""""""""""""""""""""""""""
 
 [   CD-ROM ]
 """""""""""""""""""""""""""""""""""""""""""
 -    (p)   p. 
 p  .p p     [MARIO
 ANDRETTI].
 <*  p,    - p p p  pp      ''   *>  ( )
  p     "p", p
 ""  p,  .    
     InterNet ( p p firewall,
 . p)
  pp   'Mario andretti racing challenge',
  p,    ,     
     pp ,   ,
  "" p.
    p   p p 
 p:
 
 :0100 EB44 JMP 0146
 ...
 :0142 0000 ;   Int 21h
 :0144 5887 ;   Int 21h
 :0146 FA CLI
 :0147 0E PUSH CS
 :0148 1F POP DS
 :0149 BCB403 MOV SP,03B4
 :014C FB STI
 :014D 8C1EA901 MOV [01A9],DS ;  DS
 :0151 8C1EAD01 MOV [01AD],DS ; p
 :0155 8C1EB101 MOV [01B1],DS ; p
 :0159 B82135 MOV AX,3521 ;  p INT 21h
 :015C CD21 INT 21 ;  ES:BX
 :015E 891E4201 MOV [0142],BX ;  
 :0162 8C064401 MOV [0144],ES ;  
 :0166 BA0201 MOV DX,0102
 :0169 B82125 MOV AX,2521 ;  INT 21h
 :016C CD21 INT 21 ;  DS:0102
 :016E 0E PUSH CS
 :016F 07 POP ES ; ES=CS
 :0170 BBB403 MOV BX,03B4
 :0173 83C30F ADD BX,+0F
 :0176 B104 MOV CL,04
 :0178 D3EB SHR BX,CL ; BX= 3Ch
 :017A B8004A MOV AX,4A00 ;   
 :017D CD21 INT 21 ;  3Ch pp
 :017F BA9E01 MOV DX,019E ; ds:dx= pp
 :0182 BBA501 MOV BX,01A5 ; es:bx = 
 :0185 B8004B MOV AX,4B00 ; p ma.com
 :0188 CD21 INT 21
 :018A 2E8B164201 MOV DX,CS:[0142] ;  p Int 21h
 :018F 2E8E1E4401 MOV DS,CS:[0144]
 :0194 B82125 MOV AX,2521
 :0197 CD21 INT 21
 :0199 B8004C MOV AX,4C00 ; p p
 :019C CD21 INT 21
 :019E 6D612E636F6D00 "ma.com"
 0000 p
 :01A7 B2015887
 :01AB B2015887
 :O1AF B2015887
 0000 p
 
 p  p  p pp 21h:
 
 PUSHA
 CMP AX,2500 ;   25? {...  CMP AH,25???}
 JNZ ret
 CMP Word Ptr [0065], C00B ; p,  [65] = C00B
 JNZ ret
 MOV Byte Ptr [0060], EB ; p  
 MOV Byte Ptr [0061], 3C
 MOV Byte Ptr [0062], 40 ; INC AX
 MOV Byte Ptr [0063], 90 ; NOP
 MOV Byte Ptr [0064], 48 ; DEC AX
 POPA
 JMP FAR CS:[0142] ; p p p p
 
 p  p  p  p,   pp,
  Int 21h/f.25   65   p OR AX,AX
 ( 0B C0 ).  pp  p  ,  
 CS:[65]  JMP 3C,   ,   pp pp
 pp  p,     .
    - pp, p  , 
 p  Int 21 (  p pp)  25 (
  p ),    " " pp.
  p  p pp.   p  'Reach for the skies'
 
 
 [REACH FOR THE SKIES]
 
 push all
 CMP AH,3D ;   3D? ( p  )
 JNZ ret ;  ,  ret
 CMP DX,13CE ;     at 13CE?
 JNZ ret ;  ,  ret
 MOV AX,[BP+04] ;   
 MOV DS,AX
 CMP Byte Ptr [B6DA],74 ; p p
 JNZ 015B
 CMP Byte Ptr [B6DB],0F
 JNZ 015B
 CMP Byte Ptr [B6DC],80
 JNZ 015B
 MOV Byte Ptr [B6DA],EB ; 
 MOV Byte Ptr [B697],40
 MOV Byte Ptr [B698],48 ; nop
 MOV Byte Ptr [B699],90 ; nop
 MOV Byte Ptr [B69A],40 ; nop
 MOV Byte Ptr [B69B],48 ; nop
 MOV DX,CS:[0165]
 MOV DS,CS:[0167]
 MOV AX,2521 ;  p
 INT 21
 POP all
 JMP FAR CS:[0165]
 
    p 74 0F  p EB 0F,  "NOP"
 p  B697  B69B.     
 INC AX, NOP, DEC AX   SBB.  p  
 p p p  "" NOP-: p 
  ""  NOP  p ,    p
  NOP-.   ,  p H
 H   "HH" p.
   p      , 
 ,    p    p
 p.
 
 [H  ]
 """"""""""""""""""""""""""
  ,    : p    
       p   .  p
 5 1/4   p     p
 (p   ""     p) 
   pp  pp "p" 
 "p" () . Cp   PC  p 360  9
 p  p.
 H     ,    : p 
    p   : floppy disk parameter block (FDPB)
  pp pp,  /pp (INT 13h).
     pp    p  p
  pp p    512-,   
 p   p, -  211,  p  pp 
 p  p.   p, pp,  ( p)
 'VisiCalc',  ,  p 8  p 39  .
   assembly {?!}  c "ad hoc"  ( 
    pp,     
  , p  p   1984 (!)   
  [U-ZAP] ('Ulatra Utility')   'Freesoft company' {... 
 FDA      p!})    p p
  ,  pp  ,     pp  
 CRC (p    p).
 pp     BIOS: p pp 1Eh
 p p  pp. p FDPB :
 
  H p  ? pp
 0 p    DF
 1 p p   02
 2 p   p  25
 3    p  02
 4 Hp  p  12
 5 Gap-  1
 6    FF
 7  GAP p pp  54
 8 "pp "  F6
 9 p    0F
 A p  p  02
 
 0) <*  p  ,    p    p  p *>
1) <*  p  ,    p    p  p  p DMA *>
2) p   p.   . {- 
 ,   ...}
 3) -! p --p!    "0",  PC
 p 128- p. "1"  pp p 256 , "2"
  512  ( p pp DOS),  "3"  1024-
 p.
 4) H p p  p:   p pp
  pp DOS   p    p.
 5) Gap length   :  ,  p ,  
   CRC,  p p  pp pp.
    p    ,  pp
   U-Format.
 6)  :  p    p  
  p   #4  .
 7)    GAP  p:     p
 pp  p.
 8) pp  :  , p  "" p
 pp.
 9)  p .
 A) p "p" p. H   .
     pp  p   
     format.com    p "/t:"
  "/n:"
 FORMAT /t:tracks /n:sectors
 
    p    pp  
 [Debug.exe]  [SymDeb.exe]    :
 
 - d 0:78 l 4 ;  p BPB
 0000:0070 22 05 00 ; p  p
 - d 0:522 l a ;  10  BPB
 0000:520 DF 02 25 02 12 1B FF... ; p 
 
 ,   p  p  DOS p pp
 p 512 ,   p 5.25   :
 
 40t*8s*512b=163.840  (160Kb)
 40t*9s*512b=184.320  (180Kb)
 
   -p 5.25" :
 
 40t*8s*512b*2sides=327.680  (320Kb)
 40t*9s*512b*2sides=368.640  (360Kb)
 
 H  DOS 3.0 (,    p!) p 
 p  : IBM-AT (80286 CPU)    5.25"
  " ",   1,2  15 p 
 p.
 80t*15s*512b*2sides=1.228.800  (1.2Mb)
 
       3.5" ,
     p.   :
 
 3.5-inch double sided/double density 720K
 3.5-inch double sided/quad density (HD) 1440K
 3.5-inch double sided/high density 2880K
 
 <*        INT 13h,   p    p   p *>
 
 [MS Flight simulator (cp p 2.12, 1985 !)]
  ,      p 
 pp.   pp   , p  INT
 13h ("" pp).
      pp,   
 "CD 13",  p  p INT 13.    
    pp  pp  p  ,
      pp,    "CD 13",   p?
    p,   p
  p .    p  p .
 
 v      INT 13h:  p
 p A, p 0, p 9h, p FFh,   p 
   10 ( CRC)
 
 cs:1000 MOV AH,02 ;  
 cs:1002 MOV AL,01 ;   p
 cs:1004 MOV CH,29 ; p 29h
 cs:1006 MOV CL,FF ; p FFh
 cs:1008 MOV DX,0000 ; p 0 p A
 cs:100B XOR BX,BX ;  0...
 cs:100D MOV DS,BX ; ... DS pp
 cs:100F PUSHF ;   
 cs:1010 PUSH CS ; CS -  
 cs:1011 CALL 1100 ; IP  
 cs:1014 CMP AH,10 ;  CRC?
 cs:1017 ... ; rest of verification code
 ...
 ...
 cs:1100 PUSHF ;   
 cs:1101 MOV BX,004C ; p p INT 13h
 cs:1104 PUSH [BX+02] ;  CS p INT 13h
 cs:1107 PUSH [BX] ;  IP p INT 13h
 
 p,     INT 13,    p
 p p  p CD 13   ,   
  pp .
 
 v p p:  p pp,  , pp,
 INT 10,   p,  '10'  '13' ( 
  '13'  '10')  .  'CD 13'    .
 
 v  p p, p  -  ( 
   INT 13h)  jmp    ,  p 'in
 extenso' pp pp.
 
 [H H  ]
 Cp p [debug.com]  "p p "
 .   p, .   p
   p.  p   p
 p  p 0,  p  p 0, p 1 (
 p),  p  p p, p 1    
  ,  80h (128d) p   p  p. 
   p p, p (0=,1=),  p  
  p. Hpp:
 - l 100 0 10 20
  p, p DEBUG- p  DS:100   ,  
 p 10h 20h p.   p p /  p
 .    , pp memory location for that data.
     p  p ,   
   p  p   p  .
      .    pp
 p: MS Flight simulator (p p 2.12 1985!).  p
 pp   pp  :    
  p "p",  fs.com,   
 p:
 
 :0100 FA CLI ;    ?
 :0101 33C0 XOR AX,AX ; AX=0
 :0103 8ED0 MOV SS,AX ; SS=0
 :0105 BCB0C0 MOV SP,C0B0 ; SP=C0B0
 :0108 8EC0 MOV ES,AX ; ES=0
 :010A 26C70678003001 MOV Wptr ES:[0078],0130 ;Wp 0:78=130
 :0111 268C0E7A00 MOV ES:[007A],CS ; 0:7A=Segment
 :0116 BB0010 MOV BX,1000 ; BX=1000
 :0119 8EC3 MOV ES,BX ; ES=1000
 :011B 33DB XOR BX,BX ; BX=0
 :011D B80102 MOV AX,0201 ;  1 p
 :0120 BA0000 MOV DX,0000 ;  0,p 0
 :0123 B96501 MOV CX,0165 ; p 1, p 65 (!)
 :0126 CD13 INT 13 ; INT 13/AH=2
 :0128 B83412 MOV AX,1234 ; AX=1234
 :012B EA00000010 JMP 1000:0000 ; p  p 
 :0130 CF IRET ;  ret
 
  ,  p  p ,  -?   
    ,  p   p (p 
 p)   (     p),  
 "p" p /  .
 <*    *>
H   "p"  .  p, 
 pp ! Hp  :
 
 -- HH
 --  
 -- H  
 
      p DOS-pp   ... 
  ,  Windows-pp  p pp
 p.     p "3",  p    
 pp p,  p p  , pp"66666666",
   WinIce,  "666666666",      p 
  ,  BreakPoint on Write   pp
 p,   , p   .
  p  [Chirs]    ""  p 
 pp   Key generator, p  pp p .
    p    ,   "
  p"     p
 "p-"   ( MOD4WIN /c.
 Windows-p),     "- XOR-"
 ,   .
 
 -- ,     p,      
  p   p p ,  ppp,
 p  -p p,  95- ...
 ,   pp,   , p  .
  , p p p- { p  
 p   ,    p-p p
 !},  p p    ,  p 
 , p :  p -    7.30 p,  
  p ,   p   
  p p,    p ( 
   p   p ), p 
     p ,    p    ..
    p  ,   p p,  
 p,  p       ... p  
   "p p "?      ? H
  ,   p  p,  p  p, 
   ,     ,   p  
  p,  ,     ... p,
 p     p p , p
        p  
 p p .   p p p 
 p  ...     ...    p
  p  ,      
               
   pp.  p , p   ,  
       p, p 
 p... , p,     ,,
 "",       ...
 
   WINDOWS
 =======================
 
 [WINPGP.EXE]
 """"""""""""
 H H:      "p"  p
 """"""""""""""""""""""" Windows...   p  Windows 95
  p  " "   -
 p p  Windows 3.x  Winodws NT
 
  H: p NE      
 """""""""" p  .   p!
 
 [HHHH ]
 """""""""""""""""""""""""""""
 " " -    p 
 Windows.   p   p  MS-DOS:
 MicriSoft p  p  p  p p
    (MS-DOS,Winodws 3.x,Windows-95)   
 :
 
 --  p  p ( 
 p ,  p  )  p
 Borland    .
 
 --    "pp"  Winodows
  "p ",    p MicroSoft (  ) 
 p,     p p-p
 MicroSoft- ,     p   .
 
   p,   p  p p
   p.  p p  p
 -p- pp   "p "    
   p p. <*   p,  p p p  p p  p p *>
C  Windows   p   MS-DOS,  
     "p,   ", 
    [DEBUG], [SYMDEB]  [CODEVIEW]  "ppp"
 MicroSoft.
 
  2.   ?   .
 ============================================
    pp  " "  
 p.     p . H ,
      p ,   
 "p"   p    pp !  
  pp pp   p.
 This_loop_checks_that_numbers_are_numbers:
 1B0F:2B00 C45E06 LES BX,[BP+06] ; set/reset pointer
 1B0F:2B03 03DF ADD BX,DI
 1B0F:2B05 268A07 MOV AL,ES:[BX] ; get number
 1B0F:2B08 8846FD MOV [BP-03],AL ; store
 1B0F:2B0B 807EFD30 CMP BYTE PTR [BP-03],30
 1B0F:2B0F 7C06 JL 2B17 ; less than zero?
 1B0F:2B11 807EFD39 CMP BYTE PTR [BP-03],39
 1B0F:2B15 7E05 JLE 2B1C ; between 0 & 9?
 1B0F:2B17 B80100 MOV AX,0001 ; no, set flag=1
 1B0F:2B1A EB02 JMP 2B1E ; keep flag
 1B0F:2B1C 33C0 XOR AX,AX ; flag=0
 1B0F:2B1E 0BC0 OR AX,AX ; is it zero?
 1B0F:2B20 7507 JNZ 2B29 ; flag NO jumps away
 1B0F:2B22 8A46FD MOV AL,[BP-03] ; Ok, get number
 1B0F:2B25 8842CC MOV [BP+SI-34],AL ; Ok, store number
 1B0F:2B28 46 INC SI ; inc storespace
 1B0F:2B29 47 INC DI ; inc counter
 1B0F:2B2A C45E06 LES BX,[BP+06] ; reset pointer
 1B0F:2B2D 03DF ADD BX,DI ; point next number
 1B0F:2B2F 26803F00 CMP BYTE PTR ES:[BX],00 ; input end?
 1B0F:2B33 75CB JNZ 2B00 ; no:loop next num
 
  p ,  "p" p 
 p [BP+ SI-34]...  BreakPoint     
  ""   ppp p. ,
  p : p p "-"  10 p  .
  : 1 2 1 2 1 2 1 2 1 2 End
 1E7F:92E2 31 32 31 32 31 32 31 32 31 32 00 45 AF 1F 70 9B
 Stack ptr: 0 1 2 3 4 5 6 7 8 9 A B C D E F
 
 p  pp "p" pp , p pp
 pp   "" ,    "". ,
      .
 
 check_if_sum_other_9_numbers_=_remainder_of_the_third_number:
 :4B79 8CD0 MOV AX,SS ; we'll work inside the stack...
 :4B7B 90 NOP
 :4B7C 45 INC BP
 :4B7D 55 PUSH BP ; save real BP
 :4B7E 8BEC MOV BP,SP ; BP = stackpointer
 :4B80 1E PUSH DS ; save real Datasegment
 :4B81 8ED8 MOV DS,AX ; Datasegment = stacksegment
 :4B83 83EC04 SUB SP,+04
 :4B86 C45E06 LES BX,[BP+06] ; BX points input_start
 :4B89 268A07 MOV AL,ES:[BX] ; load first number
 :4B8C 98 CBW ; care only for low
 :4B8D C45E06 LES BX,[BP+06] ; reset pointer
 :4B90 50 PUSH AX ; save 1st number
 :4B91 268A4701 MOV AL,ES:[BX+01] ; load 2nd number
 :4B95 98 CBW ; only low
 :4B96 8BD0 MOV DX,AX ; 2nd number in DX
 :4B98 58 POP AX ; get 1st number
 :4B99 03C2 ADD AX,DX ; sum with second
 :4B9B C45E06 LES BX,[BP+06] ; reset pointer
 :4B9E 50 PUSH AX ; save sum
 :4B9F 268A4707 MOV AL,ES:[BX+07] ; load 8th number
 4BA3 98 CBW ; only low
 4BA4 8BD0 MOV DX,AX ; 8th number in DX
 4BA6 58 POP AX ; old sum is back
 4BA7 03C2 ADD AX,DX ; sum 1+2+8
 4BA9 C45E06 LES BX,[BP+06] ; reset pointer
 4BAC 50 PUSH AX ; save sum
 4BAD 268A4703 MOV AL,ES:[BX+03] ; load 4rd number
 4BB1 98 CBW ; only low
 4BB2 8BD0 MOV DX,AX ; #4 in DX
 4BB4 58 POP AX ; sum is back
 4BB5 03C2 ADD AX,DX ; sum 1+2+8+4
 4BB7 C45E06 LES BX,[BP+06] ; reset pointer
 4BBA 50 PUSH AX ; save sum
 4BBB 268A4704 MOV AL,ES:[BX+04] ; load 5th number
 4BBF 98 CBW ; only low
 4BC0 8BD0 MOV DX,AX ; #5 in DX
 4BC2 58 POP AX ; sum is back
 4BC3 03C2 ADD AX,DX ; 1+2+8+4+5
 4BC5 C45E06 LES BX,[BP+06] ; reset pointer
 4BC8 50 PUSH AX ; save sum
 4BC9 268A4705 MOV AL,ES:[BX+05] ; load 6th number
 4BCD 98 CBW ; only low
 4BCE 8BD0 MOV DX,AX ; #6 in DX
 4BD0 58 POP AX ; sum is back
 4BD1 03C2 ADD AX,DX ; 1+2+8+4+5+6
 4BD3 C45E06 LES BX,[BP+06] ; reset pointer
 4BD6 50 PUSH AX ; save sum
 4BD7 268A4706 MOV AL,ES:[BX+06] ; load 7th number
 4BDB 98 CBW ; only low
 4BDC 8BD0 MOV DX,AX ; #7 in DX
 4BDE 58 POP AX ; sum is back
 4BDF 03C2 ADD AX,DX ; 1+2+8+4+5+6+7
 4BE1 C45E06 LES BX,[BP+06] ; reset pointer
 4BE4 50 PUSH AX ; save sum
 4BE5 268A4708 MOV AL,ES:[BX+08] ; load 9th number
 4BE9 98 CBW ; only low
 4BEA 8BD0 MOV DX,AX ; #9 in DX
 4BEC 58 POP AX ; sum is back
 4BED 03C2 ADD AX,DX ; 1+2+8+4+5+6+7+9
 4BEF C45E06 LES BX,[BP+06] ; reset pointer
 4BF2 50 PUSH AX ; save sum
 4BF3 268A4709 MOV AL,ES:[BX+09] ; load 10th #
 4BF7 98 CBW ; only low
 4BF8 8BD0 MOV DX,AX ; #10 in DX
 :4BFA 58 POP AX ; sum is back
 :4BFB 03C2 ADD AX,DX ; 1+2+8+4+5+6+7+9+10
 :4BFD 0550FE ADD AX,FE50 ; clean sum to 0-51
 :4C00 BB0A00 MOV BX,000A ; BX holds 10
 :4C03 99 CWD ; only AL
 :4C04 F7FB IDIV BX ; remainder in DX
 :4C06 C45E06 LES BX,[BP+06] ; reset pointer
 :4C09 268A4702 MOV AL,ES:[BX+02] ; load now # 3
 :4C0D 98 CBW ; only low
 :4C0E 05D0FF ADD AX,FFD0 ; clean # 3 to 0-9
 :4C11 3BD0 CMP DX,AX ; remainder = pampered #3?
 :4C13 7407 JZ 4C1C ; yes, go on good guy
 :4C15 33D2 XOR DX,DX ; no! beggar off! Zero DX
 :4C17 33C0 XOR AX,AX ; and FLAG_AX = FALSE
 :4C19 E91701 JMP 4D33 ; go to EXIT
 let's_go_on_if_first_check_passed:
 :4C1C C45E06 LES BX,[BP+06] ; reset pointer
 :4C1F 268A4701 MOV AL,ES:[BX+01] ; now load #2 anew
 :4C23 98 CBW ; only low
 :4C24 05D7FF ADD AX,FFD7 ; pamper adding +3
 :4C27 A38D5E MOV [5E8D],AX ; save SEC_+3
 :4C2A 3D0900 CMP AX,0009 ; was it < 9? (no A-F)
 :4C2D 7E05 JLE 4C34 ; ok, no 0xletter
 :4C2F 832E8D5E0A SUB WORD PTR [5E8D],+0A ; 0-5 if A-F
 :4C34 C45E06 LES BX,[BP+06] ; reset pointer
 :4C37 268A07 MOV AL,ES:[BX] ; load 1st input number
 :4C3A 98 CBW ; only low
 :4C3B 05C9FF ADD AX,FFC9 ; pamper adding +7
 :4C3E A38F5E MOV [5E8F],AX ; save it in FIR_+7
 :4C41 0BC0 OR AX,AX ; if #1 > 7
 :4C43 7D05 JGE 4C4A ; no need to add 0xA
 :4C45 83068F5E0A ADD WORD PTR [5E8F],+0A ; FIR_+7 + 0xA
 now_we_have_the_sliders_let's_prepare_for_loop:
 :4C4A C45E0E LES BX,[BP+0E] ; Set pointer to E
 :4C4D 26C747020000 MOV WORD PTR ES:[BX+02],0000 ; 0 flag
 :4C53 26C7070000 MOV WORD PTR ES:[BX],0000 ; 0 flag
 :4C58 C706975E0900 MOV WORD PTR [5E97],0009 ; counter=9
 :4C5E E99500 JMP 4CF6 ; Jmp check_counter
 loop_8_times:
 :4C61 C45E06 LES BX,[BP+06] ; reset pointer
 :4C64 031E975E ADD BX,[5E97] ; add running counter
 :4C68 268A07 MOV AL,ES:[BX] ; load # counter+1
 :4C6B 98 CBW ; only low
 :4C6C 50 PUSH AX ; save 10th number
 :4C6D A18D5E MOV AX,[5E8D] ; ld SEC_+3 down_slider
 :4C70 BA0A00 MOV DX,000A ; BX holds 0xA
 :4C73 F7EA IMUL DX ; SEC_+3 * 0xA
 :4C75 03068F5E ADD AX,[5E8F] ; plus FIR_+7 up_slider
 :4C79 BAA71E MOV DX,1EA7 ; fixed segment
 :4C7C 8BD8 MOV BX,AX ; BX = Lkup_val=(SEC_+3*10+FIR_+7)
 :4C7E 8EC2 MOV ES,DX ; ES = 1EA7
 :4C80 268A870000 MOV AL,ES:[BX+0000] ; ld 1EA7:[Lkup_val]
 :4C85 98 CBW ; only low: KEY_PAR
 :4C86 8BD0 MOV DX,AX ; save KEY_PAR in DX
 :4C88 58 POP AX ; repops 10th number
 :4C89 03C2 ADD AX,DX ; RE_SULT=KEY_PAR+#10
 :4C8B 05D0FF ADD AX,FFD0 ; polish RE_SULT
 :4C8E 99 CWD ; only low: RE_SULT
 :4C8F 8956FC MOV [BP-04],DX ; save here KEY_PAR [9548]
 :4C92 8946FA MOV [BP-06],AX ; save here RE_SULT [9546]
 :4C95 0BD2 OR DX,DX ; KEY_PAR < 0?
 :4C97 7C0F JL 4CA8 ; yes: KEY_PAR < 0
 :4C99 7F05 JG 4CA0 ; no: KEY_PAR > 0
 :4C9B 3D0900 CMP AX,0009 ; KEY_PAR = 0
 :4C9E 7608 JBE 4CA8 ; no pampering if RE_SULT < 9
 :4CA0 836EFA0A SUB WORD PTR [BP-06],+0A ; else pamper
 :4CA4 835EFC00 SBB WORD PTR [BP-04],+00 ; and SBB [9548]
 :4CA8 C45E0E LES BX,[BP+0E] ; reset pointer to E
 :4CAB 268B4F02 MOV CX,ES:[BX+02] ; charge CX [958C]
 :4CAF 268B1F MOV BX,ES:[BX] ; charge BX slider [958A]
 :4CB2 33D2 XOR DX,DX ; clear DX to zero
 :4CB4 B80A00 MOV AX,000A ; 10 in AX
 :4CB7 9A930D2720 CALL 2027:0D93 ; call following RO_routine
 
   pp,      LOOP ( 8
 p), p WCB.   ,  ,  
    p: DX=0, AX=0xA, CX=[958C] and BX=[958A]...
 1.0D93 56 push si ; save si
 1.0D94 96 xchg ax, si ; ax=si, si=0xA
 1.0D95 92 xchg ax, dx ; dx=0xA ax=dx
 1.0D96 85C0 test ax, ax ; TEST this zero
 1.0D98 7402 je 0D9C ; zero only 1st time
 1.0D9A F7E3 mul bx ; BX slider! 0/9/5E/3B2...
 1.0D9C >E305 jcxz 0DA3 ; cx=0? don't multiply!
 1.0D9E 91 xchg ax, cx ; cx !=0? cx = ax & ax = cx
 1.0D9F F7E6 mul si ; ax*0xA in ax
 1.0DA1 03C1 add ax, cx ; ax= ax*0xA+cx = M_ULT
 1.0DA3 >96 xchg ax, si ; ax=0xA; si evtl. holds M_ULT
 1.0DA4 F7E3 mul bx ; ax= bx*0xA
 1.0DA6 03D6 add dx, si ; dx= dx_add
 1.0DA8 5E pop si ; restore si
 1.0DA9 CB retf ; back to caller with two parameters: DX and AX
ack_to_main_protection_loop_from_RO_routine:
 4CBC C45E0E LES BX,[BP+0E] ; reset pointer
 4CBF 26895702 MOV ES:[BX+02],DX ; save R_DX par [958C]
 4CC3 268907 MOV ES:[BX],AX ; save R_AX par [958A]
 4CC6 0346FA ADD AX,[BP-06] ; add to AX RE_SULT [9546]
 :4CC9 1356FC ADC DX,[BP-04] ; add to DX KEY_PAR [9548]
 :4CCC C45E0E LES BX,[BP+0E] ; reset pointer
 :4CCF 26895702 MOV ES:[BX+02],DX ; save R_DX+KEY_PAR [958C]
 :4CD3 268907 MOV ES:[BX],AX ; save R_AX+RE_SULT [958A]
 :4CD6 FF0E8D5E DEC WORD PTR [5E8D] ; down_slide SEC_+3
 :4CDA 7D05 JGE 4CE1 ; no need to add
 :4CDC 83068D5E0A ADD WORD PTR [5E8D],+0A ; pamper adding 10
 :4CE1 FF068F5E INC WORD PTR [5E8F] ; up_slide FIR_+7
 :4CE5 A18F5E MOV AX,[5E8F] ; save upslided FIR_+7 in AX
 :4CE8 3D0900 CMP AX,0009 ; is it over 9?
 :4CEB 7E05 JLE 4CF2 ; no, go on
 :4CED 832E8F5E0A SUB WORD PTR [5E8F],+0A ; yes, pamper -10
 :4CF2 FF0E975E DEC WORD PTR [5E97] ; decrease loop counter
 check_loop_counter:
 :4CF6 833E975E03 CMP WORD PTR [5E97],+03 ; counter = 3?
 :4CFB 7C03 JL 4D00 ; finish if counter under 3
 :4CFD E961FF JMP 4C61 ; not yet, loop_next_count
 loop_is_ended:
 :4D00 C45E06 LES BX,[BP+06] ; reset pointer to input
 :4D03 268A4701 MOV AL,ES:[BX+01] ; load 2nd number (2)
 :4D07 98 CBW ; only low
 :4D08 05D0FF ADD AX,FFD0 ; clean it
 :4D0B BA0A00 MOV DX,000A ; DX = 10
 :4D0E F7EA IMUL DX ; AX = SEC_*10 = 14
 :4D10 C45E06 LES BX,[BP+06] ; reset pointer
 :4D13 50 PUSH AX ; save SEC_*10
 :4D14 268A07 MOV AL,ES:[BX] ; load 1st number (1)
 :4D17 98 CBW ; only low
 :4D18 8BD0 MOV DX,AX ; save in DX
 :4D1A 58 POP AX ; get SEC_*10
 :4D1B 03C2 ADD AX,DX ; sum SEC_*10+1st number
 :4D1D 05D0FF ADD AX,FFD0 ; clean it
 :4D20 99 CWD ; only low
 :4D21 C45E0A LES BX,[BP+0A] ; get pointer to [9582]
 :4D24 26895702 MOV ES:[BX+02],DX ; save 1st (1) in [9584]
 :4D28 268907 MOV ES:[BX],AX ; save FINAL_SUM (15) [9582]
 :4D2B 33D2 XOR DX,DX ; DX = 0
 :4D2D B80100 MOV AX,0001 ; FLAG TRUE !
 :4D30 E9E6FE JMP 4C19 ; OK, you_are_a_nice_guy
 EXIT:
 :4D33 59 POP CX ; pop everything and
 :4D34 59 POP CX ; return with flag
 :4D35 1F POP DS ; AX=TRUE if RegNum OK
 :4D36 5D POP BP ; with 1st # in [9584]
 :4D37 4D DEC BP ; with FINAL_SUM in [9582]
 :4D38 CB RETF
 
  p p .  p   p :486,
   p      LES BX,[BP+06]; 
 p     p,  p p  "-",
  p  10 ,  p 00.
 
 
 by Kris Kasperski (2:5063/61.8)
 
 +ORC an526164@anon.penet.fi
 /-  p KPNC KPNC@HotMail.com/


Rambler's Top100 Rambler's Top100 MAFIA's Top100