Newsgroup: it.comp.programmare
Titolo: Programma scioccante!

Ne ho le palle piene di questi "siti scioccanti".
Più che altro mi rode vedere che le persone educate sono impotenti contro
gli stronzi.
Tempo fa chiesi su it.news.net-abuse se si potessero cancellare messaggi
contenenti esclusivamente messaggi promozionali (per di più Off Topic).
Mi risposero di sì (anzi, avremmo fatto loro un favore, vista tutta
l'immondizia che
c'è in giro).
Io contribuisco con questo piccolo programma. E' soltanto un piccolo
in-memory-patch per OE: in questo modo Message->Cancel Message sarà sempre
abilitato.
Se il primo che vedesse un post "scioccante" lo cancellasse, risparmierebbe
a tutti gli altri di vederlo.
Temo che dovrete reindentare un po' il codice.
Dimenticavo: il codice è da intendersi a scopo didattico!
#include <windows.h>
#include <cstdio>
#include <tlhelp32.h>
//#define for if(0);else for
// cerca b in a (non ottimizzata, ma semplice)
int find(char *a, int an, char *b, int bn)
{
 for (int i = 0; i < an; i++)
 {
  if (a[i] == b[0])
  {
   int j, k;
   for (j = i, k = 0; (j < an) & (k < bn); j++, k++)
   {
    if (a[j] != b[k]) break;
   }
   if (k == bn) return i;
  }
 }
 return -1;
}
int WINAPI WinMain(HINSTANCE hThis, HINSTANCE hPrev, LPSTR Args, int
nWinMode)
{
 HKEY hkey;
 if (RegOpenKey(HKEY_LOCAL_MACHINE, "Software\\Microsoft\\Outlook Express",
&hkey) != ERROR_SUCCESS)
 {
  MessageBox(0, "Assicurarsi che Outlook Express\nsia installato
correttamente!", "by Kiuhnm", MB_ICONSTOP);
  return 0;
 }
 char buf[512];
 int bufsize = 512;
 if (RegQueryValueEx(hkey, "InstallRoot", 0, 0, (BYTE *)buf, (DWORD
*)&bufsize) != ERROR_SUCCESS)
 {
  MessageBox(0, "Assicurarsi che Outlook Express\nsia installato
correttamente!", "by Kiuhnm", MB_ICONSTOP);
  return 0;
 }
 strcat(buf, "\\msimn.exe");
 char path[512];
 ExpandEnvironmentStrings(buf, path, 512);
 GetShortPathName(path, buf, 512);
 // Controlla se msimn.exe è già in memoria
 HANDLE hsnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
 if (hsnap == INVALID_HANDLE_VALUE)
 {
  MessageBox(NULL, "Errore in CreateToolhelp32Snapshot!", "ERRORE!",
MB_ICONERROR);
  return 0;
 }
 PROCESSENTRY32 pe32;
 int ris = Process32First(hsnap, &pe32);
 while (ris)
 {
  if (!strcmp(pe32.szExeFile, "msimn.exe"))
   break;
  ris = Process32Next(hsnap, &pe32);
 }
 CloseHandle(hsnap);
 if (ris)
 {
  MessageBox(NULL, "OE presente in memoria: patch non applicato!", "SECURITY
ERROR!", MB_ICONERROR);
  return 0;
 }
 // Esegue msimn.exe
 STARTUPINFO startinfo;
 PROCESS_INFORMATION pinfo;
 startinfo.cb = sizeof(STARTUPINFO);
 startinfo.lpReserved = NULL;
 startinfo.lpDesktop = NULL;
 startinfo.lpTitle = NULL;
 startinfo.dwFlags = STARTF_USESHOWWINDOW;
 startinfo.cbReserved2 = 0;
 startinfo.lpReserved2 = NULL;
 startinfo.wShowWindow = SW_SHOW;
 if (CreateProcess(NULL, buf,
     NULL, NULL, 0, 0, NULL, NULL,
     &startinfo, &pinfo) == FALSE)
 {
  MessageBox(NULL, "File non trovato!", "ERRORE!", MB_ICONERROR);
  return 0;
 }
 WaitForInputIdle(pinfo.hProcess, INFINITE);
 hsnap = CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pinfo.dwProcessId);
 if (hsnap == INVALID_HANDLE_VALUE)
 {
  MessageBox(NULL, "Non è stato possibile applicare il patch!", "ERRORE!",
MB_ICONERROR);
  CloseHandle(pinfo.hThread);
  CloseHandle(pinfo.hProcess);
 }
 MODULEENTRY32 me32;
 ris = Module32First(hsnap, &me32);
 while (ris)
 {
  if (!stricmp("msoe.dll", me32.szModule))
   break;
  ris = Module32Next(hsnap, &me32);
 }
 CloseHandle(hsnap);
 if (ris)
 {
  // Applica il patch a "msoe.dll"
  DWORD cur_addr = (DWORD)me32.modBaseAddr;
  DWORD bread;
  BYTE *dest_buf = new BYTE[0x1000+0x10];
  int size;
  for (;;)
  {
   // Il codice da modificare si trova nella prima sezione (".text").
   // Leggendo i dati pagina (4 KB) per pagina si è in grado di leggere
l'intera
   // sezione senza conoscerne la dimensione effettiva.
   size = 0;
   if (!ReadProcessMemory(pinfo.hProcess, (BYTE *)cur_addr, dest_buf,
0x1000, &bread))
    break;
   size = bread;
   if (ReadProcessMemory(pinfo.hProcess, (BYTE *)cur_addr+bread,
dest_buf+bread, 0x10, &bread))
    size += bread;
   int pos;
   pos = find((char *)dest_buf, size,
"\xff\xd3\x8b\xf8\xf7\xdf\x1b\xff\x47\x8b\x45", 11);
   if (pos != -1)
   {
    // Modifica alcuni bytes
    ReadProcessMemory(pinfo.hProcess, (BYTE *)cur_addr+pos-0x2a, dest_buf,
0x2a+4, &bread);
    // Check
    size = 0;
    if (dest_buf[0] != 0x75 || dest_buf[0x2a+2] != 0x8b ||
dest_buf[0x2a+2+1] != 0xf8)
     break;
    // jne -> inc eax | dec eax
    dest_buf[0] = 0x40;
    dest_buf[1] = 0x48;
    // mov edi, eax -> xor edi, edi
    dest_buf[0x2a+2] = 0x33;
    dest_buf[0x2a+2+1] = 0xff;
    WriteProcessMemory(pinfo.hProcess, (BYTE *)cur_addr+pos-0x2a, dest_buf,
0x2a+4, &bread);
    size = 1;
    break;
   }
   cur_addr += 0x1000;
  }
  delete[] dest_buf;
  // Size viene usato anche come flag
  if (!size)
  {
   MessageBox(NULL, "Non è stato possibile applicare il patch\na questa
versione di OE!", "ERRORE!", MB_ICONERROR);
  }
 }
 else
 {
  MessageBox(NULL, "Non è stato possibile applicare il patch\na questa
versione di OE!", "ERRORE!", MB_ICONERROR);
 }
 CloseHandle(pinfo.hThread);
 CloseHandle(pinfo.hProcess);
 return 1;
}
Kiuhnm

 abilitato.
cut...
Ciao Kiuhnm,
sei sicuro che funziona?
Se veramente funzionasse allora qualcuno potrebbe anche cancellare messaggi
normali o no?
Maurus

 messaggi normali o no?
Ognuno fa quello che vuole con questo programma, però se ne prende la
responsabilità! Io ho dato il source code a scopo didattico.
Se qualcuno, magari lo spammer stesso(!), cancellasse messaggi altrui (non
palesemente promozionali) sarei VERAMENTE contento, così ci sarebbero gli
estremi per una bella denuncia.
Kiuhnm
P.S. Cancellato il messaggio, se vuoi verificare che sia stato
*effettivamente* cancellato, devi aggiornare i dati locali andando per
esempio sul ng, tasto destro, properties e poi Remove Messages (eliminerà il
corpo [non l'header] di ogni messaggio). Cliccando sul messaggio vedrai che
non esiste più.
Nel mio tempo libero ho anche scritto un Cancel Bot completamente
indipendente da OE che cancella o tutti i messaggi selezionati dall'utente
(in una volta sola) oppure analizza i nuovi messaggi di volta in volta che
vengono postati e automaticamente cancella gli spam (prima possono essere
visionati).
Ho deciso di non rilasciare il cancel bot perchè un uso improprio può
causare GRAVI danni (a chi lo usa ==> galera; a usenet ==> cancellazione
TOTALE!)
Pensa che per riconoscere gli spam estrae addirittura le url dai messaggi e
controlla se il sito è quello dello spammer (visitandolo, quindi anche se
cambia url funziona lo stesso :-)))
Puoi anche usarlo per vedere se qualcuno ti nomina in qualche post oppure
per eseguire ricerche del tipo ("Ciao, Kiuhnm" && "News") || ~("Maurus").
Le espressioni possono essere infinitamente lunghe e infinitamente
complesse. La ricerca può essere circoscritta all'header, al body,
all'intero messaggio, ai siti puntati dalle url, ecc...

Kiuhnm wrote:

hei ragazzo mica male come idea...
perche' non ti proponi di venderlo ai Fornitori del servizio NG e di posta?
Magari modificando qualcosa potrebbe integrare i filtri antispam (che 
effettivamente non sono il massimo).
-- 
  Powered by Power
  ** Gnu/Linux **
  Debian 3.0 woody
 Linux User #292845
Reply-to 
diego....@email.it

 effettivamente non sono il massimo).
Seeeee!
Ho già abbastanza casini col lavoro :-) (che è sempre programmare, ma cose
diverse...)
Se volessi venderlo dovrei aggiungere un'interfaccia grafica, dato che ora
funziona compilando un file di configurazione e sputando qualche MessageBox
ogni tanto!
Kiuhnm

 c'č in giro).
non sapevo si potessero cancellare i messaggi degli altri...
ma sei sicuro ?
possibile che non ci sia un controllo sull'ip o altro?
la cosa sembra veramente strana e soprattutto stupida
ciao :))

 possibile che non ci sia un controllo sull'ip o altro?
Sì, si può. Se ci fosse un controllo sull'ip non sarebbe ad esempio 
possibile cancellare un messaggio mandato nella precedente connessione 
dial-up.
In realtà un metodo migliore esiste, cioè i cancel-lock ma non sono 
utilizzati.
Non vi venga in mente di cancellare i messaggi di chi vi è antipatico 
perché è molto grave e il messaggio verrebbe probabilmente ripostato 
subito.
-- 
Marco Barisione

 subito.
difficilmente ci si puo' accorgere se un proprio messaggio è stato
cancellato da altri e chi lo ha fatto potrebbe avere  la scusa di usare un
porprio programma(non credo che si debbano usare solo client
approvati ).Questa cosa penso sia veramente una stupidata
ciao e grazie dell'informazione


Internet e i suoi protocolli nascono come mezzo di collaborazione, come al solito la palla
sta a chi li usa. Anche su molti Wiki! o Blog e' possibile per chiunque modificare
qualunque cosa, letteralmente. 
Come direbbe Forrest Gump, "stupido e' chi lo stupido fa" :-)
Ciao,
    Bruno.
