home *** CD-ROM | disk | FTP | other *** search
/ Reverse Code Engineering RCE CD +sandman 2000 / ReverseCodeEngineeringRceCdsandman2000.iso / RCE / Corleone / Cracking_OmniPage_Web_1_0.TXT < prev    next >
Text File  |  2000-05-25  |  6KB  |  164 lines

  1. Cracking OmniPage Web 1.0 
  2. '30-day trial'-protection scheme 
  3. Written by Cerberus 
  4.  
  5.  
  6. Introduction 
  7.  
  8. I found this program on the illigal warez-cd "Twilight 33" and it asked if it could apply a
  9. patch. Well, no of course not. Every die-hard cracker cracks everything by himself! So I
  10. started cracking and I discovered that it is a very simple protection, cracked in 2 min!
  11. My goal is to get more crackers in this world so that we can defeat every protection scheme
  12. there is. To be a experienced cracker you MUST understand assembly. On the INet you can find
  13. lots of tutorials about assembly. So read as much as you can to be part of the elite
  14. crackers.
  15.  
  16.  
  17. Tools required 
  18. These tools were used: 
  19.  
  20. Hiew 6.0 (for patching) 
  21. W32Dsm 8.9 (for disassembling) 
  22.  
  23.       Target's URL/FTP 
  24. http://www.caere.com/ 
  25.  
  26.  
  27. Essay 
  28.  
  29. First install OmniPage Web 1.0. 
  30. Open OmniPage with W32Dsm (filename: omnipweb.exe)
  31. Save the listing as text (if something goes wrong you only have to open the project-file.
  32.                           In the project-menu choose the only option:
  33.                           Open Project file...)
  34. Open the dialog "String references" -> button [Str Ref] next to the print-button
  35. Find the text: "This demo version of OmniPage "
  36. Dubble-click it and close the dialog
  37.  
  38. You now see this:
  39.  
  40. * Reference To: MFC42.MFC42:NoName0149, Ord:0320h
  41.                                   |
  42. :0046B29D E898E40700              Call 004E973A
  43. :0046B2A2 B801000000              mov eax, 00000001
  44. :0046B2A7 EB28                    jmp 0046B2D1
  45.  
  46. * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
  47. |:0046A284(C), :0046A2A1(C)
  48. |
  49. :0046B2A9 57                      push edi
  50.  
  51. * Possible StringData Ref from Data Obj ->"Sorry!"
  52.                                   |
  53. :0046B2AA 68742F5200              push 00522F74
  54.  
  55. * Possible StringData Ref from Data Obj ->"This demo version of OmniPage "
  56.                                         ->"Web has expired."
  57.                                   |
  58. :0046B2AF 68442F5200              push 00522F44
  59. :0046B2B4 57                      push edi
  60.  
  61. * Reference To: USER32.MessageBoxA, Ord:0195h
  62.                                   |
  63. :0046B2B5 FF1528C34F00            Call dword ptr [004FC328]
  64.  
  65. * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
  66. |:0046A3EC(U), :0046A452(U), :0046A479(U), :0046A65E(U), :0046A7EF(C)
  67. |:0046A8D3(U), :0046AA7A(C), :0046AAEC(C), :0046AC14(U), :0046ACBB(U)
  68. |:0046ADF5(U), :0046AE30(U), :0046AED7(U), :0046AF27(U), :0046AFCE(U)
  69. |
  70. :0046B2BB 8D4C2418                lea ecx, dword ptr [esp+18]
  71. :0046B2BF C784248C040000FFFFFFFF  mov dword ptr [esp+0000048C], FFFFFFFF
  72.  
  73. * Reference To: MFC42.MFC42:NoName0149, Ord:0320h
  74.  
  75. In assembly you have two different types of jumps. Conditional and unconditional jumps.
  76. The difference is that the first type jumps only if a compare is made and the result
  77. is true, otherwise the jump isn't made.
  78.  
  79. The routine of the MessageBoxA function is as follows (retrieved from the 'Win32 Developer's
  80. References':
  81.  
  82. int MessageBox(
  83.  
  84.     HWND  hWnd,    // handle of owner window
  85.     LPCTSTR  lpText,    // address of text in message box
  86.     LPCTSTR  lpCaption,    // address of title of message box  
  87.     UINT  uType     // style of message box
  88.    );
  89.  
  90. First the uType is pushed on the stack, then lpCaption, then lpText and finally hWnd.
  91. There are TWO conditional jumps to this routine:
  92.  
  93. :0046A284
  94. :0046A2A1
  95.  
  96. Let's take a closer look at these lines:
  97.  
  98. :0046A278 E859F80700              Call 004E9AD6
  99. :0046A27D 8B4010                  mov eax, dword ptr [eax+10]
  100. :0046A280 40                      inc eax
  101. :0046A281 83F803                  cmp eax, 00000003
  102. :0046A284 0F8F1F100000            jg 0046B2A9            <- First jump
  103. :0046A28A 57                      push edi
  104. :0046A28B 8D4C2428                lea ecx, dword ptr [esp+28]
  105.  
  106. * Reference To: MFC42.MFC42:NoName0308, Ord:0D09h
  107.                                   |
  108. :0046A28F E842F80700              Call 004E9AD6
  109. :0046A294 8B4014                  mov eax, dword ptr [eax+14]
  110. :0046A297 056C070000              add eax, 0000076C
  111. :0046A29C 3DCF070000              cmp eax, 000007CF
  112. :0046A2A1 0F8F02100000            jg 0046B2A9            <- Second jump
  113. :0046A2A7 E8E4160000              call 0046B990
  114. :0046A2AC E83F150000              call 0046B7F0
  115. :0046A2B1 E83A100000              call 0046B2F0
  116.  
  117.  
  118. "jg" means "Jump if Greater". It jumps if eax is greater than 0x3 or greater than 0x7CF.
  119. This jump must never been made. There are many ways to do this. I hate using 'NOP' so I did
  120. the following:
  121.  
  122. Changed    jg 0046B2A9 to jmp 46A28A (next line)
  123. Changed jg 0046B2A9 to jmp 46A2A7 (next line)
  124.  
  125. Now the offsets in the file (these are slightly different from the ones at the left of the
  126. listing!). Select the first jump and look at the bottom of the screen. There you'll see in
  127. the statusbar the text: @Offset 00069684h in File:omnipweb.exe
  128.  
  129. So offset 69684h in the file is the first jump. The second one is at offset 696A1h.
  130.  
  131. Close W32Dsm.
  132. We are now doing some changes in the file so make a backup first.
  133. Open "omnipweb.exe" with Hiew. Press [F4] to change this weird text view to 'Decode'.
  134. Ah, this looks better. Now we must go to the jump-offsets. Press [F5] and type the first
  135. offset:
  136.  
  137. 69684 
  138.  
  139. Press [F3] to edit the file. Then switch to 'Asm' with [F2]. Now you can input instructions
  140. and Hiew will automatically code it. Type the instruction:
  141.  
  142. jmp 6968A
  143.  
  144. Press [ESC] to return to the listing. Update the file with [F9] and go to the next location.
  145. Again press [F3] and switch to 'Asm'. Type the instruction:
  146.  
  147. jmp 696A7
  148.  
  149. and return to the listing. Exit the program with [F10], update and run OmniPage. After running
  150. the program for a very long period, no message will appear!!!!!
  151.  
  152.  
  153.  
  154.       Final Notes 
  155.  
  156. As I stated in the intro, it is a simple crack. But if there are any
  157. questions/comments, then you can E-Mail me at:
  158.  
  159. Cerberus_X@hotmail.com
  160.  
  161. Greets,
  162. Cerberus
  163.  
  164.