Uninstall Manager 3.00 |
SoftICE
3.24 |
oleh
CHuPaCaBRa
Pengenalan Program |
Uninstall Manager adalah sebuah program utility yang berguna untuk meng-uninstall program - program yang sudah ngak kamu butuhkan lagi, dengan aman.
Program ini memberi kesempatan pada User untuk mencoba dalam jangka waktu 30 hari dan apabila User telah membeli Serial Number dengan legal maka User tersebut dapat memasukan nama dan serial number-nya di tempat yang telah disediakan.
Essay |
Seperti biasa, aku memasukan nama dan s/n seperti ini :
Registration Name : CHuPaCaBRa Registration Key : 123454321
Program ini menggunakan fungsi Hmemcpy untuk mengambil nama dan s/n yang dimasukan oleh User. Karena itu setelah memasang BreakPoint di Hmemcpy, kamu akan terlempar ke dalam fungsi Hmemcpy. Karena bukan ini yang kita cari, maka tekan F12 selama beberapa kali ( ± 12 kali ) dan kamu akan "mendarat" di sini :
:0047A9F3 call 00430E68 ;Hmemcpy :0047A9F8 cmp dword ptr [ebp-0C], 00000000
Apa yang dibandingkan pada perintah CMP ( Compare ) di atas ??? Untuk mengetahuinya, ketik D *( EBP-0C ) dan liat hasilnya, seperti di bawah ini :
:d *(ebp-0c) 017F:01AA3A34 43 48 75 50 61 43 61 42-52 61 00 00 3A 00 00 00 CHuPaCaBRa..:...
Ternyata perintah CMP di atas, digunakan untuk memastikan bahwa User telah memasukan nama pada kotak Registration Name. Pasang BreakPoint di lokasi memory tersebut dengan mengetik BPM 017F:01AA3A34. Lanjutkan ke baris perintah berikutnya dengan menekan tombol F10 :
:0047A9FC je 0047AA15 :0047A9FE lea edx, dword ptr [ebp-10] :0047AA01 mov eax, dword ptr [ebp-04] :0047AA04 mov eax, dword ptr [eax+000002F8] :0047AA0A call 00430E68 ;Hmemcpy :0047AA0F cmp dword ptr [ebp-10], 00000000
Gunakan cara yang sama untuk meliat isi [EBP-10] :
:d *(ebp-10) 017F:01AA2D1C 31 32 33 34 35 34 33 32-31 00 A9 01 28 2D AA 01 123454321...(-..
Pasang lagi BreakPoint di lokasi memory tersebut ( BPM 017F:01AA2D1C )
:0047AA13 jne 0047AA27 :0047AA15 mov eax, dword ptr [ebp-04] :0047AA18 mov dword ptr [ebx+0000022C], 00000002 :0047AA22 jmp 0047AD61 :0047AA27 mov eax, dword ptr [ebp-04] :0047AA2A call 0047A380
Pada saat kamu menekan F10 untuk melewati Rutin Call di atas, akmu akan kembali terjebak ke dalam fungsi Hmemcpy dan setelah menekan F12 sebanyak 12 kali, kamu akan berhadapan dengan baris - baris perintah seperti ini :
:0047A3A7 call 00430E68 ;Hmemcpy :0047A3AC cmp dword ptr [ebp-0C], 00000000 ;[EBP-0C] = "CHuPaCaBRa" :0047A3B0 je 0047A430 :0047A3B2 lea edx, dword ptr [ebp-04] :0047A3B5 mov eax, dword ptr [esi+000002F4] :0047A3BB call 00430E68 ;Hmemcpy :0047A3C0 mov eax, dword ptr [ebp-04] ;[EBP-04] = "CHuPaCaBRa" :0047A3C3 call 00403E94 :0047A3C8 mov edi, eax :0047A3CA lea edx, dword ptr [ebp-10] :0047A3CD mov eax, dword ptr [ebp-04]
:0047A3D0 call 004085BC
Pada Ruin Call di Offset 0047A3C3, semua huruf yang ada di dalam nama yang kita masukan, akan dirubah menjadi huruf kecil. Berikut ini adalah potongan program yang ada di dalam Rutin Call tersebut :
:004085DD mov al, byte ptr [edx] ;AL = Karakter dari Nama :004085DF cmp al, 41 ;Apakah AL < 41h (= 'A') ??? :004085E1 jb 004085E9 :004085E3 cmp al, 5A ;Apakah AL > 5Ah (= 'Z') ??? :004085E5 ja 004085E9 :004085E7 add al, 20 ;AL = AL + 20h :004085E9 mov byte ptr [esi], al ;[ESI] = AL :004085EB inc edx :004085EC inc esi :004085ED dec ebx :004085EE test ebx, ebx :004085F0 jne 004085DD
Pada saat kita keluar dari Rutin Call tersebut, nama kita akan disimpan ke dalam Register EDX :
:0047A3D5 mov edx, dword ptr [ebp-10]
Periksa isi EDX dengan mengetik D EDX :
:d edx 017F:01AA292C 63 68 75 70 61 63 61 62-72 61 00 01 38 29 AA 01 chupacabra..8)..
:0047A3D8 lea eax, dword ptr [ebp-04] :0047A3DB call 00403CB0 :0047A3E0 xor ebx, ebx :0047A3E2 test edi, edi :0047A3E4 jle 0047A406 :0047A3E6 mov eax, 00000001
Perhatikan perintah - perintah berikutnya, perintah - perintah ini yang akan membentuk s/n :
:0047A3EB mov edx, dword ptr [ebp-04] ;EDX = "chupacabra" :0047A3EE mov dl, byte ptr [edx+eax-01] ;DL = Karakter dari Nama :0047A3F2 cmp dl, 20 ;Bandingkan DL dengan 20h :0047A3F5 je 0047A402 :0047A3F7 mov ecx, dword ptr [ebp-04] ;ECX = "chupacabra" :0047A3FA and edx, 000000FF ;EDX = EDX and 000000FFh :0047A400 add ebx, edx ;EBX = EBX + EDX :0047A402 inc eax :0047A403 dec edi :0047A404 jne 0047A3EB ;Looping
:0047A406 xor ebx, 00000089 ;EBX = EBX xor 00000089h :0047A40C xor ebx, 00000033 ;EBX = EBX xor 00000033h :0047A40F inc ebx ;EBX = EBX + 1
Dari baris - baris perintah di atas, kita bisa liat bahwa setiap karakter dari nama kita akan dijumlahkan ( Offset 0047A400 ), lalu setelah semua karakter sudah dijumlahkan, hasilnya akan di XOR dengan 89 hexa ( Offset 0047A406 ) dan kemudian di XOR kembali dengan bilangan 33 hexa ( Offset 0047A40C ) dan akhirnya nilai yang dihasilkan tadi dijumlahkan dengan 1 ( Offset 0047A40F ). Periksa berapa nilai EBX :
:? ebx 000004B1 0000001201 "±"
:0047A410 lea edx, dword ptr [ebp-08] :0047A413 mov eax, dword ptr [esi+000002F8] :0047A419 call 00430E68 ;Hmemcpy :0047A41E mov eax, dword ptr [ebp-08] ;EAX = '123454321' :0047A421 call 00408914 :0047A426 cmp ebx, eax
Rutin Call di Offset 0047A421 bertugas untuk merubah s/n yang kita masukan, dari karakter ASCII menjadi bilangan Decimal. Pada Offset 0047A426 dilakukan perbandingan antara 2 buah register, periksa nilai dari 2 Register tersebut :
:? ebx 000004B1 0000001201 "±" ==> S/N yang valid :? eax 075BC371 0123454321 "[Ãq" ==> S/N yang kita masukan
Masukan s/n yang valid dan....kraked :-)
K R A K |
Listing KeyGen untuk Uninstall Manager 3.00
#include <string.h>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
void main()
{
unsigned long EBX= 0, Counter;
char Nama[30];
clrscr();
textcolor(10);
cputs(">>>>>>>>>>>>>>><<<<<<<<<<<<<<<\r\n");
cputs(">> <<\r\n");
cputs(">> Uninstall Manager 3.00 <<\r\n");
cputs(">> <<\r\n");
cputs(">> Kraked by CHuPaCaBRa <<\r\n");
cputs(">> http://chupa.cjb.net <<\r\n");
cputs(">> <<\r\n");
cputs(">>>>>>>>>>>>>>><<<<<<<<<<<<<<<\r\n");
puts("");
puts("");
textcolor(11);
cprintf("Masukan Nama Anda : ");
gets(Nama);
strlwr(Nama);
for ( Counter = 0; Counter <= strlen(Nama);Counter++)
EBX = EBX + Nama[Counter];
EBX = EBX ^ 0x89;
EBX = EBX ^ 0x33;
EBX++;
cprintf ( "S/N Anda : ");
cprintf("%ld",EBX);
puts("");
}
Catatan |
Tidak ada catatan khusus untuk program ini, sistem proteksi yang digunakan ngak terlalu rumit......
© Juni1999