Newsgroup: it.comp.macintosh
Titolo: come inverto dei bytes?

 FF)?
Hai una stringa che prelevi come? E' in un file? La immetti tu?
Intendi con stringa una semplice sequenza di bytes oppure una 'stringa
di caratteri'?
A seconda delle tue risposte c'č un metodo piů comodo. In generale io
penso che un programma C che lo fa sia probabilmente il metodo piů
rapido che mi viene in mente. In determinati casi in Python fai prima..
ma appena mi dai piů info se vuoi te lo scrivo e basta.
-- 
-riko

 ma appena mi dai più info se vuoi te lo scrivo e basta.
Beh, che dire: ti ringrazio della disponibilità :-)
Se ti serve un file di esempio, fammi sapere.


 Se ti serve un file di esempio, fammi sapere
Io l'ho scritta, ma c'è un problema, devi darmi un file di esempio.
Sostanzialmente l'inghippo è che la stringa che mi hai dato da provare,
su OS X diventa UTF-8 e non riesco a metterlo dentro con la "vecchia"
codifica.
Comunque la procedura applicata due volte alla stessa stringa fa quello
che deve.
Io il programma te lo ho fatto. Come vuoi che ti mandi il sorgente?
-- 
-riko

 Ad esempio, Ø≠∞º∫ª™≠∫ invertito si legge PROCEDURE
questo dovrebbe fare al caso tuo:
#include <stdio.h>
int main(int argc, char **argv)
{
  FILE *in, *out;
  if (argc < 3)
  {
    fprintf(stderr, "Parametri insufficienti!\n");
    fprintf(stderr, "Uso: arruba inputfile outputfile.\n");
  }
  if (!(in = fopen(argv[1], "r")))
  {
    fprintf(stderr, "Errore durante l'apertura del file di ingresso.\n");
    exit(1);
  }
  char flipped[4096];
  char buf[1];
  int pos = 0;
  while (fread(buf, 1, 1, in) > 0)
  {
    flipped[pos] = (buf[0] ^ 0xFF);
    pos++;
  }
  if (!(out = fopen(argv[2], "w")))
  {
    fprintf(stderr, "Errore durante l'apertura del file di uscita.\n");
    exit(1);
  }
  if (fwrite(flipped, pos, 1, out) < 1)
  {
    fprintf(stderr, "Errore durante la scrittura del file.\n");
    exit(1);
  }
  return 0;
}
-- 
Quello che io penso sia utile è di avere il governo il più vicino
possibile a me e lo stato, se proprio non se ne può fare a meno,
il più lontano possibile dai coglioni. (Fabrizio De André)

 Ad esempio, Ø≠∞º∫ª™≠∫ invertito si legge PROCEDURE
questo dovrebbe fare al caso tuo:
#include <stdio.h>
int main(int argc, char **argv)
{
  FILE *in, *out;
  if (argc < 3)
  {
    fprintf(stderr, "Parametri insufficienti!\n");
    fprintf(stderr, "Uso: arruba inputfile outputfile.\n");
    exit(1);


 
ti mando sia la versione in chiaro che quella encripted. Dammi una mail,
anche per mail: la mia è roberto sul dominio in firma.
Sono un poco diverse,perché il processo di encription sostituisce dei
simboli (_xx dove xx è un numero) ai nomi, ma se uno si trova col source
illeggibile...


 simboli (_xx dove xx č un numero) ai nomi,
Che intendi?
Io avevo capito che la criptatura veniva fatta con uno xor bit a bit sui 
singoli caratteri, quindi sottraendo il codice ascii del carattere a 
255. Quando scrivi che sostiusci "_xx" mi fai pensare che tu dopo abbia 
scritto come stringa il valore ascii risultante.

 illeggibile...
ok.
-- 
-riko

 scritto come stringa il valore ascii risultante.
no: la coifica avviene come dici tu, ma ad esempio (è derivato dal
Pascal)
VAR
pippo : STRING;
dopo la codifica e dopo che è stato rifatto l'XOR per renderlo
umanamente leggibile, arriva
_10 : STRING;
idem per i nomi delle procedure, variabili, ecc.


 questo dovrebbe fare al caso tuo:
grazie!
lo provo al piů presto


 un file
encripted e lo stesso no.
Quello encripted ha inoltre due word all'inizio, che segnala quello
stato.
Giusto per chi volesse provare.


 idem per i nomi delle procedure, variabili, ecc.
Ora sě che sono in alto mare.
Ho visto il pacchetto che hai messo a disposizione, credevo che con una 
xor bit a bit il numero di byte dovesse rimanere lo stesso, a meno di 
quelle due word all'inizio di cui parli. Invece il file criptato ne ha 
meno di un terzo.

 meno di un terzo.
Il file crittato č ottenuto con due trasformazioni: una di
ottimizzazione, in cui a stringhe di caratteri (nomi delle variabili,
nomi delle routines, ecc.) vengono sostituiti dei numeri e inoltre
vengono eliminati gli spazi non necessari ed i ritorno a capo (e questo
spiega la dimensione molto piů piccola), e poi bengono codificati
appunto con l'inversione dei bytes (ci vengono anche aggiunti due bytes
in testa che segnalano che si tratta di testo codificato e che in hex
sono 80FD FFFF).
Invertendo i bytes della parte codificata, si ottiene di nuovo il testo
in chiaro, cioč leggibile dall'umano (che nonostante le apparenze sarei
io...) ma non il testo prima della cura dimagrante, ovviamente.
E' per questa ragione che i due files che ho postato sono diversi, ma
funzionalmente uguali.
Comunque, grazie ancora del tuo interesse per il mio piccolo problema.


 idem per i nomi delle procedure, variabili, ecc.
che bello il codice offuscato.
-- 
-riko

 stato.
Puoi facilmente modificare il coso che ti ho dato (ammesso che si
avvicini a quello che deve) facendogli mangiare due parole fuori dal
loop. Ammesso che parliamo di parole di 32 bit direi che te la puoi
cavare aggiungendo un fread che legge la dimensione di due interi.
-- 
-riko

 io...) ma non il testo prima della cura dimagrante, ovviamente.
Ora è chiaro, immagino che la tabella delle sostituzioni la mantenga tu 
da parte dato che _0 è tutta quella lunga descrizione iniziale specifica 
per Picchetti.
Immagino che tu abbia già risolto, io ci ho provato con lua senza alcun 
tipo di controllo per gli errori:
#!/opt/local/bin/lua
if arg[1] then 
   f=io.input(arg[1])
   s=string.sub(io.read("*all"),5)
   n=string.gsub(s,".",
      function (c)
         return string.char(255-string.byte(c))
      end )
   print(n)
   io.close(f)
end

 Puoi facilmente modificare il coso che ti ho dato 
py ?

 wrote:

si, grazie: ma visto che quello che esce è testo, lo si può anche
cancellare dopo a manina.


 py ?
c
-- 
-riko

 c
Salute.

 Salute.
Ma no. In fondo il C mi è naturale come respirare. E' una vita che ci
programmo. 
-- 
-riko

 programmo.
Missed, dicevo salute dopo lo starnuto ( "c" ).

 Missed, dicevo salute dopo lo starnuto ( "c" ).
ahhhh
-- 
-riko