Installazione:
# pkg install wireguard
Generazione delle coppie di chiavi:
$ wg genkey | tee /usr/local/etc/wireguard/server-private.key | wg pubkey > /usr/local/etc/wireguard/server-public.key
$ wg genkey | tee /user/local/etc/wireguard/client-private.key | wg pubkey > /usr/local/etc/wireguard/client-public.key
Configurazione dell’interfaccia lato server, wg0.conf:
# Configurazione server
[Interface]
Address = <IP dell'interfaccia di rete di Wireguard>/24
PrivateKey = <CHIAVE PRIVATA>
ListenPort = <Porta UDP sulla quale ricevere le connessioni VPN>
[Peer]
PublicKey = <CHIAVE PUBBLICA DEL CLIENT>
AllowedIPs = <Indirizzo IP che avrà il client>/32
Configurazione dell’interfaccia lato client: /usr/local/etc/wireguard/client.conf
# Configurazione client
[Interface]
# Chiave privata client
PrivateKey = <qui ci va il contenuto di client-private.key>
Address = <IP che verrà assegnato al client>/32
DNS = <IP del DNS usato sul server VPN oppure altro DNS pubblico>
[Peer]
#WireGuard server public key
PublicKey = <qui ci va il contenuto di server-public.key>
AllowedIPs = 0.0.0.0/0, ::/0
Endpoint = <Indirizzo IP pubblico del server VPN>:<porta del server VPN>
PersistentKeepalive = 25
Generazione QR code per configurare il client
$ pkg_add libqrencode
$ qrencode -t ansiutf8 < /usr/local/etc/wireguard/client.conf
Acquisire il QR code con il client wireguard, ad esempio quello per Android
Configurazione del firewall PF in /etc/pf.conf
wireguard_clients="<subnet della VPN>/24"
wanint="em0" # Interfaccia WAN
wg_ports="51845" # Porta della VPN
set skip on lo0
nat on $wanint inet from $wireguard_clients to any -> $wanint
pass in on $wanint proto udp from any to $wanint port $wg_ports
pass in on $wanint proto tcp from any to $wanint port 22 keep state # Accesso SSH dalla VPN
pass out quick
pass in on wg0 from any to any
Abilitare il packet forwarding:
sysctl -w net.inet.ip.forwarding=1
Abilitare il firewall PF per fare una prova:
service pf onestart
Test della VPN:
wq-quick up wg0
Verifica funzionamento lato server. Se la VPN è su e la connessione con il client funziona, l’output di wg show dovrebbe essere simile a questo:
$ wg show
interface: wg0
public key: <deve corrispondere a server-public.key>
private key: (hidden)
listening port: <porta della VPN>
peer: <deve corrispondere a client-public.key>
endpoint: <Indirizzo IP pubblico del client>
allowed ips: <Indirizzo IP del client connesso alla VPN>
latest handshake: 5 minutes, 54 seconds ago
transfer: 15.60 KiB received, 48.21 KiB sent
Verifiche da fare lato client:
Abilitare il firewall PF all’avvio:
sysrc pf_rules="/etc/pf.conf"
sysrc pf_enable=YES
sysrc pflog_enable=YES
Abilitare il packet forwarding all’avvio:
sysrc gateway_enable=YES
Abilitare VPN all’avvio:
sysrc wireguard_enable=YES
sysrc wireguard_interfaces="wg0"
service wireguard start
Bibliografia:
]]>
Here it is how to do it:
First of all, you have to replace -j LOG in your rules with -j NFLOG
this will stop iptables from logging to standard syslog and switch to sending log packets via multicast. You’ll have to assign a number from 0 to 2^16-1 to the nflog_netlink multicast group, the default is 1
Plus you can associate a label to the logging rule using –nflog-prefix.
The iptable rule should resemble this:
(blablabla...) -j NFLOG --nflog-group 32 --nflog-prefix iptables
Because you won’t be using syslog anymore, you can’t just rely on rsyslogd anymore, you will need to install ulogd2. It is not mandatory, you can use whatever you like to fetch data from the multicast socket, including wireshark or writing your own code. Since I just want a different logfile, ulogd2 is perfectly fine.
sudo apt-get install ulogd
Open up /etc/ulogd.conf and check that it contains these lines:
plugin="/usr/lib/x86_64-linux-gnu/ulogd/ulogd_output_LOGEMU.so"
(Mine’s a 64 bit install, it will probably look slightly different on 32 bit)
stack=log1:NFLOG,base1:BASE,ifi1:IFINDEX,ip2str1:IP2STR,print1:PRINTPKT,emu1:LOGEMU
Make sure no other “stack” lines are uncommented
# Logging of system packet through NFLOG [log1] # netlink multicast group (the same as the iptables --nflog-group param) # Group O is used by the kernel to log connection tracking invalid message group=32
Make sure group=n exactly matches the –nflog-group n rule in iptables! And make sure this is the only [log1] section in the configuration file
[emu1] file="/var/log/iptables.log" #sync=1
If you want immediate logging, albeit slower, just uncomment sync=1, otherwise you might observe a small delay before the lines apper in the logfile.
Restart ulogd
sudo service ulogd restart
Voilà!
Oh and one last thing:
If your log remains empty, make sure the NFLOG rules come before the DROP rules
]]>1. duplica tutte le linee del file
:g/^/norm yyp
2. sostituisci un pattern in tutte le linee pari
:g/^/if !(line('.')%2)|s/foo/bar/g|endif
]]>
La prima opzione sarebbe quella di creare una partizione FAT32 o NTFS che faccia da tramite tra i due sistemi e spostarci dentro la cartella in questione. Questa è senza dubbio la soluzione più rapida e indolore. E però non avevo né spazio sufficiente per creare un’altra partizione così grossa all’esterno di LVM, né voglia di stare a ridimensionare i volumi logici, i gruppi di volumi e infine il volume fisico per far spazio ad una partizione del genere. Farlo avrebbe sovvertito completamente il senso dell’uso di LVM, non trovate? Perciò, scartata!
La seconda opzione a cui ho pensato è stata usare un driver ext2/ext3 per Windows: sfortunatamente questo tipo di driver sono piuttosto banali e non prevedono che la vostra partizione si trovi anche solo all’interno di un volume LVM come nel mio caso, immaginatevi se il volume in questione fosse addirittura cifrato. Stessa situazione se al posto di una normale partizione ext3 o ext4 state usando un filesystem più intrigante quale brtfs, xfs, reiserfs o altri.
Lo so.. alcuni di voi stanno già storcendo il muso chiedendosi quale sia l’operazione che devo svolgere per forza da Windows e perdipiù coinvolgendo Linux.. Potrei rispondervi che trovare la soluzione a questo problema rappresenta già uno stimolo sufficiente a cercare di risolverlo. Ma non sarebbe del tutto vero. In realtà mi serviva poter usare Reaper su Windows dandogli accesso alla cartella su Linux. Si, so anche che Reaper gira tranquillamente su Linux usando wine e l’ho anche fatto, tuttavia la stessa cosa non si può dire di alcuni plugin VST (ad esempio Grace) che diventano piuttosto instabili e/o rallentano subito oppure si visualizzano male. E poi ve lo dico chiaramente: se dovete fare un lavoro lungo e farlo comodamente, passare da Wine rende tutto molto più difficile.
Rimaneva la terza opzione: una virtual machine con Linux come sistema guest usando Windows come macchina host e che abbia fisicamente accesso al disco su cui è installato l’altro Linux, quello su cui lavorate abitualmente. Questo è quello che io definisco:”complicarsi amabilmente la vita” ed è la soluzione che mi piaceva di più.
Per farlo ho usato VirtualBox 5 e ci ho installato sopra Ubuntu Mini Remix 15.04, una distribuzione mai provata prima, che mi è sembrata piccola e veloce da fare al caso mio.
Vi suggerisco di configurare la vostra virtual machine con due schede di rete, la prima in NAT, in modo da essere connessa a internet e poter scaricare gli aggiornamenti del s.o. e almeno i pacchetti necessari per montare e condividere la partizione. Ad esempio, se vi serve LVM, su Ubuntu Mini Remix va installato manualmente il pacchetto lvm2, oppure mdadm per il raid. Inoltre vi servirà quasi certamente Samba se volete condividere la partizione con Windows senza dover fare ulteriori sbattimenti. La seconda scheda di rete, invece, andrà impostata come host-only networking, in modo da permettere la comunicazione tra la macchina virtuale Linux e la macchina reale Windows. Su questa scheda andrete poi ad impostare un indirizzo IP statico, uno sulla vm Linux e uno sulla scheda di rete di VirtualBox su Windows.
Quando avrete finito di installare la virtual machine e vi suggerisco di farlo scegliendo solo l’essenziale, niente interfaccia grafica o altro, dovrete scoprire qual’è secondo Windows il numero della partizione sulla quale avete installato l’altro Linux, quello vero, che usate abitualmente. Potete usare il Logical Disk Management andando su Strumenti di amministrazione -> Gestione computer, oppure potete usare DISKPART da un prompt comandi elevato.
NOTA: Da questo punto in avanti NON mi prendo responsabilità se cercando di seguire i miei consigli distruggete il vostro computer, cancellate la vostra tesi di laurea appena ultimata o l’importantissimo dossier che vostro padre deve consegnare in ufficio domani, perciò procedete a vostro rischio e pericolo..
In ques’tultimo caso, scegliete il disco su cui è installato Linux con
SELECT DISK n
dove n è il numero dell’hardisk sul quale si trova e poi date
LIST VOLUME
per conoscere quale sia la partizione Linux dal punto di vista di Windows. Ovviamente non troverete scritto Linux da nessuna parte…
Una volta capito quale sia la partizione giusta, dovete creare un file vmdk che fungerà da tramite tra la macchina virtuale e il disco reale. Prima di fare questo passaggio, però, dovete sapere questo: da Windows Vista in poi, l’accesso fisico agli hard disk è consentito solo agli utenti con i privilegi di amministratore. Cercando su google troverete scritto che esistono dei modi di aggirare il problema, ad esempio resettando i permessi del disco tramite diskpart oppure disattivando lo UAC temporaneamente. Non perdete tempo a fare queste prove, le ho già fatte io e su Windows 7 non funzionano. Otterrete sempre E_ACCESS_DENIED al momento cruciale.
A proposito, avete installato la virtual machine su un utente che non ha i diritti di amministratore? Bravi pirla! L’ho fatto anche io, adesso reimportatela aprendo VirtualBox con un utente amministratore..
dicevamo della creazione del file vmdk..
VBoxManage internalcommands createrawvmdk -filename "C:\Users\il_vostro_utente_administrator\VirtualBox VMs\nome_della_vostra_VM\quellochevipare.vmdk" -rawdisk \\.\PhysicalDrive# -partitions x
dove al posto del cancellato # dovete mettere il numero dell’hardisk e al posto della x dovete mettere il numero della partizione Linux che volete condividere. Notate che sto usando il parametro -partitions, questo fa si che la virtual machine possa accedere solo a quella determinata partizione ed in sola lettura, il che è cosa buona e giusta nel mio caso.
Ha funzionato? Andiamo avanti.. bisogna ancora “agganciare” il nuovo disco vmdk alla vostra virtual machine. Potete farlo dalla GUI di VirtualBox andando a modificare le impostazioni della vostra VM oppure, se siete dei veri duri e vi scrivete i device driver da soli:
VBoxManage storageattach nomedellavostraVM –storagectl “SATA” –port 1 –device 0 –type hdd –medium
c:\Users\il_vostro_utente_administrator\VirtualBox VMs\nome_della_vostra_VM\quellochevipare.vmdk
Avete ottenuto E_ACCESS_DENIED? Rileggetevi quello che ho scritto sopra. Siete riusciti? Ottimo! Notate che ho usato il controller SATA, anzichè il controller IDE che c’è nella documentazione ufficiale di VirtualBox, perché se agganciate il disco al controller IDE, quello su cui tipicamente si trova anche il lettore cdrom virtuale, al boot la vostra VM cercherà di avviarsi dall’hardisk linux ma non è questo quello che volete.
Avviate la vostra VM e verificate che il nuovo disco venga riconosciuto, tipicamente come /dev/sdb e che /dev/sdb1 contenga effettivamente quello che volevate voi. Se i conti vi tornano, potete inserire la nuova partizione in /etc/fstab in modo da montarla automagicamente al boot. Attenzione a montare la partizione sempre in read-only onde evitare di fare danni sul vostro sistema Linux di uso quotidiano:
/dev/sdb1 /PartizioneFisica ext4(o altro) ro 0 0
Infine installate samba e create una share accessibile a tutti, oppure protetta da password, relativa al mountpoint su cui avete montato la partizione Linux del disco fisico. Qualcosa del genere:
[Guest Share] comment = Guest access share path = /la/cartella/su/cui/avete/montato/la/partizione browseable = yes read only = yes guest ok = yes
Avviare la vm autoamticamente al boot di Windows in modalità headless lo lascio come esercizio per il lettore.
]]>You have the option of using form=SQLFORM and then form[0].insert(2,TR (...)) the rows from the other table. It may be easier to create the form using form_factory. Massimo
In parole povere, ad oggi Febbraio 2015, non c’è una reale soluzione e bisogna fare a manazza.
Ci sono due possibilità:
utilizzare SQLFORM per costruire il form della prima tabella e poi iniettare i campi delle altre tabelle nel form, oppure costruire tutto il form a mano usando form.factory. Dopodiché bisognerà gestire manualmente, dopo l’invio del form, l’aggiornamento/cancellazione dei record provenienti dalle altre tabelle correlate.
Dovendo inseire solamente un campo in più da un’altra tabella, ho scelto la prima opzione:
Export your deck using the Export to html function from slides.com
You will need to put all the images you uploaded for your deck in a local directory named images
You will have to download all the webfonts defined in the html source and put them in a local directory named fonts
then apply the following regular expressions editing the html file with Vim
%s/https:\/\/s3\.amazonaws\.com\/static\.slid\.es\/fonts\/[a-z]\{1,}\/\([a-z]\{1,\}\.css\)/\/fonts\/\1/g
%s/https:\/\/s3\.amazonaws\.com\/media-p\.slid\.es\/uploads\/YOUR SLIDES USERNAME GOES HERE\/images\/[0-9]\{1,\}\/\(.\{-}\)\"/images\/\1\"/g
many fonts definitions are redundant in the html, this can be fixed manually or is left as an exercise for the reader
~$ ruby -v ruby 2.1.2p95 (2014-05-08) [x86_64-linux-gnu]
se avete installato sia ruby che il relativo developers’ kit
siete pronti per installare le gem necessarie al bot:
~$ sudo gem install bundler chatterbot marky_markov Successfully installed bundler-1.7.2 Successfully installed chatterbot-0.9.1 2 gems installed Installing ri documentation for bundler-1.7.2... Installing ri documentation for chatterbot-0.9.1... Installing RDoc documentation for bundler-1.7.2... Installing RDoc documentation for chatterbot-0.9.1... ~$
se state usando Windows, aprire il “Prompt di comando con Ruby”
e date gem install bundler chatterbot marky_markov
finalmente e’ arrivatoo il momento di provare il funzionamento del bot, direttamente sul vostro computer:
spostandovi nella cartella in cui avete scaricato il sorgente del bot, date:
ruby mitchc2_ebooks.rb
La prima volta ci metterà un tot di tempo, perché scaricherà tutti i vostri tweet e creerà le catene di Markov
con tutte le parole contenute in essi.
Al termine verificherà quanto tempo è trascorso dal vostro ultimo tweet e genererà il suo primo tweet, tipicamente
una replica di un vostro tweet precedente. Saranno necessari alcuni giorni prima che le catene di Markov aumentino
di complessità abbastanza da creare tweet originali usando le parole dei vostri tweet precedenti, nel mio caso c’è
voluta qualche settimana, io sono uno che non twitta spesso e la maggior parte dei miei tweet sono retweet di altri
utenti, che vengono automaticamente esclusi da quelli presi in esame dal bot.
Nella prossima puntata vedremo come fare per far girare il vostro bot su Heroku anziché sul vostro computer, stay tuned!
Per prima cosa dovrete creare un account su twitter che verrà utilizzato dal vostro bot.
Una volta effettuato il primo accesso a twitter, dovrete inserire il vostro
numero di cellulare nel profilo
servirà a dare alla vostra app il permesso di scrivere al vostro posto.
Non vi preoccupate, potrete togliere il vostro numero di cellulare subito dopo aver
cambiato i permessi per la vostra applicazione
Accedete alla piattaforma per gli sviluppatori di twitter e
create una nuova app.
Accettate le condizioni d’uso e fate click su I Agree e congratulatevi con
voi stessi per aver creato la vostra prima app per Twitter!
C’è ancora del lavoro da fare, iniziate andando su Permissions e
cambiando i permessi della vostra app da Read Only a Read and Write
Adesso entrate nella tabellina chiamata API keys e segnatevi da qualche parte questi quattro dati fondamentali
API key
API secret
Access token
Access token secret
per ottenere gli ultimi due dovrete cliccare sul bottone Create my access
token e aspettare qualche secondo, ricaricando eventualmente la pagina web.
Ricordate queste quattro informazioni devono rimanere segrete perché
sono le password per poter usare il vostro account twitter e la vostra app!
Nella prossima puntata scopriremo il magico mondo del cloud computing e in
particolare la piattaforma Heroku sulla quale andrà a girare il nostro bot
per twitter.
Volete accedere a tutti i messaggi WhatsApp salvati sul vostro telefono o tablet Android ma non sapete come fare?
Vi occorrono:
Prima di dirvi quali sono i passaggi per decifrare il file, vediamo di capire più in dettaglio come
funziona la cifratura del database con le conversazioni di WhatsApp:
Per decifrare il contenuto delle conversazioni servono tre informazioni
fondamentali:
La chiave o password, che, sorpresa, è uguale per tutti gli utenti WhatsApp del mondo!
Il vettore d’inizializzazione, anche questo è uguale e non dovrebbe affatto esserlo
Il vostro indirizzo email di android
Come si è riusciti ad ottenere ognuna di queste informazioni?
La chiave
WhatsApp Statistics
è un’aplicazione che vi mostra una serie di statistiche sulle vostre
conversazioni passate. Per poter funzionare ha bisogno di leggere l’archivio
con le vostre conversazioni. E per riuscirci l’autore di questa app era a
conoscenza della chiave universale. Sia pure per uno scopo lecito.
Estrapolare la chiave in questione e il famoso vettore di inizializzazione dal whatsapp statistics non dev’essere stato
semplice, ma due hacker spagnoli sono riusciti e nell’impresa e lo hanno scritto sul loro
blog
Qui potete vedere l’immagine il codice disassemblato di whatsapp statistics
e con annotati di fianco i byte esadecimali che contengono LA chiave.
Chiave che corrisponde a quella contenuta nel sorgente del programma pwncrypt5. E’ possibile
verificarlo in maniera molto rapida usando python e convertendo il contenuto
della variabile key in una stringa di caratteri esadecimali.
>>> ''.join('%x' % byte for byte in [141, 75, 21, 92, 201, 255, 129, 229, 203, 246, 250, 120, 25, 54, 106, 62, 198, 33, 166, 86, 65, 108, 215, 147]) '8d4b155cc9ff81e5cbf6fa7819366a3ec621a656416cd793'
Come vedete la chiave è esattamente la stessa visibile in verticale nell’immagine, all’interno del riquadro centrale. E’ scritta in verde: 8Dh; 4Bh; .. e così via,
la h finale indica che si tratta di cifre esadecimali.
Mi soffermo un momento su questo punto, perché mi sembra sia questo il nocciolo
fondamentale dalla questione:
il fatto che sia possibile decifrare il file utilizzando una chiave identica per tutte le installazioni su tutti i telefoni,
sia pure in aggiunta all’account utente, dimostra che contrariamente a quello che dichiara, WhatsApp NON ha a cuore la vostra privacy!
Se davvero fosse il caso, la chiave per decifrare il file verrebbe generata in maniera
casuale ad ogni installazione del programma e idealmente una parte di essa sarebbe legata sia all’hardware del dispositivo sul quale
gira l’app che ad una qualche informazione conosciuta solo dall’utente, come ad esempio un PIN, in modo che non sia
possibile in alcun modo decifrare il file senza conoscere due ulteriori informazioni che non possono essere ottenute in
maniera automatizzata.
Naturalmente questo renderebbe più difficoltoso spostare le vecchie
conversazioni da un dispositivo all’altro, ad esempio quando si cambia
telefono, perché sarebbe prima necessario esportarle dal vecchio e reimportarle sul nuovo
telefono. Ma si tratta di un piccolo fastidio in confronto
alla concreta possibilità di essere derubati delle proprie conversazioni
private da parte di perfetti sconosciuti.
Nel caso di WhatsApp, ad oggi, è invece concretamente possibile rubare
l’archivio di tutte le vostre conversazioni private, sotto i vostri occhi
e senza che voi ve ne rendiate conto! Questo perché la chiave per decifrare
tale archivio è unica per tutti gli utenti, sia pure in aggiunta all’indirizzo
email con il quale avete attivato al telefono, un’informazione che però è alla
portata di chiunque sappia scrivere un’applicazione android o trovi il modo di
venirne a conoscenza.
Il vettore d’inizializzazione
o Initialization Vector abbreviato IV sembra una parolona ma in realtà è
solo una sequenza di byte casuali, con una lunghezza prestabilita, che servirebbe a rendere più robusta la cifratura.
Se solo fosse usato nel modo giusto.. come abbiamo visto, invece, anche questa
“seconda chiave” è sempre uguale e si trovava all’interno di WhatsApp
statistics. Se volete saperne di più vi rimando a Wikipedia
Il vostro account su Android
Ottenere l’indirizzo email con il quale avete attivato Android è semplicissimo,
basta che un’altra applicazione sul vostro telefono abbia richiesto il permesso chiamato GET_ACCOUNTS
quando l’avete installata. Ma.. Sono certo che fate sempre caso a quanti e quali permessi chiede ogni
applicazione che installate sul telefono, vero? Vero???
Quali sono i passaggi fatti dal programma per decriptare il file?
A questo punto devo scendere un pò più sul tecnico..
Per prima cosa legge il contenuto del file msgstore.db.crypt5
Poi fa un hash dell’indirizzo email con cui avete attivato android sul
telefono, usando l’algoritmo MD5
Dopodiché inizia il vero processo di decifratura:
La chiave è lunga 192 bit e l’algoritmo di cifratura utilizzato è AES.
192 bit corrispondono a 24 byte e per ogni byte della chiave il programma,
tramite il ciclo for i in xrange(24) farà un’operazione booleana di disgiunzione eslusiva meglio nota come XOR, tra il byte della chiave e l’hash del vostro account android. Di fatto
fondendo queste due informazioni nella chiave vera e propria.
Questo per ovviare al vano tentativo, da parte degli sviluppatori di WhatsApp, di evitare
che con una singola chiave si potessero decifrare tutte le conversazioni di
ogni telefono del pianeta. Purtroppo è un goffo tentativo, perché vi ho appena
spiegato quanto sia banale per un’altra applicazione sapere qual’è il vostro
account Android. Anche realizzare un’app fasulla che finga di fare
qualcos’altro mentre invece carica le vostre conversazioni da qualche parte su
internet è talmente semplice che il blogger olandese Bas Bosschert lo ha
fatto notare pubblicamente creando
un vero e proprio esempio pratico sul suo blog. Ma andiamo avanti..
Una volta fatto lo XOR tra la chiave e l’hash dell’indirizzo email e inserito il vettore di inizializzazione, tutti i pezzi
necessari per decifrare il file con l’algoritmo AES, che è uno standard mondiale ed è pubblico, sono al loro posto e
il file può essere comodamente decifrato. Per farlo, il programma si avvale delle funzioni del modulo M2Crypto.
Voilà, il file cifrato è ora diventato un normale database SQLite 3
Riassumendo I passaggi da fare sono:
Collegate il vostro telefono android al PC
Accedete tramite il vostro PC alla cartella WhatsApp del telefono
Copiate il file che si chiama msgstore.db.crypt5 in una cartella sul vostro computer
Lanciate questo comando:
python pwncrypt5.py msgstore.db.crypt5 QUI_METTETE_IL_VOSTRO_ACCOUNT_GOOGLE(es:blablabla@gmail.com) > msgstore.db
Aprite il file msgstore.db con un programma che legga i database SQLite3
Per comodità potete anche convertire il file in un simpatico foglio Excel
Qui c’è il codice sorgente del programma
#!/usr/bin/python
"""
48bits presents:
8===============================================D~~~
WhatsApp msgstore crypt5 decryptor by grbnz0 and nullsub
8===============================================D~~~
"""
import sys
import hashlib
import StringIO
from M2Crypto import EVP
key = bytearray([141, 75, 21, 92, 201, 255, 129, 229, 203, 246, 250, 120, 25, 54, 106, 62, 198, 33, 166, 86, 65, 108, 215, 147])
iv = bytearray([0x1E,0x39,0xF3,0x69,0xE9,0xD,0xB3,0x3A,0xA7,0x3B,0x44,0x2B,0xBB,0xB6,0xB0,0xB9])
def decrypt(db,acc):
fh = file(db,'rb')
edb = fh.read()
fh.close()
m = hashlib.md5()
m.update(acc)
md5 = bytearray(m.digest())
for i in xrange(24):
key[i] ^= md5[i&0xF]
cipher = EVP.Cipher('aes_192_cbc', key=key, iv=iv, op=0)
sys.stdout.write(cipher.update(edb))
sys.stdout.write(cipher.final())
if __name__ == '__main__':
if len(sys.argv) != 3:
print 'usage %s > decrypted.db' % sys.argv[0]
else:
decrypt(sys.argv[1],sys.argv[2])
]]>
Nel mio caso si trattava di una scheda Gigabit Ethernet Intel 82567LM-3 che con lspci viene
riconosciuta come:
Ethernet controller: Intel Corporation 82567LM-3 Gigabit Network Connection (rev 02)
Cercando un pò in rete, ho scoperto che è possibile installare su Hyper-V 2012 i normali driver per Windows Server 2012. Ecco come:
Ingredienti
Un computer con installato Hyper-V 2012 che abbia almeno una porta USB funzionante
Un computer che abbia una connessione a internet e una porta USB funzionante
Una chiavetta USB o altra periferica USB di tipo mass storage
Per prima cosa bisogna scaricare il driver corretto sul computer collegato a internet, nel mio caso era questo.
Sulla console di Hyper-V non avrete una gui a disposizione, per cui dovrete decomprimere l’archivio
eseguibile con qualche altro mezzo. Io ho usato Archive Manager sotto Linux, sicuramente potete
riuscirci anche da riga di comando con unzip o su un pc con Windows e 7-Zip o equivalente.
Copiate il contenuto dell’archivio contenente il vostro driver su una cartella della chiavetta usb.
Inserite la chiavetta sul computer nel quale gira Hyper-V e lanciate il comando diskpart
poi scrivete list volume
e cercate la vostra chiave usb nell’elenco. Non preoccupatevi se sotto la voce State dovesse comparire la dicitura Unusable
Adesso dovete selezionare il numero di volume corrispondente alla vostra chiave usb
select volume n
e poi assegnargli una lettera di unità con assign
uscite da diskpart con exit
Dovrete copiare i file del driver dalla cartella sulla chiavetta usb ad una una cartella temporanea sul disco principale di Hyper-V che con buona probabilità sarà C:
ora, supponendo che abbiate assegnato l’unità G: alla vostra chiavetta e che i file si trovino nella cartella G:\DRIVER potete copiarli con questi comandi:
md c:\temp
xcopy g:\driver\*.* c:\temp /s
Infine utilizzate il comando pnputil per l’installazione, facendolo puntare al file INF della vostra periferica.
Il driver della mia scheda di rete comprendeva diversi file INF, nel dubbio li ho installati tutti quanti:
pnputil -i -a \temp\e1c64x64.inf
pnputil -i -a \temp\e1d64x64.inf
pnputil -i -a \temp\e1r64x64.inf
pnputil -i -a \temp\e1s64x64.inf
pnputil -i -a \temp\v1q64x64.inf
Dovreste ottenere un messaggio che dica, tra le altre cose, Successfully installed.
Potete verificare che il driver sia stato installando anche richiedendo l’elenco dei driver e filtrando per qualcosa che sapete essere sicuramente presente nella descrizione del
driver, nel mio caso sapevo che la dicitura E1000 sarebbe sicuramente stata presente nella descrizione.
sc query type= driver | findstr E1000
Voilà, riavviate Hyper-V (opzione 12 di SConfig.cmd) e la vostra scheda di rete verrà riconosciuta.
P.S. Nel caso aveste bisogno di “smontare” la chiavetta USB senza dover riavviare Hyper-V o chiudere la sessione, potete farlo sempre tramite diskpart dando il comando remove all dismount
dopo aver selezionato il volume corrispondente alla vostra chiave usb con select volume.