Internet Audio Mix v1.44
I just wana CRACK YOU !!
PART (2)
Best view 1024 X 768
by FaT[BiT] \ TNT!
Cracking For Beginners
 
Program Info
Program Name : iMix.exe
Program Type : Audio Application.
Program Location : http://www.acoustica.com
Program Size : 2.55MB
 
ToolZ :
SoftIce v4.05
Turbo Pascal v7.0 (to Code a Serial Maker)


All these toolz can be found at http://w3.to/protools
Easy ( X ) Medium (  ) Hard (  ) Pro (  )


Internet Audio Mix v1.44
Cracked and Written by : FaT[BiT] \ TNT!
Tutorial No. : 13


Dedication Fly to

To the Best ppl i have ever known on iRC (efNET)
-- AzmO -- -- [XASX] -- -- Sir dReAm -- -- Iczelion -- -- hutch -- tabm0de

Intoduction & Protection

iNTORdUCTION :

Hi there and welcome to another tutorial ...
In this tutorial i have alot of things to say for the ppl who claim that crackers do not crack without there toolz in other words the toolz make the cracker , or if u don't have the crackerz toolz u can't crack .....

Maybe some of it is true , that if u don't have the crackrz toolz u can't crack , sometimes i find that is true , but let us think like this , if u had the crackerz toolz will u be able to crack , i think not , so what i'm trying to say here that when a crack is done , the credit don't go totally to the tool and also don't go totally to the cracker they just split the work i think most of the time by 50% each ....

so by this tutorial i will show alot of the non-believerz , that if u have the toolz and don't know how to crack or let's say u don't know assembly , that u can't crack and also that if u know assembly and don't have the toolz u also can't crack , so in the end i'd like to say , that these toolz will help you alot but in the end u r the one to read between the lines to understand every thing in the program !!!

pROTeCTION :

O.k about this program , its protection is not like allways - a name and a serial - , this time it is only a serial !! , so in this tutorial i will show u how to find - or let's say to calcualte a good serial - then at the end u will be able to make a keymaker or a serial generator as some ppl like to call it !!

The Essay

NOTE : The asm code that u see here is taken from win32dazm just for the tut.

o.k so we start by installing Internet Audio Mix , after the process in completed , let's run the program , u will see a window that asks for a serial to register the program lets enter a dummy serial in my case i entered like this :

1234567890

Now before u click on the register button let's get into softice by pressing Ctrl+d and set a breakpoint like this one :
bpx GetDlgItemTextA

o.k now press F5 to exit softice , then click on the button register now softice will break press F11 to get the caller , and u should land at this code :


:00420B95 8BF8                mov edi, eax   <-- we land here
:00420B97 8D542410            lea edx, dword ptr [esp+10]
:00420B9B 8D442418            lea eax, dword ptr [esp+18]
:00420B9F 52                  push edx
:00420BA0 8D8C2490000000      lea ecx, dword ptr [esp+00000090]  <-- ecx has our dummy code
:00420BA7 50                  push eax
:00420BA8 51                  push ecx  <-- store it!
:00420BA9 8BCE                mov ecx, esi
:00420BAB E890F9FFFF          call 00420540  <-- we step into this call!
:00420BB0 3BFB                cmp edi, ebx
:00420BB2 7627                jbe 00420BDB


o.k as we have seen until now that our dummy code it stored in the stack and at address 00420BAB there is a call , and since our dummy code is in the stack we should follow this call to see what it dose with our code and since there is a compare after the call , it gives us another reason to follow it so when u are at this address press F8 and u should see something like this :


:00420540 8B44240C            mov eax, dword ptr [esp+0C]
:00420544 53                  push ebx
:00420545 55                  push ebp
:00420546 8B6C2410            mov ebp, dword ptr [esp+10]
:0042054A 56                  push esi
:0042054B 57                  push edi
:0042054C 8B7C2414            mov edi, dword ptr [esp+14]  <-- edi has our dummy code again
:00420550 C7450000000000      mov [ebp+00], 00000000
:00420557 57                  push edi  <-- store it!
:00420558 BB01000000          mov ebx, 00000001
:0042055D C70000000000        mov dword ptr [eax], 00000000
:00420563 FF15B4714300        Call dword ptr [004371B4]   <-- gets the length of our code !
:00420569 33F6                xor esi, esi
:0042056B 85C0                test eax, eax
:0042056D 7507                jne 00420576  <-- we will jump this cuz we entered some code!
:0042056F 5F                  pop edi
:00420570 5E                  pop esi
:00420571 5D                  pop ebp
:00420572 5B                  pop ebx
:00420573 C20C00              ret 000C


As you can see from the code above that we will jump at address 0042056D so after we jump you will see something like this code


:00420578 803C3E2D            cmp byte ptr [esi+edi], 2D  <-- compare our first digit with 2Dh = '-'
:0042057C 7405                je 00420583
:0042057E 46                  inc esi  <-- if not take next char
:0042057F 3BF0                cmp esi, eax  <-- see if counter = no. of char (in our dummy code!)
:00420581 7CF5                jl 00420578  <-- if not jump back !! (make a loop !)
:00420583 3BF0                cmp esi, eax  <-- another check for the counter
:00420585 7515                jne 0042059C
:00420587 57                  push edi
:00420588 E84DDF0000          call 0042E4DA  <-- make our string code to numeric value
:0042058D 83C404              add esp, 00000004
:00420590 894500              mov dword ptr [ebp+00], eax
:00420593 8BC3                mov eax, ebx
:00420595 5F                  pop edi
:00420596 5E                  pop esi
:00420597 5D                  pop ebp
:00420598 5B                  pop ebx
:00420599 C20C00              ret 000C


