home *** CD-ROM | disk | FTP | other *** search
/ KeyGen Studio 2002 / KeyGen_Studio_2002.iso / Tutorials / Dos CrackMes / com / SOLAR.ZIP / HACKME.ASM 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.  
  6. .code
  7.  
  8. .startup
  9.  
  10. .186
  11.  
  12.  
  13.  
  14. cld
  15.  
  16. emCPU:
  17.  
  18. mov  si,emIP
  19.  
  20. lodsw
  21.  
  22. xchg ax,di
  23.  
  24. mov  di,[di]
  25.  
  26. lodsw
  27.  
  28. xchg ax,bx
  29.  
  30. or   di,[bx]
  31.  
  32. lodsw
  33.  
  34. xchg ax,di
  35.  
  36. not  ax
  37.  
  38. mov  emIP,si
  39.  
  40. stosw
  41.  
  42. jmp  short emCPU
  43.  
  44.  
  45.  
  46. em86_CALLER:
  47.  
  48. pusha
  49.  
  50. mov  ax,em86_R2
  51.  
  52. mov  word ptr emCPU,ax
  53.  
  54. cli
  55.  
  56. mov  em86_SP,sp
  57.  
  58. mov  sp,offset em86_REGS
  59.  
  60. popa
  61.  
  62. mov  sp,em86_SP
  63.  
  64. sti
  65.  
  66. push offset em86_RETURN
  67.  
  68. push em86_R1
  69.  
  70. em86_RETN:
  71.  
  72. retn
  73.  
  74. em86_RETURN:
  75.  
  76. cli
  77.  
  78. mov  em86_R1,sp
  79.  
  80. mov  sp,offset em86_REGS+18
  81.  
  82. pushf
  83.  
  84. pusha
  85.  
  86. mov  sp,em86_R1
  87.  
  88. mov  em86_SP,sp
  89.  
  90. sti
  91.  
  92. popa
  93.  
  94. jmp  short emCPU
  95.  
  96.  
  97.  
  98. em86_JMP_CALLER:
  99.  
  100. db   0EBh, offset em86_CALLER - 103h
  101.  
  102.  
  103.  
  104. em86_ADD:
  105.  
  106. add  ax,cx
  107.  
  108. sbb  cx,cx
  109.  
  110. retn
  111.  
  112.  
  113.  
  114. even
  115.  
  116. emIP dw emCode
  117.  
  118. emSP dw emStack
  119.  
  120.  
  121.  
  122. emConstFFFF dw 0FFFFh
  123.  
  124.  
  125.  
  126. emNOR macro Src1, Src2, Dst
  127.  
  128.    dw offset Src1, offset Src2, offset Dst
  129.  
  130. endm
  131.  
  132.  
  133.  
  134. emNOT macro Src, Dst
  135.  
  136.    emNOR Src, Src, Dst
  137.  
  138. endm
  139.  
  140.  
  141.  
  142. emOR macro Src1, Src2, Dst
  143.  
  144.    emNOR Src1, Src2, emR1
  145.  
  146.    emNOT emR1, Dst
  147.  
  148. endm
  149.  
  150.  
  151.  
  152. emAND macro Src1, Src2, Dst
  153.  
  154.    emNOT Src1, emR1
  155.  
  156.    emNOT Src2, emR2
  157.  
  158.    emNOR emR1, emR2, Dst
  159.  
  160. endm
  161.  
  162.  
  163.  
  164. emXOR macro Src1, Src2, Dst
  165.  
  166.    emOR Src1, Src2, emR3
  167.  
  168.    emAND Src1, Src2, emR4
  169.  
  170.    emNOT emR4, emR4
  171.  
  172.    emAND emR3, emR4, Dst 
  173.  
  174. endm
  175.  
  176.  
  177.  
  178. emCLR macro Dst
  179.  
  180.    emNOT Dst, emR1
  181.  
  182.    emNOR emR1, Dst, Dst 
  183.  
  184. endm
  185.  
  186.  
  187.  
  188. emMOV macro Src, Dst
  189.  
  190.    emOR Src, Src, Dst
  191.  
  192. endm
  193.  
  194.  
  195.  
  196. emJMPi macro Src
  197.  
  198.    emMOV Src, emIP
  199.  
  200. endm
  201.  
  202.  
  203.  
  204. emJMP macro Lbl
  205.  
  206.    local Src
  207.  
  208.    emJMPi Src
  209.  
  210.    Src dw offset Lbl
  211.  
  212. endm
  213.  
  214.  
  215.  
  216. emJMPsi macro Src1, Src2, Src3
  217.  
  218.    emAND Src1, Src2, emR3
  219.  
  220.    emNOT Src3, emR1
  221.  
  222.    emNOR Src1, emR1, emR4
  223.  
  224.    emOR emR3, emR4, emIP
  225.  
  226. endm
  227.  
  228.  
  229.  
  230. emJMPs macro Src, Lbl1, Lbl2
  231.  
  232.    local Src1, Src2
  233.  
  234.    emJMPsi Src, Src1, Src2
  235.  
  236.    Src1 dw offset Lbl1
  237.  
  238.    Src2 dw offset Lbl2
  239.  
  240. endm
  241.  
  242.  
  243.  
  244. emMOVv_ALT macro Val, Dst
  245.  
  246.    local Src, Lbl
  247.  
  248.    emNOR Src, Src, Dst
  249.  
  250.    emJMP Lbl
  251.  
  252.    Src dw not Val
  253.  
  254. Lbl:
  255.  
  256. endm
  257.  
  258.  
  259.  
  260. emMOVv macro Val, Dst
  261.  
  262.    local Src, Lbl
  263.  
  264.    emMOV Src, Dst
  265.  
  266.    emJMP Lbl
  267.  
  268.    Src dw Val
  269.  
  270. Lbl:
  271.  
  272. endm
  273.  
  274.  
  275.  
  276. emMOVmv macro Mem, Dst
  277.  
  278.    local Mod1, Mod2
  279.  
  280.    emMOV Mem, Mod1
  281.  
  282.    emMOV Mem, Mod2
  283.  
  284. Mod1 = this word
  285.  
  286. Mod2 = this word + 2
  287.  
  288.    emMOV Dst, Dst
  289.  
  290. endm
  291.  
  292.  
  293.  
  294. emMOVvm macro Src, Mem
  295.  
  296.    local Mod
  297.  
  298.    emMOV Mem, Mod
  299.  
  300.    emMOV Src, Src
  301.  
  302. Mod = this word - 2
  303.  
  304. endm
  305.  
  306.  
  307.  
  308. emSTOP macro
  309.  
  310.    emMOV em86_RETN, emCPU
  311.  
  312. endm
  313.  
  314.  
  315.  
  316. em86_CALL macro Lbl
  317.  
  318.    emMOVv <offset Lbl>, em86_R1
  319.  
  320.    emMOV emCPU, em86_R2
  321.  
  322.    emMOV em86_JMP_CALLER, emCPU
  323.  
  324. endm
  325.  
  326.  
  327.  
  328. em86_INT macro Num
  329.  
  330.    local Lbl1, Lbl2
  331.  
  332.    em86_CALL Lbl1
  333.  
  334.    emJMP Lbl2
  335.  
  336. Lbl1:
  337.  
  338.    int Num
  339.  
  340.    retn
  341.  
  342. Lbl2:
  343.  
  344. endm
  345.  
  346.  
  347.  
  348. emADD macro Src1, Src2, Dst
  349.  
  350.    emMOV Src1, em86_AX
  351.  
  352.    emMOV Src2, em86_CX
  353.  
  354.    em86_CALL em86_ADD
  355.  
  356.    emMOV em86_AX, Dst
  357.  
  358. endm
  359.  
  360.  
  361.  
  362. emADDv macro Val, Src, Dst
  363.  
  364.    local SrcVal, Lbl
  365.  
  366.    emADD SrcVal, Src, Dst
  367.  
  368.    emJMP Lbl
  369.  
  370.    SrcVal dw Val
  371.  
  372. Lbl:
  373.  
  374. endm
  375.  
  376.  
  377.  
  378. emBIN macro Src, Dst
  379.  
  380.    emADD emConstFFFF, Src, emR1
  381.  
  382.    emMOV em86_CX, Dst
  383.  
  384. endm
  385.  
  386.  
  387.  
  388. emJMPci macro Src1, Src2, Src3
  389.  
  390.    emBIN Src1, emR5 
  391.  
  392.    emJMPsi emR5, Src2, Src3
  393.  
  394. endm
  395.  
  396.  
  397.  
  398. emJMPc macro Src, Lbl1, Lbl2
  399.  
  400.    local Src1, Src2
  401.  
  402.    emJMPci Src, Src1, Src2
  403.  
  404.    Src1 dw offset Lbl1
  405.  
  406.    Src2 dw offset Lbl2
  407.  
  408. endm
  409.  
  410.  
  411.  
  412. emPUSH macro Src
  413.  
  414.    emMOVvm Src, emSP
  415.  
  416.    emADDv 2, emSP, emSP
  417.  
  418. endm
  419.  
  420.  
  421.  
  422. emPUSHv macro Val
  423.  
  424.    local Src, Lbl
  425.  
  426.    emPUSH Src
  427.  
  428.    emJMP Lbl
  429.  
  430.    Src dw Val
  431.  
  432. Lbl:
  433.  
  434. endm
  435.  
  436.  
  437.  
  438. emPOP macro Dst
  439.  
  440.    emADDv -2, emSP, emSP
  441.  
  442.    emMOVmv emSP, Dst
  443.  
  444. endm
  445.  
  446.  
  447.  
  448. emCALL macro Lbl
  449.  
  450.    local RetLbl
  451.  
  452.    emPUSHv <offset RetLbl>
  453.  
  454.    emJMP Lbl
  455.  
  456. RetLbl:
  457.  
  458. endm
  459.  
  460.  
  461.  
  462. emRET macro
  463.  
  464.    emPOP emIP
  465.  
  466. endm
  467.  
  468.  
  469.  
  470. emByteMask:
  471.  
  472.    dw 0FFh
  473.  
  474.  
  475.  
  476. emCode:
  477.  
  478.    emMOVv <offset Copyright>, emVR1
  479.  
  480.    emCALL emPrintText
  481.  
  482.    emCALL emPrintCRLF
  483.  
  484.  
  485.  
  486.    emMOVv <offset EnterPwd>, emVR1
  487.  
  488.    emCALL emPrintText
  489.  
  490.  
  491.  
  492.    emCALL emInputText
  493.  
  494.    emCALL emPrintCRLF
  495.  
  496.  
  497.  
  498.    emCALL emEncryptPwd
  499.  
  500.    emXOR emV_EncryptedPwd1, emVR4, emVR1
  501.  
  502.    emJMPc emVR1, emWrongPwd, emExtraCheck
  503.  
  504.  
  505.  
  506. emExtraCheck:
  507.  
  508.    emXOR emV_EncryptedPwd2, emVR5, emVR1
  509.  
  510.    emJMPc emVR1, emWrongPwd, emCorrectPwd
  511.  
  512.  
  513.  
  514. emWrongPwd:
  515.  
  516.    emMOVv <offset WrongPwdMsg>, emVR1
  517.  
  518.    emJMP emPrintPwdMsg
  519.  
  520.  
  521.  
  522. emCorrectPwd:
  523.  
  524.    emMOVv <offset CorrectPwdMsg>, emVR1
  525.  
  526.  
  527.  
  528. emPrintPwdMsg:
  529.  
  530.    emCALL emPrintText
  531.  
  532.    emCALL emPrintCRLF
  533.  
  534.  
  535.  
  536.    emSTOP
  537.  
  538.  
  539.  
  540. emPrintText:
  541.  
  542.    emMOVv 0AAh, emVR4
  543.  
  544. emPrintNext:
  545.  
  546.    emMOVmv emVR1, emVR3
  547.  
  548.    emXOR emVR4, emVR3, emVR2
  549.  
  550.    emMOV emVR3, emVR4
  551.  
  552.    emAND emByteMask, emVR2, emVR2
  553.  
  554.    emJMPc emVR2, emDoPrint, emLeavePrint
  555.  
  556. emDoPrint:
  557.  
  558.    emADDv 1, emVR1, emVR1
  559.  
  560.    emCALL emPrintChar
  561.  
  562.    emJMP emPrintNext
  563.  
  564. emLeavePrint:
  565.  
  566.    emRET
  567.  
  568.  
  569.  
  570. emPrintChar:
  571.  
  572.    emMOV emVR2, em86_DX
  573.  
  574.    emMOVv 200h, em86_AX
  575.  
  576.    em86_INT 21h
  577.  
  578.    emRET
  579.  
  580.  
  581.  
  582. emPrintCRLF:
  583.  
  584.    emMOVv 13, emVR2
  585.  
  586.    emCALL emPrintChar
  587.  
  588.    emMOVv 10, emVR2
  589.  
  590.    emCALL emPrintChar
  591.  
  592.    emRET
  593.  
  594.  
  595.  
  596. emInputText:
  597.  
  598.    emMOVv <offset emV_Buffer>, em86_DX
  599.  
  600.    emMOVv 0A00h, em86_AX
  601.  
  602.    em86_INT 21h
  603.  
  604.    emRET
  605.  
  606.  
  607.  
  608. emEncryptPwd:
  609.  
  610.    emMOVv <offset emV_Buffer + 2>, emVR1
  611.  
  612.    emCLR emVR4
  613.  
  614. emEncryptNext:
  615.  
  616.    emMOVmv emVR1, emVR3
  617.  
  618.    emAND emByteMask, emVR3, emVR2
  619.  
  620.    emXOR emConst000D, emVR2, emVR2
  621.  
  622.    emJMPc emVR2, emDoEncrypt, emLeaveEncrypt
  623.  
  624. emDoEncrypt:
  625.  
  626.    emADDv 1, emVR1, emVR1
  627.  
  628.    emMOV emVR4, emVR5
  629.  
  630.    emXOR emVR3, emVR4, emVR4
  631.  
  632.    emJMP emEncryptNext
  633.  
  634. emLeaveEncrypt:
  635.  
  636.    emRET
  637.  
  638.  
  639.  
  640. EncryptText macro Text
  641.  
  642.    local Val
  643.  
  644.    Val = 0AAh
  645.  
  646.    irpc Char, <&Text>
  647.  
  648.       Val = Val xor '&Char'
  649.  
  650.       db Val
  651.  
  652.    endm
  653.  
  654.    db Val
  655.  
  656. endm
  657.  
  658.  
  659.  
  660. Copyright:
  661.  
  662. EncryptText <Emulated Solar CPU  Copyright (c) 1996 by Solar Designer>
  663.  
  664.  
  665.  
  666. EnterPwd:
  667.  
  668. EncryptText <Enter password: >
  669.  
  670.  
  671.  
  672. WrongPwdMsg:
  673.  
  674. EncryptText <Incorrect password>
  675.  
  676.  
  677.  
  678. CorrectPwdMsg:
  679.  
  680. EncryptText <Thanks>
  681.  
  682.  
  683.  
  684. emV_EncryptedPwd1 dw 7528h
  685.  
  686. emV_EncryptedPwd2 dw 784Dh
  687.  
  688.  
  689.  
  690. emConst000D dw 000Dh
  691.  
  692.  
  693.  
  694. emV_Buffer db 16, 19 dup (?)
  695.  
  696.  
  697.  
  698. even
  699.  
  700. em86_R1 dw ?
  701.  
  702. em86_R2 dw ?
  703.  
  704.  
  705.  
  706. em86_REGS:
  707.  
  708. em86_DI dw ?
  709.  
  710. em86_SI dw ?
  711.  
  712. em86_BP dw ?
  713.  
  714. em86_SP dw ?
  715.  
  716. em86_BX dw ?
  717.  
  718. em86_DX dw ?
  719.  
  720. em86_CX dw ?
  721.  
  722. em86_AX dw ?
  723.  
  724. em86_FLAGS dw ?
  725.  
  726.  
  727.  
  728. emR1 dw ?
  729.  
  730. emR2 dw ?
  731.  
  732. emR3 dw ?
  733.  
  734. emR4 dw ?
  735.  
  736. emR5 dw ?
  737.  
  738. emR6 dw ? 
  739.  
  740.  
  741.  
  742. emVR1 dw ?
  743.  
  744. emVR2 dw ?
  745.  
  746. emVR3 dw ?
  747.  
  748. emVR4 dw ?
  749.  
  750. emVR5 dw ?
  751.  
  752. emVR6 dw ? 
  753.  
  754.  
  755.  
  756. emStack:
  757.  
  758.  
  759.  
  760. end
  761.  
  762.