Wir senden "anonyme" SMS von der Konsole an die gewünschte Nummer mit dem Bytehand- und C ++ - Dienst

Manchmal ist es erforderlich, eine anonyme Nachricht an den richtigen Empfänger zu senden, ohne Ihr Telefon zu verwenden oder wenn Sie nur einen Computer mit Internetzugang und eine offene Konsole zur Hand haben.

In vielen Filmen gibt es einen Moment, in dem ein Hacker, der eine Person knackt, eine Nachricht an seine Nummer senden muss, um sie abzulenken oder zu erschrecken. In solchen Situationen ist das Wichtigste, dass der Bildschirm Ihres Smartphones nicht aufleuchtet, wenn die Person die Nummer anruft, von der die SMS eingegangen ist Musik begann zu spielen. Ups ... unangenehme Situation. In diesem Thema schreiben wir ein Programm in C ++, mit dem Sie SMS senden können, ohne Ihre Nummer, SIM-Karte und Seele zu verwenden.

Herr Roboter-TV-Show

Das Wort "Anonymität" impliziert, dass derjenige, der die Nachricht gesendet hat, nicht wirklich erkannt wird, aber nicht alles so gut ist. Während des Prozesses wird diese Tatsache geklärt, so dass ich Sie mit besonders ernsten Witzen nicht zum Testen besuchen werde.

Warnung Die Aufgabe könnte auf einfachere Weise gelöst werden. In diesem Thema wird eine der Lösungen in der Sprache c ++ angegeben.

Kommen wir zur Sache.

Der Bytehand-Service ist eine Geschäftslösung, mit der Sie sowohl Massenmailings als auch einzelne Nachrichten erstellen können. Das Hauptmerkmal des Dienstes und warum ich ihn gewählt habe, ist eine API, die auf allen Plattformen verfügbar ist. Hierbei handelt es sich um eine HTTP-Anforderungsantwort mit einem sehr einfachen Autorisierungssystem.

Folgendes brauchen wir:

  • Bytehand-Konto
  • 100 Rubel auf dem Konto (Und was möchten Sie, SMS ist nicht kostenlos)
  • C ++ - Konsolenprogramm
  • Kompilierte Boost.Asio und OpenSSL Bibliotheken für https Verbindungen
  • Ein über OpenSSL erstelltes Zertifikat für den sicheren Datenaustausch mit dem Bytehand-Dienst.

Registrieren Sie sich zunächst beim Bytehand-Dienst. Die Registrierung ist eine eingegebene E-Mail und ein Passwort. Das reicht schon. Danach wird Ihr Konto erstellt und beim Auffüllen des Kontos (mindestens 100 Rubel) können Sie bereits Nachrichten mit dem Header SMS-INFO senden. Für die meisten Betreiber wird dieser Eintrag durch die Abflugnummer ersetzt. Wenn Sie möchten, können Sie einen eigenen Textalias erstellen.

Als nächstes steigen wir in die Ressourcen-API ein. Und wir sehen, dass Sie zum Senden von SMS nur das folgende Datenpaket bilden müssen:

POST /v2/sms/messages HTTP/1.1 Host: api.bytehand.com Connection: close Content-Length: * Content-Type: application/json;charset=UTF-8 X-Service-Key: ab4db0b982dcd0ba63e44191e5d71ef8 { "sender": "MyShop", "receiver": "+79167654321", "text": "Today only! 20% off for all goods!!" } 

Ich mache Sie darauf aufmerksam, dass der X-Service-Key im http-Header die gesamte Berechtigung ist. Dieser Schlüssel kann in den Einstellungen auf der Site im Abschnitt "Sicherheit" angezeigt werden.

Ich denke, hier ist alles klar und Sie können ein Konsolenprogramm in C ++ schreiben

