folder Tahribat.com Forumları
linefolder C - C++
linefolder C - (Visual Basic 6.0) CDO Kullanarak Mail Gönderen Programlarda Mail Adresini&Şifresini Bulmak



C - (Visual Basic 6.0) CDO Kullanarak Mail Gönderen Programlarda Mail Adresini&Şifresini Bulmak

  1. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Fatih54
    Fatih54's avatar
    Kayıt Tarihi: 16/Ağustos/2012
    Erkek

    CDO objesi ile Visual Basic <=6.5 de mail göndermek en çok kullanılan yöntemlerden birisidir. Bu programda Visual Basic 6.0 ile derlenen uygulamalarda yer alan Mail Adresini ve Şifresini size kısa yoldan göstermektedir.

    Yazılan Dil: C
    Derleyici: Tiny C Compiler

    ---

    Visual Basic 6.0 ile yapılan örnek bir program:

    Private Sub Command1_Click()
    'CDO Objesi ile Mail gönderici program
    'Visual Basic 6.0
    'Aşağıdaki gönderici kalıp hazırdır.
    
    Dim iMsg, iConf, Flds
    Set iMsg = CreateObject("CDO.Message")
    Set iConf = CreateObject("CDO.Configuration")
    Set Flds = iConf.Fields
     
    schema = "http://schemas.microsoft.com/cdo/configuration/"
    Flds.Item(schema & "sendusing") = 2
    Flds.Item(schema & "smtpserver") = "SMPT Istemcisi"
    Flds.Item(schema & "smtpserverport") = 465
    Flds.Item(schema & "smtpauthenticate") = 1
    Flds.Item(schema & "sendusername") = "Mail Adresi" 'Mail Adresi
    Flds.Item(schema & "sendpassword") = "Mail Sifresi" 'Mail Şifresi
    Flds.Item(schema & "smtpusessl") = 1
    Flds.Update
     
    '....
    
    End Sub
     

    İşte yaptığım programda burada gözüken "Mail Adresi" ve "Mail Şifresi"ni size gösterir.

    ---

    Mail Adresi ve Şifresinin bulunduğu yerler:

    hex dump:

    Disassembled:

     

    İşte amaç sizi disassemble etme&dump etme derdinden kurtararak kolay yoldan bulmanızı sağlamaktır.

    ===

    Taratmak istediğiniz uygulamayı bu uygulama üstüne sürüklediğinizde tarama işlemi başlayacaktır.

    Argüman belirteçleri eklemeye gerek yoktur.

     

    Programın Adresi: https://dl.dropboxusercontent.com/u/82153398/MailStealer/MailScanner_v1.0.zip


    Boyut: 3.5 KB

    ===

    Programın Kaynak Kodları: (C - TCC ve Windows için optimize edilmiştir)

    /*
    CDO Object E-Mail Stealer
    Fatih54102
    C
    Date: 28.09.2013
    */
    
    #define SURUM "v1.0"
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    typedef unsigned int uint;
    typedef unsigned long ulong;
    typedef unsigned char uchar;
    typedef unsigned long long ulonglong;
    
    #define AYRACN "=================================================\r\n"
    #define AYRAC "================================================="
    
    #ifdef _LINUX //*NIX türevi sistemlerde yeni satira LF ile geçilir. MAC düşünülmemiştir.
    #warning "Satir sonlari ve bazi diger islemler Windows icin optimize edilmistir. Eger bu dosyayi Linux icin derliyorsaniz (CRLF) karakterlerini (LF) olarak degistirin."
    #endif // _LINUX
    
    typedef enum _BOOLEAN //Boolean için tanımlama
    {
    	false, // 0
    	true, // 1
    	False = 0, //0 //Bu ikisi ileride lazım olabilir
    	True, //1
    }bool;
    
    char *DOSYA; //Tüm dosyayı bellekte tutacak.
    
    char *cguvenlik;
    char *DosyaYeri;
    
    char patK/*Kullanıcı Adı Pattern i +'s.m.t.p.a.u.t.h.e.n.t.i.c.a.t.e' */[31] = {0x73,0x00,0x6D,0x00,0x74,0x00,0x70,0x00,0x61,0x00,0x75,0x00,0x74,0x00,0x68,0x00,0x65,0x00,0x6E,0x00,0x74,0x00,0x69,0x00,0x63,0x00,0x61,0x00,0x74,0x00,0x65};
    char patS/*Şifre Pattern i +'s.e.n.d.u.s.e.r.n.a.m.e' */[24] = {0x73,0x00,0x65,0x00,0x6E,0x00,0x64,0x00,0x75,0x00,0x73,0x00,0x65,0x00,0x72,0x00,0x6E,0x00,0x61,0x00,0x6D,0x00,0x65};
    char KAdi[50],KSifre[50]; //50 Karakter yeterli.
    
    uint DOSYABOYUTU;
    
    uint KAAdres; //Kullanıcı adını belirleyen pattern ın bulunduğu offset
    uint SAdres; //Şifreyi belirleyen pattern ın bulunduğu offset
    
    size_t PatAra(uchar *Blok,size_t BUzunluk,uchar BAranacak[],size_t BAUzunluk) //Belirtilen yerde Pattern ı ara
    {
        for(size_t uzunluk = 0;uzunluk<BUzunluk;++uzunluk)
        {
            if(memcmp(&Blok[uzunluk],&BAranacak[0],1) == 0)
            {
                if(memcmp(&Blok[uzunluk],&BAranacak[0],BAUzunluk) == 0) //Bloklar eşit
                {
                    return uzunluk;
                }
            }
        }
        return -1; //Bulamadı
    }
    
    uint AdresBul(char *DosyaYeri)
    {
        FILE *dosya;
        dosya = fopen(DosyaYeri,"rb"); //Dosyayı read ve binary modunda aç.
        fseek(dosya,0,SEEK_END); //Dosya boyutunu almak için sona al.
        DOSYABOYUTU = ftell(dosya);
        DOSYA = (char*)malloc(sizeof(char) * DOSYABOYUTU + 1); //Dinamik olarak okunan dosya boyutunu ayarla
        rewind(dosya); //Tekrar başa al
        fread(DOSYA,DOSYABOYUTU,1,dosya); //Tüm dosyayı aktar
        fclose(dosya);
        free(dosya);
        KAAdres = PatAra(DOSYA,DOSYABOYUTU,patK,sizeof(patK) / sizeof(patK[0]));
        SAdres = PatAra(DOSYA,DOSYABOYUTU,patS,sizeof(patS) / sizeof(patS[0]));
        if((KAAdres == -1) || (SAdres == -1))
        {
            fputs("\r\nTaratilan dosyada e-mail adresi ve/veya sifre bulunamadi.\r\n",stdout);
            getchar();
            exit(EXIT_FAILURE); //Hata
        }
    }
    
    
    int main(int argc,char *argv[])
    {
        cguvenlik = (char*)calloc/*malloc burada olmamalı*/(100,sizeof(char)); //Daha da fazla güvenli
        puts("Simple CDO Object Low Level Mail Address Stealer for Generically Visual Basic 6.0 Compiler");
        snprintf(cguvenlik,50,"Version: %s",SURUM);puts(cguvenlik);
        snprintf(cguvenlik,15,"Fatih54102");puts(cguvenlik);
        puts(AYRAC);
        fputs("\r\n",stdout); //Yeni satır.
        if(argc != 2)
        {
            puts("Dogru Kullanim:\r\n\r\n[MAILSTEALER] <dosyayeri>");
            getchar();
            return -1; //Hata
        }
        DosyaYeri = argv[1]; //Dosya Adresi
        uint BAdres; //Bulunan adres
        BAdres = AdresBul(DosyaYeri);
        //-----
        uint KKOfset,SKOfset; //Kullanici adi,sifre ofset (Mail adresi ve sifresi)
        KKOfset = KAAdres + (sizeof(patK) / sizeof(patK[0]) + 9/*Arada 9 byte daha var*/);
        SKOfset = SAdres + (sizeof(patS) / sizeof(patS[0]) + 8/*Arada 9 byte daha var*/);
        uchar OBelirle = 0;
        KAdi[49] = '\0'; //Overflow olmaması için
        KSifre[49] = '\0'; //Overflow olmaması için
        for(;;++OBelirle)
        {
            if((DOSYA[KKOfset] == '\0') && (DOSYA[KKOfset + 1] == '\0'))
            {
                break;
                //Verinin sonuna ulaşıldı
            }
            KAdi[OBelirle] = DOSYA[KKOfset];
            ++KKOfset;
        }
        for(OBelirle = 0;;++OBelirle)
        {
            if((DOSYA[SKOfset] == '\0') && (DOSYA[SKOfset + 1] == '\0'))
            {
                break;
                //Verinin sonuna ulaşıldı
            }
            KSifre[OBelirle] = DOSYA[SKOfset];
            ++SKOfset;
        }
        uchar ilerletici = 1;
        bool KAdiBitti = false,KSifreBitti = false;
        for(OBelirle = 2;OBelirle < 47;OBelirle = OBelirle + 2) //Aradaki NULL sonlandırıcıları (0x00) temizlemek için
        {
            if((KAdiBitti == true) && (KSifreBitti == true))
                break; //Daha uğraşmaya gerek yok
            if(KAdiBitti == false) {
            if(KAdi[OBelirle] != '\0')
            {
                KAdi[ilerletici] = KAdi[OBelirle];
            }
            else
            {
                KAdi[ilerletici] = '\0';
                KAdiBitti = true;
            }
            }
            if(KSifreBitti == false) {
            if(KSifre[OBelirle] != '\0')
            {
                KSifre[ilerletici] = KSifre[OBelirle];
            }
            else{
                KSifre[ilerletici] = '\0';
                KSifreBitti = true;
            }
            }
            ++ilerletici;
        }
        fputs("\r\n",stdout);
        snprintf(cguvenlik,80,"Bulunan Mail Adresi: \"%s\"\r\nBulunan Mail Adresi Sifresi: \"%s\"\r\n",KAdi,KSifre);puts(cguvenlik);
        getchar();
        //-----
        free(DOSYA);
        free(DosyaYeri);
        free(cguvenlik);
    	return EXIT_SUCCESS;
    }
    

    İsteyen olursa kaç milisaniyede bulundu gibi şeyleri ekleyebilirim..

  2. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Fatih54
    Fatih54's avatar
    Kayıt Tarihi: 16/Ağustos/2012
    Erkek
  3. KısayolKısayol reportŞikayet pmÖzel Mesaj
    nick6
    0x656e
    0x656e's avatar
    Kayıt Tarihi: 19/Mayıs/2012
    Homo

    Güzel proje hocam ah syntax ından biraz anlasaydım python'a çevirmeye çalışırdım :)

  4. KısayolKısayol reportŞikayet pmÖzel Mesaj
    buzukatak
    buzukatak's avatar
    Kayıt Tarihi: 27/Haziran/2010
    Erkek

    Eline sağlık. Sanırım bunu bir araç olsun diye değil öğrenmek için yapıyorsun.

    Eğer öyle ise daha karmaşık senaryoları da ele almanı önereceğim.

    1 - Uygulamada bir den fazla yerde mail gönderiliyor olabilir. Farklı Sub'lar içinde desene uyan başka kullanıcı adı ve parolalar olabilmesi ihtimalini de göz önünde bulundur.

    2 - Kullanıcı adında "domain" olmayabilir. Hal böyle olunca kullanıcı SMTP sunucuyu bulmak için elindeki kullanıcı adı ve parola bir işe yaramadığından ağı izlemek zorunda kalmasın. Smtp sunucuyu da döndürsün. 

    3- Benim bir çok sunucumda SMTP sunucusu standart olmayan portlarda dinleme yapıyor. Ör: 53125. Kullanıcı port taramak zorunda da kalmasın, uygulama port bilgisini de versin.

    4- Aşağıdaki gibi bir uygulamada saçmalamamalı:

    Private Sub Command1_Click()
    'CDO Objesi ile Mail gönderici program
    'Visual Basic 6.0
    'Aşağıdaki gönderici kalıp hazırdır.
    
    Dim iMsg, iConf, Flds
    Set iMsg = CreateObject("CDO.Message")
    Set iConf = CreateObject("CDO.Configuration")
    Set Flds = iConf.Fields
    Dim ErrorMsg
        ErrorMsg = "Giriş bilgilerini kontrol edin. Bunlar : " & _
        "sendusername ve sendpassword alanlarıdır"
        
    schema = "http://schemas.microsoft.com/cdo/configuration/"
    Flds.Item(schema & "sendusing") = 2
    Flds.Item(schema & "smtpserver") = "SMPT Istemcisi"
    Flds.Item(schema & "smtpserverport") = 465
    Flds.Item(schema & "smtpauthenticate") = 1
    Flds.Item(schema & "sendusername") = "kullanıcıadı1" 'Mail Adresi
    Flds.Item(schema & "sendpassword") = "parola1" 'Mail Şifresi
    Flds.Item(schema & "smtpusessl") = 1
    Flds.Update
     
    '....
    If Err <> 0 Then
        MsgBox ErrorMsg
    End If
    
    End Sub




    Kolay gelsin.

    buzukatak tarafından 21/Ara/13 20:42 tarihinde düzenlenmiştir

    anlıyorum.
  5. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Fatih54
    Fatih54's avatar
    Kayıt Tarihi: 16/Ağustos/2012
    Erkek
    buzukatak bunu yazdı

    Eline sağlık. Sanırım bunu bir araç olsun diye değil öğrenmek için yapıyorsun.

    Eğer öyle ise daha karmaşık senaryoları da ele almanı önereceğim.

    1 - Uygulamada bir den fazla yerde mail gönderiliyor olabilir. Farklı Sub'lar içinde desene uyan başka kullanıcı adı ve parolalar olabilmesi ihtimalini de göz önünde bulundur.

    2 - Kullanıcı adında "domain" olmayabilir. Hal böyle olunca kullanıcı SMTP sunucuyu bulmak için elindeki kullanıcı adı ve parola bir işe yaramadığından ağı izlemek zorunda kalmasın. Smtp sunucuyu da döndürsün. 

    3- Benim bir çok sunucumda SMTP sunucusu standart olmayan portlarda dinleme yapıyor. Ör: 53125. Kullanıcı port taramak zorunda da kalmasın, uygulama port bilgisini de versin.

    4- Aşağıdaki gibi bir uygulamada saçmalamamalı:

    Private Sub Command1_Click()
    'CDO Objesi ile Mail gönderici program
    'Visual Basic 6.0
    'Aşağıdaki gönderici kalıp hazırdır.
    
    Dim iMsg, iConf, Flds
    Set iMsg = CreateObject("CDO.Message")
    Set iConf = CreateObject("CDO.Configuration")
    Set Flds = iConf.Fields
    Dim ErrorMsg
        ErrorMsg = "Giriş bilgilerini kontrol edin. Bunlar : " & _
        "sendusername ve sendpassword alanlarıdır"
        
    schema = "http://schemas.microsoft.com/cdo/configuration/"
    Flds.Item(schema & "sendusing") = 2
    Flds.Item(schema & "smtpserver") = "SMPT Istemcisi"
    Flds.Item(schema & "smtpserverport") = 465
    Flds.Item(schema & "smtpauthenticate") = 1
    Flds.Item(schema & "sendusername") = "kullanıcıadı1" 'Mail Adresi
    Flds.Item(schema & "sendpassword") = "parola1" 'Mail Şifresi
    Flds.Item(schema & "smtpusessl") = 1
    Flds.Update
     
    '....
    If Err <> 0 Then
        MsgBox ErrorMsg
    End If
    
    End Sub




    Kolay gelsin.

    Evet öğrenmek için.

    Yorumunda belirttiğin şeyleri okuldan kalan zamanda yapmaya uğraşacağım. Belirttiğin için teşekkürler.

  6. KısayolKısayol reportŞikayet pmÖzel Mesaj
    wh0
    wh0's avatar
    Kayıt Tarihi: 21/Temmuz/2008
    Homo

    bu ne amk. bu kadar hamalliga gerek olmadigini dusunuyorum..bosa zaman kaybetmissin.. zaten malware programcilari genelde cok profesyonel olur.. otomasyonlar, buyuk projeler, kendini asan bir programciyi tatmin etmez adam malware kodlar kendini tatmin eder... emin ol binaryde sifreyi acik yazacak kadar salak degiller.

    tum processlere dll inject api hooking engine ile socketlerden gelen giden trafigi parse ederek giren cikan verileri kolaylikla gorebilirdin.hemde bu kadar ugrasmazdin..

    DLLInjection yapabilmek  icin,OpenProcess, GetProcAddress,LoadLibrary, VirtualAllocEx,WriteProcessMemory,CreateRemoteThread apilerini arastirip ogrenmen ve kolaylikla kullanabilmen gerek.. ha bide CloseHandle :)

    http://jbremer.org/x86-api-hooking-demystified/

    Bu arada, vb6.0 icin, istersen Megasecurity deki eski zararli yazilimlarin isimlerini ogrenip google da arat buluabilirsin. emin ol hicbirinde senin bu yazdigin bu program email ve password u gostermez...(mezarcilarin kodladigi istisnalar disinda)

    en amatoru bile sifreyi once encrypt eder, hash halini programina gomup runtime esnasinda decrypt eder.. yada const tanimlar... :)


    Kolay gelsin,


    🏴‍☠️Hi'dan gelen varır Who'ya, Hi'da onun adıdır Who'da...
  7. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Elif - Efe
    rakkoc
    rakkoc's avatar
    Kayıt Tarihi: 19/Aralık/2003
    Homo
    WH0 bunu yazdı

    bu ne amk. bu kadar hamalliga gerek olmadigini dusunuyorum..bosa zaman kaybetmissin.. zaten malware programcilari genelde cok profesyonel olur.. otomasyonlar, buyuk projeler, kendini asan bir programciyi tatmin etmez adam malware kodlar kendini tatmin eder... emin ol binaryde sifreyi acik yazacak kadar salak degiller.

    tum processlere dll inject api hooking engine ile socketlerden gelen giden trafigi parse ederek giren cikan verileri kolaylikla gorebilirdin.hemde bu kadar ugrasmazdin..

    DLLInjection yapabilmek  icin,OpenProcess, GetProcAddress,LoadLibrary, VirtualAllocEx,WriteProcessMemory,CreateRemoteThread apilerini arastirip ogrenmen ve kolaylikla kullanabilmen gerek.. ha bide CloseHandle :)

    http://jbremer.org/x86-api-hooking-demystified/

    Bu arada, vb6.0 icin, istersen Megasecurity deki eski zararli yazilimlarin isimlerini ogrenip google da arat buluabilirsin. emin ol hicbirinde senin bu yazdigin bu program email ve password u gostermez...(mezarcilarin kodladigi istisnalar disinda)

    en amatoru bile sifreyi once encrypt eder, hash halini programina gomup runtime esnasinda decrypt eder.. yada const tanimlar... :)


    Kolay gelsin,

    bu konuda sormak istedigim bir soru var konuyu dagitmak istemem ama sifrelemede C uzerinde hangi sifreleme metodunu kullaniyorlar ?

    DES veya 3DES ile sifrelenmis ve keyler datanin icinde 2-3 yerde OR isleminden gecmis ise guvenlidir diyebilirmiyim ?

     

    Dip not: Malvare vs giibi bir sey icin degil bir projedeki datalarin sifrelenmesini saglayan C dosyam var. MasterKey altinda datalar duruyor ve Master key TripleDes ile sifrelenip ortaya cikiyor. ortaya masterkey MasterCard'in onerdigi KEK (Key Encryption Key) algoritmasi ile saklaniyor ve KEKin keyide OR ile 3 adimda cikiyor.


    Bu aralar fazla yogunum. Unuttugum seyler oluyorsa affola. DM vs atın.
  8. KısayolKısayol reportŞikayet pmÖzel Mesaj
    Retro
    by_Tet
    by_Tet's avatar
    Kayıt Tarihi: 22/Mayıs/2012
    Erkek
    Edit konu hortlamış....
    by_Tet tarafından 17/Oca/14 11:29 tarihinde düzenlenmiştir

    iyibu! yeniden..
Toplam Hit: 2970 Toplam Mesaj: 8