PDA

Visualizza versione completa : Script (CMD) che possa 'contenere' un exe


retalv
17-02-2007, 01.57.32
Mi spiego meglio...

Avrei l'esigenza di rendere univoco e non sostituibile un binario (exe) di pochi kb relativamente ad uno script, e vorrei poter propagare un solo file (lo script) con l'eseguibile incorporato in esso.

Teoricamente, con pipe et similia, credo sia fattibile creare un moduletto di conversione del binario in caratteri o hex in testo ed immagazinarlo come dati all'interno dello script in una forma sul tipo....

rem -------- main script ---------
if ......
del .....
cls
(ecc)
rem -------- end main -----------

rem ------- modulo di conversione script > exe --------
....
....
rem ------- end modulo conversione ------------------

rem -------- dbase exe -----------
db 23,12,3c,a0,11
db 1a,90,12,13,11
db .......
db........
rem --------- end dbase exe -------

...solo che il sottoscritto non e' sufficiente bravo da riuscirci!

L'unica cosa che sono in grado di fare sarebbe di compilare lo script ed includervi l'eseguibile per mezzo del compilatore, ma cosi' facendo diverrei schiavo del compilatore ad ogni modifica dello script...

Qualche idea in proposito?

Ciao!

P8257 WebMaster
17-02-2007, 02.03.09
Cioè tu vuoi distribuire un unico file e poi questo file si deve "automodificare" ?

retalv
17-02-2007, 12.35.08
Cioè tu vuoi distribuire un unico file e poi questo file si deve "automodificare" ?
Non proprio... Dovrebbe semplicemente poter ricreare, all'atto dell'esecuzione, il piccolo file "pippo.exe" preventivamente immagazzinato all'interno di esso.

Alias: lancio lo script (CMD), lo script genera il file pippo.exe per usarlo quando ne avra' bisogno, poi lo script continua a fare quello che deve...

Io pensavo ad una cosa tipo il vecchio protocollo kermit.

Generazione magazzino con routine esterna: leggere il binario, trasformarlo in caratteri dal 32 al 126 (stampabili) e tabellarli.

Rigenerazione eseguibile con routine inglobata nello script: leggere tabella di stampabili e ritrasfomarla in binario on-fly.

E' fattibile? :mm:

Ciao!

LoryOne
17-02-2007, 12.35.13
Mi pare di aver capito che il suo script debba contenere l'eseguibile stesso sotto forma di mera sequenza di bytes.
La prima parte controlla l'esistenza dell'eseguibile sulla macchina di destinazione, mentre la seconda parte lo installa semplicemente scrivendo la sequenza (byte code) sul pc di destinazione. ;)

Poichè sul PC di destinazione VBScript o JavaScript possono non essere eseguibili, il nostro amico vuole effettuare comunque l'operazione utilizzando un altro metodo e ci suggerisce come fare, magari attraverso l'utilizzo di pipes.

LoryOne
17-02-2007, 12.36.34
Leggo ora...appunto.

retalv
17-02-2007, 12.54.17
Poichè sul PC di destinazione VBScript o JavaScript possono non essere eseguibili, il nostro amico vuole effettuare comunque l'operazione utilizzando un altro metodo e ci suggerisce come fare, magari attraverso l'utilizzo di pipes.

Esatto!

Ma non ho preclusioni su VBScript o JavaScript a patto di poter poi fondere anche queste routines nell'unico file comandi e, se come penso sono interpretati, a questo riesco a pensarci io...

Il fatto e' che non so gestire gli script di VB e Java, mentre mi arrangio con i CMD, quindi devo appoggiarmi forzatamente a quelli...

Potendo scegliere preferirei Java che e' sempre presente su tutte le macchine.

Ciao!

P8257 WebMaster
17-02-2007, 12.56.31
.. Mi sembra un po' pericoloso .. soprattutto se distribuisci uno script che alla fine si può modificare anche con notepad.. perché non fare qualcosa di compilato, magari in C e che ingloba in sé il corpo (come risorsa) di un altro file compilato che poi "sputa fuori" all'occorrenza ?

