home *** CD-ROM | disk | FTP | other *** search
/ Cracking 2 / Cracking II..iso / Texty / crackme / HACKME.ASM < prev    next >
Encoding:
Assembly Source File  |  1997-09-24  |  6.2 KB  |  383 lines

  1. ; do not modify source - made by solar designer in 1996,
  2. ; source traded by lord caligo/1997
  3.  
  4. .model tiny
  5. .code
  6. .startup
  7. .186
  8.  
  9. cld
  10. emCPU:
  11. mov  si,emIP
  12. lodsw
  13. xchg ax,di
  14. mov  di,[di]
  15. lodsw
  16. xchg ax,bx
  17. or   di,[bx]
  18. lodsw
  19. xchg ax,di
  20. not  ax
  21. mov  emIP,si
  22. stosw
  23. jmp  short emCPU
  24.  
  25. em86_CALLER:
  26. pusha
  27. mov  ax,em86_R2
  28. mov  word ptr emCPU,ax
  29. cli
  30. mov  em86_SP,sp
  31. mov  sp,offset em86_REGS
  32. popa
  33. mov  sp,em86_SP
  34. sti
  35. push offset em86_RETURN
  36. push em86_R1
  37. em86_RETN:
  38. retn
  39. em86_RETURN:
  40. cli
  41. mov  em86_R1,sp
  42. mov  sp,offset em86_REGS+18
  43. pushf
  44. pusha
  45. mov  sp,em86_R1
  46. mov  em86_SP,sp
  47. sti
  48. popa
  49. jmp  short emCPU
  50.  
  51. em86_JMP_CALLER:
  52. db   0EBh, offset em86_CALLER - 103h
  53.  
  54. em86_ADD:
  55. add  ax,cx
  56. sbb  cx,cx
  57. retn
  58.  
  59. even
  60. emIP dw emCode
  61. emSP dw emStack
  62.  
  63. emConstFFFF dw 0FFFFh
  64.  
  65. emNOR macro Src1, Src2, Dst
  66.    dw offset Src1, offset Src2, offset Dst
  67. endm
  68.  
  69. emNOT macro Src, Dst
  70.    emNOR Src, Src, Dst
  71. endm
  72.  
  73. emOR macro Src1, Src2, Dst
  74.    emNOR Src1, Src2, emR1
  75.    emNOT emR1, Dst
  76. endm
  77.  
  78. emAND macro Src1, Src2, Dst
  79.    emNOT Src1, emR1
  80.    emNOT Src2, emR2
  81.    emNOR emR1, emR2, Dst
  82. endm
  83.  
  84. emXOR macro Src1, Src2, Dst
  85.    emOR Src1, Src2, emR3
  86.    emAND Src1, Src2, emR4
  87.    emNOT emR4, emR4
  88.    emAND emR3, emR4, Dst 
  89. endm
  90.  
  91. emCLR macro Dst
  92.    emNOT Dst, emR1
  93.    emNOR emR1, Dst, Dst 
  94. endm
  95.  
  96. emMOV macro Src, Dst
  97.    emOR Src, Src, Dst
  98. endm
  99.  
  100. emJMPi macro Src
  101.    emMOV Src, emIP
  102. endm
  103.  
  104. emJMP macro Lbl
  105.    local Src
  106.    emJMPi Src
  107.    Src dw offset Lbl
  108. endm
  109.  
  110. emJMPsi macro Src1, Src2, Src3
  111.    emAND Src1, Src2, emR3
  112.    emNOT Src3, emR1
  113.    emNOR Src1, emR1, emR4
  114.    emOR emR3, emR4, emIP
  115. endm
  116.  
  117. emJMPs macro Src, Lbl1, Lbl2
  118.    local Src1, Src2
  119.    emJMPsi Src, Src1, Src2
  120.    Src1 dw offset Lbl1
  121.    Src2 dw offset Lbl2
  122. endm
  123.  
  124. emMOVv_ALT macro Val, Dst
  125.    local Src, Lbl
  126.    emNOR Src, Src, Dst
  127.    emJMP Lbl
  128.    Src dw not Val
  129. Lbl:
  130. endm
  131.  
  132. emMOVv macro Val, Dst
  133.    local Src, Lbl
  134.    emMOV Src, Dst
  135.    emJMP Lbl
  136.    Src dw Val
  137. Lbl:
  138. endm
  139.  
  140. emMOVmv macro Mem, Dst
  141.    local Mod1, Mod2
  142.    emMOV Mem, Mod1
  143.    emMOV Mem, Mod2
  144. Mod1 = this word
  145. Mod2 = this word + 2
  146.    emMOV Dst, Dst
  147. endm
  148.  
  149. emMOVvm macro Src, Mem
  150.    local Mod
  151.    emMOV Mem, Mod
  152.    emMOV Src, Src
  153. Mod = this word - 2
  154. endm
  155.  
  156. emSTOP macro
  157.    emMOV em86_RETN, emCPU
  158. endm
  159.  
  160. em86_CALL macro Lbl
  161.    emMOVv <offset Lbl>, em86_R1
  162.    emMOV emCPU, em86_R2
  163.    emMOV em86_JMP_CALLER, emCPU
  164. endm
  165.  
  166. em86_INT macro Num
  167.    local Lbl1, Lbl2
  168.    em86_CALL Lbl1
  169.    emJMP Lbl2
  170. Lbl1:
  171.    int Num
  172.    retn
  173. Lbl2:
  174. endm
  175.  
  176. emADD macro Src1, Src2, Dst
  177.    emMOV Src1, em86_AX
  178.    emMOV Src2, em86_CX
  179.    em86_CALL em86_ADD
  180.    emMOV em86_AX, Dst
  181. endm
  182.  
  183. emADDv macro Val, Src, Dst
  184.    local SrcVal, Lbl
  185.    emADD SrcVal, Src, Dst
  186.    emJMP Lbl
  187.    SrcVal dw Val
  188. Lbl:
  189. endm
  190.  
  191. emBIN macro Src, Dst
  192.    emADD emConstFFFF, Src, emR1
  193.    emMOV em86_CX, Dst
  194. endm
  195.  
  196. emJMPci macro Src1, Src2, Src3
  197.    emBIN Src1, emR5 
  198.    emJMPsi emR5, Src2, Src3
  199. endm
  200.  
  201. emJMPc macro Src, Lbl1, Lbl2
  202.    local Src1, Src2
  203.    emJMPci Src, Src1, Src2
  204.    Src1 dw offset Lbl1
  205.    Src2 dw offset Lbl2
  206. endm
  207.  
  208. emPUSH macro Src
  209.    emMOVvm Src, emSP
  210.    emADDv 2, emSP, emSP
  211. endm
  212.  
  213. emPUSHv macro Val
  214.    local Src, Lbl
  215.    emPUSH Src
  216.    emJMP Lbl
  217.    Src dw Val
  218. Lbl:
  219. endm
  220.  
  221. emPOP macro Dst
  222.    emADDv -2, emSP, emSP
  223.    emMOVmv emSP, Dst
  224. endm
  225.  
  226. emCALL macro Lbl
  227.    local RetLbl
  228.    emPUSHv <offset RetLbl>
  229.    emJMP Lbl
  230. RetLbl:
  231. endm
  232.  
  233. emRET macro
  234.    emPOP emIP
  235. endm
  236.  
  237. emByteMask:
  238.    dw 0FFh
  239.  
  240. emCode:
  241.    emMOVv <offset Copyright>, emVR1
  242.    emCALL emPrintText
  243.    emCALL emPrintCRLF
  244.  
  245.    emMOVv <offset EnterPwd>, emVR1
  246.    emCALL emPrintText
  247.  
  248.    emCALL emInputText
  249.    emCALL emPrintCRLF
  250.  
  251.    emCALL emEncryptPwd
  252.    emXOR emV_EncryptedPwd1, emVR4, emVR1
  253.    emJMPc emVR1, emWrongPwd, emExtraCheck
  254.  
  255. emExtraCheck:
  256.    emXOR emV_EncryptedPwd2, emVR5, emVR1
  257.    emJMPc emVR1, emWrongPwd, emCorrectPwd
  258.  
  259. emWrongPwd:
  260.    emMOVv <offset WrongPwdMsg>, emVR1
  261.    emJMP emPrintPwdMsg
  262.  
  263. emCorrectPwd:
  264.    emMOVv <offset CorrectPwdMsg>, emVR1
  265.  
  266. emPrintPwdMsg:
  267.    emCALL emPrintText
  268.    emCALL emPrintCRLF
  269.  
  270.    emSTOP
  271.  
  272. emPrintText:
  273.    emMOVv 0AAh, emVR4
  274. emPrintNext:
  275.    emMOVmv emVR1, emVR3
  276.    emXOR emVR4, emVR3, emVR2
  277.    emMOV emVR3, emVR4
  278.    emAND emByteMask, emVR2, emVR2
  279.    emJMPc emVR2, emDoPrint, emLeavePrint
  280. emDoPrint:
  281.    emADDv 1, emVR1, emVR1
  282.    emCALL emPrintChar
  283.    emJMP emPrintNext
  284. emLeavePrint:
  285.    emRET
  286.  
  287. emPrintChar:
  288.    emMOV emVR2, em86_DX
  289.    emMOVv 200h, em86_AX
  290.    em86_INT 21h
  291.    emRET
  292.  
  293. emPrintCRLF:
  294.    emMOVv 13, emVR2
  295.    emCALL emPrintChar
  296.    emMOVv 10, emVR2
  297.    emCALL emPrintChar
  298.    emRET
  299.  
  300. emInputText:
  301.    emMOVv <offset emV_Buffer>, em86_DX
  302.    emMOVv 0A00h, em86_AX
  303.    em86_INT 21h
  304.    emRET
  305.  
  306. emEncryptPwd:
  307.    emMOVv <offset emV_Buffer + 2>, emVR1
  308.    emCLR emVR4
  309. emEncryptNext:
  310.    emMOVmv emVR1, emVR3
  311.    emAND emByteMask, emVR3, emVR2
  312.    emXOR emConst000D, emVR2, emVR2
  313.    emJMPc emVR2, emDoEncrypt, emLeaveEncrypt
  314. emDoEncrypt:
  315.    emADDv 1, emVR1, emVR1
  316.    emMOV emVR4, emVR5
  317.    emXOR emVR3, emVR4, emVR4
  318.    emJMP emEncryptNext
  319. emLeaveEncrypt:
  320.    emRET
  321.  
  322. EncryptText macro Text
  323.    local Val
  324.    Val = 0AAh
  325.    irpc Char, <&Text>
  326.       Val = Val xor '&Char'
  327.       db Val
  328.    endm
  329.    db Val
  330. endm
  331.  
  332. Copyright:
  333. EncryptText <Emulated Solar CPU  Copyright (c) 1996 by Solar Designer>
  334.  
  335. EnterPwd:
  336. EncryptText <Enter password: >
  337.  
  338. WrongPwdMsg:
  339. EncryptText <Incorrect password>
  340.  
  341. CorrectPwdMsg:
  342. EncryptText <Thanks>
  343.  
  344. emV_EncryptedPwd1 dw 7528h
  345. emV_EncryptedPwd2 dw 784Dh
  346.  
  347. emConst000D dw 000Dh
  348.  
  349. emV_Buffer db 16, 19 dup (?)
  350.  
  351. even
  352. em86_R1 dw ?
  353. em86_R2 dw ?
  354.  
  355. em86_REGS:
  356. em86_DI dw ?
  357. em86_SI dw ?
  358. em86_BP dw ?
  359. em86_SP dw ?
  360. em86_BX dw ?
  361. em86_DX dw ?
  362. em86_CX dw ?
  363. em86_AX dw ?
  364. em86_FLAGS dw ?
  365.  
  366. emR1 dw ?
  367. emR2 dw ?
  368. emR3 dw ?
  369. emR4 dw ?
  370. emR5 dw ?
  371. emR6 dw ? 
  372.  
  373. emVR1 dw ?
  374. emVR2 dw ?
  375. emVR3 dw ?
  376. emVR4 dw ?
  377. emVR5 dw ?
  378. emVR6 dw ? 
  379.  
  380. emStack:
  381.  
  382. end
  383.