Этюды - Комплект защит загрузчиков.

ZX Review #7-8-9-10
(c) DeathSOFT, пос.Лебяжье

   Прим. ред.: Наш корреспондент, не  рас-
крывший своего  имени, предлагает  на  Ваш
суд комплект  всяческих  "защит  загрузчи-
ков". Эти процедуры достаточно  простые  и
не требуют отдельных комментариев, но  за-
то они очень показательны для  начинающего
программиста или  хаккера, т.к.  процедуры
этого класса должны быть компактны, быстры
и ХОРОШО продуманы.
140.
          LD      HL,START
          LD      BC,LENGTH
LOOP      LD      A,(HL)
          XOR     B
          LD      (HL),A
          INC     HL
          DEC     BC
          LD      A,B
          OR      C
          JR      NZ,LOOP

────────────────────────────────

          LD      HL,START
          LD      DE,LENGTH
LOOP      LD      A,(HL)
          CPL
          LD      (HL),A
          INC     HL
          DEC     DE
          LD      A,E
          OR      D
          JR      NZ,LOOP

────────────────────────────────

          LD      HL,START
          LD      BC,LENGTH
          LD      HL,START
          LD      BC,LENGTH
          LD      A,#33
          LD      R,A
LOOP      LD      A,R
          XOR     (HL)
          LD      (HL),A
          INC     HL
          DEC     BC
          LD      A,B
          OR      C
          JR      NZ,LOOP

────────────────────────────────

          LD      HL,START
          LD      DE,START1
          LD      BC,LENGTH
          LD      A,#33
          LD      R,A
LOOP      LD      A,(HL)
          XOR     D
          XOR     H
          XOR     E
          LD      C,A
          LD      A,R
          XOR     C
          LD      (HL),A
          LD      (DE),A
          INC     HL       ;\
          INC     DE       ; LDI
          DEC     BC       ;/
          LD      A,B
          OR      C
          JR      NZ,LOOP

────────────────────────────────

          LD      SP,START
          LD      DE,LENGTH
          DI
          XOR     A
          DEC     A
          DAA
          LD      R,A
          LD      HL,START1
          LD      DE,START1+1
          LD      BC,LENGTH1
          LD      (HL),L
          LDIR
LOOP      LD      A,R
          POP     HL
          XOR     L
          LD      L,A
          PUSH    HL
          INC     SP
          DEC     DE
          LD      A,D
          OR      E
          JR      NZ,LOOP

────────────────────────────────

          LD      IX,START
          LD      DE,LENGTH
LOOP      LD      A,(IX+0)
          CPL
          XOR     E
          XOR     D
          LD      (IX+0),A
          INC     IX
          DEC     DE
          LD      A,D
          OR      E
          JR      NZ,LOOP

────────────────────────────────

          LD      HL,START
          LD      BC,LENGTH
LOOP      LD      A,(HL)
          CPL
          LD      (HL),A
          INC     HL
          DJNZ    LOOP

────────────────────────────────

          XOR     A
          LD      HL,START
          LD      BC,LENGTH
          LD      R,A
LOOP      POP     HL
          LD      A,R
          XOR     (HL)
          XOR     C
          XOR     B
          LD      (HL),A
          INC     HL
          DEC     BC
          PUSH    HL
          LD      A,B
          OR      C
          JR      NZ,LOOP
2
   КОРР.: Дальше я предложу  бо-
лее сложные код. процедуры (КП).
А процедуры, содержащие вставку:
140.
          LD      HL,START
          LD      DE,START1
          LD      BC,LENGTH
          LD      (HL),L
          LDIR
2
в  мониторе-отладчике  не  могут
быть раскручены.  Т.к., если  КП
подставить под  адрес - 23925, а
в регистры занести такие  значе-
ния:   HL,24100;  DE,24101;  BC,
41100, то после выполнения КП  с
адреса 24100 и до 65200 вся  па-
мять будет забита байтом из  ре-
гистра L, т.е. автоматически бу-
дет испорчен отладчик.

   Прим. ред.: Для начинающих: то что  ав-
тор называет КП, является не чем иным, как
обыкновенной и приятной на слух "ксоркой".
А что касается нераскрытия таких защит, то
давно уже  существуют  средства, позволяю-
щие бороться с такими мощными алгоритмами,
как забитие памяти, использование регистра
R и другими методами  защиты.  Но  это  мы
увлеклись...
140.
          DI
          LD      HL,START
          LD      BC,LENGTH
          IM      2
          LD      A,R
          LD      IY,START1
          LD      IX,START1+1
          LD      DE,LENGTH1
LOOP      LD      (IY+0),E
          INC     IX
          INC     IY
          DEC     DE
          LD      A,D
          OR      E
          JR      NZ,LOOP
LOOP1     POP     HL
          LD      R,A
          XOR     (HL)
          XOR     C
          XOR     B
          LD      (HL),A
          CPL
          PUSH    HL
          LD      A,B
          OR      C
          JR      NZ,LOOP1

────────────────────────────────

          LD      IX,START
          LD      A,51
          LD      R,A
          LD      HL,START1
          LD      DE,START1+1
          LD      BC,LENGTH
LOOP      POP     HL
          LD      A,R
          XOR     (HL)
          XOR     E
          XOR     D
          LD      (IX+0),A
          INC     IX
          DEC     BC
          PUSH    HL
          LD      A,B
          OR      C
          JR      NZ,LOOP

────────────────────────────────

          DI
          LD      A,78
          LD      R,A
          XOR     A
          LD      IXh,NN  ;START
          LD      IXl,NN  ;
          PUSH    IX
          POP     HL
          LD      IXh,64
          LD      IXl,255
          LD      A,IXl
          CPL
          LD      IXl,A
          PUSH    IX
          POP     DE
          LD      BC,LENGTH
          LD      IXh,255
          LD      IXl,253
          CALL    13251
          LD      A,0
          LD      L,A
          SET     5,A
          LD      H,A
          RES     2,H
          RES     5,H
          SET     6,H
          LD      DE,LENGTH
          LD      BC,START
LOOP      LD      A,R
          XOR     (HL)
          CPL
          XOR     H
          XOR     L
          XOR     B
          XOR     C
          XOR     D
          XOR     E
          XOR     IXh
          XOR     IXl
          XOR     IYl
          XOR     IYh
          PUSH    HL
          POP     IX
          LD      (IX+0),A
          LD      (BC),A
          INC     BC
          INC     HL
          DEC     DE
          LD      A,D
          OR      E
          JR      NZ,LOOP

────────────────────────────────

          LD      HL,START
          LD      BC,LENGTH
          DI
          LD      A,51
          LD      I,A
LOOP      LD      R,A
          LD      A,I
          LD      A,R
          XOR     (HL)
          CPL
          XOR     B
          XOR     H
          XOR     L
          XOR     C
          LD      (HL),A
          CPI
          LD      A,B
          OR      C
          JR      NZ,LOOP
2
          *   *   *