retalv
17-02-2007, 13.03.27
.. Mi sembra un po' pericoloso .. soprattutto se distribuisci uno script che alla fine si può modificare anche con notepad.. perché non fare qualcosa di compilato, magari in C e che ingloba in sé il corpo (come risorsa) di un altro file compilato che poi "sputa fuori" all'occorrenza ?

A questo ero gia arrivato ed infatti...

L'unica cosa che sono in grado di fare sarebbe di compilare lo script ed includervi l'eseguibile per mezzo del compilatore, ma cosi' facendo diverrei schiavo del compilatore ad ogni modifica dello script...

Che sia facilmente modificabile ne sono consapevole, ma se ho chiesto un metodo alternativo ci saranno ragioni per cui... ;)

Ciao!

Ciao!

P8257 WebMaster
17-02-2007, 17.22.30
Ok, ora che abbiamo ben compreso il problema, vediamo di decidere come implementarlo .. che linguaggio preferisci / conosci meglio (appurato ovviamente che escludiamo lo script a lato shell) ?

retalv
17-02-2007, 18.19.56
Ok, ora che abbiamo ben compreso il problema, vediamo di decidere come implementarlo .. che linguaggio preferisci / conosci meglio (appurato ovviamente che escludiamo lo script a lato shell) ?

Le mie routine sono scritte in un file comandi .cmd o .bat che dir si voglia, ma se sei (siete) capace di implementarlo in JavaScript vale quello che ho scritto in precedenza, cioe'...

Ma non ho preclusioni su VBScript o JavaScript a patto di poter poi fondere anche queste routines nell'unico file comandi e, se come penso sono interpretati, a questo riesco a pensarci io...

Alias:
-----
uno script Java e' in testo, ad esempio...

<script type="text/javascript">
for (n=0;n<history.lenght;n++) {
document.writeln(history[n].value);
}
</script>

...e una cosa del genere me la posso gestire io senza problemi, nel senso che trasmuto l'intero modulo e lo inserisco paripari nel mio file comandi. Non ho bisogno di conoscere quel linguaggio, perché lo inserisco come testo. Quando ne ho bisogno lo rigenero e lo lancio.

Quindi quello che mi servirebbe e' uno script GENERATORE che riesca a creare un secondo modulo a se stante comprendente la procedura di restore del file .exe ed ovviamente il file eseguibile stesso in qualche formato compatibile, ma sempre nello script java.

La procedura operativa, se mi aiutate a farla, sara' quindi la seguente...

1) Modulo java di GENERAZIONE: lancio il modulo che mi chiedera' che file .exe intendo inglobare e creera' il secondo modulo con estrattore ed eseguibile incluso.

2) Inglobo nel mio file comandi Windows il secondo modulo java creato.

3) Lancio il file comandi Windows che si occupera' di rigenerare il secondo modulo java per poi lanciarlo e ricomporre il file eseguibile incorporato in ques'tultimo.

4) Il file comandi Windows usera' quando e' lecito il file .exe e prima di terminare tutti i suoi compiti eliminera' sia il modulo java sia il file .exe preventivamente creati.

Se riuscite a darmi una mano in questo... :)

Ciao!

Dimenticavo... grazie anticipatamente anche del solo interessamento...

P8257 WebMaster
21-02-2007, 00.57.11
Allora per dare seguito al thread,

Io ci ho riflettuto un po' e posso dirti questo:

