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

  1. Hiya!
  2.  
  3.  First I want to thank all those good guys who are writing Crackme's and tests so that we can
  4. learn and improve our knowledge. Greetings this time especially to FireWorx who coded the
  5. target we're dealing with now and to Eternal Bliss for doing a great work with his
  6. CrackMe(s)-site.
  7.  
  8.  This time FireWorx just asks us to enter a valid password. If we're dealing with this kind of
  9. protection scheme it's quite likely that our entered password is compared with a hardcoded
  10. password - but the real code could also be calculated from the name/handle we entered or other
  11. variations. So let's check what we have here...
  12.  
  13.  Again we will use Numega's powerful SoftICE. Start Crackme3 then press the 'register'-button
  14. and type in your favorite name/handle. 'Ctrl-D' to go to SoftICE and set a breakpoint on
  15. hmemcpy ('bpx hmemcpy'). F5 to go back to the Crackme and press the OK-button.
  16.  SoftICE pops up; disable the breakpoint ('bd0') and press F11 ('go to') once and then F12
  17. ('Return from the procedure call') until we reach the Crackme3-code (watch the line between
  18. the Code window and the Command window). You can go on by pressing F10 ('step over') or -
  19. faster - by using some more F12's to pass some obvious ret's until we land...
  20.  
  21.  
  22. --- 
  23. :004454B2 E849E3FDFF              call 00423800
  24. :004454B7 8B45F8                  mov eax, dword ptr [ebp-08]        ;...here
  25. :004454BA 8D55FC                  lea edx, dword ptr [ebp-04]
  26. :004454BD E84220FCFF              call 00407504
  27. :004454C2 8B45FC                  mov eax, dword ptr [ebp-04]        
  28. :004454C5 8B9398000000            mov edx, dword ptr [ebx+00000098]
  29. :004454CB E874E6FBFF              call 00403B44
  30. :004454D0 752E                    jne 00445500
  31. ---
  32.  
  33.  This is all we need. The password we have entered is copied to eax (004454B7). After the call
  34. at 004454BD our (maybe) 'uppercased' password is copied to eax (means that if your original
  35. password was eg 'walker72' it will be 'WALKER72' now).
  36.  And here it is...the hardcoded real password is copied to edx at location 004454C5. The
  37. 'comparison-call' follows which checks if the password we entered is the same as the real one.
  38. It is not? Oh sorry then jump away bad guy...it is the same? Then set Zero flag and don't jump
  39. my good friend. Finished.
  40.  
  41.   
  42.  
  43. Here's some additional info:
  44.  
  45. Of course you can easily step over the call at 004454BD with F10 without getting a guilty
  46. conscience:); here's just a short description what's happening inside:
  47.  
  48. ---
  49. :0040751F 8B37                    mov esi, dword ptr [edi]
  50. :00407521 85DB                    test ebx, ebx                ;nothing entered?
  51. :00407523 7415                    je 0040753A                ;..then jump away
  52.  
  53. :00407525 8A02                    mov al, byte ptr [edx]        ;otherwise go on
  54. :00407527 3C61                    cmp al, 61                ;with check and
  55. :00407529 7206                    jb 00407531                ;uppercase
  56. :0040752B 3C7A                    cmp al, 7A                ;routine
  57. :0040752D 7702                    ja 00407531                ;....
  58. :0040752F 2C20                    sub al, 20                ;....
  59.  
  60. :00407531 8806                    mov byte ptr [esi], al        ;...save...
  61. :00407533 42                      inc edx
  62. :00407534 46                      inc esi
  63. :00407535 4B                      dec ebx                ;length-1
  64. :00407536 85DB                    test ebx, ebx                ;end of password?
  65. :00407538 75EB                    jne 00407525  
  66. ---
  67.  
  68.  
  69.  At 00407521 the ebx-register contains the length of our name; 'test ebx, ebx' means check if
  70. we have entered something? If not then jump away (00407523).
  71.  Otherwise copy the first char of our password to al (00407525) and check if it is a char from
  72. 'a' (61h) to 'z' (7Ah) - look at your ASCII-table for this or just type in '? 61' and '? 71'
  73. in SoftICE. So if it is between 'a' and 'z' then sub 20h from the hex-value of our char which
  74. means uppercase our char (eg turn 't' into 'T'); save result for later use afterwards
  75. (00407531). If it's not between 'a' and 'z' go directly to 00407531.
  76.  
  77.  The ebx-register is used as a counter here (we know it holds the length of the password we
  78. entered). So this routine will loop until we reach the end of our password (ebx is zero).
  79.  
  80.  
  81. Done! This was not too hard eh?
  82.  
  83.  
  84. Greetings to CrackZ for being so helpful all the time.
  85.  
  86.  
  87. Good luck!
  88.  
  89.  
  90. cheers     tnwo_
  91.  
  92.  
  93.