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

  1.             Tutorial Number 1
  2.  
  3. Written by Etenal Bliss
  4. Email: Eternal_Bliss@hotmail.com
  5. Date written: 1st Jan 1999
  6.  
  7. Program Details:
  8. Name: McAfee AntiVirus Ver 4.02
  9. Type: Virus Scanner
  10. Location: ftp://ftp.nai.com/pub/antivirus/win95/v98i402e.zip
  11. Size: 8.1MB
  12.  
  13. Tools Used:
  14. W32DASM (Disassembler)
  15. Hex Workshop (Hex Editor)
  16.  
  17. Cracking Method:
  18. Patching the program
  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.                                 Introduction
  26.  
  27. The authors (Network Associates) of McAfee VirusScan says: "The Dr
  28. Solomon's virus scanning engine is at the heart of VirusScan 4.0.2. Backed
  29. by the world's largest antivirus research organization, it delivers
  30. outstanding virus detection and cleaning rates. The new engine also detects
  31. viruses in nearly all of the popular compressed file formats."
  32.  
  33. My comments: "It is not as good as it says it is..."
  34. Installation: I've only installed the virus scanner(scan32.exe) and 
  35. vshield(vshwin32.exe) so my crack will only be based on these 2 files.
  36.  
  37. __________________________________________________________________________
  38.  
  39.                         About this protection system
  40.  
  41. The protection systems employed within McAfee VirusScan consist of the
  42. following:-
  43.  
  44. 1. Deep within your System Registry it uses the following branch to store
  45. the User Registration information.
  46.  
  47. HKEY_LOCAL_MACHINE\Software\Network Associates\ECare
  48.  
  49. 2. It's a 30 day, time limited program that will 'expire' after 30 days of
  50. being installed.
  51.  
  52. 3. When expired, there will be a nag screen telling you the time is up and
  53. you have to register. If you don't, it will exit. Changing the clock back 
  54. will not re-activate the virus scanner but will allow vshield to continue 
  55. working.
  56.  
  57. 4. A self-check is done when the program starts to see if there is any
  58. changes to it's codes.
  59.  
  60.  
  61. When first run, an entry is placed in
  62.  
  63. HKEY_LOCAL_MACHINE\Software\Network Associates\ECare\LM\FDX5-KAA
  64.  
  65. This is what the program uses to calculate when the expiry date is.
  66.  
  67.  
  68. There are two ways (more if you want to look into it) that I went about 
  69. cracking the program. 
  70.  
  71. 1) I realise that by deleting the value in 
  72.  
  73. HKEY_LOCAL_MACHINE\Software\Network Associates\ECare\LM\FDX5-KAA
  74.  
  75. I can restart the 30 days countdown. So, that is a easy way of doing it. 
  76. You will then be given another 30 days to try out the program.
  77.  
  78. 2) The other way involves patching the program so that both scan32.exe 
  79. and vshwin32.exe will not expire even after 30 days.
  80.  
  81. __________________________________________________________________________
  82.  
  83.                                  The Essay
  84.  
  85. As this is a tutorial for newbies, I'll go into details about how I go about 
  86. patching the program. I suggest that you leave this tutorial in front of you 
  87. while patching the program with W32Dasm and the Hex editor. Try to replicate 
  88. every step I do at the same time. When you have completed the tutorial with 
  89. the 2 files patched, close the tutorial and try to re-do everything you did. 
  90. Then, the knowledge will be in you. 8)
  91.  
  92. First of all, run the scanner for a few times and observe the details of it. 
  93. Look at the "About" box as well. Then, set the clock 30 days ahead. Run the 
  94. program again...
  95.  
  96. You will get a message box saying that your trial period has expired and 
  97. will be asked to purchase the program. If you click on "Purchase", you will 
  98. be asked to fill in your particulars and so on. If you click on "Cancel", 
  99. you will get a message box saying that the program won't run anymore.
  100.  
  101. Now, before you continue your next step, set your clock back. And go to the 
  102. registry to delete the value in 
  103.  
  104. HKEY_LOCAL_MACHINE\Software\Network Associates\ECare\LM\FDX5-KAA
  105.  
  106. If you have any problems with doing this, you can leave this part or 
  107. contact me. If you can't delete that, then you just have to bare in mind 
  108. that the program will not run anymore since it has expired.
  109.  
  110. Also, make another copy of scan32.exe and vshwin32.exe for your Hex editor. 
  111. This will be the two files you run to test the effect while patching.
  112.  
  113. __________________________________________________________________________
  114.  
  115. In my dead listing I always go straight into the String Data Resources of
  116. the target program, we can gain a lot of valuable info just by noting down
  117. what we see and what looks interesting...
  118.  
  119. **Dead listing means a disassembled program showing the assembly codes, 
  120.   offsets and so on.
  121.  
  122. **String Data Resources shows the "words" that the program uses. Sometimes, 
  123.   you don't get any at all in a program. But in this case, you will see a lot 
  124.   of them... To get the String Data Resources, look for the last icon in 
  125.   W32Dasm. That should be the printer icon. The one to the left of it is the 
  126.   String Data Resources icon. To get something like this below, double click 
  127.   on the line of interest and W32Dasm will bring you to the code where this 
  128.   String is used.
  129.  
  130.  
  131. Mem Location    String
  132. -------------------------------------------------------------
  133.  
  134. 0040F95C    "The program license has expired. You must purchase to
  135.         conti"
  136.  
  137. 004014FB    "About McAfee VirusScan OEM Edition"
  138. 00401518    "About McAfee VirusScan"
  139. 00401524    "About McAfee VirusScan Evaluation Copy"
  140.  
  141. 0042A9F9    "The validation code for %s does not match. Please
  142.         reinstall "
  143.  
  144. **Mem Location is the leftmost column with digits starting with a ":". 
  145.   For example,
  146.  
  147.   * Possible Reference to String Resource ID=03145: "The program license 
  148.   has expired.  You must purchase to conti"
  149.   :0040F95C 68490C0000              push 00000C49
  150.  
  151.  
  152. There are many other interesting strings but these will do for us. These
  153. are the places that I did patches on for the scan32.exe file.
  154.  
  155. OK, lets start our tutorial...
  156.  
  157. Go to our String Data Resources, locate "The validation code for %s does
  158. not match. Please reinstall " and double-click on it... Scroll up and down 
  159. a bit...
  160.  
  161.  
  162. You should see this code fragment...
  163.  
  164. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  165. |:0042AA18(C)
  166. |
  167. :0042A9A0 83FD01                  cmp ebp, 00000001
  168. :0042A9A3 7575                    jne 0042AA1A  -->Jump if Self-Check is 
  169.                            valid
  170. :0042A9A5 8D4C2424                lea ecx, dword ptr [esp+24]
  171. ---------snip-----------
  172.  
  173. * Reference To: MCKRNL32.Ordinal:0015, Ord:0015h
  174.                                   |
  175. :0042A9DB E8A0460000              Call 0042F080
  176. :0042A9E0 85C0                    test eax, eax
  177. :0042A9E2 742C                    je 0042AA10      -->Go to the Self-Check
  178. :0042A9E4 8D442424                lea eax, dword ptr [esp+24]
  179. :0042A9E8 50                      push eax
  180.  
  181. * Reference To: MCUTIL32.Ordinal:009D, Ord:009Dh
  182.                                   |
  183. :0042A9E9 E890480000              Call 0042F27E
  184. :0042A9EE 85C0                    test eax, eax
  185. :0042A9F0 741E                    je 0042AA10      -->Go to the Self-Check
  186. :0042A9F2 8B0E                    mov ecx, dword ptr [esi]
  187. :0042A9F4 8D542410                lea edx, dword ptr [esp+10]
  188. :0042A9F8 52                      push edx
  189.  
  190. * Possible Reference to String Resource ID=40151: "The validation code for %s does not match. Please reinstall "
  191.                                   |
  192. :0042A9F9 C7442420D79C0000        mov [esp+20], 00009CD7 --> This is where you will land
  193. :0042AA01 894C241C                mov dword ptr [esp+1C], ecx
  194. :0042AA05 897C2424                mov dword ptr [esp+24], edi
  195. :0042AA09 E85277FEFF              call 00412160
  196. :0042AA0E 33ED                    xor ebp, ebp
  197.  
  198. * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
  199. |:0042A9E2(C), :0042A9F0(C)
  200. |
  201. :0042AA10 8B4604                  mov eax, dword ptr [esi+04]
  202. :0042AA13 83C604                  add esi, 00000004
  203. :0042AA16 3BC3                    cmp eax, ebx
  204. :0042AA18 7586                    jne 0042A9A0    --> Go to the start the 
  205.                             code fragment
  206.  
  207. Try to understand the code before you move on. I've add some comments to it.
  208. Just try to follow the conditional jumps and see if you can understand what 
  209. the program is doing. Bare in mind that after you patch the program, the 
  210. program will show the message that it has been changed.
  211.  
  212.  
  213. There are two locations which you can do the patch:
  214.  
  215. 1) :0042A9A3 7575                    jne 0042AA1A
  216.  
  217. 2) :0042AA18 7586                    jne 0042A9A0
  218.  
  219.  
  220. To patch the program, you have to use a Hex editor. First, double click 
  221. on the line in W32dasm that you want to alter. On the status bar of 
  222. W32Dasm, you will see this (for the 2nd conditional jump)...
  223.  
  224. Line:92582 Pg 1187 of 1547 Code Data @:0042AA18 @Offset 00029E18h in File:scan32.exe
  225.  
  226. Look at the offset (in this case, it is 00029E18h). So go to your Hex 
  227. editor, get to the offset of 00029E18. You will see 75 86. Replace 
  228. the "75 86" with "90 90".
  229.  
  230. **jne(75) means jump if not equal. Since we have altered the program, 
  231.   we will always be taking this jump unless we can somehow get rid of 
  232.   this instruction. So, one way of doing it is to replace the code with 
  233.   some other codes that will not affect the running of the program. I use 
  234.   NOP(90) to replace the 7586 and since it is two bytes, you will have to 
  235.   use two 90. NOP means "No OPeration".
  236.  
  237. I did the patch on the 2nd conditional jump. So, by changing 
  238. "jne 0042A9A0" (7586) at :0042AA18 to "NOP NOP" (9090), I have disabled 
  239. the self-check.
  240. After you have disabled the self-check, you will be able to run the 
  241. patched program without having any error messages.
  242.  
  243. __________________________________________________________________________
  244.  
  245.  
  246. In the "About" box, you will see "Evaluation Copy" on the title. So in our
  247. String Data Resources locate "About McAfee VirusScan Evaluation Copy" and
  248. double-click on it... Scroll up a bit...
  249.  
  250.  
  251. You should see this code fragment...
  252.  
  253. :004014E5 E866E70000              call 0040FC50
  254. :004014EA 83C408                  add esp, 00000008
  255. :004014ED 85C0                    test eax, eax
  256. :004014EF 7411                    je 00401502      -->Jump over the "OEM version"
  257. :004014F1 8D4C246C                lea ecx, dword ptr [esp+6C]
  258. :004014F5 6804010000              push 00000104
  259. :004014FA 51                      push ecx
  260.  
  261. * Possible Reference to String Resource ID=40120: "About McAfee VirusScan OEM Edition"
  262.                                   |
  263. :004014FB 68B89C0000              push 00009CB8
  264. :00401500 EB27                    jmp 00401529
  265.  
  266. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  267. |:004014EF(C)
  268. |
  269. :00401502 8B842488040000          mov eax, dword ptr [esp+00000488]
  270. :00401509 6804010000              push 00000104
  271. :0040150E 83F801                  cmp eax, 00000001
  272. :00401511 750C                    jne 0040151F     -->Jump to the "Evaluation version"
  273. :00401513 8D542470                lea edx, dword ptr [esp+70]
  274. :00401517 52                      push edx
  275.  
  276. * Possible Reference to String Resource ID=40102: "About McAfee VirusScan"
  277.                                   |
  278. :00401518 68A69C0000              push 00009CA6
  279. :0040151D EB0A                    jmp 00401529
  280.  
  281. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  282. |:00401511(C)
  283. |
  284. :0040151F 8D442470                lea eax, dword ptr [esp+70]
  285. :00401523 50                      push eax
  286.  
  287. * Possible Reference to String Resource ID=40103: "About McAfee VirusScan Evaluation Copy"
  288.                                   |
  289. :00401524 68A79C0000              push 00009CA7    -->This is where you will land
  290.  
  291.  
  292. Try to understand the code before you move on. I've add some comments to it.
  293.  
  294. 1) At :004014EF if we change "je 00401502" (7411) to "jmp 00401502" (EB11),
  295. we will jump over the "OEM version".
  296.  
  297. Use the same method to get the offset as above and replace "74" with "EB"
  298.  
  299. 2) At :00401511 if we change "jne 0040151F" (750C) to prevent the jump,
  300. then we will not go to the "Evaluation version".
  301.  
  302. Do the same and replace "75 0C" with "90 90".
  303.  
  304.  
  305. **You have just changed the "About" box to get rid of the "Evaluation Copy" 
  306.   on the titlebar. 8)
  307.  
  308. __________________________________________________________________________
  309.  
  310.  
  311. The next part involves patching the program so that it won't exit nor show
  312. the nag splash when 30 days is up. It is a bit more tricky and I must
  313. apologise first if my explanation is not comprehensive.
  314.  
  315. When 30 days is up, you will see the nag "The program license has expired.
  316. You must purchase to continue... blah blah". So in our String Data
  317. Resources locate this string and double-click on it..
  318.  
  319.  
  320. You should see this code fragment...
  321.  
  322. * Possible StringData Ref from Data Obj ->"ECLicenseFunction"
  323.                                   |
  324. :0040F8DE 68D4794300              push 004379D4
  325. :0040F8E3 53                      push ebx
  326.  
  327. * Reference To: KERNEL32.GetProcAddress, Ord:0116h
  328.                                   |
  329. :0040F8E4 FF1578E84300            Call dword ptr [0043E878]
  330. :0040F8EA 8BD8                    mov ebx, eax
  331. :0040F8EC 85DB                    test ebx, ebx
  332. :0040F8EE 0F84BE000000            je 0040F9B2      -->Tried changing but did not work
  333. :0040F8F4 E8B7020000              call 0040FBB0
  334. :0040F8F9 85C0                    test eax, eax
  335. :0040F8FB 7510                    jne 0040F90D     -->Patch here
  336. :0040F8FD 8B842428020000          mov eax, dword ptr [esp+00000228]
  337. :0040F904 85C0                    test eax, eax
  338.  
  339. * Possible Reference to String Resource ID=00002: "In Folder"
  340.                                   |
  341. :0040F906 B802000000              mov eax, 00000002
  342. :0040F90B 7405                    je 0040F912     -->Tried changing to jne
  343.                            and the program exits 
  344.                            when it is WITHIN 30 days. 
  345.                            This will be skipped when 
  346.                            the jump above is patched.
  347.  
  348. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  349. |:0040F8FB(C)
  350. |
  351. * Possible Reference to String Resource ID=00005: "&Clean File"
  352.                                   |
  353. :0040F90D B805000000              mov eax, 00000005
  354.  
  355. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  356. |:0040F90B(C)
  357. |
  358. :0040F912 8D4C2470                lea ecx, dword ptr [esp+70]
  359. ---------snip-----------
  360. :0040F92B FFD3                    call ebx
  361. :0040F92D 8B44242C                mov eax, dword ptr [esp+2C]
  362. :0040F931 83C418                  add esp, 00000018
  363. :0040F934 85C0                    test eax, eax
  364. :0040F936 7410                    je 0040F948    -->Jump to Expired notice
  365. :0040F938 837C247803              cmp dword ptr [esp+78], 00000003
  366. :0040F93D 7509                    jne 0040F948    -->Jump to Expired notice
  367.  
  368. * Possible Reference to String Resource ID=00100: "YES"
  369.                                   |
  370. :0040F93F C7400864000000          mov [eax+08], 00000064
  371. :0040F946 EB6A                    jmp 0040F9B2
  372.  
  373. * Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
  374. |:0040F936(C), :0040F93D(C)                   -->Take note of these two locations
  375. |
  376. :0040F948 837C247001              cmp dword ptr [esp+70], 00000001
  377. :0040F94D 7563                    jne 0040F9B2
  378. :0040F94F 8D942420010000          lea edx, dword ptr [esp+00000120]
  379. :0040F956 6800010000              push 00000100
  380. :0040F95B 52                      push edx
  381.  
  382. * Possible Reference to String Resource ID=03145: "The program license has expired.  You must purchase to conti"
  383.                                   |
  384. :0040F95C 68490C0000              push 00000C49    -->This is where you will land
  385.  
  386.  
  387. Try to understand the code before you move on. I've add some comments to it.
  388.  
  389. In this part of the code, the program will see if your trial period has ended. 
  390. There are a lot of conditional jumps in it. Since we are not using Softice 
  391. to trace the program, I've used another method which is slightly more tedious.
  392.  
  393. **With my UNregistered status in mind, I know that I will take the jump 
  394.   pointing to the "expired" message. 
  395.  
  396. Starting from :0040F8EE (the first unconditional jump), I replace the 
  397. "je 0040F9B2" with NOPs. My theory  is that if we are to take this 
  398. jump in our UNregistered status, changing it will have an effect 
  399. on the program.
  400.  
  401. I then, change it back to it's original code and tried out the next 
  402. conditional jump. I did this for the next few conditional jumps.
  403.  
  404. And this is what I found out about the code fragment:
  405. 1) At :0040F8FB, the program checks to see if 30 days is up
  406. 2) At :0040F90B, the program checks to see if it is still within 30 days.
  407.    **Take note of the locations they jump to
  408. 3) At :0040F936 and :0040F93D, two more checks are done.
  409.  
  410. 1) and 2) have something to do with the program exiting
  411. 3) will show the expiration notice
  412.  
  413. To get rid of the notice(number 3), simply "NOP" the two lines. 
  414. Remember to replace the exact amount of bytes.
  415.  
  416. I observe that :0040F90B jumps to location 0040F912 if it is still within 
  417. 30 days. While :0040F8FB jumps to 0040F90D if 30 days is up. Between them, 
  418. there is an extra instruction:
  419.  
  420. :0040F90D B805000000              mov eax, 00000005
  421.  
  422. That means that the program will skip the line above if we are still in 
  423. our trial period.
  424. So, I decided to change :0040F8FB to mimic the actions of :0040F90B ie. 
  425. to jump to location 0040F912 but this time, it will jump regardless of the
  426. "test" result above it. I counted the number of bytes to jump and change
  427. that to Hex. I have to jump 15 bytes in Hex.
  428. Therefore, at :0040F8FB, I change "jne 0040F90D" (7510) to jmp 0040F912
  429. (EB15)
  430.  
  431. That prevents the program from exiting when expired and at the same time,
  432. I've jumped over the 2nd jump.
  433.  
  434. __________________________________________________________________________
  435.  
  436. The next part of the crack is for the vshield program (vshwin32.exe). 
  437.  
  438. In the dead listing, you will see
  439.  
  440. Mem Location    String
  441. -------------------------------------------------------------
  442.  
  443. 00407F64    "McAfee VirusScan's license has expired. To continue using th"
  444.  
  445. Double click on the line and you will see the following code... 
  446.  
  447.  
  448. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  449. |:0040617A(C)
  450. |
  451. :00406210 E8BB1C0000         call 00407ED0
  452. :00406215 85C0             test eax, eax
  453. :00406217 740E             je 00406227     -->Jump if within 30 days.
  454. :00406219 56             push esi
  455. :0040621A E8111D0000         call 00407F30     -->call to show expire message
  456. :0040621F 83C404 add         esp, 00000004
  457. :00406222 E97F010000         jmp 004063A6
  458.  
  459. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
  460. |:00406217(C)
  461. |
  462. :00406227 8B0DCC3C4100 mov ecx, dword ptr [00413CCC]
  463.  
  464. ---------snip-----------
  465.  
  466. * Referenced by a CALL at Address:
  467. |:0040621A     -->Take note of location
  468. |
  469. :00407F30 81EC08020000         sub esp, 00000208
  470. :00407F36 8D442400         lea eax, dword ptr [esp]
  471. :00407F3A 56             push esi
  472. ---------snip-----------
  473. * Possible Reference to String Resource ID=01088: "McAfee VirusScan's license has expired. To continue using th"
  474. |
  475. :00407F64 6840040000         push 00000440     -->This is where you land.
  476.  
  477. Try to understand the code before you move on. I've add some comments to it.
  478.  
  479. At location :00406217 je 00406227 (740E), if we change it so that it 
  480. will always jump regardless of the time period, we will never see the 
  481. expire nag. So, change 740E to EB0E. (EB means jmp)
  482.  
  483. **This means that the program will always go to the "within 30 days".
  484.   I have tried changing the je to NOP and vshield will always expire even
  485.   within 30 days.
  486.   
  487. Job Done.
  488.  
  489. __________________________________________________________________________
  490.  
  491.                                  The Crack
  492.  
  493. Total of 6 patches for scan32.exe and 1 patch for vshwin32.exe
  494. to be done as listed above.
  495.  
  496. __________________________________________________________________________
  497.  
  498.                                 Final Notes
  499.  
  500. This tutorial is dedicated to all the newbies like me. I've tried to
  501. explain everything in details.
  502.  
  503.  
  504. My thanks and gratitude goes to:-
  505.  
  506. The Sandman
  507. All the writers of Cracks tutorials
  508.  
  509. __________________________________________________________________________
  510.  
  511.                                   Ob Duh
  512.  
  513. Do I really have to remind you all that by buying and NOT stealing the
  514. software you use will ensure that these software houses will be encouraged
  515. to producing even *better* software for us to use and enjoy.
  516.  
  517. Ripping off software through serials and cracks is for lamers..
  518.  
  519. If your looking for cracks or serial numbers from these pages then your
  520. wasting your time, try searching elsewhere on the Web under Warze, Cracks
  521. etc.