o.k i think we are getting closer here ... lets see what we've got ... at 00420578 to 00420581 is loop that the prog gose in to look for the char '-' in out code , at first i thought that the code would have a '-' in it but this was to see if u have entered a negative value , when u are at the address 00420578 write 'd esi+edi' and u will see our dummy code and in the middle of the loop do it again and u will see in the data window have the code , so we are now sure that this procedure is for seraching the '-' in our dummy code .

Now after u finish the loop we come to address 00420588 where the call command is , now if u want to go through , its up to u but to make the story short , i only pressed F10 to execute the call command then wrote '? eax' to see the value of eax and guess what it was equal to our dummy code . so now we know that this call is to convert our string value to numeric value.

so now we continue with the trace and we execute the ret command , now trace with F10 until u reach this code :


:00420BCF 50                  push eax
:00420BD0 8BCE                mov ecx, esi
:00420BD2 E8B9F4FFFF          call 00420090  <-- check if code is valid procedure
:00420BD7 3BC3                cmp eax, ebx
:00420BD9 751C                jne 00420BF7  <-- a nice one don't u think !!
|
* Possible StringData Ref from Data Obj ->"That registration code is not "  <-- our error message !!
                                        ->"valid. Double check the number "
                                        ->"you are typing in."


O.k The End is near ... as u can see from the following code that at address 00420BD2 is a call command which calcualte or let's say checks if our code is valid ,if yes the result will be put back into eax , which will make it different from ebx , which also will cuz the jne at address 00420BD9 to function (i mean to jump it !!) , now there is two way to crack this prog . i will say the easy one first , it is offcourse PATCHING all u have to do is to patch the jump at address 00420BD9 and make it jmp , and that will make us allways jump to the thank u message , but i think this is not a good idea so i thought let's first step into the call and find out what is going on ... so press F8 to get into the call and u should see something like this !!


:00420090 56                  push esi
:00420091 8B742408            mov esi, dword ptr [esp+08]  <-- esi has our dummy code
:00420095 81FE40420F00        cmp esi, 000F4240  <-- compare it with 1000000
:0042009B 57                  push edi
:0042009C 764C                jbe 004200EA  <-- if less then err
:0042009E 8BC6                mov eax, esi  <-- else put our code in eax
:004200A0 33D2                xor edx, edx  <-- clear the edx
:004200A2 BF74290100          mov edi, 00012974  <-- put in edi 12974h = 76148d
:004200A7 F7F7                div edi  <-- our code / 76148d
:004200A9 85D2                test edx, edx  <-- check the remainder
:004200AB 753D                jne 004200EA  <-- if it's not zero then err
:004200AD 8B413C              mov eax, dword ptr [ecx+3C]
:004200B0 BF01000000          mov edi, 00000001
:004200B5 3BF0                cmp esi, eax
:004200B7 742A                je 004200E3
:004200B9 89713C              mov dword ptr [ecx+3C], esi
:004200BC E8BFFCFFFF          call 0041FD80
|
* Possible Reference to String Resource ID=40231: "Thank you!!! As a registered user ..."
|


This is the End .... o.k so what do u think ? , i think every thing is easy right !! , o.k here is a what happend ...
at address 00420091 our dummy code was put in esi then at address 00420095 our code was compared with 000F4240h = 1000000d so u can say here that this is the first rule for a valid serial , the serial or the code must be larger that 1000000 as a numeric value , then at address 0042009E our code is put into eax , then at 004200A0 edx is xored = 0 , after that edi is set to the value 00012974h = 76148d , and then our code is divided by 76148 , if the remainder is equal to zero then it is a valid serial if not then the jump at address 004200AB will function (we will jump it!) and it will xor the eax = 0 , and it will return back to the call and the error message will be displayed .....

I think every thing is clear now ... but again here is flash back ...
to get a valid code there is 2 conditions :
1. our code must be larger that 1000000
2. when we divied our code over 76148 the remainder must be zero

i think that is easy ... so all we have to do now is to find a number when we divied it over 76148 it will give us the remainder = 0 , and at the same time it is larger that 1000000 (i know i said it again !! :) ) ... but we don't have to calculate that number ourselfs , we can write a code to calculate it for us .... hehehehe i love computers !!

so here is the code


{ a little program to generate a valid serials
for Internet Audio Mix v1.44 coded by FaT[BiT] \ TNT!
}

program test;
 uses
    crt ;
 var
    code : longint ;
 begin
    clrscr ; {clear the screen }
    for code := 1000001 to 3000000 do { start the loop from 100001 to 3000000 or more if u want }
      if (code mod 76148 = 0) then { check if reminder of code / 76148 = 0 }
          writeln(code);{if yes write code -> continue looping }
    readln;
 end.


after we write and complie this code the program will give us this alot of numbers and guess what they are all valid serial cuz they are larger that 1000000 ( this is y we started the loop from 1000001 ) and also there remonder is = 0 , so choose any one u like and let's try it , and then ......

Internet Audio Mix Is REGISTERED

The Patch

NO NEED!

Final Wordz

will here u go ... i hope u have enjoyed this tut as much as i did writing it
in the end i would like to greet the following ppl !!
FaT[BiT]_FaTz0 greetz the following :

tKC ... (for showing me the light !! )
LW2000 ... ( Thanx alot i now use my brain )
[XasX] ... (a very good founder and a very good friend also!)
AzmO ... (yes!! man we are different !! )
Sir dReAm ... (i will be seeing u soon !! )
BoneZ ... (thanx alot for the support !!)
BillGameZ, VaibLitzeR, MezUz , and ShaQ ... (good luck to u all !! )

and to all TNT!CRACK!TEAM! members ... (keep up the good work !!)

any comments mail me : fattnt@yahoo.com

See ya in another tut !!! Soon !!!