Wywiad z konferencji CONFidence 2015
Inne
XRumer 12.0.11 i nowa reCAPTCHA od Google pokonana
Nowy XRumer, czyli oprogramowanie do masowego spamowania zyskało obsługę nowego mechanizmu reCAPTCHA od Google.
Dzisiejszy komunikat:
New revolutionary technology make of new Google ReCaptcha defeated! Average time of recognition: 20 MILLIseconds! (0,02 sec).
Also, the program was trained to new popular types of graphical captcha, included animated GIF-captchas and Flash-captchas.
Added new Wizard to set up Project+Options+Scheduler just with one click: useful feature 😉
Mass-PM system was significantly updated. Possibility to send millions of personal messages all over the world is becoming a reality.
Significantly increased the success rate and improved work with several engines, so now software become more powerful (read more info on our tech.support forum).
Adjusted the processing of CloudFlare (applied a new mechanism of decoding of ReCaptcha)
New databases with more than 300,000 unique resources, so hurry up to use it!
Update can be downloaded from your client area on our site.
Z ciekawostek powiem, że BotmasterLabs często organizuje konkursy o spore pieniądze, których celem jest poprawienie działania mechanizmów rozpoznawania kodów CAPTCHA w Xrumerze. Ostatni konkurs odbył się we wrześniu 2014 roku i nagrodą było 15000 USD.
Jak widać cyberprzestępcy są szybko krok do przodu nawet przed takim gigantem jak Google. Zastanawiający jest fakt, pseudo-firma spamerska jest w stanie więcej zapłacić niż Google swoim inżynierom lub zorganizować konkurs na stworzenie lepszych mechanizmów.
Co zrobić gdy na Freelancerze spotkasz cwanego Chińczyka?
Zapewne niejeden z Was zlecał coś lub pracował przez stronę Freelancer. Jeśli zlecaliście coś to wiecie jak różne osoby tam się zgłaszają do wykonania projektu.
Co zrobić gdy trafi Wam się cwany Chińczyk, który zupełnie nie rozumie założeń projektu i przekonuje Was swoimi zdolnościami w tworzeniu blogów na WordPressie do tego, że wykona projekt w C++ i natarczywie chce żeby przyznać mu projekt i od razu wypłacić część pieniędzy? Najlepiej odpowiedzieć mu w jego łamanym angielsko-chińskim i przesłać mu te pieniądze!
Pieniądze wysłane i można spokojnie czekać na wykonanie projektu 🙂
Szyfrowanie danych, szyfrowanie plików i stringów
Zaktualizowana została usługa dla programistów – StringEncrypt, która pozwala w prosty sposób zaszyfrować dowolne dane, generując za każdym razem unikalny algorytm szyfrowania oraz tworząca do tego automatycznie kod dekryptora w wybranym języku programowania.
Jak zwykle szyfrujemy dane?
Jeśli zależy nam na czymś co nie wymaga sporych zasobów procesora nie skorzystamy do tak trywialnego celu z szyfrowania np. AES (zapewne wymagana będzie jakaś zewnętrzna biblioteka szyfrująca lub implementacja).
W większości przypadków, każdy normalny programista napisze do tego celu własne oprogramowanie, które pobierze na wejściu ciąg niezakodowanych danych i zwróci zaszyfrowane dane. Dodatkowo zwróci je w formie pozwalającej zapisać dane w postaci kodu źródłowego języka programowania, w którym akurat tworzy oprogramowanie.
Jak szyfrować dane szybciej?
Usługa StringEncrypt pozwala:
- zaoszczędzić czas na tworzenie narzędzi programistycznych
- za każdym razem wygenerować inny algorytm szyfrujący
- wygenerowany kod nie wymaga zewnętrznych bibliotek szyfrujących
- można wybrać spośród wyjścia w C/C++, Delphi/Pascal, Java, JavaScript, Python, MASM/FASM, Haskell
Przykład szyfrowania danych
Przykład, chcemy np. zaszyfrować string „Szyfrowanie danych”. Jak to zrobić? Na stronie głównej StringEncrypt wystarczy wpisać nazwę dla labela oraz sam tekst do zaszyfrowania i kliknąć „Encrypt and Generate Decryptor”.
Dostępnych jest kilka dodatkowych opcji jak np. wybór wyjściowego języka programowania czy sposób kodowania znaków narodowych, jeśli nasze dane takowe zawierają.
Efektem końcowym są listingi z zaszyfrowanymi danymi oraz kodem źródłowym. Przykłady tak wygenerowanych dekryptorów poniżej.
Zaszyfrowane dane oraz kod deszyfrujący w C/C++
// encrypted with www.stringencrypt.com (v1.0.0) [C/C++] // szZaszyfrowaneDane = "Szyfrowanie danych" wchar_t szZaszyfrowaneDane[19] = { 0xBEFE, 0xBED8, 0xBEDA, 0xBEBE, 0xBEB9, 0xBED5, 0xBEC0, 0xBEBD, 0xBEB1, 0xBECF, 0xBEBE, 0xB8FC, 0xBEC7, 0xBEB3, 0xBEB7, 0xBECD, 0xBEBE, 0xBEBA, 0xBF01 }; for (unsigned int DwvRZ = 0, sobMk = 0; DwvRZ < 19; DwvRZ++) { sobMk = szZaszyfrowaneDane[DwvRZ]; sobMk ^= 0xBCFB; sobMk -= DwvRZ; sobMk ++; sobMk ^= 0x0CFB; sobMk = ~sobMk; sobMk += DwvRZ; sobMk ^= 0x9A0E; sobMk += 0x4ABC; sobMk -= DwvRZ; sobMk ^= 0xB59B; szZaszyfrowaneDane[DwvRZ] = sobMk; } wprintf(szZaszyfrowaneDane);
Kod dekryptora w C# dla platformy .NET
// encrypted with www.stringencrypt.com (v1.0.0) [C#] // szZaszyfrowaneDane = "Szyfrowanie danych" String szZaszyfrowaneDane = "\u0236\u020F\u0210\u0227\u021D\u0222\u0226\u0224" + "\u0239\u0220\u0224\u0279\u022B\u0220\u0231\u021C" + "\u0226\u0201"; for (int lWdYZ = 0, AtPLU = 0; lWdYZ < 18; lWdYZ++) { AtPLU = szZaszyfrowaneDane[lWdYZ]; AtPLU ^= lWdYZ; AtPLU -= 0x6403; AtPLU ^= lWdYZ; AtPLU ^= 0x51FE; AtPLU += lWdYZ; AtPLU -= 0xCF7A; AtPLU ^= lWdYZ; szZaszyfrowaneDane = szZaszyfrowaneDane.Substring(0, lWdYZ) + (char)(AtPLU & 0xFFFF) + szZaszyfrowaneDane.Substring(lWdYZ + 1); } MessageBox.Show(szZaszyfrowaneDane);
Kod dekryptujący w Delphi / Pascal
// encrypted with www.stringencrypt.com (v1.0.0) [Delphi / Pascal] var // szZaszyfrowaneDane = "Szyfrowanie danych" szZaszyfrowaneDane: array[0..19] of WideChar; VdaMu: Integer; sveIR: Integer; begin szZaszyfrowaneDane[3] := WideChar($0E23); szZaszyfrowaneDane[14] := WideChar($0E36); szZaszyfrowaneDane[6] := WideChar($0E37); szZaszyfrowaneDane[12] := WideChar($0E1E); szZaszyfrowaneDane[8] := WideChar($0E34); szZaszyfrowaneDane[9] := WideChar($0E1E); szZaszyfrowaneDane[11] := WideChar($0DE9); szZaszyfrowaneDane[18] := WideChar($0DD0); szZaszyfrowaneDane[10] := WideChar($0E1D); szZaszyfrowaneDane[13] := WideChar($0E22); szZaszyfrowaneDane[0] := WideChar($0E11); szZaszyfrowaneDane[15] := WideChar($0E2C); szZaszyfrowaneDane[1] := WideChar($0E39); szZaszyfrowaneDane[16] := WideChar($0E31); szZaszyfrowaneDane[17] := WideChar($0E37); szZaszyfrowaneDane[7] := WideChar($0E1C); szZaszyfrowaneDane[5] := WideChar($0E30); szZaszyfrowaneDane[4] := WideChar($0E2C); szZaszyfrowaneDane[2] := WideChar($0E39); for sveIR := 0 to 19 do begin VdaMu := Ord(szZaszyfrowaneDane[sveIR]); VdaMu := VdaMu - sveIR; VdaMu := VdaMu + sveIR; VdaMu := VdaMu - $58FA; VdaMu := VdaMu xor sveIR; VdaMu := VdaMu + $4B3C; VdaMu := VdaMu + sveIR; VdaMu := VdaMu - sveIR; szZaszyfrowaneDane[sveIR] := WideChar(VdaMu); end; ShowMessage(szZaszyfrowaneDane);
Wyjściowy kod deszyfrujący w Java
// encrypted with www.stringencrypt.com (v1.0.0) [Java] // szZaszyfrowaneDane = "Szyfrowanie danych" String szZaszyfrowaneDane = "\uD9CD\uD9F4\uD9EF\uD9E0\uD9E4\uD9E7\uD9F1\uD9D5" + "\uD9D8\uD9E1\uD9CB\uD986\uD9C6\uD9C9\uD9D8\uD9ED" + "\uD9BD\uD9E2"; for (int LMSGW = 0, BZYmK = 0; LMSGW < 18; LMSGW++) { BZYmK = szZaszyfrowaneDane.charAt(LMSGW); BZYmK += LMSGW; BZYmK ^= LMSGW; BZYmK ++; BZYmK ^= 0xFFFF; BZYmK -= LMSGW; BZYmK ^= 0xFFFF; BZYmK -= 0xD97B; BZYmK -= LMSGW; szZaszyfrowaneDane = szZaszyfrowaneDane.substring(0, LMSGW) + (char)(BZYmK & 0xFFFF) + szZaszyfrowaneDane.substring(LMSGW + 1); } System.out.println(szZaszyfrowaneDane);
Zaszyfrowane dane do wykorzystania w JavaScript (HTML)
<script type="text/javascript"> // encrypted with www.stringencrypt.com (v1.0.0) [JavaScript] // szZaszyfrowaneDane = "Szyfrowanie danych" var szZaszyfrowaneDane; szZaszyfrowaneDane = String.fromCharCode(0x8C8D, 0x8C68, 0x8C6B, 0x8C84, 0x8C76, 0x8C7B, 0x8C75, 0x8C89, 0x8C82, 0x8C99, 0x8C8F, 0x8CC2, 0x8C84, 0x8C89, 0x8C9A, 0x8C91, 0x8C9D, 0x8C9A); for (var UkhdQ = 0, LElnh = 0; UkhdQ < 18; UkhdQ++) { LElnh = szZaszyfrowaneDane.charCodeAt(UkhdQ); LElnh -= UkhdQ; LElnh -= 0xAA95; LElnh -= UkhdQ; LElnh += UkhdQ; LElnh --; LElnh ^= UkhdQ; LElnh += 0x39C5; LElnh -= UkhdQ; LElnh = ~LElnh; LElnh += 0x1C10; LElnh ^= UkhdQ; szZaszyfrowaneDane = szZaszyfrowaneDane.substr(0, UkhdQ) + String.fromCharCode(LElnh & 0xFFFF) + szZaszyfrowaneDane.substr(UkhdQ + 1); } alert(szZaszyfrowaneDane); </script>
Szyfrowanie danych w Pythonie nie było prostsze
# encrypted with www.stringencrypt.com (v1.0.0) [Python] # szZaszyfrowaneDane = "Szyfrowanie danych" szZaszyfrowaneDane = [ 0x70BA, 0x70D3, 0x70D4, 0x70C7, 0x70D9, 0x70C6, 0x70DE, 0x70CC, 0x70CD, 0x70D0, 0x70C8, 0x710D, 0x70CB, 0x70C8, 0x70D5, 0x70E4, 0x70EA, 0x70E1 ] for Zmizb in range(18): FZBAn = szZaszyfrowaneDane[Zmizb] FZBAn = ~FZBAn FZBAn -= 0xF5C7 FZBAn = ~FZBAn FZBAn -= 1 FZBAn -= Zmizb FZBAn -= 0xF2E1 FZBAn ^= 0x73CC FZBAn ^= Zmizb szZaszyfrowaneDane[Zmizb] = FZBAn szZaszyfrowaneDane = ''.join(chr(FZBAn & 0xFFFF) for FZBAn in szZaszyfrowaneDane) del Zmizb, FZBAn print(szZaszyfrowaneDane)
Obsługiwany jest także Haskell
-- encrypted with www.stringencrypt.com (v1.0.0) [Haskell] module Main where import qualified Data.Char import qualified Data.Bits main = do putStrLn $ szZaszyfrowaneDane -- szZaszyfrowaneDane = "Szyfrowanie danych" szZaszyfrowaneDane = zipWith f [0..] [ 0x5604, 0x55DE, 0x55E0, 0x55F4, 0x55E1, 0x55E3, 0x55DA, 0x55F3, 0x55E1, 0x55E5, 0x55FC, 0x563E, 0x55FF, 0x55F9, 0x55E7, 0x55D3, 0x55E4, 0x5600 ] where f wvfax cxdne = let gpmae0 = cxdne gpmae1 = gpmae0 - 1 gpmae2 = gpmae1 `Data.Bits.xor` wvfax gpmae3 = gpmae2 - wvfax gpmae4 = Data.Bits.complement gpmae3 gpmae5 = gpmae4 + 1 gpmae6 = gpmae5 - wvfax gpmae7 = gpmae6 - 0xA9AA in Data.Char.chr (gpmae7 Data.Bits..&. 0xFFFF)
Kod dekryptora w MASM
; encrypted with www.stringencrypt.com (v1.0.0) [MASM Assembler (32 bit)] .data ; szZaszyfrowaneDane = "Szyfrowanie danych" szZaszyfrowaneDane dw 0C08Dh, 0C078h, 0C06Bh, 0C068h, 0C0B6h, 0C061h, 0C0B9h, 0C06Bh dw 0C05Ah, 0C067h, 0C077h, 0C042h, 0C074h, 0C077h, 0C05Eh, 0C073h dw 0C07Dh, 0C07Ah, 0C0D0h .code mov edx, offset szZaszyfrowaneDane mov eax, 19 and ecx, 0 @@: mov bx, word ptr [edx + ecx] sub ebx, ecx xor ebx, 0B1C6h not ebx add ebx, 028B2h not ebx xor ebx, 0D1D9h xor ebx, ecx add ebx, 056FAh not ebx sub ebx, 0A3ADh xor ebx, 00FA0h add ebx, ecx sub ebx, ecx xor ebx, 063EBh mov word ptr [edx + ecx], bx inc ecx dec eax jne @b push 0 push edx push edx push 0 call MessageBoxW
Zwróćcie uwagę, że dane zostały za każdym razem zaszyfrowane inaczej, z innym zestawem instrukcji szyfrujących, dlatego każdorazowo generowany kod jest inny.
Kod nie wymaga zewnętrznych bibliotek, bazuje na podstawowych funkcjonalnościach jakie oferują obsługiwane języki programowania.
Szyfrowanie plików
StringEncrypt pozwala w równie łatwy sposób szyfrować zawartość dowolnych plików binarnych.
Klient końcowy dla Windows
Szyfrowanie można przeprowadzać bezpośrednio na stronie projektu, jednak istnieje również klient dla systemu Windows, oferujący tą samą funkcjonalność:
Web API
Usługa posiada również interfejs Web API bazujący na prostych zapytaniach POST, dostępne jest SDK w PHP, a jego wykorzystanie jest banalnie proste:
<?php //////////////////////////////////////////////////////////////////////////////// // // StringEncrypt.com Web API usage example // // Version : v1.1 // Language : PHP // Author : Bartosz WĂłjcik // Web page : https://www.stringencrypt.com // //////////////////////////////////////////////////////////////////////////////// // include main library include ("stringencrypt.php"); // // setup options // $options = array(); // // activation code, you can leave it empty for demo version, but keep in // mind that there are many limitations in demo version) // $options["code"] = ""; // // API command to execute // // "encrypt" - encrypt input string or file bytes, returns array of: // // $result["error"] - error code // $result["source"] - decryptor source code // $result["expired"] - activation code expiration flag (bool) // $result["credits_left"] - number of credits left // // "is_demo" - checks current activation code and returns array of: // // $result["demo"] - demo mode flag (bool) // $result["label_limit"] - label limit length // $result["string_limit"] - string/file limit lenght // $result["credits_left"] - number of credits left // $result["cmd_min"] - minimum number of encryption commands // $result["cmd_max"] - maximum number of encryption commands $options["command"] = "encrypt"; //$options["command"] = "is_demo"; // // label name // // demo mode supports up to 6 chars only (64 in full version), // if you pass more than this number, service will return // ERROR_LENGTH_LABEL // $options["label"] = "Label"; // // input string / raw bytes compression enabled, if you set it to // true, you need to compress input string / raw bytes eg. // // $compressed = @base64_encode(@gzcompress($string, 9) // // and after encryption you need to decompress encrypted data // // $decompressed = @gzuncompress(@base64_decode($source)); // $options["compression"] = false; //$options["compression"] = true; // // input string in UTF-8 format // // demo mode supports up to 6 chars only, if you pass more // than that, service will return ERROR_LENGTH_STRING // $options["string"] = "Hello!"; //$options["string"] = @base64_encode(@gzcompress("Hello!", 9)); // // raw data bytes to encrypt (you need to specify either // $options["string"] or this value // // demo mode doesn't support this parameter and the service // will return ERROR_DEMO // //$options["bytes"] = file_get_contents("my_file.txt"); //$options["bytes"] = file_get_contents("http://www.example.com/my_file.txt"); //$options["bytes"] = @base64_encode(@gzcompress(file_get_contents("my_file.txt"), 9)); // // treat input string as a UNICODE string (ANSI otherwise) // $options["unicode"] = true; // // input string default locale (only those listed below // are supported currently) // $options["lang_locale"] = "en_US.utf8"; //$options["lang_locale"] = "en_GB.utf8"; //$options["lang_locale"] = "de_DE.utf8"; //$options["lang_locale"] = "es_ES.utf8"; //$options["lang_locale"] = "fr_BE.utf8"; //$options["lang_locale"] = "fr_FR.utf8"; //$options["lang_locale"] = "pl_PL.utf8"; // // how to encode new lines, available values: // // "lf" - Unix style // "crlf" - Windows style // "cr" - Mac style // $options["new_lines"] = "lf"; //$options["new_lines"] = "crlf"; //$options["new_lines"] = "cr"; // // destination ANSI string encoding (if unicode = false) // // only those listed below are supported // $options["ansi_encoding"] = "WINDOWS-1250"; //$options["ansi_encoding"] = "WINDOWS-1251"; //$options["ansi_encoding"] = "WINDOWS-1252"; //$options["ansi_encoding"] = "WINDOWS-1253"; //$options["ansi_encoding"] = "WINDOWS-1254"; //$options["ansi_encoding"] = "WINDOWS-1255"; //$options["ansi_encoding"] = "WINDOWS-1256"; //$options["ansi_encoding"] = "WINDOWS-1257"; //$options["ansi_encoding"] = "WINDOWS-1258"; //$options["ansi_encoding"] = "ISO-8859-1"; //$options["ansi_encoding"] = "ISO-8859-2"; //$options["ansi_encoding"] = "ISO-8859-3"; //$options["ansi_encoding"] = "ISO-8859-9"; //$options["ansi_encoding"] = "ISO-8859-10"; //$options["ansi_encoding"] = "ISO-8859-14"; //$options["ansi_encoding"] = "ISO-8859-15"; //$options["ansi_encoding"] = "ISO-8859-16"; // // output programming language // // only those listed below are supported, if you pass // other name, service will return ERROR_INVALID_LANG // $options["lang"] = "cpp"; //$options["lang"] = "csharp"; //$options["lang"] = "delphi"; //$options["lang"] = "java"; //$options["lang"] = "js"; //$options["lang"] = "python"; //$options["lang"] = "haskell"; //$options["lang"] = "masm"; //$options["lang"] = "fasm"; // // minimum number of encryption commands // // demo mode supports only up to 3 commands (50 in full version), // if you pass more than this number, service will return // ERROR_CMD_MIN // $options["cmd_min"] = 1; //$options["cmd_min"] = 1; // // maximum number of encryption commands // // demo mode supports only up to 3 commands (50 in full version), // if you pass more than this number, service will return // ERROR_CMD_MAX // $options["cmd_max"] = 3; //$options["cmd_max"] = 50; // // store encrypted string as a local variable (if supported // by the programming language), otherwise it's stored as // a global variable // $options["local"] = false; //$options["local"] = true; // // encrypt string or file contents // $result = stringencrypt($options); if ($result != false) { if ($result["error"] == ERROR_SUCCESS) { // if compression was enabled, we need to // decompress the output source code if ($options["compression"] == true) { $source = @gzuncompress(@base64_decode($source)); } else { $source = $result["source"]; } // display decryptor body echo "<pre>".$source."</pre>"; // display number of credits left echo "<p>You have {$result['credits_left']} credits left.</p>"; // display initial number of credits echo "<p>Initial number of credits {$result['credits_total']}.</p>"; // activation code has expired, notify user if ($result["expired"] == true) { echo "<p>Your activation code has expired!</p>"; } } else { echo "An error occured (code ".$result["error"].")"; } } else { echo "Cannot connect to the API interface!"; } ?>
Strona projektu
Zachęcam do odwiedzenia strony usługi i wypróbowania https://stringencrypt.com.
Ile zarabia pentester?
Zawsze mnie zastanawiało ile zarabia pentester, mam wielu znajomych, którzy się tym zajmują i ich zarobki są skarnie różne, jeśli znacie kogoś kto pracuje w tym zawodzie lub sami jesteście pentesterami, zagłosujcie w tej anonimowej ankiecie.
Zachęcam również do komentarzy oraz dodawania ofert pracy.
Midnight – Natalia Rak
Człowiek nie samym kodem żyje, dzisiaj znalazłem tego postera i czekam z niecierpliwością na tubę 🙂
https://1xrun.com/runs/Midnight/forums
Blog Natalii – http://nataliarak.blogspot.com/