Per quelle che sono le mie competenze ti posso proporre una soluzione che secondo me sarà anche un po' più lontana dai tuoi intenti ma magari è un po' più sicura. Non so come poter efficacemente intragrare un binario in uno script di tipo shell, tenendo conto di quello che abbiamo detto sopra riguardo la sua editazione e in fin dei conti se fai lo stesso discorso con javascript non cambia (con java invece il codice andrebbe a lato server, il che equivale a far "scaricare" al client l'eseguibile "interno" senza inglobarlo effettivamente nel progetto)

Quindi ti propongo la seguente soluzione:
1 - creare un EXE stand alone che prende "in pasto" un secondo file EXE che verrà inglobato in un terzo file
2 - Un terzo file (sempre EXE) che ingloba il secondo file EXE dato in pasto al primo e che, oltre a "sputarlo fuori" (ed eventualmente eseguirlo), esegue anche altre azioni prima o dopo questa procedura.
3 - Un file CMD che al termine di tutto cancella ogni traccia del "lavoro svolto".

retalv
21-02-2007, 03.55.31
Purtroppo non e' quello che mi serve... :crying:

Il mio bisogno primario e' poter agevolmente modificare lo script shell, quindi se devo avere degli eseguibili che mi inglobano... ecc. ecc. tanto vale che scrivo tutto in C con delle gran chiamate esterne e amen...

Io cercavo di trovare la convenienza su entrambi i fronti, in poche parole lavorare (molto a grandi linee) come in Piton... il bello dell'interpretato con all'occorrenza un semplice allaccio al binario. (Sottolineo il "molto a grandi linee", perche' nel caso il binario viene usato esclusimamente per problemi di velocita', in interpretato puoi fare praticamente tutto...)

Peccato... grazie ugualmente. :)

Ciao!

LoryOne
21-02-2007, 09.18.02
Peccato è ancora da vedere :D ;) e comunque il Web non l'ha detta tutta.
Io ho un po di riluttanza ad esprimermi in merito, perchè vedo un' enorme pericolosità dal punto di vista della sicurezza, anche se ritengo il tuo post veramente interessante per l'idea che proponi.
Chissà che prima o poi non si trovi in rete qualcosa che trovi risposta concreta alle tue necessità.
Intanto ci penso ;) ...

P8257 WebMaster
21-02-2007, 11.49.06
Purtroppo non e' quello che mi serve... :crying:

Il mio bisogno primario e' poter agevolmente modificare lo script shell, quindi se devo avere degli eseguibili che mi inglobano... ecc. ecc. tanto vale che scrivo tutto in C con delle gran chiamate esterne e amen...

Io cercavo di trovare la convenienza su entrambi i fronti, in poche parole lavorare (molto a grandi linee) come in Piton... il bello dell'interpretato con all'occorrenza un semplice allaccio al binario. (Sottolineo il "molto a grandi linee", perche' nel caso il binario viene usato esclusimamente per problemi di velocita', in interpretato puoi fare praticamente tutto...)

Peccato... grazie ugualmente. :)

Ciao!

Lory ha ragione ;) .. a parte i problemi di sicurezza .. è presto per rassegnarsi .. anche perché ho detto che IO non saprei come integrare le due cose in un modo veramente funzionale (e funzionante :D) . ma magari qualcuno di cui o da altre parti non ha problemi a farlo...

In ogni caso se la velocità è il tuo problema e se vuoi usare un binario per le sue prestazioni (a ragione) potresti fare un pacchetto con dentro un package java per esempio che si interfaccia via jni ad una dll o ad un .so (sotto unix) scritto in linguaggio nativo.. in questo modo avresti un codice relativamente semplice da modificare (java non è interpretato ma è come se lo fosse dato che è multipiattaforma, facile da ricompilare e può andare a lato server) e un binario "performante"...

retalv
21-02-2007, 19.30.56
Per prima cosa, grazie ad entrambi per le risposte... e gia che ci sono rispondo ad entrambi. :)

Capisco la riluttanza sulla sicurezza che avete ma, tanto per chiarire, il piccolo binario in questione, oltre a fare quello che deve, al momento controlla anche la validita' dello script che lo esegue con sha1 e se trova un bit diverso semplicemente non esegue ed esce fornendo l'errorlevel di competenza. ;)

Se riuscirò mai a vederlo inglobato modifichero' la routine dell'sha per farla eseguire fino ad un 'marcatore' inserito nello script escludendo tutta la parte 'aliena' eventualmente presente. Per quello che mi riguarda e' piu' che sufficiente.

Per la velocita' degli eseguibili, personalmente non e' importante, era solo per chiarire l'esempio.

Ho cercato nel web sull'argomento, ma senza risultati apprezzabili e sinceramente non penso di imparare un linguaggio per ottendere solo questo... motivo per cui ho scritto il presente post. :)

Se nel frattempo vi viene in mente qualche cosa o ci sbattete contro col monitor ... fate un fischio... :)

Ciao e ancora grazie!