-----------------------------------------------
How to find a serial in JPEG Optimizer 4.00
-----------------------------------------------

Cracker: stealthFIGHTER

Target: JPEG Optimizer 4.0

Tools: W32DASM
       Brain

Where: http://www.xat.com

Sorry for my english, its not my mother language.

-------
Step 1:
-------
Run Jpeg otp., go to about, registration, enter
any serial. Some bullshit pop-up in some nag.

-------
Step 2:
-------
Run W32DASM, disassemble jpegopt.exe.
Click to SDR window the nag (NAG16) and double
on it. But if you try dbl click on it more times
you will find next 3 strings. So, go to the 
last string (double on it 8 times) and you 
should be here:

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00404782(U)
|
:004047A5 66C78568FFFFFF6401      mov word ptr [ebp+FFFFFF68], 0164

* Possible StringData Ref from Data Obj ->"Nag16"
                                  |
:004047AE BA45C64700              mov edx, 0047C645
:004047B3 8D4580                  lea eax, dword ptr [ebp-80]
:004047B6 E8597B0400              call 0044C314
:004047BB FF8574FFFFFF            inc dword ptr [ebp+FFFFFF74]
:004047C1 8B10                    mov edx, dword ptr [eax]
:004047C3 8B8D50FFFFFF            mov ecx, dword ptr [ebp+FFFFFF50]
:004047C9 41                      inc ecx
:004047CA 8B8554FFFFFF            mov eax, dword ptr [ebp+FFFFFF54]
:004047D0 8B8008030000            mov eax, dword ptr [eax+00000308]
:004047D6 E889A50500              call 0045ED64
:004047DB FF8D74FFFFFF            dec dword ptr [ebp+FFFFFF74]
:004047E1 8D4580                  lea eax, dword ptr [ebp-80]
:004047E4 BA02000000              mov edx, 00000002
:004047E9 E8867D0400              call 0044C574
:004047EE 837DF400                cmp dword ptr [ebp-0C], 00000000
:004047F2 7405                    je 004047F9
:004047F4 8B4DF4                  mov ecx, dword ptr [ebp-0C]
:004047F7 EB05                    jmp 004047FE

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004047F2(C)
|
:004047F9 B94BC64700              mov ecx, 0047C64B

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004047F7(U)
|
:004047FE 51                      push ecx
:004047FF E810590200              call 0042A114        <------------ here is the call
:00404804 59                      pop ecx
:00404805 84C0                    test al, al	       <------------ compare        
:00404807 7533                    jne 0040483C         <------------ bad boy
:00404809 6A00                    push 00000000
:0040480B E884270700              call 00476F94
:00404810 59                      pop ecx
:00404811 8BF0                    mov esi, eax
:00404813 8BC6                    mov eax, esi
:00404815 2B854CFFFFFF            sub eax, dword ptr [ebp+FFFFFF4C]
:0040481B B980510100              mov ecx, 00015180
:00404820 99                      cdq
:00404821 F7F9                    idiv ecx
:00404823 83F81E                  cmp eax, 0000001E
:00404826 7E14                    jle 0040483C
:00404828 898544FFFFFF            mov dword ptr [ebp+FFFFFF44], eax
:0040482E C60530A4480001          mov byte ptr [0048A430], 01
:00404835 C68548FFFFFF00          mov byte ptr [ebp+FFFFFF48], 00


-------
Step 3:
-------
Look at this line and execute it.

:004047FF E810590200              call 0042A114       <------ our call


You should be here:


