_______________ NERO - BURNING ROM ______________

On utilisera Sice, W32dasm 8.93 et Hiew 6.00.

Ce compte-rendu est valable pour toutes les versions jusqu' à la version 4.0.0.2 (la dernière à l' heure où j' ecris ce compte-rendu.)

Que peut-on remarquer quand on lance le soft ?
Un nagscreen apparait et nous demande un nom et le serial qui va avec :(

Dommage on n' a pas d' argent donc on clique sur démo (Ok est grisé) et la un autre nagscreen apparait et nous dit plein
de conneries comme "limitation jusqu' au xx/xx/xx".

On regarde un peu le soft et on voit que c' est simplement une version complète bridée à 30 jours d' utilisations : toutes les fonctions sont présentes.

On va donc se pencher sur la boite de dialogue du depart qui nous demande nom et serial.

On pose un bpx showwindow et on tombe dans la routine suivante :

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0048AEF1(C)
|
:0048AEFB 8B4DF0                  mov ecx, dword ptr [ebp-10]
:0048AEFE BEFFFFFFFF              mov esi, FFFFFFFF
:0048AF03 E8380E0000              call 0048BD40
:0048AF08 8D8DC4FEFFFF            lea ecx, dword ptr [ebp+FFFFFEC4]
:0048AF0E E8EDF30700              call 0050A300
:0048AF13 8D85C4FEFFFF            lea eax, dword ptr [ebp+FFFFFEC4]
:0048AF19 8B4DF0                  mov ecx, dword ptr [ebp-10]
:0048AF1C C745FC17000000          mov [ebp-04], 00000017
:0048AF23 C785C4FEFFFF50C65100    mov dword ptr [ebp+FFFFFEC4], 0051C650
:0048AF2D C785E8FEFFFF00000000    mov dword ptr [ebp+FFFFFEE8], 00000000
:0048AF37 C745FC18000000          mov [ebp-04], 00000018
:0048AF3E 50                      push eax
:0048AF3F E860F30700              call 0050A2A4
:0048AF44 8B4DF0                  mov ecx, dword ptr [ebp-10]
:0048AF47 8B416C                  mov eax, dword ptr [ecx+6C]
:0048AF4A 8B491C                  mov ecx, dword ptr [ecx+1C]
:0048AF4D 50                      push eax
:0048AF4E E84D000100              call 0049AFA0
:0048AF53 E8C8F6FBFF              call 0044A620      <<<< ici c'est la routine qui contient le showwindow
:0048AF58 85C0                    test eax, eax  <- si eax=1 alors version complete
:0048AF5A 750D                    jne 0048AF69  <- sinon on va a la boite de dialogue ...
:0048AF5C 8975FC                  mov dword ptr [ebp-04], esi
:0048AF5F E89D060000              call 0048B601
:0048AF64 E952FFFFFF              jmp 0048AEBB

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0048AF5A(C)
|
:0048AF69 8B4DF0                  mov ecx, dword ptr [ebp-10]
:0048AF6C E81F170000              call 0048C690
:0048AF71 8B4DF0                  mov ecx, dword ptr [ebp-10]
:0048AF74 E837360000              call 0048E5B0
:0048AF79 E8A2D0FEFF              call 00478020
:0048AF7E 85C0                    test eax, eax
:0048AF80 0F85D9020000            jne 0048B25F
:0048AF86 C745B800000000          mov [ebp-48], 00000000
:0048AF8D 6A01                    push 00000001
:0048AF8F E88C67FEFF              call 00471720
:0048AF94 83C404                  add esp, 00000004
:0048AF97 8B4DF0                  mov ecx, dword ptr [ebp-10]
:0048AF9A 8981CC000000            mov dword ptr [ecx+000000CC], eax
:0048AFA0 8BC8                    mov ecx, eax
:0048AFA2 85C9                    test ecx, ecx
:0048AFA4 740E                    je 0048AFB4
 

Voici la routine qui nous interesse :
------------------------------------------------------------------------------------------

* Referenced by a CALL at Address:
|:0048AF53
|
:0044A620 64A100000000            mov eax, dword ptr fs:[00000000]
:0044A626 55                      push ebp
:0044A627 8BEC                    mov ebp, esp

* Possible Reference to Dialog: DialogID_00FF
                                  |
:0044A629 6AFF                    push FFFFFFFF
:0044A62B 6811A74400              push 0044A711
:0044A630 50                      push eax
:0044A631 64892500000000          mov dword ptr fs:[00000000], esp
:0044A638 83EC6C                  sub esp, 0000006C
:0044A63B 56                      push esi
:0044A63C E8C5E20B00              call 00508906
:0044A641 8B7004                  mov esi, dword ptr [eax+04]
:0044A644 83EC04                  sub esp, 00000004
:0044A647 8BCE                    mov ecx, esi
:0044A649 8965F0                  mov dword ptr [ebp-10], esp
:0044A64C 68EC655400              push 005465EC
:0044A651 8B45F0                  mov eax, dword ptr [ebp-10]
:0044A654 6868885400              push 00548868

* Possible StringData Ref from Data Obj ->"Info"
                                  |
:0044A659 68406B5400              push 00546B40
:0044A65E 50                      push eax
:0044A65F E8D4ED0B00              call 00509438
:0044A664 C745FCFFFFFFFF          mov [ebp-04], FFFFFFFF
:0044A66B E850FAFFFF              call 0044A0C0
:0044A670 83C404                  add esp, 00000004
:0044A673 85C0                    test eax, eax
:0044A675 7514                    jne 0044A68B   <- si eax!=1 alors la routine de demo suit son cours
      (limitation de temps) et on pourra observer que la valeur
      retourner dans eax sera 0 en 0048AF58

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0044A704(U)
|
:0044A677 B801000000              mov eax, 00000001  <- ici on est en version non bride

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0044A6B7(U)
|
:0044A67C 8B4DF4                  mov ecx, dword ptr [ebp-0C]
:0044A67F 5E                      pop esi
:0044A680 64890D00000000          mov dword ptr fs:[00000000], ecx
:0044A687 8BE5                    mov esp, ebp
:0044A689 5D                      pop ebp
:0044A68A C3                      ret

On va donc changer ceci pour que le prog soit dans sa version non demo en forcant le test en 0044A675
on obtient :

:0044A66B E850FAFFFF              call 0044A0C0
:0044A670 83C404                  add esp, 00000004
:0044A673 33C0                    xor eax, eax   <- on change le test en xor pour forcer eax a 0
:0044A675 7514                    jne 0044A68B   <- Comme eax=0 alors il n'y a plus de saut.
      on fini alors la routine et on retourne 1 dans eax

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0044A704(U)
|
:0044A677 B801000000              mov eax, 00000001  <- ici on est en version non bride

* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0044A6B7(U)
|
:0044A67C 8B4DF4                  mov ecx, dword ptr [ebp-0C]
:0044A67F 5E                      pop esi
:0044A680 64890D00000000          mov dword ptr fs:[00000000], ecx
:0044A687 8BE5                    mov esp, ebp
:0044A689 5D                      pop ebp
:0044A68A C3                      ret

Et voila plus de limitation dans le temps : le prog est en version complète.
J' espere que j'aurais été assez clair et precis dans mes explications.
Si quelqu' un a des corrections à apporter qu'il n' hesite pas.

by Elraizer 1998
Elraizer@cryogen.com

Ps: (1999) la version 4.0.0.5 est sortie mais j' ai pas eu le temps de la télécharger :(