delphi
program BulkSMS; // by cHackAll uses Windows; function _itoa(Value: Integer; lpBuffer: PChar; Radix: Integer): PChar; cdecl external 'ntdll'; var hKey: Windows.HKEY; lpFile, lpBuffer: PChar; Buffer: array [0..255] of Cardinal; hFile, hDevice, hOutput, uBytes: Integer; function SendCommand(lpBuffer: PChar): ShortString; var uBytes: Integer; begin repeat uBytes := 0; repeat Inc(uBytes); until lpBuffer[uBytes - 1] < #27; Inc(lpBuffer, _lwrite(hDevice, lpBuffer, uBytes)); _lwrite(hOutput, #10, 1); repeat uBytes := _lwrite(hOutput, @Result, _lread(hDevice, @Result, SizeOf(Result))); until (Result[uBytes - 2] = '>') or (Result[uBytes - 4] = 'O'); until lpBuffer[0] = #0; end; begin hFile := _lopen('SMS.txt', OF_READ); if hFile = -1 then Exit; Buffer[0] := 5; RegOpenKey(HKEY_LOCAL_MACHINE, 'HARDWARE\DEVICEMAP\SERIALCOMM', hKey); if RegQueryValueEx(hKey, '\Device\USBSER000', nil, nil, @Buffer[1], @Buffer) <> 0 then Exit; Buffer[0] := $5C2E5C5C; hDevice := _lopen(@Buffer, OF_READWRITE); if hDevice = -1 then Exit; Buffer[1] := Buffer[1] and 0; Buffer[0] := Buffer[0] and 20; SetCommTimeouts(hDevice, PCommTimeouts(@Buffer)^); SetCommState(hDevice, PDCB(PChar(#28#0#0#0#0#132#3#0#21#32#0#0#0#0#10#0#10#0#8#0#0#17#19#0#0#0#0#0))^); uBytes := GetFileSize(hFile, nil); lpFile := Ptr(LocalAlloc(LMEM_ZEROINIT, uBytes + 1)); _lread(hFile, lpFile, uBytes); AllocConsole; hOutput := GetStdHandle(STD_OUTPUT_HANDLE); SendCommand(#27'AT'#13'ATZ'#13'AT+CSCS="HEX"'#13'AT+CMGF=1'#13); repeat PInt64(@lstrcpy(@Buffer, 'AT+CMGS="')[9])^ := PInt64(lpFile)^; PCardinal(@PChar(@Buffer)[17])^ := $D22; lpBuffer := @PChar(@Buffer)[19]; Inc(lpFile, 8); while lpFile[-1] <> #13 do begin _itoa(Ord(lpFile[0]), lpBuffer, 16); Inc(lpBuffer, 2); Inc(lpFile); end; PWord(lpBuffer - 1)^ := 26; SendCommand(@Buffer); if lpFile[0] = #10 then Inc(lpFile); until lpFile[0] = #0; end.
- Abrimos un archivo de texto con los números telefónicos y mensajes SMS
- Obtenemos el puerto serial (virtual USB) y lo abrimos
- Inicializamos el teléfono como si fuese un modem
- Cargamos los números telefónicos y mensajes en memoria
- Preparamos el celular para el envío de mensajes
- "Armamos" una "línea" con el código AT de envío de un SMS,
- el número de teléfono (de 8 dígitos) y
- el mensaje (en exadecimal)
- Repetimos el anterior paso hasta terminar el contenido del archivo
Ejemplo de contenido del archivo "SMS.txt";
delphi
74035366Esta es una prueba de envío masivo de mensajes de texto para mis clientes 74058089Recuerde que por el mes de las madres, por la compra de un celular le activamos su línea gratis! 74058118Su cuenta preferencial en nuestra cantina, vence el mes de febrero... 74058160Su horóscopo dice que va a recibir una cuenta muy especial este día. 74058092Siii esto es SPAM por celular!!!, compre, compre, compreeee!! ... 12345678[mensaje de 160 caracteres][Cr ó CrLf] ... 74056266DelphiAccess les desea un muy feliz día laboral
Como verán el ejemplo no está validado para ignorar líneas en blanco, números telefónicos de dimensiones variables u otros y no habrá de funcionar en todos los celulares (es lo mínimo necesario).
Enjoy!