Senin, 17 Desember 2012

FakeMD5 Encode Decode (YarpCipher Variant)

FakeMD5 Encode Decode (YarpCipher Variant)
Quote:Link Download:
http://sites.com/download/file.php?id=s5z381xjob1ybf9rvu23jcgi3cu5qm93

http://sites.com/downloa/file.php?id=07e4t6s3n8e4c7v481v288qj3tp44mza

Yarp, link diatas hanyalah sebagai contoh ja. Kalo kita perhatikan nilai dari variabel "id" sekilas kita pasti akan menebak itu adalah hash MD5. Sesuai judulnya, nilai dari variabel "id" adalah FakeMD5 alias bukan hash md5 yang sebenarnya. Hash diatas hanyalah untuk mengelabuhi user dari para 'mereka' yang kadang-kadang gak punya kerjaan trus mau iseng. :P

Nilai asli dari variabel "id" sebenarnya adalah sebuah ID biasa yang kita samarkan menjadi string yang mirip dengan md5. Lalu fungsinya buat apa? Macam-macam sih, misalnya path "file.php?id=123" lebih mudah ditebak strukturnya daripada "file.php?id=07e4t6s3n8e4c7v481v288qj3tp44mza" kan? :P

Selain itu, karena cipher ini outputnya kita buat random, sehingga bisa kita gunakan sebagai session download file. Misalnya session "07e4t6s3n8e4c7v481v288qj3tp44mza" berlaku selama 24 jam, setelah lewat dari 24 jam, maka session akan berubah lagi, misalnya menjadi "u71436f3j8t47724r1i28h1m8bysvx3a" dan tetap mengacu pada "id" yang sebenarnya.

Lalu cara kerjanya bagaimana? Perhatikan script dibawah ini:

PHP Code:
    function generateHexa($limit){
        
$hexa=NULL;
        
$chr "abcdefghijklmnopqrstuvqxyz0123456789";
        for(
$i=1;$i<$limit+1;$i++){
            
$rIdx rand(1,strlen($chr));
            
$hexa .=substr($chr,$rIdx,1);
        }
        return 
$hexa;
    }
    function 
fakemd5_encode($str){
        
$len strlen($str);
        
$hex = array(1=>1,2,3,4,5,6,7,8,9,"a","b","c","d","e","f");
        if(
$len>15){
            echo 
jsAlert("Error: String lebih dari 15 karakter!");
            return 
false;    
        } else {
            
$hash NULL;
            
$rand generateHexa(32);
            
$obj strrev($str);
            
$used $len 2;
            
$cover substr($rand,$used,31-$used);
            for(
$i=0;$i<$len;$i++){
                
$hash .= substr($rand,$i ,1).substr($obj,$i,1);
            }
            return 
$hash.$cover.$hex[$len];
        }
    } 

Mari kita buat sebuah kasus, misalnya kita mempunyai id file=135. Dengan menggunakan script diatas, maka "135" akan diubah secara random menjadi

t5y341c9jtd90hs70tryif0uyfsqdfs3

Kalo kita perhatikan sekilas, hash hasil random tidak mencerminkan "id" 135 sama sekali. Tapi kalo kita perhatikan lebih seksama lagi, sebenarnya "id" 135 terdapat di

t[5]y[3]4[1]c9jtd90hs70tryif0uyfsqdfs3

Yarp, cara kerja dari script fakemd5_encode adalah me-reverse "id" kemudian menyisipkan karakter random [0-9a-z] diantara setiap angka. Dan sisanya, mengambil sisa nilai dari hasil $rand = generateHexa(32); untuk melengkapi hash menjadi 32 karakter ala MD5. :P

Kekurangannya tentu saja, inputan "id" tidak boleh lebih dari 15 karakter, jika lebih dari 15, maka jika setiap angka disisipin karakter baru, maka hasilnya akan lebih dari 32. Lalu kenapa 15? dan bukan 16? Bukannya 16 x 2 masih 32? Yarp, karena disini kita akan menggunakan karakter terakhir sebagai penanda untuk nanti kita buatkan fungsi decode.

Maksudnya?

Perhatikan script untuk decode berikut ini:

PHP Code:
    function fakemd5_decode($str){
        
$hex = array(1=>1,2,3,4,5,6,7,8,9,"a","b","c","d","e","f");
        
$len array_search(substr($str,-1,1),$hex);
        
$hash NULL;
        for(
$i=0;$i<$len;$i++){
            
$hash .= substr($str,$i 2+1,1);
        }
        return 
strrev($hash);
    } 

dari setiap inputan yang akan di decode, karakter terakhir kita ambil sebagai inisial untuk mengambil jumlah karakter "id" yang asli. Seperti pada contoh "t5y341c9jtd90hs70tryif0uyfsqdfs[3]" angka [3] merupakan jumlah karakter asli. Karena 135 adalah 3 karakter bukan?

Jadi rumusnya seperti ini:

135 ---> di reverse menjadi 531 lalu disisipi karakter random menjadi x5x3x1 (6 angka), lalu untuk menggenapi 32 karakter, kita menggunakan fungsi ini

$cover = substr($rand,$used,31-$used);

sehingga menjadi x5x3x1xxxxxxxxxxxxxxxxxxxxxxxxx (31 angka) kemudian, karakter terakhir sebagai penanda jumlah asli "id".

Lalu bagaimana jika jumlah karakter adalah 10? Bukannya akan menjadi 33 angka?

Nah, karena kita membutuhkan 1 buah karakter, maka kita gunakan bilangan HEXA sebagai penanda.
$hex = array(1=>1,2,3,4,5,6,7,8,9,"a","b","c","d","e","f");

Kalo "id" ada 10 karakter, ya jadinya karakter terakhir menjadi "a". Begitu. :)

Contoh id ---> 2147483647 (10 karakter)
Hasil Encode ---> y7g4c663d8x46714p1320zjqfrqhlia
Rumus ---> r7r4r6r3r8r4r7r4r1r2rrrrrrrrrrrp
dimana
r = random karakter
p = penanda

Sudah mulai kelihatan kan? :)

Yarp, seperti itulah. Dan semoga dengan FakeMD5 Encode Decode - YarpCipher Variant ini bisa sedikit membuang waktu para 'mereka' yang suka iseng buat membuka situs-situs MD5 Decrypter yang hasilnya gak bakalan sesuai dengan "id" yang sebenarnya hanya sebuah baris simple saja. Heuheu...

./Regards

K4pT3N

Tidak ada komentar:

Posting Komentar