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

  1. Essay : Cracking 99% of all Time Trials - Written by Mushy.
  2.  
  3. The Call Flow Approach :-
  4.  
  5. What is a call flow ?
  6. *********************
  7. When a program is run or executed, it runs through a series of
  8. functions, procedures and instructions (both procedures
  9. and functions are collections of instructions that are
  10. grouped together to save space and time). A call flow
  11. is a listing or diagram of the path a program takes
  12. when it executes. This path can be different depending
  13. on the circumstances when the program was run. Imagine
  14. six procedures as follows :
  15.  
  16. 1.) GetSystemTime. (Checks the system time).
  17. 2.) Installed. (Checks when you installed the program).
  18. 3.) Expired. (Displays an expired message).
  19. 4.) DaysLeft. (Displays the message 'you have % days left').
  20. 5.) Halt. (Quits the program).
  21. 6.) Main. (The main program).
  22.  
  23. Using the procedures, the psuedo asm code of a Time Trial 
  24. protection would be something like this :
  25.  
  26. 00000001 :Call GetSystemTime.
  27. 00000002 :Call Installed.
  28. 00000003 :if (GetSystemTime - Installed) is greater than 30 days then
  29. 00000004 :   Call Expired,
  30. 00000005 :   Jmp Halt.
  31. 00000006 :otherwise
  32. 00000007 :   Call DaysLeft,
  33. 00000008 :   Jmp Main.
  34.  
  35. This would look something like this in real terms :
  36.  
  37. Call 041829B0 (GetSystemTime)
  38. Call 0492832C (Installed)
  39. Cmp  Ax,Bx    (if statement)
  40. JL   04927435 (Jump or No Jump, depending on values ax and bx)
  41. Call 04348234 (Expired)
  42. Jmp  0432833C (Halt)
  43. ---JL Address---
  44. Call 04583BC0 (DaysLeft Message)
  45. Jmp  042392BC (Main Program) 
  46.  
  47.  
  48. If you look at the above code you will see that the way the
  49. program runs depends on the values of ax and bx before the JL
  50. command. The problem is that in a large disassembly of code it
  51. is often difficult to find the right place to patch because there
  52. are so many cmp/jl or cmp/jne occurances. So how do we go about
  53. finding the correct location ?
  54.  
  55.  
  56. Finding the right location.
  57. ***************************
  58.  
  59. Using the above code we can generate two possible program flows.
  60. When you are still in the 30 day trial period, the call flow 
  61. would look like this :
  62.  
  63. GetSystemTime
  64. Installed
  65. Cmp ax,bx
  66. JL (Jump)
  67. DaysLeft
  68. Main.
  69.  
  70. When the trial period has expired the call flow would look like
  71. this :
  72.  
  73. GetSystemTime
  74. Installed
  75. Cmp ax,bx
  76. JL ( No Jump )
  77. Expired
  78. Halt.
  79.  
  80. Using these two listings we can see that up until the JL command,
  81. everything is the same, except that the first listing Jumps and
  82. the second listing doesn`t. The JL command is dependant on the
  83. value of ax and bx. To crack a time trial, all we have to do
  84. is to either change the value of ax and bx (The correct way) so 
  85. that you will always have a trial period (Or) change the JL to a
  86. Jmp and force the program to use the path of the first call flow.
  87.  
  88.  
  89. Ok,I understand the principle. Now show me how to do it ?
  90. *********************************************************
  91.  
  92. The tools we need :
  93.  
  94. SoftIce v3.23 installed with the Symbol Loader.
  95. A hex editor.
  96. (No disassembler is needed)
  97.  
  98. Firstly, load up the symbol loader that is installed with softice.
  99. You can find it in the folder on the taskbar. Go to the file
  100. menu in the symbol loader and click on 'open module'. Then find and
  101. click on the Executable file / Program that you wish to crack. 
  102. Once this has been done, go to the Module menu and click on Load 
  103. Module. Normally, this will greet you with an error message telling 
  104. you that an error has occured during sysmbol translation. Just click 
  105. on 'Yes' to continue loading the exe file. Softice will now break due
  106. to symbol loader which can be confirmed by looking in the information
  107. window. You will also see a lot of lines in the code window that will
  108. look like this :
  109.  
  110. FFFF INVALID
  111. FFFF INVALID
  112. FFFF INVALID
  113. FFFF INVALID
  114. FFFF INVALID
  115.  
  116. etc,.......
  117.  
  118.  
  119. Ignore this,.... it is not an error. It is just displaying an area in
  120. memory that softice can`t determine yet. At this moment we are just
  121. going to set up softice so that it displays what we want in the
  122. command window. (Remember that everything in the command window
  123. is logged). 
  124.  
  125.  
  126. Step 1 : Close the code window.
  127. *******************************
  128. Start by typing 'wc' in softice. This command toggles
  129. the code window. We DONT want the code window to display, so make
  130. sure that this window is closed. You can also close this window by
  131. using the mouse. You can so this by clicking on the top edge of the
  132. window that you want to close and drag it upwards as far as it will
  133. go. This will make the window disappear.
  134.  
  135.  
  136. Step 2 : Set a breakpoint on GetSystemTime.
  137. *******************************************
  138. We now need to set a breakpoint on GetSystemTime (One of the many
  139. used api functions to return the current Date and Time). You can
  140. set the breakpoint by typing 'BPX GetSystemTime' in the command
  141. window now. By the way,... GetSystemTime is just the address of
  142. the function. If you knew what the address of the function was,
  143. you could also of typed 'BPX 004283CD' etc,..... This means that
  144. you can also add an offset to a BPX for example 'BPX GetSystemTime + 4'.
  145. This will break at an offset of 4 from the start of the function.
  146.  
  147.  
  148. Step 3 : Continue loading the program.
  149. **************************************
  150. Now that you have set the breakpoint in softice (BPX GetSystemTime), it
  151. is time to let the program continue to load and run. All you have to do 
  152. is to press CTRL and D together. As the program continues to load and
  153. run, eventually it will execute the Function 'GetSystemTime'. When 
  154. this happens, softice will pop up and pause the program at the beginning
  155. of the Function. You will see the text 'BPX due to KERNEL32!GetSystemTime'
  156. appear in the command window. We are now in the correct place to start 
  157. logging.
  158.  
  159.  
  160. Step 4 : Step out of the Function.
  161. **********************************
  162. Now that you are placed at beginning of the function 'GetSystemTime'.
  163. We need to step past it, so that we are at the next asm command
  164. directly after the whole function has executed. (Note: The function
  165. 'GetSystemTime' is part of the Kernel32.dll found in the windows
  166. system directory). This function will always run the same set of
  167. commands regardless of the computers state, therefore we do not need 
  168. to log the commands of this function. To step to the very next asm
  169. instruction after the function, all you need to do is press F11
  170. (Function key 11) once. It is at this point that things start to get
  171. interesting. 
  172.  
  173.  
  174. Step 5 : Log all commands, up until the nag screen.
  175. ***************************************************
  176. It`s now time to log everything. All you have to do is step through
  177. the code by pressing F10 (Function key 10) until the nag screen
  178. that display`s 'You have % day`s left' appear. You can hold down
  179. F10 until the screen pops up. You will notice that all the lines
  180. of executed code are displayed in the command window. All of this
  181. information is being logged in the softice Buffer.
  182.  
  183.  
  184. Step 6 : Save the log file.
  185. ***************************
  186. When the nag screen appears, it is time to save the first log file.
  187. You do this by clicking on the softice symbol loader that should
  188. still be loaded. It may be minimised at the bottom of your screen. If
  189. so, then just maximise it and go to the File Menu and click on
  190. 'Save softice history as,...'. Save this file as Log1.txt . If you
  191. load this file into a text editor like wordpad or notepad, you will
  192. see that it has logged the command windows activity from softice. This
  193. is our 'First Call Flow' file. Get the idea :-).....
  194.  
  195.  
  196. Step 7 : Set the date forward and do it all again.
  197. **************************************************
  198. What you need to do now is to create a second call log file, but
  199. this time you need to set the date of your system forwards so that
  200. the time trial will show the expired message. :-). This will force
  201. the flow of the program to take a different path sometime after the
  202. 'GetSystemTime' Function, but before the nag screen appears.
  203.  
  204.  
  205. Step 8 : Compare the two log files.
  206. ***********************************
  207. After you have completed all the steps again and saved a second log
  208. file, you need to compare them. Below, I have included two sample
  209. log files from a new Micro$oft drawing package that supposedly is
  210. well protected. :
  211.  
  212. LOG FILE 1. ( You have % days left )
  213. ***********
  214. Break due to BPX KERNEL32!GetSystemTime  (ET=33.15 milliseconds)
  215. Break due to G (ET=383.02 microseconds)
  216. 015F:78026B90  663B0512870378      CMP     AX,[78038712]
  217. 015F:78026B97  756B                JNZ     78026C04                  (JUMP )
  218. 015F:78026C04  8D8534FFFFFF        LEA     EAX,[EBP-00CC]
  219. 015F:78026C0A  50                  PUSH    EAX
  220. 015F:78026C0B  FF1540D10278        CALL    [KERNEL32!GetTimeZoneInformation]
  221. 015F:78026C11  83F8FF              CMP     EAX,-01
  222. 015F:78026C14  7430                JZ      78026C46                  (NO JUMP)
  223. 015F:78026C16  83F802              CMP     EAX,02
  224. 015F:78026C19  7527                JNZ     78026C42                  (NO JUMP)
  225. 015F:78026C1B  66837DCE00          CMP     WORD PTR [EBP-32],00
  226. 015F:78026C20  7420                JZ      78026C42                  (NO JUMP)
  227. 015F:78026C22  837DDC00            CMP     DWORD PTR [EBP-24],00
  228. 015F:78026C26  741A                JZ      78026C42                  (NO JUMP)
  229. 015F:78026C28  6A01                PUSH    01
  230. 015F:78026C2A  58                  POP     EAX
  231. 015F:78026C2B  56                  PUSH    ESI
  232. 015F:78026C2C  57                  PUSH    EDI
  233. 015F:78026C2D  8D75E0              LEA     ESI,[EBP-20]
  234. 015F:78026C30  BF08870378          MOV     EDI,78038708
  235. 015F:78026C35  A5                  MOVSD
  236. 015F:78026C36  A5                  MOVSD
  237. 015F:78026C37  A5                  MOVSD
  238. 015F:78026C38  A5                  MOVSD
  239. 015F:78026C39  5F                  POP     EDI
  240. 015F:78026C3A  A300870378          MOV     [78038700],EAX
  241. 015F:78026C3F  5E                  POP     ESI
  242. 015F:78026C40  EB90                JMP     78026CD2                  (JUMP )
  243. 015F:78026BD2  50                  PUSH    EAX
  244. 015F:78026BD3  0FB745FC            MOVZX   EAX,WORD PTR [EBP-04]
  245. 015F:78026BD7  50                  PUSH    EAX
  246. 015F:78026BD8  0FB745FA            MOVZX   EAX,WORD PTR [EBP-06]
  247. 015F:78026BDC  50                  PUSH    EAX
  248. 015F:78026BDD  0FB745F8            MOVZX   EAX,WORD PTR [EBP-08]
  249. 015F:78026BE1  50                  PUSH    EAX
  250. 015F:78026BE2  0FB745F6            MOVZX   EAX,WORD PTR [EBP-0A]
  251. 015F:78026BE6  50                  PUSH    EAX
  252. 015F:78026BE7  0FB745F2            MOVZX   EAX,WORD PTR [EBP-0E]
  253. 015F:78026BEB  50                  PUSH    EAX
  254. 015F:78026BEC  0FB745F0            MOVZX   EAX,WORD PTR [EBP-10]
  255. 015F:78026BF0  50                  PUSH    EAX
  256. 015F:78026BF1  E8EE000000          CALL    78026CE4
  257. 015F:78026BF6  8B4D08              MOV     ECX,[EBP+08]
  258. 015F:78026BF9  83C41C              ADD     ESP,1C
  259. 015F:78026BFC  85C9                TEST    ECX,ECX
  260. 015F:78026BFE  7402                JZ      78026C02                  (NO JUMP)
  261. 015F:78026C00  8901                MOV     [ECX],EAX
  262. 015F:78026C02  C9                  LEAVE
  263. 015F:78026C03  C3                  RET
  264. 015F:300D2072  83C404              ADD     ESP,04
  265. 015F:300D2075  8D4C2410            LEA     ECX,[ESP+10]
  266. 015F:300D2079  51                  PUSH    ECX
  267. 015F:300D207A  FF15B4841030        CALL    [301084B4]
  268. 015F:300D2080  83C404              ADD     ESP,04
  269. 015F:300D2083  8BF0                MOV     ESI,EAX
  270. 015F:300D2085  8D54243C            LEA     EDX,[ESP+3C]
  271. 015F:300D2089  B909000000          MOV     ECX,00000009
  272. 015F:300D208E  8D7C2418            LEA     EDI,[ESP+18]
  273. 015F:300D2092  8D442418            LEA     EAX,[ESP+18]
  274. 015F:300D2096  52                  PUSH    EDX
  275. 015F:300D2097  50                  PUSH    EAX
  276. 015F:300D2098  F3A5                REPZ MOVSD
  277. 015F:300D209A  E8E1FDFFFF          CALL    300D1E80
  278. 015F:300D209F  83C408              ADD     ESP,08
  279. 015F:300D20A2  85C0                TEST    EAX,EAX
  280. 015F:300D20A4  7E19                JLE     300D20BF                  (JUMP )
  281. 015F:300D20BF  8D442460            LEA     EAX,[ESP+60]
  282. 015F:300D20C3  8D4C2418            LEA     ECX,[ESP+18]
  283. 015F:300D20C7  50                  PUSH    EAX
  284. 015F:300D20C8  51                  PUSH    ECX
  285. 015F:300D20C9  E8B2FDFFFF          CALL    300D1E80
  286. 015F:300D20CE  83C408              ADD     ESP,08
  287. 015F:300D20D1  85C0                TEST    EAX,EAX
  288. 015F:300D20D3  7E33                JLE     300D2108                  (JUMP )
  289. 015F:300D2108  6820D91630          PUSH    3016D920
  290. 015F:300D210D  E83EFCFFFF          CALL    300D1D50
  291. 015F:300D2112  83C404              ADD     ESP,04
  292. 015F:300D2115  85C0                TEST    EAX,EAX
  293. 015F:300D2117  7410                JZ      300D2129                  (JUMP )
  294. 015F:300D2129  391D20D91630        CMP     [3016D920],EBX
  295. 015F:300D212F  0F85D6010000        JNZ     300D230B                  (JUMP )
  296. 015F:300D230B  6A4C                PUSH    4C
  297. 015F:300D230D  6824D91630          PUSH    3016D924
  298. 015F:300D2312  E8E9F9FFFF          CALL    300D1D00
  299. 015F:300D2317  8B0D20D91630        MOV     ECX,[3016D920]
  300. 015F:300D231D  83C408              ADD     ESP,08
  301. 015F:300D2320  3BC1                CMP     EAX,ECX
  302. 015F:300D2322  0F841DFEFFFF        JZ      300D2145                  (JUMP )
  303. 015F:300D2145  8D542418            LEA     EDX,[ESP+18]
  304. 015F:300D2149  6848D91630          PUSH    3016D948
  305. 015F:300D214E  52                  PUSH    EDX
  306. 015F:300D214F  E82CFDFFFF          CALL    300D1E80
  307. 015F:300D2154  83C408              ADD     ESP,08
  308. 015F:300D2157  85C0                TEST    EAX,EAX
  309. 015F:300D2159  7D26                JGE     300D2181                  (JUMP )
  310. 015F:300D2181  803DA480163003      CMP     BYTE PTR [301680A4],03
  311. 015F:300D2188  0F876D010000        JA      300D22FB                  (NO JUMP)
  312. 015F:300D218E  8BAC24D0000000      MOV     EBP,[ESP+000000D0]
  313. 015F:300D2195  C745009F860100      MOV     DWORD PTR [EBP+00],0001869F
  314. 015F:300D219C  A0A4801630          MOV     AL,[301680A4]
  315. 015F:300D21A1  A801                TEST    AL,01
  316. 015F:300D21A3  744B                JZ      300D21F0                  (NO JUMP)
  317. 015F:300D21A5  33C0                XOR     EAX,EAX
  318. 015F:300D21A7  8D4C2418            LEA     ECX,[ESP+18]
  319. 015F:300D21AB  A0A5801630          MOV     AL,[301680A5]
  320. 015F:300D21B0  51                  PUSH    ECX
  321. 015F:300D21B1  6824D91630          PUSH    3016D924
  322. 015F:300D21B6  8D3440              LEA     ESI,[EAX*2+EAX]
  323. 015F:300D21B9  C1E603              SHL     ESI,03
  324. 015F:300D21BC  E85FFDFFFF          CALL    300D1F20
  325. 015F:300D21C1  83C408              ADD     ESP,08
  326. 015F:300D21C4  3BC3                CMP     EAX,EBX
  327. 015F:300D21C6  0F8C2F010000        JL      300D22FB                  (NO JUMP)
  328. 015F:300D21CC  3BC6                CMP     EAX,ESI
  329. 015F:300D21CE  7C0A                JL      300D21DA                  (NO JUMP)
  330. 015F:300D21D0  BB04000000          MOV     EBX,00000004
  331. 015F:300D21D5  E9E6000000          JMP     300D22C0                  (JUMP )
  332. 015F:300D22C0  8B4500              MOV     EAX,[EBP+00]
  333. 015F:300D22C3  33C9                XOR     ECX,ECX
  334. 015F:300D22C5  8A0DA9801630        MOV     CL,[301680A9]
  335. 015F:300D22CB  3BC1                CMP     EAX,ECX
  336. 015F:300D22CD  7F05                JG      300D22D4                  (JUMP )
  337. 015F:300D22D4  6A4C                PUSH    4C
  338. 015F:300D22D6  6824D91630          PUSH    3016D924
  339. 015F:300D22DB  E820FAFFFF          CALL    300D1D00
  340. 015F:300D22E0  83C408              ADD     ESP,08
  341. 015F:300D22E3  A320D91630          MOV     [3016D920],EAX
  342. 015F:300D22E8  6820D91630          PUSH    3016D920
  343. 015F:300D22ED  E80EFBFFFF          CALL    300D1E00
  344. 015F:300D22F2  83C404              ADD     ESP,04
  345. 015F:300D22F5  85C0                TEST    EAX,EAX
  346. 015F:300D22F7  8BC3                MOV     EAX,EBX
  347. 015F:300D22F9  7505                JNZ     300D2300                  (JUMP )
  348. 015F:300D2300  5F                  POP     EDI
  349. 015F:300D2301  5E                  POP     ESI
  350. 015F:300D2302  5D                  POP     EBP
  351. 015F:300D2303  5B                  POP     EBX
  352. 015F:300D2304  81C4BC000000        ADD     ESP,000000BC
  353. 015F:300D230A  C3                  RET
  354. 015F:3000ADB6  8BF0                MOV     ESI,EAX
  355. 015F:3000ADB8  83C404              ADD     ESP,04
  356. 015F:3000ADBB  8D46FF              LEA     EAX,[ESI-01]
  357. 015F:3000ADBE  83F805              CMP     EAX,05
  358. 015F:3000ADC1  773D                JA      3000AE00                  (NO JUMP)
  359.  
  360.  
  361.  
  362. LOG FILE 2. ( The demo has expired )
  363. ***********
  364. KERNEL32!GetSystemTime
  365. Break due to G (ET=380.57 microseconds)
  366. 015F:78026B8C  668B45EA            MOV     AX,[EBP-16]
  367. 015F:78026B90  663B0512870378      CMP     AX,[78038712]
  368. 015F:78026B97  756B                JNZ     78026C04                  (JUMP )
  369. 015F:78026C04  8D8534FFFFFF        LEA     EAX,[EBP-00CC]
  370. 015F:78026C0A  50                  PUSH    EAX
  371. 015F:78026C0B  FF1540D10278        CALL    [KERNEL32!GetTimeZoneInformation]
  372. 015F:78026C11  83F8FF              CMP     EAX,-01
  373. 015F:78026C14  7430                JZ      78026C46                  (NO JUMP)
  374. 015F:78026C16  83F802              CMP     EAX,02
  375. 015F:78026C19  7527                JNZ     78026C42                  (NO JUMP)
  376. 015F:78026C1B  66837DCE00          CMP     WORD PTR [EBP-32],00
  377. 015F:78026C20  7420                JZ      78026C42                  (NO JUMP)
  378. 015F:78026C22  837DDC00            CMP     DWORD PTR [EBP-24],00
  379. 015F:78026C26  741A                JZ      78026C42                  (NO JUMP)
  380. 015F:78026C28  6A01                PUSH    01
  381. 015F:78026C2A  58                  POP     EAX
  382. 015F:78026C2B  56                  PUSH    ESI
  383. 015F:78026C2C  57                  PUSH    EDI
  384. 015F:78026C2D  8D75E0              LEA     ESI,[EBP-20]
  385. 015F:78026C30  BF08870378          MOV     EDI,78038708
  386. 015F:78026C35  A5                  MOVSD
  387. 015F:78026C36  A5                  MOVSD
  388. 015F:78026C37  A5                  MOVSD
  389. 015F:78026C38  A5                  MOVSD
  390. 015F:78026C39  5F                  POP     EDI
  391. 015F:78026C3A  A300870378          MOV     [78038700],EAX
  392. 015F:78026C3F  5E                  POP     ESI
  393. 015F:78026C40  EB90                JMP     78026CD2                  (JUMP )
  394. 015F:78026BD2  50                  PUSH    EAX
  395. 015F:78026BD3  0FB745FC            MOVZX   EAX,WORD PTR [EBP-04]
  396. 015F:78026BD7  50                  PUSH    EAX
  397. 015F:78026BD8  0FB745FA            MOVZX   EAX,WORD PTR [EBP-06]
  398. 015F:78026BDC  50                  PUSH    EAX
  399. 015F:78026BDD  0FB745F8            MOVZX   EAX,WORD PTR [EBP-08]
  400. 015F:78026BE1  50                  PUSH    EAX
  401. 015F:78026BE2  0FB745F6            MOVZX   EAX,WORD PTR [EBP-0A]
  402. 015F:78026BE6  50                  PUSH    EAX
  403. 015F:78026BE7  0FB745F2            MOVZX   EAX,WORD PTR [EBP-0E]
  404. 015F:78026BEB  50                  PUSH    EAX
  405. 015F:78026BEC  0FB745F0            MOVZX   EAX,WORD PTR [EBP-10]
  406. 015F:78026BF0  50                  PUSH    EAX
  407. 015F:78026BF1  E8EE000000          CALL    78026CE4
  408. 015F:78026BF6  8B4D08              MOV     ECX,[EBP+08]
  409. 015F:78026BF9  83C41C              ADD     ESP,1C
  410. 015F:78026BFC  85C9                TEST    ECX,ECX
  411. 015F:78026BFE  7402                JZ      78026C02                  (NO JUMP)
  412. 015F:78026C00  8901                MOV     [ECX],EAX
  413. 015F:78026C02  C9                  LEAVE
  414. 015F:78026C03  C3                  RET
  415. 015F:300D2072  83C404              ADD     ESP,04
  416. 015F:300D2075  8D4C2410            LEA     ECX,[ESP+10]
  417. 015F:300D2079  51                  PUSH    ECX
  418. 015F:300D207A  FF15B4841030        CALL    [301084B4]
  419. 015F:300D2080  83C404              ADD     ESP,04
  420. 015F:300D2083  8BF0                MOV     ESI,EAX
  421. 015F:300D2085  8D54243C            LEA     EDX,[ESP+3C]
  422. 015F:300D2089  B909000000          MOV     ECX,00000009
  423. 015F:300D208E  8D7C2418            LEA     EDI,[ESP+18]
  424. 015F:300D2092  8D442418            LEA     EAX,[ESP+18]
  425. 015F:300D2096  52                  PUSH    EDX
  426. 015F:300D2097  50                  PUSH    EAX
  427. 015F:300D2098  F3A5                REPZ MOVSD
  428. 015F:300D209A  E8E1FDFFFF          CALL    300D1E80
  429. 015F:300D209F  83C408              ADD     ESP,08
  430. 015F:300D20A2  85C0                TEST    EAX,EAX
  431. 015F:300D20A4  7E19                JLE     300D20BF                  (JUMP )
  432. 015F:300D20BF  8D442460            LEA     EAX,[ESP+60]
  433. 015F:300D20C3  8D4C2418            LEA     ECX,[ESP+18]
  434. 015F:300D20C7  50                  PUSH    EAX
  435. 015F:300D20C8  51                  PUSH    ECX
  436. 015F:300D20C9  E8B2FDFFFF          CALL    300D1E80
  437. 015F:300D20CE  83C408              ADD     ESP,08
  438. 015F:300D20D1  85C0                TEST    EAX,EAX
  439. 015F:300D20D3  7E33                JLE     300D2108                  (JUMP )
  440. 015F:300D2108  6820D91630          PUSH    3016D920
  441. 015F:300D210D  E83EFCFFFF          CALL    300D1D50
  442. 015F:300D2112  83C404              ADD     ESP,04
  443. 015F:300D2115  85C0                TEST    EAX,EAX
  444. 015F:300D2117  7410                JZ      300D2129                  (JUMP )
  445. 015F:300D2129  391D20D91630        CMP     [3016D920],EBX
  446. 015F:300D212F  0F85D6010000        JNZ     300D230B                  (JUMP )
  447. 015F:300D230B  6A4C                PUSH    4C
  448. 015F:300D230D  6824D91630          PUSH    3016D924
  449. 015F:300D2312  E8E9F9FFFF          CALL    300D1D00
  450. 015F:300D2317  8B0D20D91630        MOV     ECX,[3016D920]
  451. 015F:300D231D  83C408              ADD     ESP,08
  452. 015F:300D2320  3BC1                CMP     EAX,ECX
  453. 015F:300D2322  0F841DFEFFFF        JZ      300D2145                  (JUMP )
  454. 015F:300D2145  8D542418            LEA     EDX,[ESP+18]
  455. 015F:300D2149  6848D91630          PUSH    3016D948
  456. 015F:300D214E  52                  PUSH    EDX
  457. 015F:300D214F  E82CFDFFFF          CALL    300D1E80
  458. 015F:300D2154  83C408              ADD     ESP,08
  459. 015F:300D2157  85C0                TEST    EAX,EAX
  460. 015F:300D2159  7D26                JGE     300D2181                  (JUMP )
  461. 015F:300D2181  803DA480163003      CMP     BYTE PTR [301680A4],03
  462. 015F:300D2188  0F876D010000        JA      300D22FB                  (NO JUMP)
  463. 015F:300D218E  8BAC24D0000000      MOV     EBP,[ESP+000000D0]
  464. 015F:300D2195  C745009F860100      MOV     DWORD PTR [EBP+00],0001869F
  465. 015F:300D219C  A0A4801630          MOV     AL,[301680A4]
  466. 015F:300D21A1  A801                TEST    AL,01
  467. 015F:300D21A3  744B                JZ      300D21F0                  (NO JUMP)
  468. 015F:300D21A5  33C0                XOR     EAX,EAX
  469. 015F:300D21A7  8D4C2418            LEA     ECX,[ESP+18]
  470. 015F:300D21AB  A0A5801630          MOV     AL,[301680A5]
  471. 015F:300D21B0  51                  PUSH    ECX
  472. 015F:300D21B1  6824D91630          PUSH    3016D924
  473. 015F:300D21B6  8D3440              LEA     ESI,[EAX*2+EAX]
  474. 015F:300D21B9  C1E603              SHL     ESI,03
  475. 015F:300D21BC  E85FFDFFFF          CALL    300D1F20
  476. 015F:300D21C1  83C408              ADD     ESP,08
  477. 015F:300D21C4  3BC3                CMP     EAX,EBX
  478. 015F:300D21C6  0F8C2F010000        JL      300D22FB                  (NO JUMP)
  479. 015F:300D21CC  3BC6                CMP     EAX,ESI
  480. 015F:300D21CE  7C0A                JL      300D21DA                  (JUMP )
  481. 015F:300D21DA  2BF0                SUB     ESI,EAX
  482. 015F:300D21DC  B8ABAAAA2A          MOV     EAX,2AAAAAAB
  483. 015F:300D21E1  F7EE                IMUL    ESI
  484. 015F:300D21E3  C1FA02              SAR     EDX,02
  485. 015F:300D21E6  8BC2                MOV     EAX,EDX
  486. 015F:300D21E8  C1E81F              SHR     EAX,1F
  487. 015F:300D21EB  03D0                ADD     EDX,EAX
  488. 015F:300D21ED  895500              MOV     [EBP+00],EDX
  489. 015F:300D21F0  F605A480163002      TEST    BYTE PTR [301680A4],02
  490. 015F:300D21F7  0F84B3000000        JZ      300D22B0                  (JUMP )
  491. 015F:300D22B0  B909000000          MOV     ECX,00000009
  492. 015F:300D22B5  8D742418            LEA     ESI,[ESP+18]
  493. 015F:300D22B9  BF48D91630          MOV     EDI,3016D948
  494. 015F:300D22BE  F3A5                REPZ MOVSD
  495. 015F:300D22C0  8B4500              MOV     EAX,[EBP+00]
  496. 015F:300D22C3  33C9                XOR     ECX,ECX
  497. 015F:300D22C5  8A0DA9801630        MOV     CL,[301680A9]
  498. 015F:300D22CB  3BC1                CMP     EAX,ECX
  499. 015F:300D22CD  7F05                JG      300D22D4                  (JUMP )
  500. 015F:300D22D4  6A4C                PUSH    4C
  501. 015F:300D22D6  6824D91630          PUSH    3016D924
  502. 015F:300D22DB  E820FAFFFF          CALL    300D1D00
  503. 015F:300D22E0  83C408              ADD     ESP,08
  504. 015F:300D22E3  A320D91630          MOV     [3016D920],EAX
  505. 015F:300D22E8  6820D91630          PUSH    3016D920
  506. 015F:300D22ED  E80EFBFFFF          CALL    300D1E00
  507. 015F:300D22F2  83C404              ADD     ESP,04
  508. 015F:300D22F5  85C0                TEST    EAX,EAX
  509. 015F:300D22F7  8BC3                MOV     EAX,EBX
  510. 015F:300D22F9  7505                JNZ     300D2300                  (JUMP )
  511. 015F:300D2300  5F                  POP     EDI
  512. 015F:300D2301  5E                  POP     ESI
  513. 015F:300D2302  5D                  POP     EBP
  514. 015F:300D2303  5B                  POP     EBX
  515. 015F:300D2304  81C4BC000000        ADD     ESP,000000BC
  516. 015F:300D230A  C3                  RET
  517. 015F:3000ADB6  8BF0                MOV     ESI,EAX
  518. 015F:3000ADB8  83C404              ADD     ESP,04
  519. 015F:3000ADBB  8D46FF              LEA     EAX,[ESI-01]
  520. 015F:3000ADBE  83F805              CMP     EAX,05
  521. 015F:3000ADC1  773D                JA      3000AE00                  (JUMP )
  522.  
  523.  
  524. Step 9 : Find the first point where the two log files differ.
  525. *************************************************************
  526. You may have noticed that the two log files are identical until the address 015F:3000ADC1.
  527. In the first log file, the command at this address doesn`t jump, but in the second log file,
  528. the very same command Jumps. This is because the value of EAX at that point in time are
  529. different in the two logs.
  530. Have a look at the three lines of code :
  531. LEA   EAX,[ESI-01]     This looks at the byte at the address ESI-01 and puts the value in EAX.
  532. CMP   EAX,05           This looks to see if the value in EAX is equal to 5.
  533. JA    3000AE00         Jump if Above to address 300AE00.
  534.  
  535.  
  536. Step 10 : What do I do now ?
  537. ****************************
  538. We need to change the file so that the JA command does NOT jump. You can do this several ways.
  539. The cheap`n`nasty way is to nop(No Operation) the 'JA 3000AE00' command by changing the two
  540. values '77 3D' at address 015F:3000ADC1 to '90 90'. Although this will do the job most of the
  541. time, the correct way is to lie to the rest of the program by changing the 'LEA EAX,[ESI-01]' 
  542. which is 3 bytes long ,the 'CMP EAX,05' which is also 3 bytes and the 'JA' command (2 bytes)
  543. , (8 bytes in total for the three asm commands) with the command 'MOV EAX,00000005' 
  544. (5 bytes long) and 3 'NOP' commands (1 byte each). This ensures that the EAX register has the
  545. correct value and you are replacing the same ammount of bytes in the program.
  546.  
  547.  
  548. Step 11 : Pathcing the program.
  549. *******************************
  550. All that remains now is to load your program into your favourite Hex editor and search for
  551. the pattern of bytes found in the log file for the LEA,CMP and JA commands and patch it.
  552. For this example,....
  553. Replace '8D46FF83F805773D' with 'B805000000909090'.
  554.  
  555. B805000000 = MOV EAX,05
  556. 90         = NOP
  557.  
  558.  
  559. Note : You may need to narrow down your search for these bytes by adding the two lines of 
  560. bytes found above the asm code you are looking for into your search query.
  561.  
  562.  
  563. Ending Note.
  564. ************
  565. This way of cracking which I call the 'Call Flow Method' has many other possibilities where
  566. there are two states of execution.
  567. For instance,.... 
  568. Cracking CRC checking routines (Program modified/Not modified), 
  569. Dongle protection (Dongle plugged in/Not plugged in), 
  570. Three tries and your out password protection, 
  571. Programs that only let you use a feature a certain number of times. 
  572.  
  573. I hope this tuorial will help people not only to speed up the cracking process, but also help
  574. to understand HOW a program works and aid in the cracking of the more difficult targets.
  575. I`m now off to drink loads of caffine and give my head a rest before starting my next
  576. tut. 
  577.  
  578. L8R Mushy :-)
  579.  
  580.  
  581.  
  582. Greetz go to :
  583. **************
  584.  
  585. The TCS Crew. (Best in the land ;-)
  586. KM. (Only 1 more year to go : Freedom!!!!)
  587. The Magician (Keep those degrees rolling and don`t let the fedz win.)
  588. VnC (See ya at the show. Phone Me!!)
  589. Everyone at +fravia`s msgbd.
  590. Jeff (Great cracking board. Like the TIP of the day)
  591.  
  592.  
  593.  
  594.  
  595.  
  596.  
  597.  
  598.  
  599.