Để unpack bạn load UnPECompact lên, browse chọn file, sau đó chờ chương trình làm và điền tên file unpacked để save…Ở đây Zombie để save với tên unpacked.exe size 1,477,379 bytes.. Bây
Trang 1Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)
Printable Version of Topic
Click here to view this topic in its original format
HVA Forum > Box thảo luận Reverse Engeneering, tutorial Reverse Engeneering > www.magictweak.com
Posted by: Zombie Dec 16 2003, 07:45 PM
QUOTE
Production: Magic Utilities 2003 Version 2.31
Homepage: http://www.magictweak.com
Download: http://www.magictweak.com/download/mgutil.exe
Protector: Name/Serials
Packed: PECompact 1.68 - 1.84 -> Jeremy Collake
Tools: OllyDbg 1.09d + PEiD 0.91 (Detect Packer) + UnPECompact 1.32
(Unpacker)
Done: Get Correct Serials ( If you want can make keygen with it)
Cracked by: Zombie DeathMan
Intro: Magic Utilities is a cute program designed to make your computer
clean and more stable.These utilities include Uninstller Plus,StartUp
Organizer,Process Killer.Magic Utilities enables you to easily and safely uninstall programs;inspect and manage the programs that automatically start when you turn on or logon to your computer;list and control all currently running processes(system and hidden processes are also shown).With a cool and user-friendly interface makes it easy for anyone to use Magic Utilities
Trang 2Sau khi install chương trình xong…Bạn sử dụng PEiD để load nó lên và được packed bằng PECompact 1.68 - 1.84 -> Jeremy Collake
Như vậy cần unpack trước khi tiến hành crack Tool unpacker ở đây dùng là
UnPECompact 1.32 (có thể download tại http://www.protools.cjb.net) Để unpack bạn load UnPECompact lên, browse chọn file, sau đó chờ chương trình làm và điền
tên file unpacked để save…Ở đây Zombie để save với tên unpacked.exe (size
1,477,379 bytes) Nếu muốn bạn có thể dùng PEiD lần nữa để biết chương trình
code bằng ngôn ngữ gì, kết quả là Microsoft Visual C++ 6.0
Xong Đã qua bước đầu Bây giờ thì tiến hành crack…Load Olly lên, mở chương trình Magic Utilities ra….Cứ F9, run thử xem cách thức register của chương trình này ra sao…
Thấy rồi, một hộp thoại nhập Name/Serials Ở đây bạn cứ điền fake vào Giả sử Zombie điền: User: Zombie – Registration Code: 12345 Nhấn Ok
Bạn sẽ nhận được hộp thoại thông báo “Thank you….” Uh! Như vậy có thể nhận
ra rằng ở đây Magic Utilities dùng cơ chế lưu lại thông tin register và dùng nó check khi load chương trình chứ không xử lý ngay tại hộp thoại Tạm đủ thông tin…Exit Olly cái đã
Ok Vậy bây giờ cần tìm ra nó lưu thông tin đăng kí ở đâu?
1 Registry? hmm Bạn dùng RegShot (http://regshot.yeah.net) để capture lại Registry trước lần thứ 1 Sau đó chạy Magic Utilities (chạy bình thường không phải trong Olly) và nhập lại với thông số khác (Chẳng hạn bây giờ User: HVA Cracker – Registration Code: 67890) > Chương trình exit xong, Capture Registry lại lần nữa > Bây giờ Compare 2 lần capture vừa rồi > nothing change Vậy không phải là trong Registry rồi
2 Như vậy chắc là KeyFile…But Biết KeyFile nào?
Quay về với Olly để tìm hiểu xem sao…
Bạn có để ý rằng cái MessageBox báo Thank you…Có vẻ giống MessageBox của Windows > Vậy có lẽ ở đây dùng hàm MessageBoxA để gọi nó này > Set bpx MessageBoxA Set bp xong F9 run, điền các thông số (Zombie – 12345)
Trang 3Ok…Yeah!
Pause
CODE
004676AB |> \8B4E 1C MOV ECX,DWORD PTR DS:[ESI+1C]
004676AE |> FF7424 10 PUSH DWORD PTR SS:[ESP+10] ; /Style
004676B2 | 50 PUSH EAX ; |Title
004676B3 | FF7424 10 PUSH DWORD PTR SS:[ESP+10] ;
|Text
004676B7 | 51 PUSH ECX ; |hOwner
004676B8 | FF15 2C154800 CALL DWORD PTR
DS:[<&USER32.MessageBoxA>>; \MessageBoxA
> Paused here
Bắt đầu từ đây ta nhấn F8 để trace dần dần xem nó lưu thông tin Register thế nào…Sau lần nhấn F8 đầu tiên, MessageBox hiện lên, Ok để tiếp tục Cứ trace trace đến
CODE
00438CEF 8B86 7C100000 MOV EAX,DWORD PTR DS:[ESI+107C] 00438CF5 8B3D 34124800 MOV EDI,DWORD PTR
DS:[<&KERNEL32.WritePr>; kernel32.WritePrivateProfileStringA
00438CFB 68 60894900 PUSH unpacked.00498960 ;
/FileName = "mgutil_win.ini"
Trang 400438D00 50 PUSH EAX ; |String
00438D01 68 54894900 PUSH unpacked.00498954 ; |Key =
"UserName"
00438D06 68 50894900 PUSH unpacked.00498950 ; |Section
= "REG"
00438D0B FFD7 CALL EDI ;
\WritePrivateProfileStringA
00438D0D 8B86 78100000 MOV EAX,DWORD PTR DS:[ESI+1078] 00438D13 68 60894900 PUSH unpacked.00498960 ;
/FileName = "mgutil_win.ini"
00438D18 50 PUSH EAX ; |String
00438D19 68 48894900 PUSH unpacked.00498948 ; |Key =
"RegCode"
00438D1E 68 50894900 PUSH unpacked.00498950 ; |Section
= "REG"
00438D23 FFD7 CALL EDI ;
\WritePrivateProfileStringA
Đến đây thì khá rõ ràng rồi…Thông tin register được lưu ở file mgutil_win.ini bằng các hàm APIs truy cập INI file….Done Nhấn F9 để nó run luôn và exit chương trình…
Reload lại…Search text để tìm string “mgutil_win.ini”…Bạn sẽ tìm được ở Addr
00420306 Set bp ở đây
Run…and pause …
CODE
00420306 68 60894900 PUSH unpacked.00498960 ; ASCII
Trang 5"mgutil_win.ini"
> Paused here
0042030B 8D9424 540100>LEA EDX,DWORD PTR SS:[ESP+154]
00420312 6A 28 PUSH 28
00420314 52 PUSH EDX
00420315 68 14E54900 PUSH unpacked.0049E514
0042031A 68 54894900 PUSH unpacked.00498954 ; ASCII
"UserName"
0042031F 68 50894900 PUSH unpacked.00498950 ; ASCII
"REG"
00420324 C68424 CC7E00>MOV BYTE PTR SS:[ESP+7ECC],0D 0042032C FFD7 CALL EDI
0042032E 8BD8 MOV EBX,EAX
00420330 68 60894900 PUSH unpacked.00498960 ; ASCII
"mgutil_win.ini"
00420335 8D8424 B40000>LEA EAX,DWORD PTR SS:[ESP+B4] 0042033C 6A 28 PUSH 28
0042033E 50 PUSH EAX
0042033F 68 14E54900 PUSH unpacked.0049E514
00420344 68 48894900 PUSH unpacked.00498948 ; ASCII
"RegCode"
00420349 68 50894900 PUSH unpacked.00498950 ; ASCII
"REG"
0042034E FFD7 CALL EDI
Ở đây là các lệnh nhằm đọc thông tin từ Ini File….Từ đây bạn tiếp tục F8 trace…đến
CODE
Trang 600420384 50 PUSH EAX ; /Arg2 = 0012810C ASCII "12345"
00420385 51 PUSH ECX ; |Arg1
00420386 8BCD MOV ECX,EBP ; |
00420388 E8 33110000 CALL unpacked.004214C0 ;
\unpacked.004214C0
0042038D 85C0 TEST EAX,EAX
0042038F 74 0F JE SHORT unpacked.004203A0
Hm Ở đây nhận PUSH Serials, Name để làm đối số cho lệnh CALL và sau CALL lại có lệnnh JE > Phải chăng đây là hàm check Serials?
Khi trace vào đây (nhấn F7 để step into) bạn sẽ thấy nó check fake Serials với
112720 (có thể ở mấy bạn cho số khác Zombie, not sure)… > Correct Serials =
112720 ? Cứ thử đi nope …hih Trace hết (F8) cho về lại main
Tiếp tục trace đến…
CODE
004203B3 52 PUSH EDX
004203B4 E8 67140000 CALL unpacked.00421820
004203B9 85C0 TEST EAX,EAX
004203BB 0F85 EE010000 JNZ unpacked.004205AF
Ở đây cũng lại PUSH EDX (EDX hiện chứa Serials)…Step Into thử xem sao
Trang 7CODE
…
00421880 | BF 9CA54900 MOV EDI,unpacked.0049A59C ; ASCII
"9GDDCCG9,39DGCFG9,9F9DG29C,D9G2G4FE,E4ECDCGE,643C2E39,CCG 9D44E,X4G9634W,GG2D9GEX,EE2999DC,9A32FEED,GG92ED4D,9G399GC C,GG2DE99G,C4D9DE9G,4F4DDDDE,D9E92E32,DE3G63GG,GDDWCDEC, 2966EDDG,ACDDGF36,EFC4F2G2,DG9E44G9,D2FDGGGD,6GG29ECD,G36 GE9GC,G3D"
…
004218AA | BF BC9D4900 MOV EDI,unpacked.00499DBC ; ASCII
"EL4ICGE4,GFA4CGGB,E6GLGGAC,DFG6D6LF,E4CGECAA,CADCGGG4, FDLDGDDG,B6GA5FBB,GAFCLG6A,GFAL6LLC,75T48Y5Y,DFDFDDGL,C EEFD4D4,BCGDGGGL,G64A3G6L,6DGGDCLG,G4LZCZ5F,CDCA666A,6D DADFEG,GDLFEDLA,CFL6GLEG,GLCLD6BG,6C6EG4C6,G6CFGGCF,37T4 48Q4,GC6FC4D4,G44"
…
Why? Sao lại có một loạt dãy số này vậy? Check thử một trong các số trên xem > Correct Seriasl…
Done…
Nói thêm chút…Cách khác để khỏi mất thời gian trace vào từng lệnh CALL: Bạn chỉ việc nhấn F8 trace qua các lệnh CALL cho đến khi thấy chương trình run hoàn toàn và hiện thông báo nhập register…
CODE
Trang 8004203B4 E8 67140000 CALL unpacked.00421820
004203B9 85C0 TEST EAX,EAX
004203BB 0F85 EE010000 JNZ unpacked.004205AF
004203C1 50 PUSH EAX
004203C2 8D8C24 740C00>LEA ECX,DWORD PTR SS:[ESP+C74]
004203C9 A3 3CE64900 MOV DWORD PTR DS:[49E63C],EAX
004203CE E8 DD7F0100 CALL unpacked.004383B0
004203D3 8D8C24 700C00>LEA ECX,DWORD PTR SS:[ESP+C70]
004203DA C68424 B47E00>MOV BYTE PTR SS:[ESP+7EB4],0E
004203E2 E8 19A10400 CALL unpacked.0046A500
> Chương trình sẽ run hoàn toàn sau lệnh CALL này
Quan sát chút sẽ thấy sau lệnh CALL ở 004203B4 là JNZ nhảy khỏi lệnh CALL hiển thị thông báo nhập Register…Vậy xác suất cao nó là lệnh check Serials…
QUOTE
Registered
Name: Zombie
Registration Code: EL4ICGE4
Kết luận: Như vậy Magic Utilities sử dụng check trên danh sách Serials lưu sẵn chứ không phải dùng thuật nào để tạo Serials ứng với từng Name…
Muốn code keygen bạn chỉ cần…Lấy danh sách này về…Mỗi lần nhập Name vào thì rnd trên danh sách này
Hix…Do bài Magic Utilities này Zombie lấy làm bài Mod’s Tutorial nên viết dông dài…
Trang 9Hai Soft sau viết…vài dòng thui…hehe…
Production: MagicTweak Version 2.70 + Privacy Inspector Version 1.51
Homepage: http://www.magictweak.com
Thường cùng hãng thì cách protect na ná nhau cho các Softwares…
1 Với MagicTweak bạn tìm đến string “mgwin.ini” ở
0044ACCF 68 38114D00 PUSH unpacked.004D1138 ; ASCII "mgwin.ini"
và cũng cứ trace đến
0044AD7C 50 PUSH EAX
0044AD7D E8 1E0D0000 CALL unpacked.0044BAA0
> F7 để step into vào vào lấy Serials
0044AD82 85C0 TEST EAX,EAX
0044AD84 0F85 3D020000 JNZ unpacked.0044AFC7
Đơn cử ra cho thằng này:
Name: Zombie
Registration Code: 8GDDEEG0
2 Privacy Inspector thì
004372FF 68 5C614900 PUSH unpacked.0049615C ; ASCII "privacy_win.ini"
…
trace đến
004373AC 50 PUSH EAX
004373AD E8 3E0D0000 CALL unpacked.004380F0
> F7 để step into vào vào lấy Serials
004373B2 85C0 TEST EAX,EAX
004373B4 0F85 3D020000 JNZ unpacked.004375F7
Đơn cử ra cho thằng này:
Name: Zombie
Trang 10Registration Code: 3BGDAEE0
-
Ặc ặc…hãng MagicTweak này có đúng 3 cái softwares này thui…Coi như ta quýnh sập tiệm họ gùi
Phù….Zombie đi ngủ đây hix Posted xong tuts này cũng là gần 3h rùi
Hix…Đọc vài reply trong HVA thấy khó chịu quá nên ngồi crack luôn…