Backup magic 1.3.1 |
SoftICE
3.24 |
oleh
CHuPaCaBRa
Pengenalan Program |
Ini adalah potongan penjelasan program dari file Readme.txt :
"Backup Magic is a simple and fast backup solution. It doesn't have loads of options, but it includes the most required options to get your backup done fast and easy."
Essay |
Melalui menu Order - Enter License Number, kamu bisa memasukan nama dan s/n yang kamu inginkan :
Nama : CHuPaCaBRa
S/N : 123454321
Pasang BreakPoint di Hmemcpy ( BPX Hmemcpy ) dan setelah menekan tombol OK, kamu bakal terjebak di dalam fungsi Hmemcpy. Dari sini kamu harus menekan F12 sebanyak beberapa kali untuk sampai ke badan program. Pada badan program kamu akan meliat baris - baris seperti ini :
:0046FB41 call 0042B824 ;Hmemcpy :0046FB46 mov eax, dword ptr [ebp-0C] :0046FB49 lea edx, dword ptr [ebp-04]
Liat apa isi register EAX dengan mengetik D EAX
:d eax 017F:00C05EB8 43 48 75 50 61 43 61 42-52 61 00 72 74 34 47 00 CHuPaCaBRa.rt4G.
Pasang BreakPoint di lokasi memory di atas ( BPM 017F:00C05EB8 ). Pada perintah berikutnya, kamu akan berhenti di dalam Rutin Call tersebut, tepat di tempat di mana nama yang kamu inputkan akan dibandingkan dengan 20 hexa ( = '/blank' )
:0046FB4C call 00407C74
:00407C91 cmp byte ptr [edi+ebx-01], 20 ;Checking :00407C96 jbe 00407C8C :00407C98 cmp esi, ebx :00407C9A jge 00407CA6 :00407C9C mov eax, ebp :00407C9E call 00403AC4 :00407CA3 jmp 00407CBC :00407CA5 dec esi :00407CA6 cmp byte ptr [edi+esi-01], 20 ;Checking :00407CAB jbe 00407CA5 :00407CAD push ebp :00407CAE mov ecx, esi :00407CB0 sub ecx, ebx ;ECX = Panjang nama :00407CB2 inc ecx :00407CB3 mov edx, ebx :00407CB5 mov eax, edi :00407CB7 call 00403F44Di dalam Rutin Call di atas, kamu akan kembali terjebak di dalamnya ::00402836 repz :00402837 movsb ;Copy String dari ESI ke EDI :00402838 cld
Karena perintah MOVSB di atas, nama yang telah kamu masukan tadi akan di-copy ke lokasi lain, tepatnya ke lokasi yang ditunjuk oleh Register EDI. Cek lokasi tersebut dengan mengetikkan perintah D EDI
:d edi 017F:00C05ECF 00 43 48 75 50 61 43 61-42 52 61 00 6E 74 34 47 .CHuPaCaBRa.nt4G
Lokasi memory di atas ngak merujuk langsung ke Nama kita ( perhatikan adanya satu titik di depan tulisan CHuPaCaBRa ), karena itu kamu harus menambahkan satu hexa untuk merujuk langsung ke Nama
:d edi+1 017F:00C05ED0 43 48 75 50 61 43 61 42-52 61 00 6E 74 34 47 00 CHuPaCaBRa.nt4G.
Perhatikan bahwa sekarang lokasi memory tersebut tepat berada pada nama kita, barulah sekarang kamu bisa memasang BreakPoint di lokasi memory tersebut ( BPM 017F:00C05ED0 ) Baris - baris perintah berikutnya akan membawa kamu kembali ke Rutin Call pemanggil tadi dan kamu bakal ketemu dengan :
:0046FB51 lea edx, dword ptr [ebp-0C] :0046FB54 mov eax, dword ptr [00471EBC] :0046FB59 mov eax, dword ptr [eax] :0046FB5B mov eax, dword ptr [eax+000002DC] :0046FB61 call 0042B824 ;Hmemcpy :0046FB66 mov eax, dword ptr [ebp-0C] :0046FB69 lea edx, dword ptr [ebp-08]
Liat isi EAX dan pasang BreakPoint di situ :
:d eax 017F:00C05EE8 31 32 33 34 35 34 33 32-31 00 61 70 74 34 47 00 123454321.apt4G.
Langkah - langkah berikutnya sama persis dengan yang telah aku tulis di atas :
:0046FB6C call 00407C74 ;Rutin Call yang sama :0046FB71 mov cx, 0295 :0046FB75 mov edx, dword ptr [ebp-08] ;EDX = '123454321' :0046FB78 mov eax, dword ptr [ebp-04] ;EAX = 'CHuPaCaBRa' :0046FB7B call 0044C5A0 ;Rutin Call yang penting
Karena tadi kamu udah pasang BreakPoint di lokasi memory yang menyimpan Nama dan S/N yang kamu masukin, maka kamu akan langsung berhenti di baris - baris perintah yang mengakses Nama untuk membuat s/n yang valid :
:0044C520 mov eax, 00000001 ;EAX = 01
:0044C525 xor ecx, ecx ;ECX = 00 :0044C527 mov cl, byte ptr [esi+eax-01] ;CL = Karakter dari Nama :0044C52B add ecx, eax ;ECX = ECX + EAX :0044C52D movzx edi, word ptr [ebp-02] ;EDI = 295h = 661 decimal :0044C531 imul ecx, edi ;ECX = ECX * EDI :0044C534 imul ecx, 000000B2 ;ECX = ECX * B2h :0044C53A add ebx, ecx ;EBX = EBX + ECX :0044C53C inc eax ;EAX = EAX + 1 :0044C53D dec edx :0044C53E jne 0044C525 ;Looping
Setelah keluar dari looping tersebut, perhatikan nilai EBX :
:? ebx 064A669A 0105539226 "Jf"
:0044C540 mov eax, dword ptr [ebp-08] :0044C543 push eax :0044C544 lea eax, dword ptr [ebp-0C] :0044C547 push eax :0044C548 mov dword ptr [ebp-14], ebx ;[EBP-14] = EBX :0044C54B mov [ebp-10], 00 :0044C54F lea edx, dword ptr [ebp-14] :0044C552 xor ecx, ecx :0044C554 mov eax, 0044C59C :0044C559 call 00408C70 :0044C55E mov eax, dword ptr [ebp-0C]
Cek isi Register EAX :
:d eax 017F:00C05F00 31 30 35 35 33 39 32 32-36 38 00 73 74 34 47 00 1055392268.st4G.
Bisa kamu liat di atas, s/n yang tadi masih berupa angka decimal telah diubah menjadi karakter ASCII yang siap dibandingkan dengan s/n yang tadi sudah kita masukan. Tapi apakah angka di atas adalah s/n yang valid untuk namaku ??? Ternyata tidak. Telusuri terus perintah - perintah selanjutnya dan kamu akan ketemu dengan baris - baris perintah ini :
:0044C5CB call 0044C4EC :0044C5D0 mov eax, dword ptr [ebp-04]
Sama dengan langkah di atas, cek kembali isi Register EAX :
:d eax 017F:00C05F18 31 30 35 35 33 39 32 32-00 61 6E 64 74 34 47 00 10553922.andt4G.
Sekarang baru terlihat bahwa ternyata, s/n yang valid hanya memiliki panjang 8 karakter. Berikutnya, s/n tersebut akan dibandingkan dengan s/n yang tadi kita masukan. Untuk menyingkat tutorial ini, aku ngak menunjukkan perbandingan yang dilakukan, kamu bisa melakukannya sendiri sebagai latihan :-)
K R A K |
Listing KeyGenZ untuk Backup Magic 1.3.1
#include <string.h>
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
void main()
{
unsigned long EAX=1,EDI=661,ECX=0,EBX= 0, Counter;
char Nama[30];
clrscr();
textcolor(10);
cputs(">>>>>>>>>>>>>>><<<<<<<<<<<<<<<\r\n");
cputs(">> <<\r\n");
cputs(">> Backup Magic 1.3.1 <<\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);
for ( Counter = 0; Counter < strlen(Nama);Counter++)
{
ECX = Nama[Counter];
ECX = ECX + EAX;
ECX = ECX * EDI;
ECX = ECX * 178;
EBX = EBX + ECX;
EAX++;
}
EBX = EBX / 10;
cprintf ( "S/N Anda : ");
cprintf("%ld",EBX);
puts("");
}
Catatan |
NOP .... :-)
© Juni1999