-----------------------------------------------------+
These informations are for educational purposes only!|
-----------------------------------------------------+

Name      : mIRC

Version   : 5.61

Target    : mIRC32.exe

Tools     : W32Dasm 8.93
	    Hacker's View 6.01
	    Brain
	    
Cracker   : LW2000

Tutorial  : No.7

http://www.mirc.com/


---
DISCLAIMER
For educational purposes only!
I hold no responsibility of the mis-used of this material!
---


Please excuse my poor english, its not my mother language....


1.	Launch mIRC, you might have noticed, that the program has
	no limitations, even unregistered. But hey, i hate unregistered
	shareware... So go to HELP | REGISTER and enter LW2000 as username
	and use 123456 for your serial number.

2.	*BOOM* mIRC Registration! messagebox: "Sorry, your registration
	name and number don't match! Please make sure you're typing
	them in using the correct capitalization and spacing. Thanks!"
	Mhmm, lets take a look in W32DASM.

3.	Now copy MIRC32.exe to backup.exe and disassemble MIRC32.EXE
	with W32Dasm. Click on the String Data Reference (SDR) button
	and find "Sorry, your registration name and number don't match!"
	doubleclick on this string and close the SDR window.

4.	Now you should see this:

	* Possible Reference to String Resource ID=01913: "Sorry, your
	registration name and number don't match!"
                                 
	:0043B708 6879070000              push 00000779
	:0043B70D E8D2EFFCFF              call 0040A6E4
	:0043B712 50                      push eax
	:0043B713 8B4508                  mov eax, dword ptr [ebp+08]
	:0043B716 50                      push eax

5. 	Mhmm..this doesn't look like the code we should see!
	OK, trace up until you see the following piece of asm code:

	* Referenced by a (U)nconditional or (C)onditional Jump at Address:
	:0043B621(C)  <<-- Here we go!

	:0043B6C2 6A00                    push 00000000

	You see, we jumped from 0043B621, so lets go there and take a look.


6.	Now you should see this:

	* Reference To: USER32.SendDlgItemMessageA, Ord:0000h
                                  |
	:0043B60B E80A250A00        Call 004DDB1A
	:0043B610 6803E14E00        push 004EE103
	:0043B615 681CDD4E00        push 004EDD1C
	:0043B61A E899950600        call 004A4BB8  <<-- Mhmm, a interesting call
	:0043B61F 85C0              test eax, eax  <<-- test eax if zero or one
	:0043B621 0F849B000000      je 0043B6C2    <<-- Jump if result is equal





7.	OK, whatmeans this piece of code? First we've got a call that returns
	one or zero. This depends on the code thats inside. Then we've got a test, 
	which will test if the result from this call is 1 or 0. And at last we
	have a JE which will take you either to the CORRECT or to the WRONG
	registration messagebox. Looks easy, or? Simple Name/Code check...
	OK, lets try it! Place the bar on :0043B621 0F849B000000   je 0043B6C2 
	You're Offset is 3AC21 (you see this in the statusbar).

	Copy mirc32.exe to try.exe. Open try.exe with hiew. Press Enter twice
	to go to decode mode. Press F5 enter enter 3AC21.
	OK, now press F3 to edit the file. Change 0F84 to 0F85, this changes
	je to jump not equal (jne). F9 to update and F10 to quit.

8.	Now start try.exe. Enter any name and serial.
	*BOOM* "Your registration has been entered successfully.
	Thanks for registering! :)" Hey Cool, you've done it!!!

9.	Mhmm, exit the program and start try.exe again.
	*BOOM* SHIT!!! Unlicensed copy! So, this program has a startup check.
	So, open mirc32.exe in W32DASM, again.

	So lets go back to:
	* Reference To: USER32.SendDlgItemMessageA, Ord:0000h
                                  |
	:0043B60B E80A250A00        Call 004DDB1A
	:0043B610 6803E14E00        push 004EE103
	:0043B615 681CDD4E00        push 004EDD1C
	:0043B61A E899950600        call 004A4BB8  <<-- Mhmm, lets go there...
	:0043B61F 85C0              test eax, eax  
	:0043B621 0F849B000000      je 0043B6C2    
						   


10.	What we've go other but the call? Nothing! So lets take a look...
	Put the bar on the call line and click on the CALL button:
	Now, it should look like this:


	:004A4BB8 55                      push ebp
	:004A4BB9 8BEC                    mov ebp, esp
	:004A4BBB 53                      push ebx
	:004A4BBC 56                      push esi
	:004A4BBD 57                      push edi
	:004A4BBE 8B750C                  mov esi, dword ptr [ebp+0C]
	:004A4BC1 8B5D08                  mov ebx, dword ptr [ebp+08]
	:004A4BC4 53                      push ebx
	:004A4BC5 E87AC20200              call 004D0E44
	:004A4BCA 59                      pop ecx
	:004A4BCB 83F805                  cmp eax, 00000005 <<-- compare eax with 5
	:004A4BCE 7307                    jnb 004A4BD7	    <<-- jump if not below
	:004A4BD0 33C0                    xor eax, eax	    <<-- eax goes empty
	:004A4BD2 E9DA000000              jmp 004A4CB1	    <<-- jump to 4A4CB1


11.	So lets trace down a bit until you see:

	:004A4C23 6864205000              push 00502064
	:004A4C28 68641F5000              push 00501F64
	:004A4C2D E8A6FEFFFF              call 004A4AD8	    <<-- well I've seen
	:004A4C32 85C0                    test eax, eax	    <<-- something like
	:004A4C34 7407                    je 004A4C3D	    <<-- this before ;)
	:004A4C36 B801000000              mov eax, 00000001
	:004A4C3B EB74                    jmp 004A4CB1

	Hee, i think you have the same idea, like me ;)
	Lets change je to jne. Place the bar on :004A4C34 7407  je 004A4C3D
	your offset is A4234.

12.	Hiew mirc32.exe. Same procedure as everytime...
	Enter twice, F5 and enter A4234, F3 to edit and change
	7407 to 7507. F9 to update F10 to quit.


13.	Fire up Mirc32.exe. Click on Help | register and enter:
	Name:   LW2000
	Serial: 123456
	Press OK.
   
Congratulation! You are a registered user!




FINISH! Easy, or?

cu LW2000
Any comments? Mail me LW2000@gmx.net !!!
----

I'd like to thank tKC for his tutors!
I started with tutor 1 and i still read them... they are the best!