* Referenced by a CALL at Addresses:
|:004047FF   , :00429581   
|
:0042A114 55                      push ebp
:0042A115 8BEC                    mov ebp, esp
:0042A117 83C4F4                  add esp, FFFFFFF4
:0042A11A 53                      push ebx
:0042A11B 8B4508                  mov eax, dword ptr [ebp+08]
:0042A11E 8D5DF4                  lea ebx, dword ptr [ebp-0C]
:0042A121 8A10                    mov dl, byte ptr [eax]
:0042A123 8813                    mov byte ptr [ebx], dl
:0042A125 8A4801                  mov cl, byte ptr [eax+01]
:0042A128 884B01                  mov byte ptr [ebx+01], cl
:0042A12B 8A5002                  mov dl, byte ptr [eax+02]
:0042A12E 885302                  mov byte ptr [ebx+02], dl
:0042A131 8A4803                  mov cl, byte ptr [eax+03]
:0042A134 884B03                  mov byte ptr [ebx+03], cl
:0042A137 8A5004                  mov dl, byte ptr [eax+04]
:0042A13A 885304                  mov byte ptr [ebx+04], dl
:0042A13D 8A4805                  mov cl, byte ptr [eax+05]
:0042A140 884B05                  mov byte ptr [ebx+05], cl
:0042A143 8A5006                  mov dl, byte ptr [eax+06]
:0042A146 885306                  mov byte ptr [ebx+06], dl
:0042A149 8A4807                  mov cl, byte ptr [eax+07]
:0042A14C 884B07                  mov byte ptr [ebx+07], cl
:0042A14F 8A4008                  mov al, byte ptr [eax+08]
:0042A152 884308                  mov byte ptr [ebx+08], al
:0042A155 C6430900                mov [ebx+09], 00
:0042A159 0FBE03                  movsx eax, byte ptr [ebx]
:0042A15C 50                      push eax
:0042A15D E8228C0400              call 00472D84
:0042A162 59                      pop ecx
:0042A163 83F84A                  cmp eax, 0000004A             <--- first cmp
:0042A166 7559                    jne 0042A1C1
:0042A168 0FBE5301                movsx edx, byte ptr [ebx+01]
:0042A16C 52                      push edx
:0042A16D E8128C0400              call 00472D84
:0042A172 59                      pop ecx
:0042A173 83F853                  cmp eax, 00000053		<--- second cmp		
:0042A176 7549                    jne 0042A1C1
:0042A178 0FBE4B02                movsx ecx, byte ptr [ebx+02]
:0042A17C 83F924                  cmp ecx, 00000024		<--- third cmp
:0042A17F 7540                    jne 0042A1C1
:0042A181 0FBE4303                movsx eax, byte ptr [ebx+03]
:0042A185 83F832                  cmp eax, 00000032		<--- fourth cmp
:0042A188 7537                    jne 0042A1C1
:0042A18A 0FBE5304                movsx edx, byte ptr [ebx+04]
:0042A18E 83FA38                  cmp edx, 00000038		<--- fifth cmp
:0042A191 752E                    jne 0042A1C1
:0042A193 0FBE4B05                movsx ecx, byte ptr [ebx+05]
:0042A197 83F939                  cmp ecx, 00000039		<--- sixth cmp
:0042A19A 7525                    jne 0042A1C1
:0042A19C 0FBE4306                movsx eax, byte ptr [ebx+06]
:0042A1A0 83F832                  cmp eax, 00000032		<--- seventh cmp
:0042A1A3 751C                    jne 0042A1C1
:0042A1A5 0FBE5307                movsx edx, byte ptr [ebx+07]
:0042A1A9 83FA31                  cmp edx, 00000031		<--- last cmp
:0042A1AC 7513                    jne 0042A1C1
:0042A1AE C70554A448001443FC69    mov dword ptr [0048A454], 69FC4314
:0042A1B8 E8CFA7FDFF              call 0040498C
:0042A1BD B001                    mov al, 01
:0042A1BF EB1B                    jmp 0042A1DC


-------
Step 4:
-------

If you look at these compares, you will see some interesting:

cmp eax, 0000004A    <--- first character of a serial: J
cmp eax, 00000053    <--- second character of a serial: S
cmp ecx, 00000024    <--- third character of a serial: $
cmp eax, 00000032    <--- fourth character of a serial: 2	
cmp edx, 00000038    <--- fifth character of a serial: 8	
cmp ecx, 00000039    <--- sixth character of a serial: 9	
cmp eax, 00000032    <--- seventh character of a serial: 2	
cmp edx, 00000031    <--- last character of a serial: 1


Run Jpeg opt., go to help, register,
enter JS$28921 *** we are registered ***	


---------------------------------------
If i make a mistake, please e-mail 
me to: stealthfighter@another.com
---------------------------------------h can be bpx'd easily, 2 pushes of F12 and you'll