Zoom Icon

Perl e Gtk2

From UIC Archive

Perl e GTK2

Contents


Perl e Gtk2
Author: dlrm9m
Email: [email protected]
Website: Home page
Date: 10/01 /2007 (dd/mm/yyyy)
Level: Slightly hard
Language: Italian Flag Italian.gif
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!!

  1. La prima cosa da fare è assicurasi di aver le le gtk2 installate..Facciamo che questa parte la salto???
  2. Aprite gedit o kate o nano o vi o quello che più vi garba

Includiamo per prima cosa le Gtk2 e inizializziamole con: use Gtk2; Gtk2->init; Creiamo ora la nostra finestra e visualizziamola semplicemente con $finestra=Gtk2::Window->new('toplevel');#posizionata all'angolo sup sx $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 " [email protected]:~$ perl test.pl 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

Nickname [ ] Password [ ] (CONFERMA)#facciamo finta che sia un pulsante

Ora se volessimo racchiudere questi 5 elementi dentro una tabella potremmo fare così

        1               2

0---------|---------------|

Nickname |[             ]|

1---------|---------------|

Password |[             ]|

2---------|---------------|

         |   (Button)    |

3---------|---------------|


Notiamo che gli elementi sono disposti come : Nickname:nella riga 0-1 e la colonna 0-1 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 Gtk2::Label->new("testo della label");

Noi ne creeremo due $nick_label=Gtk2::Label->new("Nickname"); $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 $entry = Gtk2::Entry->new; 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 $nick_text=Gtk2::Entry->new; $pass_text=Gtk2::Entry->new;

Infine il button $conferma=Gtk2::Button->new("CONFERMA");


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 Gtk2::Table->new(righe,colonne,resize); 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à: $table=Gtk2::Table(3,2,TRUE); Ora che abbiamo creato la tabella bisogna incastrarci dentro gli altri widget Ricordate lo schema che avevamo scritto??Riprendiamolo Nickname:nella riga 0-1 e la colonna 0-1 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 ;)

use Gtk2; 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

$conferma->signal_connect(clicked=>,\&verifica);#punta alla sub verifica

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 sub verifica {

$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!!!!!

use Gtk2; 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 malevole 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.