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

  1. Tutorial for Crackme 13 ID:10 (tC...)
  2. by Sanhedrin
  3.  
  4. Tools
  5. W32Dasm
  6. Softice
  7. HIEW
  8.  
  9.  
  10. --INTRODUCTION--
  11.  
  12. This crackme has a menu button disabled.  The rules also state that we are not allowed to patch 
  13. the jump itself.
  14.  
  15.  
  16. --FINDING THE REFERENCE--
  17.  
  18. I have to admit that it took me a while to figure out exactly where to start with this crackme.
  19. I searched through the code and found very little.  Then I saw the EnableMenuItem.  A quick look
  20. at the Win32 Programmer's Reference:
  21.  
  22. EnableMenuItem - Specifies the menu item to be enabled, disabled, or grayed, as determined by the
  23. uEnable parameter. This parameter specifies an item in a menu bar or in a pop-up menu. 
  24.  
  25.  
  26. This means that a call to EnableMenuItem diables (and greys) the button called 'Menue'.  Therefore,
  27. we have to find where the call is made, and find a way of patching without changing the jump. So, 
  28. let's disassemble the crackme, and see what calls there are to EnableMenuItem.  After a quick search,
  29. you will come to 004329E4. 
  30.  
  31. |
  32. :004329E4 8B7E58                  mov edi, dword ptr [esi+58]
  33. :004329E7 85FF                    test edi, edi
  34. :004329E9 7427                    je 00432A12<---jump past EnableMenuItem if zero
  35. :004329EB F6462002                test [esi+20], 02
  36. :004329EF 7521                    jne 00432A12
  37. :004329F1 33C0                    xor eax, eax
  38. :004329F3 8AC3                    mov al, bl
  39. :004329F5 8B0485D4374400          mov eax, dword ptr [4*eax+004437D4]
  40. :004329FC 83C800                  or eax, 00000000
  41. :004329FF 50                      push eax
  42. :00432A00 0FB74644                movzx eax, word ptr [esi+44]
  43. :00432A04 50                      push eax
  44. :00432A05 8BC7                    mov eax, edi
  45. :00432A07 E824F4FFFF              call 00431E30
  46. :00432A0C 50                      push eax
  47.  
  48. * Reference To: user32.EnableMenuItem, Ord:0000h
  49.                                   |
  50. :00432A0D E89A36FDFF              Call 004060AC
  51.  
  52. * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
  53. |:004329E9(C), :004329EF(C)
  54. |
  55. :00432A12 33D2                    xor edx, edx
  56. :00432A14 8BC6                    mov eax, esi
  57. :00432A16 8B08                    mov ecx, dword ptr [eax]
  58. :00432A18 FF5134                  call [ecx+34]
  59.  
  60.  
  61. Notice that we have two oportunities to jump over the refernce.  I am sure that there are many ways to
  62. patch this one, but the method I chose was to change the test edi,edi to something that would be zero,
  63. allowing the jump to take place.  A quick look in softice that the register EBX is zero when this test
  64. takes place.  Therefore, in order to crack this one, change:
  65.  
  66. 004329E7 85FF        test edi, edi
  67.  
  68. to
  69.  
  70.          85FB        test ebx, edi
  71.          
  72.  
  73. and the Menue button will be enabled.
  74.  
  75.  
  76. --FINAL NOTES--
  77.  
  78. It is a good idea to find the Win32 Programmer's Reference.  It is an 11MB file and well worth the download
  79. time.
  80.  
  81.  
  82.  
  83. Greets to tC...
  84.  
  85. Thanks to all of those coders that make these crackmes, to Pepper for sending me on the 
  86. right path so long ago and of course to Eternal Bliss.
  87.  
  88.  
  89. Sanhedrin
  90. stachi@geocities.com