Enviamos SMS "anônimo" do console para o número desejado usando o serviço bytehand e C ++

Às vezes, torna-se necessário enviar uma mensagem anônima para o destinatário certo, sem usar o telefone ou quando você possui apenas um computador com acesso à Internet e um console aberto.

Em muitos filmes, há um momento em que um hacker que quebra uma pessoa precisa enviar uma mensagem para seu número para distraí-lo ou assustá-lo. Em tais situações, o mais importante é que, quando a pessoa liga para o número do qual o SMS veio, a tela do seu smartphone não acende e a música começou a tocar. Opa ... situação embaraçosa. Neste tópico, escreveremos um programa em C ++ que permitirá enviar SMS sem usar seu número, cartão SIM e alma.

Mr. Programa de TV do robô

A palavra "anonimato" implica que quem enviou a mensagem não é realmente reconhecido, mas nem tudo é tão bom. Durante o julgamento, esse fato será esclarecido, de modo que, com piadas particularmente sérias, não irei visitá-lo para testes.

Advertência A tarefa pode ser resolvida de maneiras mais fáceis. Neste tópico, uma das soluções é fornecida na linguagem c ++.

Vamos ao que interessa.

O serviço bytehand é uma solução comercial que permite que você faça correspondências em massa e mensagens únicas. A principal característica do serviço e por que eu o escolhi é uma API disponível em todas as plataformas, que é uma resposta de solicitação HTTP com um sistema de autorização muito simples.

Aqui está o que precisamos:

  • Conta Bytehand
  • 100 rublos na conta (e o que você quer, o SMS não é gratuito)
  • Programa de console C ++
  • Bibliotecas Boost.Asio e OpenSSL compiladas para conexões https
  • Um certificado criado através do OpenSSL para troca segura de dados com o serviço de bytehand.

Primeiro, registre-se no serviço bytehand. O registro é um e-mail e senha digitados. Isso já é suficiente. Depois disso, sua conta é criada e, ao reabastecer a conta (pelo menos 100 rublos), você já pode enviar mensagens com o cabeçalho SMS-INFO. Para a maioria das operadoras, essa entrada é substituída pelo número da partida. Se desejar, você pode criar seu próprio alias de texto.

Em seguida, entramos na API de recursos. E vemos que, para enviar SMS, você só precisa formar o seguinte pacote de dados:

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!!" } 

Chamo sua atenção para o fato de que a X-Service-Key no cabeçalho http é toda a autorização. Essa chave pode ser visualizada nas configurações do site na seção "segurança".

Eu acho que tudo está claro aqui e você pode começar a escrever um programa de console em c ++

Antes de tudo, apresento a você uma parte do código que, usando o Boost.Asio, estabelece uma conexão com o site usando o protocolo https

 //   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() } 

O código usa o link para o arquivo de certificado dh2048.pem. Você o substitui pelo seu.
Você também pode ver que aqui o nome de domínio api.bytehand.com é usado como servidor

A seguir, é apresentado um exemplo de como o cabeçalho e o corpo da solicitação http para o servidor são formados.

 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; } 

Lembro que você substituiu o campo X-Service-Key por sua chave.

Depois de executar esse código e se tudo correu como deveria, o servidor retorna uma resposta:

 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 } 

Nesse momento, o dinheiro é enviado à sua conta para o envio de uma mensagem. E a mensagem vai para o destinatário. Quando ele receber, será um número de empresa ou um identificador de texto e é improvável que uma pessoa entenda de quem era essa mensagem.

Aqui está o que aconteceu quando escrevi este programa:

Myprogram

Acabou desajeitadamente, mas o que é. Boa sorte a todos, talvez este tópico tenha ajudado você.

Este foi o meu segundo artigo aqui. Obrigado pela leitura. Boa sorte no desenvolvimento de seus aplicativos.

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


All Articles