Zunächst stelle ich Ihnen einen Code vor, der mithilfe von Boost.Asio mithilfe des https-Protokolls eine Verbindung zur Site herstellt

 //   Boost #include <boost/asio.hpp> #include <boost/asio/ssl.hpp> #include <boost/bind.hpp> // --------------------------- // ---------- Include OpenSSL Lib ---------- #pragma comment (lib, "libeay32.lib") #pragma comment (lib, "ssleay32.lib") // ----------------------------------------- using namespace boost::asio; //    bool verify_certificate(bool preverified, boost::asio::ssl::verify_context& ctx) { X509* cert = X509_STORE_CTX_get_current_cert(ctx.native_handle()); return preverified; } int main() { io_service service; // ,    /*------------------------------------------------------------ -     - ------------------------------------------------------------*/ ip::tcp::resolver resolver(service); ip::tcp::resolver::query query("api.bytehand.com", "https"); ip::tcp::resolver::iterator iterator = resolver.resolve(query); ssl::context context(boost::asio::ssl::context::sslv23); context.load_verify_file("dh2048.pem"); ssl::stream<ip::tcp::socket> socket_(service, context); socket_.set_verify_mode(ssl::context::verify_none); socket_.set_verify_callback(boost::bind(verify_certificate, _1, _2)); connect(socket_.lowest_layer(), iterator); socket_.handshake(boost::asio::ssl::stream_base::client); //        socket_.write_some() } 

Der Code verwendet den Link zur Zertifikatdatei dh2048.pem. Sie ersetzen es durch Ihr.
Sie können auch sehen, dass hier der Domainname api.bytehand.com als Server verwendet wird

Das folgende Beispiel zeigt, wie der Header und der Hauptteil der http-Anforderung für den Server gebildet werden.

 int main() { /*  ,       https */ //            //       string number = "+79180000000"; string signature = "SMS-INFO"; string text = "Today only! 20% off for all goods!!"; std::stringstream request_; //     char sockBuffer[8192]; //      //     ,       Content-Length string reqTmp = "{\"sender\": \"" + signature + "\",\"receiver\": \"" + number + "\",\"text\": \"" + text + "\"}\r\n"; request_ << "POST /v2/sms/messages HTTP/1.1\r\n"; request_ << "Host: api.bytehand.com\r\n"; request_ << "Connection: close\r\n"; request_ << "Content-Length: " << reqTmp.length() << "\r\n"; request_ << "Content-Type: application/json;charset=UTF-8\r\n"; request_ << "X-Service-Key: ab4db0b982dcd0ba63e44191e5d71ef8\r\n"; request_ << "\r\n"; request_ << reqTmp; //     socket_.write_some(buffer(request_.str())); memset(sockBuffer, NULL, 8192); //       socket_.read_some(buffer(boost::asio::buffer(sockBuffer))); //     cout << endl << endl << sockBuffer << endl; } 

Ich erinnere Sie daran, dass Sie das Feld X-Service-Key durch Ihren Schlüssel ersetzen.

Nach dem Ausführen dieses Codes und wenn alles wie gewünscht gelaufen ist, gibt der Server eine Antwort zurück:

 Status Code: 200 Content-Type: application/json;charset=UTF-8 Content-Language: en Cache-Control: no-cache, no-store, max-age=0, must-revalidate Pragma: no-cache { "result": "created", "count": 1 } 

Zu diesem Zeitpunkt wird Geld auf Ihr Konto gesendet, um eine Nachricht zu senden. Und die Nachricht geht an den Adressaten. Wenn er es erhält, handelt es sich um eine Firmennummer oder eine Textkennung, und es ist unwahrscheinlich, dass eine Person versteht, von wem diese Nachricht stammt.

Folgendes ist passiert, als ich dieses Programm geschrieben habe:

Myprogramm

Es stellte sich ungeschickt heraus, aber was ist. Viel Glück an alle, vielleicht hat dir dieses Thema bei etwas geholfen.

Dies war mein zweiter Artikel hier. Danke fürs Lesen. Viel Glück bei der Entwicklung Ihrer Anwendungen.

Source: https://habr.com/ru/post/de419165/


All Articles