---
| Bruno Bossola 
| A Java Software Engineer :-)
| 
http://digilander.iol.it/bbossola
|
| Membro del JUG Torino - 
http://www.jugtorino.it
| 

 Come direbbe Forrest Gump, "stupido e' chi lo stupido fa" :-)
ma č piena internet di stupidi :))
basterebbe un piccolo programmino per creare il caos.
/me perplesso
ciao :)

 utilizzati.
No, questi sono troppo pericolosi e ho deciso di non utilizzarli (e poi non
so quanti server li supportino realmente).
Kiuhnm

 /me perplesso
Mai sentito parlare di virus?
Kiuhnm

 Mai sentito parlare di virus?
e allora ?
che c'entra?


Mi e' stato appena detto su 
it.news.net-abuse.it
, esattamente il contrario.
Ovvero che chi utilizza il cancel, anche per buoni fini, come cancellare
porno messaggi che mettono link per farti installare dialer, allora sara'
severamente sanzionato.
A questo punto io mi domando:
- visto che le segnalazioni all'abuse di questi messaggi sono centinaia
- visto che i messaggi continuano periodicamente ad essere postati dalle
stesse organizzazioni che non vengono toccate
- visto che i messaggi di quel genere, piu' tempo stazionano e piu'
probabilita' hanno di fare danni.
....Ma cosa madosca aspettano a cancellarli?! Invece di intimare sanzioni a
gente che si e' rotta le palle giustamente, perche' non fanno almeno il
minimo, ovvero cancellarli?!
Queste cose mi fanno venire l'orticaria e non le capisco.
Maurus

 Queste cose mi fanno venire l'orticaria e non le capisco.
