SpareNet Servers Advertising & Link Exchange

اطلاعیه

بستن
هیچ اطلاعیه ای هنوز ایجاد نشده است .

How to create Wlan password dumper AND decoder

بستن
X
 
  • فیلتر
  • زمان
  • نمایش
پاک کردن همه
نوشته‌های جدید

  • How to create Wlan password dumper AND decoder

    شاید بار ها و بارها برنامه های مختلفی رو برای اینکار دیده باشید به عنوان مثال ۲ برنامه ی زیر از معروف ترین آنها هستند .[align=left]http://www.nirsoft.net/utils/wireless_key.html
    http://securityxploded.com/wifi-password-decryptor.php[/align]اما این برنامه ها چگونه نوشته می شوند ؟
    بعد از وارد کردن پسورد WIFI و ورود به آن تمامی آن پسورد ها در داخل فایل هایی با پسورد XML در داخل پوشه ی زیر ذخیره می شوند
    کد:
    C:\ProgramData\Microsoft\Wlansvc\Profiles\Interfac
    در این فایل ها مشخصات هر WiFi نیز آورده شده محتویات این فایل ها به شکل زیر می باشد .[align=left] [/align] [align=left]
    کد:
    <?xml version=”1.0″?>
    <WLANProfile xmlns=”http://www.microsoft.com/networking/WLAN/profile/v1″>
    <name>Cisco</name>
    <SSIDConfig>
    <SSID>
    <hex>436998736F3236312338</hex>
    <name>Cisco</name>
    </SSID>
    </SSIDConfig>
    <connectionType>ESS</connectionType>
    <connectionMode>auto</connectionMode>
    <MSM>
    <security>
    <authEncryption>
    <authentication>WPA2PSK</authentication>
    <encryption>AES</encryption>
    <useOneX>false</useOneX>
    </authEncryption>
    <sharedKey>
    <keyType>passPhrase</keyType>
    <protected>true</protected>
    <keyMaterial>[color=#ff0000]0907A788C15949A010C2B54654f555dfg5666d6fg85858jh521f3[/color]</keyMaterial>
    </sharedKey>
    </security>
    </MSM>
    </WLANProfile>
    [/align]همون طور که میبینید اطلاعاتی را می توان از طریق این XML فایل ها در مورد یک WiFi بدست آورد مانند Name , connectionType , connectionMode , authentication و … اما بحث اصلی در مورد
    مقدار keyMaterial است که همان پسورد ما بوده منتها به صورت رمزنگاری شده است.
    طریقه ی رمز نگاری با استفاده از تابع CryptProtectData انجام شده به شکل زیر


    کد:
    [color=#00ff00]//[/color] Encrypt data from DATA_BLOB DataIn to DATA_BLOB DataOut.
    [color=#00ff00]//[/color]--------------------------------------------------------------------
    [color=#00ff00]//[/color] Declare and initialize variables.
    DATA_BLOB DataIn;
    DATA_BLOB DataOut;
    BYTE *pbDataInput =(BYTE *)"Hello world of data protection.";
    DWORD cbDataInput = strlen((char *)pbDataInput)+1;
    [color=#00ff00]//[/color]--------------------------------------------------------------------
    [color=#00ff00]//[/color] Initialize the DataIn structure.
    DataIn.pbData = pbDataInput;
    DataIn.cbData = cbDataInput;
    [color=#00ff00]//[/color]--------------------------------------------------------------------
    [color=#00ff00]//[/color] Begin protect phase. Note that the encryption key is created
    [color=#00ff00]//[/color] by the function and is not passed.
    if(CryptProtectData(
    &DataIn,
    L"This is the description string.", [color=#00ff00]//[/color] A description string
    [color=#00ff00]//[/color] to be included with the
    [color=#00ff00]//[/color] encrypted data.
    NULL, // Optional entropy not used.
    NULL,[color=#00ff00] //[/color] Reserved.
    NULL,[color=#00ff00] //[/color] Pass NULL for the
    [color=#00ff00]//[/color] prompt structure.
    ۰,
    &DataOut))
    {
    printf("The encryption phase worked.\n");
    }
    else
    {
    printf("Encryption error using CryptProtectData.\n");
    exit(1);
    }
    پس ما باید جهت decrypt کردن آن از تابع CryptUnprotectData استفاده کنیم .


    کد:
    [color=#00ff00]//[/color] Decrypt data from DATA_BLOB DataOut to DATA_BLOB DataVerify.
    [color=#00ff00]//[/color]--------------------------------------------------------------------
    [color=#00ff00]//[/color] Declare and initialize variables.
    DATA_BLOB DataOut;
    DATA_BLOB DataVerify;
    LPWSTR pDescrOut = NULL;
    [color=#00ff00]//[/color]--------------------------------------------------------------------
    [color=#00ff00]//[/color] The buffer DataOut would be created using the CryptProtectData
    [color=#00ff00]//[/color] function. If may have been read in from a file.
    [color=#00ff00]//[/color]--------------------------------------------------------------------
    [color=#00ff00]// [/color]Begin unprotect phase.
    if (CryptUnprotectData(
    &DataOut,
    &pDescrOut,
    NULL, [color=#00ff00]//[/color] Optional entropy
    NULL, [color=#00ff00]//[/color] Reserved
    NULL, [color=#00ff00]//[/color] Here, the optional
    [color=#00ff00]//[/color] prompt structure is not
    [color=#00ff00]//[/color] used.
    ۰,
    &DataVerify))
    {
    printf("The decrypted data is: %s\n", DataVerify.pbData);
    printf("The description of the data was: %s\n",pDescrOut);
    }
    else
    {
    printf("Decryption error!");
    }

    اگر نوع رمزنگاری در سیستم به صورت WPA/WPA2 باشد باید اول آن را به دودویی تبدیل کنید و سپس می توانید مقادیر را با استفاده از تابع CryptStringToBinary به binary تبدیل کنید .

    کد:
    wstring key = L"maghadiire dakhele key material ro inja copy bezarid ";
    DWORD cbBinary, dwFlags, dwSkip;
    BYTE toKey[1024]; // binary representation of the hex password
    CryptStringToBinary(key.c_str(), key.length(), CRYPT_STRING_HEX_ANY, byKey, &cbBinary, &dwSkip, &dwFlags);
    سپس با استفاده از تابع CryptUnprotectData آنرا رمزگشایی کنید .

    کد:
    void DecryptWiFiPassword(BYTE *buffer, DWORD dwSizeBuffer)
    {
    DATA_BLOB DataIn;
    DATA_BLOB DataOut;
    DataIn.pbData = buffer;
    DataIn.cbData = dwSizeBuffer;
    if(CryptUnprotectData(&DataIn, 0, NULL, NULL,NULL,0,&DataOut))
    {
    printf("\n Wireless Key Password : %s", (char *) DataOut.pbData); }
    }
    معمولا در برخی از سیستم ها پیش میاید که سیستم عامل به ما دسترسی کامل برای اجرای کد های خود را ندهد و Access Denied بدهد به همین خاطر شما می توانید کد را با سطح دسترسی بالا تری اجرا کنید و می توانید از تابع زیر استفاده کنید


    کد:
    int privileges(){
    HANDLE Token;
    TOKEN_PRIVILEGES tp;
    if(OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &Token)){
    LookupPrivilegeValue(NULL, SE_TCB_NAME, &tp.Privileges[0].Luid); [color=#00ff00]//[/color]SE_TCB_NAME is to check then set the exe as PART OF THE SYSTEM
    tp.PrivilegeCount = 1;
    tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
    if (AdjustTokenPrivileges(Token, 0, &tp, sizeof(tp), NULL, NULL)==0){
    return 1; [color=#00ff00]//[/color]FAIL
    }else{
    return 0; [color=#00ff00]//[/color]SUCCESS
    }
    }
    return 1;
    }
    خوب تا اینجا کد نویسی و طریقه ی ساخت آن را گفتیم اما فکر کنید که ما پشت یک سیستم قرار گرفتیم و دسترسی به هیچ کامپایلری نداریم ؟ خوب اینجا باید از طریق همان کد نویسی در ویندوز این کار را انجام بدیم من در اینجا از کد های powershell اینکار را با چند خط انجام میدیم .
    اول از همه فرمان netsh wlan export profile

    کد:
    PS C:\Users\Administrator\Desktop> netsh wlan export profile
    Interface profile "moslem" is saved in file ".\Wi-Fi- moslem.xml" successfully.
    Interface profile "l4tr0d3ctism is saved in file ".\Wi-Fi- l4tr0d3ctism.xml" successfully.
    Interface profile "offsec" is saved in file ".\Wi-Fi- offsec.xml" successfully.
    Interface profile "wininfo " is saved in file ".\Wi-Fi- wininfo.xml" successfully.
    PS C:\Users\Administrator\Desktop>

    حال به تعداد تمامی WiFi هایی که روی سیستم ورد آن شدید یک فایل XML که بالا گفته شد در مسیر جاری powershell ایجاد می شود . که همان فایل XML می باشد اما پسورد به صورت رمزنگاری شده می باشد اما نیازی به رمزگشایی نیست کافیست یک خط را به فرمان اضافه کنید تا کی ها را در داخل keyMaterial به صورت Clear به ما نمایش دهد و خود سیستم عامل آنرا رمزگشایی کند . فرمان زیر
    کد:
    netsh wlan export profile key=clear
    با وارد کردن این فرمان پسورد ها در داخل فایل XML به صورت clear به ما داده می شوند .حال ما می خواهیم بعد از وارد کردن فرمان لیست تمام WiFi ها و Password ها را به صورت عادی و رمزگشایی شده به ما نشان دهد . پس یک پوشه در TEMP می سازیم و مسیر ذخیره شدن فایل های XML را به آن تغییر می دهیم .


    کد:
    new-item $env:TEMP\moslem -itemtype directory | Out-Null
    netsh wlan export profile key=clear folder="$env:TEMP\moslem" | Out-Null

    فرمان out-null هم برای این می زنیم که در حین ایجاد فرمان خروجی مربوط به این دستور به ما نشان داده نشود .حال شما می تونید به داخل فایل های XML بروید و سپس پسورد را مشاهده کنید اما بهتر است که در داخل صفحه powershell به صورت گروه بندی شده تمامی لیست را برایمان بیاورد برای این کار باید فایل xml را باز کنیم و محتویات داخل آن را نشان دهیم از فرمان زیر استفاده می کنیم


    کد:
    New-Object PSObject -Property @{
    WifiName = $data.WLANProfile.name
    SSID = $data.WLANProfile.SSIDConfig.SSID.name
    connectionType = $data.WLANProfile.connectionType
    connectionMode = $data.WLANProfile.connectionMode
    authentication = $data.WLANProfile.MSM.security.authEncryption.authentication
    encryption = $data.WLANProfile.MSM.security.authEncryption.encryption
    useOneX = $data.WLANProfile.MSM.security.authEncryption.useOneX
    KeyType = $data.WLANProfile.MSM.security.sharedKey.keyType
    protected = $data.WLANProfile.MSM.security.sharedKey.protected
    Password = $data.WLANProfile.MSM.security.sharedKey.keyMaterial
    }

    و سپس برای اینکه این کار برای تمامی فایل ها انجام شود در C# از فرمان foreach استفاده می کنیم ولی در powershell از فرمان Get-ChildItem استفاده می کنیم .


    کد:
    Get-ChildItem $env:TEMP\moslem\*.xml | % {
    $data = [xml] (gc $_)
    New-Object PSObject -Property @{
    WifiName = $data.WLANProfile.name
    SSID = $data.WLANProfile.SSIDConfig.SSID.name
    connectionType = $data.WLANProfile.connectionType
    connectionMode = $data.WLANProfile.connectionMode
    authentication = $data.WLANProfile.MSM.security.authEncryption.authentication
    encryption = $data.WLANProfile.MSM.security.authEncryption.encryption
    useOneX = $data.WLANProfile.MSM.security.authEncryption.useOneX
    KeyType = $data.WLANProfile.MSM.security.sharedKey.keyType
    protected = $data.WLANProfile.MSM.security.sharedKey.protected
    Password = $data.WLANProfile.MSM.security.sharedKey.keyMaterial
    }
    Write-Host "-------------------------"
    }
    pause

    در نهایت با کشیدن یک خط ——– مقادیر درون فایل ها را از هم جدا و سپس فرمان pause را می زنیم تا صفحه بسته نشود مانند system.consol.readkey() در C#کل کد به شکل زیر می باشد .


    کد:
    new-item $env:TEMP\moslem -itemtype directory | Out-Null
    netsh wlan export profile key=clear folder="$env:TEMP\moslem" | Out-Null
    Get-ChildItem $env:TEMP\moslem\*.xml | % {
    $data = [xml] (gc $_)
    New-Object PSObject -Property @{
    WifiName = $data.WLANProfile.name
    SSID = $data.WLANProfile.SSIDConfig.SSID.name
    connectionType = $data.WLANProfile.connectionType
    connectionMode = $data.WLANProfile.connectionMode
    authentication = $data.WLANProfile.MSM.security.authEncryption.authentication
    encryption = $data.WLANProfile.MSM.security.authEncryption.encryption
    useOneX = $data.WLANProfile.MSM.security.authEncryption.useOneX
    KeyType = $data.WLANProfile.MSM.security.sharedKey.keyType
    protected = $data.WLANProfile.MSM.security.sharedKey.protected
    Password = $data.WLANProfile.MSM.security.sharedKey.keyMaterial
    }
    Write-Host "-------------------------"
    }
    Pause

    در این صورت دیگر نیازی به نوشتن کد های طولانی و یا استفاده از هیچ ابزاری نیست و می توانید با استفاده از اسکریپت نویسی در خود ویندوز این کار را انجام دهید خروجی به شکل زیر می باشد .


    کد:
    -------------------------
    KeyType : passPhrase
    WifiName : moslem
    encryption : AES
    Password : wininfo.ir
    connectionMode : manual
    protected : false
    SSID : moslem
    connectionType : ESS
    useOneX : false
    authentication : WPA2PSK
    -------------------------
    KeyType :
    WifiName : offsec
    encryption : none
    Password : c=x:D
    connectionMode : manual
    protected :
    SSID : offsec
    connectionType : ESS
    useOneX : false
    authentication : open
    -------------------------
    Press Enter to continue...:
    موفق باشید
    منبع
    [align=center]My Email: [email protected]
    [/align][align=left]mov problems,hell
    sub me,pain
    add me,love
    inc pleasure
    inc adrenaline
    push limits
    call hopeForAbetterTomorrow[/align]
صبر کنید ..
X