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

  1.                        FireWorx Crackme #4 Tuturial 
  2.  
  3.                   ░               
  4.           ░       ░      ░                                  ▄▓
  5.     ▄▄     ░░     ▄▄▄▄■  ░░▀   ■▄▄▄         ▄▄             ▐█▓▌  
  6.  ▄▀▀  ▀■      ▀        ░░            ▀    ■▀  ▀▀▄           ██▌
  7. ■        ▄▄▀▀ ▄▄██▀██▄▄       ▄▄▄███▄▄ ▀▄▄       ■  ▄▄▄███▄▄▐██     ▄▄████▄▄
  8.  ▀▄▄  ▄▀▀   ▄███▀   ▀██▓▄   ▄████▀ ▀██▓▄  ▀▄  ▄▄▀ ▄████▀ ▀██▓██   ▄████▀ ▀██▓▄
  9.     ▀▀  ▄  ▐███▌  ░  ▐██▓▌ ▐████▌ ░ ▐██▓▌ ▄ ▀▀   ▐████▌ ░ ▐████▌ ▐████▌   ▐██▓▌
  10.  ■██▄▄▓▌   ████  ░▒░  ████ █████▄▄▄  ▀▀▀▀ ▐█▄▄█▓ █████  ░  █████ █████▄▄▀▀▀▀▀▀▀
  11.   ▐████ ░░ ▓██▌ ░▒▓▒░ ▐███ ▄▄▄▄▄  ▀▀▀████▄ ████▌ ▓███▌     ▐████ ▓███▌   ░░░░░░
  12. ░  ███▌ ░ ▐▓███ ░▒▓▒░ ▓███▌▓███▌ ░░░ ▐████ ▐▓██  ▓███▌ ▄▀▀ ▐████ ▓███▌ ░░░░░░░
  13.    ▓██▌   ▐▓███  ░▒░  ▓███▌▐▓███  ░  ▓███▌ ▐▓██  ▐▓███     ▓███▌ ▐▓███    
  14.   ▐▓███   ▐▓▓██▌  ░  ▐▓███▌ ▓▓██▌   ▐▓███  ▓███▌  ▓▓██▌ ░ ▐▓███   ▓▓██▌   
  15.   ▓▓▓██▌ ■▓▓▓▓██  ░  ▓█████■ ▀▓▓█▄ ▄▓██▀  ▐▓████ ▄ ▀▓██▄ ▄▓██▀     ▀▓██▄  
  16.    ▀▓███▄   ▀▀▀██▄  ▄▓█▀▀▀      ▀▀█▀▀    ▄▓▓▓▀▀       ▀▀█▀▀           ▀▀▀▀ js
  17.        ▀▀▀▀▀▄▄           ░ iNSiDE   ▄▄▀▀▀▀▀ 
  18.           ░   ▀▄  ░     ░░        ▄▀
  19.          ░░       ░      ░░ 
  20.  
  21. Tutor      : duelist
  22. Data Wrote : April 6, 1999
  23. Who        : Intermediate
  24. Target     : CrackMe #4 by FireWorx
  25. Size       : 338kb (!)
  26. Tools Used : SoftIce
  27. Method     : Key Generator
  28.  
  29.  
  30.                  -=* Welcome *=-
  31.  
  32. Well hi there. Although i've been cracking 'crackmes' for long time, i'd
  33. never written a tuturial for one of those, and this will be my second one
  34. due to a request from Eternal Bliss :)
  35.  
  36.  
  37.                 -=* Protection *=-
  38.  
  39. Well after cracking FireWorx crackme #3 i was something better this time, and
  40. i can really say i'm happy with this one because it will help you understand
  41. the basics of keygenning (i hope!)
  42.  
  43.  
  44.                -=* Our Aproach *=-
  45.  
  46. Let's do it using softice since it's the best tool out there and almost everybody
  47. should have it :)
  48.  
  49. 1) Fire up the crackme exe, click register, enter any name and password you want!
  50.  
  51. 2) Switch to softice (Control + D) and "bpx hmemcpy" (without the quotes... i use
  52.    hmemcpy because delphi apps don't usually call GetWindowTextA and so)
  53.  
  54. 3) Before continuing, one tip: we'll be looking for a MOVSX instruction because
  55.    it's used in almost every serial protection app (remember this!)
  56.  
  57. 4) Click 'Ok' and blamm! You're into softice. Press F5 to let the program read the
  58.    other text box and you should be back in softice in about 1 sec :)
  59.  
  60. 5) Press F12 exactly 12 times to get back to the program code, you will arrive here:
  61.  
  62.     .00047AEB: E868BDFDFF                   call     .000023858
  63.     --> .00047AF0: 8B45F4                       mov       eax,[ebp-0C]     ;we land here!
  64.     .00047AF3: E83CBFFBFF                   call     .000003A34
  65.     .00047AF8: 85C0                         test      eax,eax
  66.     .00047AFA: 7E4B                         jle      .000047B47
  67.     .00047AFC: 8D55F4                       lea       edx,[ebp-0C]
  68.     .00047AFF: 8B83D4020000                 mov       eax,[ebx+02D4]
  69.     .00047B05: E84EBDFDFF                   call     .000023858
  70.     .00047B0A: 8B45F4                       mov       eax,[ebp-0C]
  71.     .00047B0D: E822BFFBFF                   call     .000003A34        ;adds a null value to the beggining
  72.     .00047B12: 8BF8                         mov       edi,eax          ;of our name
  73.     /--    .00047B14: 85FF                         test      edi,edi
  74.     |    .00047B16: 7C2F                         jl       .000047B47        ;name is complete, serial done :)
  75.     |    .00047B2E: 8B45F4                       mov       eax,[ebp-0C]
  76.     |    .00047B31: 8B55F8                       mov       edx,[ebp-08]
  77.     |    .00047B34: 0FB64410FF                   movzx     eax,[eax+edx-01] ;gets actual char from name (!)
  78.     |    .00047B39: 03F0                         add       esi,eax          ;adds its ascii value to serial (esi)
  79.     |    .00047B3B: 03B314030000                 add       esi,[ebx+314]    ;and adds 11111 to the current serial (esi)
  80.     |    .00047B41: FF45F8                       inc       d,[ebp-08]
  81.     |    .00047B44: 4F                           dec       edi              ;decrease number of chars left
  82.     \-- .00047B45: 75D9                         jne      .000047B20        ;next letter if not end of name
  83.  
  84.  
  85. 5) Note that since the prog adds a null value to the beginning of the name, the first 
  86.    loop will only add 11111 to the serial (esi) since eax (actual letter, null) is 0!
  87.  
  88. 6) Now go write a key generator for it! (or check the pascal source below heh :)
  89.  
  90.  
  91.  
  92.                  -=* Key Generator *=-
  93.  
  94. -------------- fw-cm4.pas -------------------- cut here ------------------
  95.  
  96. var name: string; i: integer; esi, eax: longint;
  97.  
  98. procedure drawlogo;
  99. begin
  100.   writeln('');
  101.   writeln('FireWorx''s Crackme #4');
  102.   writeln('KeyGenerator written April 6 99 by Duelist [iSD]');
  103.   writeln;
  104.   writeln;
  105. end;
  106.  
  107. procedure doquit;
  108. begin
  109.   writeln;
  110.   halt(1);
  111. end;
  112.  
  113. begin
  114.   drawlogo;
  115.   write(' Enter your name: ');
  116.   readln(name);
  117.   if length(name) = 0 then
  118.       begin
  119.         writeln('      No name entered... Aborting!');
  120.         doquit;
  121.         end;
  122.   esi:=11111; {since the first value is null, we do the calc here }
  123.   for i:=1 to length(name) do
  124.     begin
  125.         eax:=ord(name[i]); { calculate ascii value of letter and store in eax }
  126.         esi:=esi + eax;    { add eax to the serial }
  127.     esi:=esi + 11111;  { add 11111 to the serial }
  128.     end;
  129.   writeln('   Serial number: ', esi);
  130.   doquit;
  131. end.
  132.  
  133. -------------- fw-cm4.pas -------------------- cut here ------------------
  134.  
  135.  
  136.                   -=* Final Notes *=-
  137.  
  138. Well hope you liked this tuturial dedicated to keygenning and you learn the basic tricks
  139. of it...