Probabilmente ci guadagnano tutti, altrimenti perchč in primo luogo
offrirebbero spazio gratis su Internet? Perchč sono generosi? Non credo...
Kiuhnm



Perché troppo pericolosi? Per i problemi sulla cancellazione dello spam? 
Comunque per quanto ne so nessun server li supporta anche se sono una RFC.
-- 
Marco Barisione

 cancellato da altri
Spesso sono altri ad accorgersene. Comunque quando usenet fu creata non 
c'erano questi problemi. Tutte le operazioni su usenet sono fatte con 
messaggi con header speciali, anche la creazione di nuovi gruppi.
Poiché alcuni hanno iniziato a mandare in giro messaggi di creazione 
cancellazione di gruppi si è iniziato a firmare i messaggi di controllo con 
PGP e ad eseguire solo i comandi firmati correttamente.
Per i cancel non è possibile.
-- 
Marco Barisione

 dialer, allora sara' severamente sanzionato.
Ho appena controllato...
Marco d'Itri ha detto:
"Attenzione: se dovessi accorgermi che qualcuno manda cancel malfatti
(e state certi che me ne accorgo), anche se si tratta di spam, farò in
modo che venga sanzionato con la massima severità.
Giocare con i cancel non è accettabile in nessun caso, nemmeno se le
intenzioni sono buone."
Direi che la parola chiave è "malfatti"!
Effettivamente il patch per OE manda messaggi malfatti...pensavo fossero più
permissivi.
Guarda, se vuoi la storia completa, ti puoi leggere il manuale (abbastanza
tecnico) che scrissi per usare il mio cancel-bot. Se vuoi te lo mando per
posta (è corto e scritto in Word: 73.5 KB).
Il cancel bot invia messaggi di cancellazione "ben formattati" e quindi
Marco d'Itri & Co. se ne dovrebbero restare buoni. Comunque il manuale te lo
consiglio per approfondire un po' le conoscenze riguardo ai ng (ti
garantisco che leggere le RFC è più palloso!).
Kiuhnm

 sono una RFC.
