AutoProject

amois

Program Url: w*w.fpsols.com/autoproject.html
Program Tipi: AutoCAD Plugin

Araçlar:

 

SoftICE

Basit ( )  Orta (x)  Zor ( )  Pro ( )

Başlangıç

AutoCAD plugin, 3D --> 2D donusumu yapiyor.

 

Yazı


Lock Numbers icin Unlock Code girmemizi istiyor. Ornegin, Lock Numbers = 18214-2133512 ve bu numara her bilgisayar icin degisken. Registery’deki degerleri silerseniz, program Lock Numbers’in sadece ilk bolumunu degistiriyor. Yani ikinci bolumu 2133512 benim bilgisayarim icin sabit bir deger. Unlock code olarak “1907” degerini girelim.

:10006E71 call 10003BD0                     <-- ??
:10006E76 pop edi
:10006E77 test eax, eax
:10006E79 push 00000040
:10006E7B jne 10006E89                      <-- iyi cocuk
:10006E7D push 1000D168                     <-- "Registration Error"
:10006E82 push 1000D120                     <-- "Registration failed !!"
:10006E87 jmp 10006E93
:10006E89 push 1000D108                     <-- "Registration Successful"
:10006E8E push 1000D0E0                     <-- "Thank you for registering ..."
:10006E93 push 00000000
:10006E95 Call dword ptr [100091F4]         <-- MessageBoxA

[bpx 10006E71] --> [F8]

...
:10003C1F Call dword ptr [10009098]         <-- GetWindowsDirectoryA
...
:10003C63 Call dword ptr [10009094]         <-- GetVolumeInformationA
...
:10003CA1 mov edx, dword ptr [esp+18]       <-- edx = 5141406h
:10003CA5 mov dword ptr [esp+14], ebx
:10003CA9 and edx, 00FFFFFF                 <-- edx = 141406h

10003C63 deki cagri sonucunda 10003CA1 de edx 5141406h oldu ve 10003CA9 da son 6 basamagi alinarak 141406h oldu.

...
:10003D6B mov eax, dword ptr [esp+18]       <-- eax = 141406h
:10003D6F mov ecx, dword ptr [esp+24]       <-- ecx = 4726h = 18214 :)
:10003D73 push eax
:10003D74 push ecx
:10003D75 call 10003540                     <-- eax = 131CA2h oldu
:10003D7A mov ecx, dword ptr [esp+30]       <-- ecx = 0
:10003D7E add esp, 00000008
:10003D81 cmp eax, ecx
:10003D83 jne 10003DB7                      <-- kotu cocuk

10003D6F deki ecx degerimiz 18214 oldu. Yani, bize verilen Lock Numbers’in ilk bolumu. Cagri sonrasinda eax ile ecx karsilastiriliyor. Burayi patch yaptigimizda kalici olarak “Registered” oluyoruz. Ama gecerli serial bulmak daha guzel olacak. Yalniz, ecx degerimiz 0. Normalde bizim girdigimiz serial ile veya islem gormus hali ile karsilastirilmasi gerekirdi. Bu noktada programin Registry’den neler okuduguna bakarsak; RC ve RN olarak 2 deger bulacagiz. Bunlardan RN, Lock Numbers’in ilk bolumu ve biz bunu manual olarak degistirebiliyoruz. Peki RC nedir? Manual olarak buraya 773h=1907 degerini atayip 10003D81 deki karsilastirmaya bakalim. Evet, ecx=773h ve olmasi gereken serial eax’de duruyor. Bunun anlami su; girdigimiz Unlock Code bir islemden geciyor ve eax’e esit ise Registry’ye yaziliyor. Esit degilse RC bolumumuz 0 olarak kaliyor. Yani, 10003D7A da ecx’e atanan deger Registry’den geliyor. Ayrica, gercek karsilastirmanin oldugu yer 10003D81 den daha once olmali. Baska turlu Registered olamayiz zaten. [bc*] --> [bpx hmemcpy] -->

