Microm Cari 3.0 ASPack 2.12 ile packlı ve serialle
korunuyor.Programın serialini bulacagız ve bunu hata mesajı yerine yazdıracagız.
ASPack oldugu icin ya unpack yapılması(Peid sorunsuz yapıyor) veya loader
gerekli.İşe başlayalım.
Programı Hide debugger yüklü olldbg de yükleyip çalıştırın.Lisans bölümünde anahtar tuşuna basıp önce anahtar kod üretin.
Lisans kodu yerine 12345678901234567890 yazın. Onayla tusuna basmadan önce Ollydbg ye gecin.Plugins==>
ApiBreak==>ApiBreak==>Point H ye tıklayarak breakpoint koyun.Tekrar programa dönüp onayla tusuna basın. Breakpoint çalıstı.
Şimdi ollydbg de program kod larındayız.
77D5353D F3:A5 REP MOVS DWORD PTR ES:[EDI], DWORD PTR DS:[ESI> ==>Breakpoint burda durdu.
77D5353F 8BC8 MOV ECX, EAX ;F2 ile breakpointi kaldırın.
77D53541 83E1 03 AND ECX, 3 ;Programa dönmek icin ALT+F9 yapın.
77D53544 F3:A4 REP MOVS BYTE PTR ES:[EDI], BYTE PTR DS:[ESI]
77D53546 E8 E3FBFFFF CALL 77D5312E
77D5354B 5F POP EDI
0048C000 89 DB 89 ==>ALT+F9 dan sonra buraya geldik.
0048C001 43 DB 43 ;Ama ASPack 2.12 kodları karıştırıyor.
0048C002 0C DB 0C ;
0048C003 8B DB 8B
0048C004 03 DB 03
0048C005 83F8 0C CMP EAX, 0C
0048C008 75 DB 75
0048C009 1B DB 1B
0048C00A 8B DB 8B
0048C00B 53 DB 53
0048C000 satırında iken CTRL+A yapın. şimdi kodlar gözüküyor.
0048C000 |. 8943 0C MOV DWORD PTR DS:[EBX+C], EAX ===>F8 ile devam.
0048C003 |> 8B03 MOV EAX, DWORD PTR DS:[EBX]
0048C005 |. 83F8 0C CMP EAX, 0C
0048C008 |. 75 1B JNZ SHORT 0048C025
0048C00A |. 8B53 08 MOV EDX, DWORD PTR DS:[EBX+8]
0048C00D |. 52 PUSH EDX ; /Arg1 = 00150608
0048C00E |. 8B4B 04 MOV ECX, DWORD PTR DS:[EBX+4] ; |
0048C011 |. 8BD0 MOV EDX, EAX ; |
0048C013 |. 8BC6 MOV EAX, ESI ; |
0048C015 |. E8 D6B5FFFF CALL 004875F0 ; \MicroCar.004875F0
0048C01A |. EB 09 JMP SHORT 0048C025
0048C01C |> 8BD3 MOV EDX, EBX
0048C01E |. 8BC6 MOV EAX, ESI
0048C020 |. E8 9FCEFFFF CALL 00488EC4
0048C025 |> 5D POP EBP ; 0012FB88
0048C026 |. 5F POP EDI ; 0012FB88
0048C027 |. 5E POP ESI ; 0012FB88
0048C028 |. 5B POP EBX ; 0012FB88
0048C029 \. C3 RETN
00908E5F |. 8D55 FC LEA EDX, [LOCAL.1]
00908E62 |. 8B83 40030000 MOV EAX, DWORD PTR DS:[EBX+340]
00908E68 |. E8 E3EBB7FF CALL 00487A50
00908E6D |. 837D FC 00 CMP [LOCAL.1], 0 ==>Lisans kodu boşmu.
00908E71 |. 74 14 JE SHORT 00908E87 ==>Boş ise mesaj göster
00908E73 |. 8D55 F8 LEA EDX, [LOCAL.2]
00908E76 |. 8B83 3C030000 MOV EAX, DWORD PTR DS:[EBX+33C]
00908E7C |. E8 CFEBB7FF CALL 00487A50
00908E81 |. 837D F8 00 CMP [LOCAL.2], 0 ==>Anahtar kod üretilmiş mi
00908E85 |. 75 0C JNZ SHORT 00908E93 ==>Üretilmiş ise zıpla boş ise mesaj göster
00908E87 |> B8 208F9000 MOV EAX, 00908F20
00908E8C |. E8 A36BB3FF CALL 0043FA34
00908E91 |. EB 5C JMP SHORT 00908EEF
00908E93 |> 8D55 F4 LEA EDX, [LOCAL.3]
00908E96 |. 8B83 40030000 MOV EAX, DWORD PTR DS:[EBX+340]
00908E9C |. E8 AFEBB7FF CALL 00487A50 ==>Keygen
00908EA1 8B55 F4 MOV EDX, DWORD PTR SS:[EBP-C] ==>Sallama serial EDX de
00908EA4 A1 8C609100 MOV EAX, DWORD PTR DS:[91608C] ==>Gerçek serial EAX da
00908EA9 |. E8 6ABBAFFF CALL 00404A18 ==>Karşılastır.
00908EAE |. 74 0C JE SHORT 00908EBC ==>Dogru ise kayıta atla,degilse hata mesajı.
00908EB0 B8 488F9000 MOV EAX, 00908F48 ==>Hata mesajını al."YAZDIĞINIZ ŞİFRE GEÇERSİZ"
00908EB5 |. E8 7A6BB3FF CALL 0043FA34 ==>Hata mesajını göster.
00908EBA |. EB 33 JMP SHORT 00908EEF
00908EBC |> 8B83 6C030000 MOV EAX, DWORD PTR DS:[EBX+36C]
00908EC2 |. 66:BE EBFF MOV SI, 0FFEB
00908EC6 |. E8 DDAAAFFF CALL 004039A8
Bizim şimdi yapacagımız şey,EAX hata mesajını (MOV EAX, 00908F48) almasın,onun yerine gercek seriali alsın.
Gercek serial Eax 'a 00908EA4 satırında DWORD PTR DS:[91608C] memory bölgesinden geliyordu.
ORİJİNAL KOD
00908EB0 B8 48 8F 90 00 MOV EAX, 00908F48
PATCH YAPILINCA
00908EB0 A1 8C 60 91 00 MOV EAX, DWORD PTR DS:[91608C]
Bu şekilde hata mesajı yerine gerçek seriali alıyor.
Peki bu yaptıgımız patch kalıcı yapabilirmiyiz.ASPack oldugu icin programı unpack yapmamız gerekir.Unpacklı dosyada Ollydbg de
yaptıgımız degişiklikleri farklı bir isimle kaydedebiliriz.
Patch lı dosya calışınca
Ama bu unpacklı dosyaya yazmak pek pratik değil.Dosya boyutu büyük ,taşınması zor.Bundan dolayı loader yapacagız.
Dup2 de yazmamız gereken kodlar:
Virtual Address Old Byte New Byte
00908EB0 B8 A1
00908EB1 48 8C
00908EB2 8F 60
00908EB3 90 91
00908EB4 00 00