home *** CD-ROM | disk | FTP | other *** search
/ Reverse Code Engineering RCE CD +sandman 2000 / ReverseCodeEngineeringRceCdsandman2000.iso / RCE / E_bliss / eb_tut10.txt < prev    next >
Text File  |  2000-05-25  |  10KB  |  285 lines

  1.             Tutorial Number 10
  2.  
  3. Written by Etenal Bliss
  4. Email: Eternal_Bliss@hotmail.com
  5. Website: http://crackmes.cjb.net
  6.          http://surf.to/crackmes
  7. Date written: 24th Feb 1999
  8.  
  9. Program Details:
  10. Name: Immortal Descendants CrackMe v3.0
  11. Author: Volatility
  12. Language: Visual Basic
  13.  
  14. Tools Used:
  15. Softice
  16.  
  17. Cracking Method:
  18. Tracing and Code Sniffing
  19.  
  20. Viewing Method:
  21. Use Notepad with Word Wrap switched on
  22. Screen Area set to 800 X 600 pixels (Optional)
  23.  
  24. __________________________________________________________________________
  25.  
  26.  
  27.                         About this protection system
  28.  
  29. No disabled function. Protection is based on either entering correct serial
  30. for UserName or a keyfile. "Register" button is not activated unless the
  31. correct code is entered.
  32.  
  33. __________________________________________________________________________
  34.  
  35.  
  36.                                  The Essay
  37.  
  38. I've written the important part of the codes here for easy reference. If you
  39. want to fully understand the crackme, try tracing into the calls. 
  40. For this crackme, this is actually not necessary.
  41.  
  42. In this essay, when I write type "d edx" or similar commands in Softice,
  43. I mean it without the quotes.
  44.  
  45. __________________________________________________________________________
  46.  
  47.  
  48.                 Where to break?
  49.  
  50. First, we need to find a suitable breakpoint. Since the "Register" button
  51. will only be activated when we enter the correct code, we can assume that
  52. what we entered is compared with the correct code in "real" time.
  53.  
  54. So, the best breakpoint I could think of it Hmemcpy.
  55.  
  56. __________________________________________________________________________
  57.  
  58.  
  59.             Tracing and Code Sniffing    
  60.  
  61. You must first run the CrackMe, enter a User Name. (I used Eternal Bliss)
  62. Then Ctrl D to go into Softice and set a breakpoint using "bpx hmemcpy".
  63.  
  64. Then in the "Registration" textbox, type in just 1 number. (Any will do)
  65.  
  66. You will break into Softice. Disable the breakpoint by typing "bd *"
  67. Keep pressing F12 (10 of them) because there are nothing important there... 
  68. until you reach the code where MSVBVM50! is seen under the code window.
  69.  
  70. From there, you type F10 which will move you line by line. 
  71. You can display any changes in the registers by typing a "d" in front.
  72. eg. "d eax", "d ebx" etc
  73. To see the value of the registers, you can type a "?" in front.
  74. eg "? eax", "? ebx" etc
  75.  
  76. I found nothing of importance until this part"
  77.  
  78. :00405153  8B4588              MOV     EAX,[EBP-78]
  79. :00405156  8D8D70FFFFFF        LEA     ECX,[EBP-0090] 
  80.  
  81. Here, E.t.e.r.n.a.l. .B.l.i.s.s. is loaded into ecx. 
  82. To see it, type "d ecx" and look at the data window.
  83.  
  84.  
  85. A lot more lines later, 
  86.  
  87. :0040518A  FF15C4814000        CALL    [MSVBVM50!__vbaStrVarVal]
  88. :00405190  50                  PUSH    EAX
  89. :00405191  FF1548814000        CALL    [MSVBVM50!rtcAnsiValueBstr]
  90.  
  91. At 0040518A, after the call, you will see EAX changing colour which 
  92. means that it has got a new value. Type "d EAX" and look at the 
  93. data window. You will see "E" which is the 1st char
  94. At 00405191, after the call, EAX changes again. 
  95. This time, if you type "d EAX", you won't see anything much. 
  96. You will need to type "? EAX" and you will see
  97. 00000045  0000000069  "E"
  98. The value you need to see is 69 which is the decimal value for 
  99. the ascii char "E"
  100.  
  101.  
  102. More lines down,
  103.  
  104. :0040527D  FF15C4814000        CALL    [MSVBVM50!__vbaStrVarVal]
  105. :00405283  50                  PUSH    EAX
  106. :00405284  FF1548814000        CALL    [MSVBVM50!rtcAnsiValueBstr]
  107.  
  108. The same thing happens again. This time, after the 1st call, EAX contains
  109. the 2nd char which is "t"
  110. After the 2nd call, EAX has a value of 116 which is the decimal value for "t"
  111.  
  112. **note: all this code is in the main CrackMe. You don't have to trace into
  113.   any calls at all.
  114.  
  115.  
  116. More lines down,
  117.  
  118. :0040536B  FF15C4814000        CALL    [MSVBVM50!__vbaStrVarVal]
  119. :00405371  50                  PUSH    EAX
  120. :00405372  FF1548814000        CALL    [MSVBVM50!rtcAnsiValueBstr]
  121.  
  122. Same thing again. This time for "e" which is the 3rd char and has decimal
  123. value of 101 which is seen by typing "? EAX" after the 2nd call.
  124.  
  125.  
  126. More lines down,
  127.  
  128. :00405459  FF15C4814000        CALL    [MSVBVM50!__vbaStrVarVal]
  129. :0040545F  50                  PUSH    EAX
  130. :00405460  FF1548814000        CALL    [MSVBVM50!rtcAnsiValueBstr]
  131.  
  132. Get 4th char which is "r" and has value of 114
  133.  
  134.  
  135. Yet more lines down,
  136.  
  137. :00405547  FF15C4814000        CALL    [MSVBVM50!__vbaStrVarVal]
  138. :0040554D  50                  PUSH    EAX
  139. :0040554E  FF1548814000        CALL    [MSVBVM50!rtcAnsiValueBstr]
  140.  
  141. This time the 5th char ("n") and has value of 110
  142.  
  143.  
  144. Be patient and keep pressing F10 only... 
  145. F8 is to trace INTO a call which is NOT needed here.
  146.  
  147. Get to this part
  148.  
  149. :004055EE  FFD6                CALL    ESI
  150. :004055F0  8D8D50FFFFFF        LEA     ECX,[EBP-00B0]
  151. :004055F6  8D9560FFFFFF        LEA     EDX,[EBP-00A0]
  152.  
  153. After the "CALL ESI", you will notice eax, ecx, edx changing colour.
  154. You can try typing "d eax", "d "ecx", "d edx" etc
  155. ECX will show in the data window as 6.9.1.1.6.1.0.1.1.1.4.1.1.0
  156. Since VB uses W.I.D.E. .C.H.A.R.A.C.T.E.R that is what you will see.
  157. In actual fact, it is 69116101114110
  158.  
  159. **Is the sequence of the numbers familiar to you? 8)
  160.   You are getting somewhere hot... 
  161.  
  162.  
  163. So be patient and more F10s till here...
  164.  
  165. :00405634  FF1588814000        CALL    [MSVBVM50!rtcMidCharVar]
  166. :0040563A  8D9560FFFFFF        LEA     EDX,[EBP-00A0]
  167. :00405640  8D4DDC              LEA     ECX,[EBP-24]
  168. :00405643  FFD6                CALL    ESI
  169.  
  170. After this call at 00405634, if you don't have to type anything,
  171. just look at edx. You will see edx=00000014
  172. **count the number of chars in ecx a few lines above...
  173.  
  174. Then, after the "CALL ESI", if you type "d ecx", you will see
  175. 9.1.1.6.1.0.1.1.1.4 in the data window.
  176. So, ecx is 9116101114.
  177.  
  178. **Does this look familiar to you again?? 8)
  179.   Hotter...
  180.  
  181. If you trace into the call at 00405643, you might see how this number
  182. is generated.
  183.  
  184.  
  185. More lines down... (remember, no tracing into any calls here)
  186.  
  187. :0040568A  8B4588              MOV     EAX,[EBP-78]
  188. :0040568D  33C9                XOR     ECX,ECX
  189.  
  190. After F10 pass 0040568A, you will see EAX changing colour.
  191. If you type "d eax", you will see the serial YOU entered.
  192.  
  193. **In fact, the correct serial is already out... Take a look above.
  194.   But if you want to confirm, look further on...
  195.  
  196. You will need to turn on your "floating window" in Softice by typing
  197. "wf". You will see 2 column with ST(0) to ST(7)
  198.  
  199. :004056B0  C78570FFFFFF08000000MOV     DWORD PTR [EBP-0090],00000008
  200. :004056BA  C78530FFFFFF02800000MOV     DWORD PTR [EBP-00D0],00008002
  201. :004056C4  FF1524814000        CALL    [MSVBVM50!__vbaVarSub]  <-- trace into this call
  202.  
  203. MSVBVM50!__vbaVarSub
  204. :7B3F24CE  33C0                XOR     EAX,EAX
  205. :7B3F24D0  8BEC                MOV     EBP,ESP
  206.  
  207.             __________Snip___________
  208.  
  209. :7B3F8B63  56                  PUSH    ESI
  210. :7B3F8B64  E88C64F1FF          CALL    MSVBVM50!__vbaR8Var
  211. :7B3F8B69  DD5DF4              FSTP    REAL8 PTR [EBP-0C]
  212. :7B3F8B6C  66BE0500            MOV     SI,0005
  213. :7B3F8B70  57                  PUSH    EDI
  214. :7B3F8B71  E87F64F1FF          CALL    MSVBVM50!__vbaR8Var
  215. :7B3F8B76  DC6DF4              FSUBR   REAL8 PTR [EBP-0C]
  216. :7B3F8B79  DD5B08              FSTP    REAL8 PTR [EBX+08]
  217. :7B3F8B7C  E89782FFFF          CALL    7B3F0E18
  218.  
  219. After the call at 7B3F8B64, you will notice ST(0) containing the number 
  220. you typed in the "Registration" textbox.
  221. The next line (FSTP REAL8 PTR [EBP-0C]) is to store the value in memory
  222. location [EBP-0C] for later use.
  223.  
  224. Then at 7B3F8B71, there is another similar call... for the correct serial
  225. and after this call, ST(0) contains the correct serial.
  226. Next line (FSUBR REAL8 PTR [EBP-0C]) is to subtract the value in [EBP-0C]
  227. which is what you entered, by the correct serial which is in ST(0).
  228. After this substraction, you will have a negative number in ST(0)
  229. (provided that you only entered 1 number in the textbox)
  230.  
  231. The next line is to store the new value in memory location [ebx+08]
  232.  
  233.  
  234. To double-re-confirm, breakpoint on 
  235. :004056C4  FF1524814000        CALL    [MSVBVM50!__vbaVarSub]
  236.  
  237. This time, enter the correct serial number... and trace into the call again.
  238. You will notice that after the subtraction in line 7B3F8B76, you will 
  239. have ST(0) = 0
  240.  
  241. F5 out of Softice. You will have the "Register" button enabled. 
  242. Click on it and you will have a nice message from Volatility and a keyfile
  243. generated for you in the directory you place the CrackMe in.
  244.  
  245. You can try with other UserNames and you will find that the correct
  246. serial is generated from the 2nd to 12th char after "joining" up all
  247. the decimal numbers of your UserName. 
  248. Therefore, it will only be 10 digits.
  249.  
  250. CrackMe cracked!!
  251.  
  252. __________________________________________________________________________
  253.  
  254.  
  255.             SmartCheck impossible?
  256.  
  257. It is possible to use SmartCheck but the main aim of the CrackMe will be 
  258. lost.
  259.  
  260. To do this, open the CrackMe using a HexEditor and look for
  261. N.u.M.e.g.a. .S.m.a.r.t.C.h.e.c.k
  262. Then carefully, overwrite the chars only... Try not to disturb the "dots".
  263. I'm not sure what the effects will be if you do so.
  264. You can just "space out" the chars to become
  265.  . . . . . . . . . . . . . . . . 
  266.  
  267. Then, you can run the CrackMe without any "side effects". 8)
  268.  
  269.  
  270. __________________________________________________________________________
  271.  
  272.  
  273.                              Final Notes
  274.  
  275. This tutorial is dedicated to all the newbies like me.
  276.  
  277. And because I'm a newbie myself, I may have explained certain things wrongly
  278. So, if that is the case, please forgive me. Email me if there is anything 
  279. you are not clear about.
  280.  
  281.  
  282. My thanks and gratitude goes to:-
  283.  
  284. The Sandman
  285. All the writers of Cracks tutorials and CrackMes