...
:10006E4A lea ecx, dword ptr [esp+0C]       <-- [d ecx] = 1907
:10006E4E push ecx
:10006E4F Call dword ptr [100091E0]         <-- ascii to long <-- eax = 773h = 1907
:10006E55 sub eax, 000009DE                 <-- eax = 773-9DE = FFFFFD95
:10006E5A lea edx, dword ptr [esp+0C]
:10006E5E push eax
:10006E5F push edx
:10006E60 call 10003560                     <-- ??
:10006E65 add esp, 0000000C
:10006E68 lea ecx, dword ptr [esp+08]
:10006E6C Call 10007F8A
:10006E71 call 10003BD0
:10006E76 pop edi
:10006E77 test eax, eax

Evet, ise yarar ipuclari bulduk. 10006E71 deki cagriyi yukarida incelemistik zaten. Peki, 10006E60 daki cagrida neler oluyor ? [bpx 10006E60] --> [F8]

...
:1000369F Call dword ptr [10009094]         <-- GetVolumeInformationA
...
:100036BF mov edi, dword ptr [esp+7C]       <-- edi = FFFFFD95 :)
:100036C3 cmp edi, ebx
:100036C5 je 10003905
:100036CB mov eax, dword ptr [esp+20]       <-- eax = 141406
:100036CF mov ecx, dword ptr [esp+28]       <-- ecx = 4726
:100036D3 push eax
:100036D4 push ecx
:100036D5 call 10003540                     <-- eax = 131CA2 oldu
:100036DA add esp, 00000008
:100036DD cmp edi, eax                      <-- :)
:100036DF mov dword ptr [esp+2C], eax
:100036E3 jne 100038F0

Artik tam anlamiyla olayi cozduk. Keygen yazabilmek icin 100036D5 deki cagriya da bakmak gerekse de basit birkac XOR dan olustugunu gorecegiz. Peki, firma bizim VolumeInformation bilgimizi nasil elde ediyor ? Tabii ki 2133512 den. Bunu da cozdugumuz zaman, herhangi bir Lock Numbers icin Unlock Code bulabilecegiz.
[bpx GetVolumeInformationA] --> 2 kez break yapacak. [F12] ile donup trace ederseniz su bolume geleceksiniz. Trace sirasinda elimizdeki ipuclarinin 141406 ve 208E08 oldugunu unutmayin ve registerlerin aldiklari degerlere dikkat edin.

...
:10003986 mov ecx, dword ptr [esp+20]       <-- ecx = 141406h
:1000398A add ecx, 000C7A02                 <-- ecx = 208E08h = 2133512

Keygen yazabilmemiz icin herseye sahibiz. Oncelikle 10003540 da neler olduguna da bakalim.

:10003540 mov eax, dword ptr [esp+04]       <-- eax = 4726
:10003544 mov ecx, dword ptr [esp+08]       <-- ecx = 141406
:10003548 xor eax, ecx                      <-- eax = 145320
:1000354A xor eax, 00074F82                 <-- eax = 131CA2
:1000354F and eax, 00FFFFFF                 <-- eax = 131CA2
:10003554 ret

ASM kodu su sekilde olabilir.


.data

lock_1     dd 18214                        ; Lock Number 1
lock_2     dd 2133512                      ; Lock Number 2
sonuc      db 32h dup(?)                   ; Unlock Code buraya yazilacak
tur        db "%lu",0                      ; long unsigned number

.code

start:

mov ecx, lock_2                            ; ecx = 2133512
sub ecx, 0c7a02h                           ; ecx = 141406h = VolumeInformation’in son 6 basamagi
mov eax, lock_1                            ; eax = 18214
xor eax, ecx                               ; eax = 145320h
xor eax, 074F82h                           ; eax = 131CA2h
and eax, 00FFFFFFh                         ; eax = 131CA2h
add eax, 09Deh                             ; eax = :)

@yaz:
invoke wsprintf, offset sonuc, offset tur, eax
invoke MessageBoxA, 0, offset sonuc, offset sonuc, 0

@cikis:
invoke ExitProcess, 0

end start

 

Son Notlar

Bir programı kullanarak para kazanıyorsanız, programı satın alın.