Perl e Gtk2
From UIC
Perl e GTK2
Contents |
| Infos | |
|---|---|
| Author: | dlrm9m |
| Email: | m9m@tiscali.it |
| Website: | Home page |
| Date: | 10/01 /2007 (dd/mm/yyyy) |
| Level: |
|
| Language: | Italian |
| Comments: | ..La felicità non ha prezzo...Per tutto il resto c'è un colpo di calibro 38 |
Introduzione
Penso che chiunque abbiamo provato almeno una volta a programmare con le QT e credo che sia arrivato il momento per queste persone di vedere anche la potenza e semplicità delle gtk . Il tutorial sarà basato su un prog sviluppato in perl, se non avete mai avuto a che fare con perl non vi preoccupate..;) Faremo un piccolo crackme di esempio[naturalmente inutile ma che vi aiuterà, spero, a capire qualcosina]
Link e Riferimenti
Per maggiori info visitate il sito delle GTK
Essay
And now let's start!!
- La prima cosa da fare è assicurasi di aver le le gtk2 installate..Facciamo che questa parte la salto???
- Aprite gedit o kate o nano o vi o quello che più vi garba
Includiamo per prima cosa le Gtk2 e inizializziamole con:
Gtk2->init;
Creiamo ora la nostra finestra e visualizziamola semplicemente con
$finestra->show();#e con show() mostriamo la finestra
Gtk2->main;
0;
Due cose sole faremo con la finestra e cioè: usare il metodo add per aggiungere i componenti (widget) ad essa e farli visualizzare, e il metodo show per mostrarla.
Salviamo come test.pl andiamo sulla console e scriviamo "
Se tutto va bene vi apparirà un finstra ...Si??? OK procediamo.
Struttura del programma
Quello che sfrutteremo sul crackme sarà una struttura tabulare .Immaginiamo come dovrebbe essere visivamente il crackme
Password [ ]
(CONFERMA)#facciamo finta che sia un pulsante
Ora se volessimo racchiudere questi 5 elementi dentro una tabella potremmo fare così
0---------|---------------|
Nickname |[ ]|
1---------|---------------|
Password |[ ]|
2---------|---------------|
| (Button) |
3---------|---------------|
Notiamo che gli elementi sono disposti come :
Password:nella riga 1-2 e la colonna 0-1
Button :nella riga 2-3 e la colonna 1-2
BoxNick :nella riga 0-1 e la colonna 1-2
BoxPass :nella riga 1-2 e la colonna 1-2
Spero di essere stato chiaro e di non avervi fatto confondere ma questo schema ci servira dopo per comporre il mosaico...
Vediamo ora i componeti che ci serviranno
LABEL:
Creiamo semplicemente la label con
Noi ne creeremo due
$pass_label=Gtk2::Label->new("Password");
Per adesso non ponetevi interrogativi su dove metterli sul codice. Questo lo vedremo dopo, l'importante è che capiate come crearle
Passiamo alla textbox o semplicemente dette ENTRY
Per la creazione ci serve solo questo. Al resto penseremo dopo (vi starete chiedendo..."o ma sto qua dice sempre dopo ma dopo quando..".. Presto)
Ne serviranno anche due di queste
$pass_text=Gtk2::Entry->new;
Infine il button
Costruiamo la GUI
Ora che sappiamo come creare i componenti vediamo la base di tutta la GUI e cioè la famosa tabella di cui vi parlavo
Per creare un widget tabel usiamo
Righe:Il numero di righe
Colonne:il numero di colonne
Resize:TRUE setta la larghezza in base al widget più largo, FALSE setta la tabella in maniera omogenea
Quindi la nostra 3X2 sarà:
Ora che abbiamo creato la tabella bisogna incastrarci dentro gli altri widget Ricordate lo schema che avevamo scritto??Riprendiamolo
Password:nella riga 1-2 e la colonna 0-1
Button :nella riga 2-3 e la colonna 1-2
BoxNick :nella riga 0-1 e la colonna 1-2
BoxPass :nella riga 1-2 e la colonna 1-2
Per fare ciò usiamo il metodo attach_defaults strutturato così
attach_defaults(widget,rigainizio,rigafine,colonnainizio,colonnafine);
Widget:il nostro componente
Rigainizio,Rigafine:Qui ci vanno gli intervalli.Per esempio per il nick_label avremo 0,1
Colonnainizio, Colonnafine:Stessa cosa perle righe.PEr il nick_label avremo 0,1
Detto questo scriviamo un po' di codice ;)
Gtk2->init;
$finestra=Gtk2::Window->new('toplevel');#posizionata all'angolo sup sx
$table=Gtk2::Table->new(3,2,TRUE);
$finestra->add($table);#aggiungiamo il widget alla finestra
$nick_label=Gtk2::Label->new("Nickname");#creiamo le 2 label
$table->attach_defaults($nick_label,0,1,0,1);#incastriamo
$nick_label->show();#e visualizziamo la label
$pass_label=Gtk2::Label->new("Password");
$table->attach_defaults($pass_label,0,1,1,2);#incastriamo
$pass_label->show();#e visualizziamo la label
$nick_text=Gtk2::Entry->new;#creiamo le due textbox
$table->attach_defaults($nick_text,1,2,0,1);#incastriamo
$nick_text->show();
$pass_text=Gtk2::Entry->new;
$table->attach_defaults($pass_text,1,2,1,2);#incastriamo
$pass_text->show();
$conferma=Gtk2::Button->new("CONFERMA");#infine il button
$table->attach_defaults($conferma,1,2,2,3);
$conferma->show();
$table->show();#mostriamo la Table
$finestra->show();#mostriamo la finestra
Gtk2->main;#Non dimentichiamo il main ......
0;
Prima di tutto assegnamo al button un listner(ascoltatore di eventi) e una funzione per l'evento clicked
Questo lo mettiamo prima dello show del button;Così facendo abbiamo attribuito al tasto conferma una sub che svolgerà il compito di prendere il nick, generare la relativa password e infine verificare la correttezza di quella inserita
$conferma=Gtk2::Button->new("CONFERMA");
$table->attach_defaults($conferma,1,2,2,3);
$conferma->signal_connect(clicked=>,\&verifica);#punt a sub verifica
$conferma->show();
...
Ok ora costruiamo la nostra sub in puro perl(o quasi).Non la commento perché lo scopo del tut è l'uso delle gtk ..non del perl :P
{
$nickname=$nick_text->get_text();#prendiamo il testo del nick con il metodo get_text
$i=0;
for($i=0;$i<=length($nickname);$i++)
{
#$temp=ord($nickname,$i,1)
$temp=unpack("C*",substr($nickname,$i,1)) *6 |50 * 6 /3 *1;
$exit.=$temp;
}
$pass_text->set_text($exit);
if($password==$exit)
{
$pass_text->set_text("OK");
$nick_text->set_text("OK");
}
}
Source finale
Ok ora che abbiamo tutto quello che ci serve scriviamo il codice finale del nostro crackme!!!!!
Gtk2->init;
sub verifica
{
$nickname=$nick_text->get_text();
$i=0;
for($i=0;$i<=length($nickname);$i++)
{
#$temp=ord($nickname,$i,1)
$temp=unpack("C*",substr($nickname,$i,1)) *6 |50 * 6 /3 *1;
$exit.=$temp;
}
$pass_text->set_text($exit);
if($password==$exit)
{
$pass_text->set_text("OK");
$nick_text->set_text("OK");
}
}
$finestra=Gtk2::Window->new('toplevel');#posizionata all'angolo sup sx
$table=Gtk2::Table->new(3,2,TRUE);
$finestra->add($table);#aggiungiamo il widget alla finestra
$nick_label=Gtk2::Label->new("Nickname");
$table->attach_defaults($nick_label,0,1,0,1);#incastriamo
$nick_label->show();#e visualizziamo la label
$pass_label=Gtk2::Label->new("Password");
$table->attach_defaults($pass_label,0,1,1,2);#incastriamo
$pass_label->show();#e visualizziamo la label
$nick_text=Gtk2::Entry->new;
$table->attach_defaults($nick_text,1,2,0,1);#incastriamo
$nick_text->show();
$pass_text=Gtk2::Entry->new;
$table->attach_defaults($pass_text,1,2,1,2);#incastriamo
$pass_text->show();
$conferma=Gtk2::Button->new("CONFERMA");
$table->attach_defaults($conferma,1,2,2,3);
$conferma->signal_connect(clicked=>,\&verifica);#funzione o cosidetta sub verifica
$conferma->show();
$table->show();
$finestra->show();
Gtk2->main;#Non dimentichiamo il main ......
0;
OK è tutto spero di aver condiviso con voi quel po' di sapere!!!!
Note Finali
Ringrazio Que per il fantasticho wiki e tutto forum per le grandi risate che mi faccio leggendo le disavventure di alcuniiiii (non faccio nomi ehehe).. E naturalmente per gli aiuti di tutti!!
P.S. Que ma il mex che si metteva in alto a dx e a sx????MIIIIIIIIIIIIIIIIII
Que: Beh lo puoi mettere nella zona commenti dell'heading, su due righe ;p
Disclaimer
I documenti qui pubblicati sono da considerarsi pubblici e liberamente distribuibili, a patto che se ne citi la fonte di provenienza. Tutti i documenti presenti su queste pagine sono stati scritti esclusivamente a scopo di ricerca, nessuna di queste analisi è stata fatta per fini commerciali, o dietro alcun tipo di compenso. I documenti pubblicati presentano delle analisi puramente teoriche della struttura di un programma, in nessun caso il software è stato realmente disassemblato o modificato; ogni corrispondenza presente tra i documenti pubblicati e le istruzioni del software oggetto dell'analisi, è da ritenersi puramente casuale. Tutti i documenti vengono inviati in forma anonima ed automaticamente pubblicati, i diritti di tali opere appartengono esclusivamente al firmatario del documento (se presente), in nessun caso il gestore di questo sito, o del server su cui risiede, può essere ritenuto responsabile dei contenuti qui presenti, oltretutto il gestore del sito non è in grado di risalire all'identità del mittente dei documenti. Tutti i documenti ed i file di questo sito non presentano alcun tipo di garanzia, pertanto ne è sconsigliata a tutti la lettura o l'esecuzione, lo staff non si assume alcuna responsabilità per quanto riguarda l'uso improprio di tali documenti e/o file, è doveroso aggiungere che ogni riferimento a fatti cose o persone è da considerarsi PURAMENTE casuale. Tutti coloro che potrebbero ritenersi moralmente offesi dai contenuti di queste pagine, sono tenuti ad uscire immediatamente da questo sito.
Vogliamo inoltre ricordare che il Reverse Engineering è uno strumento tecnologico di grande potenza ed importanza, senza di esso non sarebbe possibile creare antivirus, scoprire funzioni malevoli e non dichiarate all'interno di un programma di pubblico utilizzo. Non sarebbe possibile scoprire, in assenza di un sistema sicuro per il controllo dell'integrità, se il "tal" programma è realmente quello che l'utente ha scelto di installare ed eseguire, né sarebbe possibile continuare lo sviluppo di quei programmi (o l'utilizzo di quelle periferiche) ritenuti obsoleti e non più supportati dalle fonti ufficiali.
Categories: Programming | Perl | Dlrm9m | 2007