Ops, pensavo ti riferissi a un'altra cosa...tu invece parlavi dell'utilizzo
di un metodo a chiave hash sicura (md5, per citare il piů conosciuto).
Se invece si usasse un metodo a chiave pubblica la cosa sarebbe ancor piů
sicura.
Ovviamente bisognerebbe cambiare chiave pubblica e privata per ogni
messaggio (esistono metodi che non sfruttano i numeri primi e sono molto
veloci, ma *forse* meno sicuri).
Kiuhnm


Bha, non so che significhi malfatti, sono ingenuo io.
Sara' che non sono formattati in modo standard come dovrebbero essere dei
veri cancel ammessi.
Comunque dal poco che ho letto sull'argomento i bot sono considerati molto
pericolosi, perche' basta un baco e provocano disastri, come e' gia'
avvenuto in passato ed hanno dovuto usare i vari lazzari e resurrezioni per
ristabilire la frittata.
Comunque anche se fossero malfatti, che fastidio da' un cancel che ha
ottenuto il suo scopo? Ovvero quello di non far leggere quei messaggi
maledetti.
Maurus

 maledetti.
Hai posta!
Kiuhnm

 (forse ci sono ancora i vecchi post su google)
Infatti dissero che si puň, al contrario di quel che pensavo io:
http://groups.google.com/groups?hl=it&lr=&ie=UTF-8&oe=UTF-8&threadm=p50s8.134988%24%25g7.4271984%40twister2.libero.it&rnum=1&prev=/groups%3Fas_q%3Dcancel%26ie%3DUTF-8%26oe%3DUTF-8%26as_ugroup%3Dit.news.net-abuse%26as_uauthors%3DGerolamo%26lr%3D%26hl%3Dit
-- 
Gerolamo
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it


http://groups.google.com/groups?hl=it&lr=&ie=UTF-8&oe=UTF-8&threadm=p50s8.13
4988%24%25g7.4271984%
40twister2.libero.it
&rnum=1&prev=/groups%3Fas_q%3Dcance
l%26ie%3DUTF-8%26oe%3DUTF-8%26as_ugroup%3Dit.news.net-abuse%26as_uauthors%3D
Gerolamo%26lr%3D%26hl%3Dit
Grazie per il link.
Comunque se leggi l'ultimio post vedi d'Itri che mi rimprovera per non aver
messo il "tag" cyberspam nel path (poi invece ho scoperto che era colpa del
server tin che lo ignora [lo fa tuttora]).
I msg di cancellazione *devono* essere ben formattati: quelli inviati
tramite la patch a OE non sono ben formattati (dovrei modificare OE un bel
po'...).
In questo momento sto rimettendo mano alla parte manuale del mio cancel-bot.
Kiuhnm


Quando hai fatto il programma che formatta per bene i cancel, mettendoci
quindi quel cacchio di tag cyberspam che sembra debba per forza esserci, fai
un fischio e mandalo ai volenterosi che lo uso ben benino.
(ma se cancello sti cacchi di messaggi di dialer e poi questi non sono piu'
visibili, ottenendo quindi lo scopo prefisso, anche se non c'e' il tag nel
cancel ed e' "malfatto", a me sembra un cavillo del tubo)
Maurus

 del tubo)
Si fa per due motivi:
1) rende più complicata la procedura ed è più facile distinguere le persone
serie dai lamer. Chi manda messaggi formattati correttamente è affidabile
perchè si deve essere letto delle "specificazioni" sull'argomento.
2) i server che non accettano la cancellazione da parte di terzi (peggio per
loro) possono filtrare tutti i messaggi che presentano la parola cyberspam
nel path.
Kiuhnm
P.S. Eraser è completo e funzionante, ma non sono riuscito a trovare un
newsserver pubblico che accetti il posting e i messaggi di cancellazione.
(come già detto non posso usare il server della tin perchè "malforma" i
messaggi)
L'anno scorso usavo 
diesel.cu.mi.it
, ma adesso sembra messo veramente
male...
Al limite dovrò iscrivermi a quello tedesco (non ricordo il nome). Tu ne
conosci altri funzionanti?


Io uso quello tedesco e non mi ha mai dato problemi;
news.cis.dfn.de
dovresti iscriverti nel loro sito, dove penso ci sia la loro email dove
mandi i tuoi dati per registrarti e dopo un po' loro ti mandano la password
alla tua email.
Il sito e' qua, ci metti 5 minuti per registrarti:
http://news.cis.dfn.de/en/register.html
Poi ti mandano la password in giornata.
Altri free non ne conosco, uso anche quello di tiscali ma li' e' perche' ho
l'abbonamento e poi e' molto piu' lento.
Maurus