Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.

Temas - Sanko

Páginas: [1] 2 3 4
1
Otros lenguajes / Morse - Haskell
« en: Febrero 27, 2014, 06:31:27 pm »
Código: Haskell
  1. module Morse where
  2.    xAbc = You are not allowed to view links. Register or Login (['a'..'z']++['0'..'9']++".,?-!:;()[email protected]_+~# '")([".- ", "-... ", "-.-. ", "-.. ", ". ","..-. ", "--. ", ".... ", ".. ", ".--- ", "-.- ", ".-.. ", "-- ", "-. ", "--- ", ".--. ", "--.- ", ".-. ", "... ", "- ", "..- ", "...- ",".-- ", "-..- ", "-.-- ", "--.. ", "----- ",".---- ", "..--- ", "...-- ", "....- ", "..... ", "-.... ", "--... ","---.. ", "----. ", ".-.-.- ", "--..-- ", "..--.. ", "-....- ", "-.-.-- ", "---... ", "-.-.-. ", "-.--. ", "-.--.- ", "-...- ", "...-..- ", ".--.-. ","..--.- ", ".-.-. ", ".-... ", "...-.- ", "/ ", ".----. "])
  3.    findPos list elt = [index | (index, e) <- You are not allowed to view links. Register or Login [0..] list, e == elt]
  4.    
  5.    xEnc xs = [You are not allowed to view links. Register or Login (xAbc !! (x !! 0))| x <- [findPos ([You are not allowed to view links. Register or Login (xAbc !! z) | z <- [0..You are not allowed to view links. Register or Login xAbc]]) x | x <- xs]]
  6.    xDec xs = [You are not allowed to view links. Register or Login (xAbc !! (x !! 0))| x <- [findPos ([You are not allowed to view links. Register or Login (xAbc !! z) | z <- [0..You are not allowed to view links. Register or Login xAbc]]) x | x <- xs]]

Output:
Código: You are not allowed to view links. Register or Login
*Morse> xEnc "hola"
[".... ","--- ",".-.. ",".- "]
*Morse> xDec [".... ","--- ",".-.. ",".- "]
"hola"

2
Otros lenguajes / Cifrado cesar - haskell
« en: Febrero 26, 2014, 02:29:05 pm »
Simple práctica del lenguaje, ya se que soy pesao repitiendo siempre mismos ciphers

Código: Haskell
  1. module Cesar where
  2.    import Data.You are not allowed to view links. Register or Login
  3.    xEnc :: You are not allowed to view links. Register or Login -> You are not allowed to view links. Register or Login -> You are not allowed to view links. Register or Login
  4.    xEnc z y = [chr ((ord x + y) `You are not allowed to view links. Register or Login` 256) | x <- z]
  5.  
  6.    xDec :: You are not allowed to view links. Register or Login -> You are not allowed to view links. Register or Login -> You are not allowed to view links. Register or Login
  7.    xDec z y = [chr ((ord x - y) `You are not allowed to view links. Register or Login` 256) | x <- z]
  8.  

3
Otros lenguajes / Cifrado Vigenere - Haskell
« en: Febrero 26, 2014, 02:28:29 pm »
Código: Haskell
  1. module Vigenere where
  2.    import Data.You are not allowed to view links. Register or Login
  3.    
  4.    xEnc :: You are not allowed to view links. Register or Login -> You are not allowed to view links. Register or Login -> You are not allowed to view links. Register or Login
  5.    xEnc xs ys = [chr ((You are not allowed to view links. Register or Login(x) + You are not allowed to view links. Register or Login(x)) `You are not allowed to view links. Register or Login` 256)| x <- You are not allowed to view links. Register or Login [ord x | x <- xs] [ord y | y <- ys]]
  6.    
  7.    xDec :: You are not allowed to view links. Register or Login -> You are not allowed to view links. Register or Login -> You are not allowed to view links. Register or Login
  8.    xDec xs ys = [chr ((You are not allowed to view links. Register or Login(x) - You are not allowed to view links. Register or Login(x)) `You are not allowed to view links. Register or Login` 256)| x <- You are not allowed to view links. Register or Login [ord x | x <- xs] [ord y | y <- ys]]


4
Otros lenguajes / sReplace - Haskell
« en: Febrero 26, 2014, 02:28:07 pm »
Código: Haskell
  1. sReplace [] _ _ = []
  2. sReplace sText nText final = if You are not allowed to view links. Register or Login (You are not allowed to view links. Register or Login nText) sText == nText
  3.                         then final ++ (sReplace (You are not allowed to view links. Register or Login (You are not allowed to view links. Register or Login nText) sText) nText final)
  4.                        else [You are not allowed to view links. Register or Login sText] ++ (sReplace (You are not allowed to view links. Register or Login sText) nText final)

ejemplo input y output:
input -> sReplace "soy un chico muy listo" "listo" "tonto"
output -> Soy un chico muy tonto

5
ASM / [NASM] Reverse string
« en: Febrero 18, 2014, 06:12:47 am »
Bueno aqui os dejo mi primer código en ASM, tan solo da la vuelta a un string pero bueno, aun me cuesta pensar las cosas por este sector xd.
Don't judgue me.

Código: ASM
  1. ;Script for reverse strings
  2.  
  3. segment .data
  4.    ; text to print
  5.    output1 db 'Reversed: ', 0
  6.    len_output1 equ $-output1
  7.    
  8.    
  9. segment .bss
  10.    ;MAX LIMIT 50 bytes, 50 chars...
  11.    msg resb 50
  12.    lmsg resb 50
  13.    
  14.    ;creating 2 counters
  15.    counter resb 2
  16.    counter2 resb 2
  17.    
  18. segment .text
  19.    
  20.    global _start
  21.    _start:
  22.       mov eax, 3                ;sys_read
  23.       mov ebx, 0
  24.      
  25.       mov ecx, msg             ;leyendo input
  26.       mov byte [counter], 0x30   ;counter as 0
  27.       mov byte [counter2], 0x30   ;counter as 0
  28.       mov edx, 50            
  29.       mov esi, lmsg
  30.       int 0x80                ;call kernel
  31.      
  32.      
  33.    _loop:
  34.       cmp byte [ecx], 0x00      ;comparing [ecx]
  35.       je _reverse               ;jumping to reverse function
  36.       inc ecx
  37.       inc byte [counter]
  38.       inc byte [counter2]
  39.       jmp _loop               ;repeating
  40.      
  41.      
  42.    _reverse:
  43.       cmp byte [counter2], 0x30   ;comparing counter2
  44.       je _output               ;jumping to output function
  45.       mov al, [ecx-1]            ;last letter of msg
  46.       mov [esi], al            ;operation origin
  47.      
  48.       dec byte [counter2]         ;counter2 - 1
  49.       dec ecx                  ;ecx(msg) - 1
  50.       inc esi                  ;esi + 1
  51.       jmp _reverse            ;repeating
  52.      
  53.      
  54.    _output:
  55.       int 0x80               ;call kernel
  56.       mov eax, 4               ;sys_write
  57.       mov ebx, 1               ;stdin
  58.       mov ecx, output1         ;printing output
  59.       mov edx, len_output1      ;length of msg
  60.      
  61.       int 0x80
  62.       mov eax, 4
  63.       mov ebx, 1
  64.       mov byte [esi+1], 0xA
  65.       mov ecx, lmsg
  66.       mov edx, 50d
  67.       int 0x80
  68.      
  69.       mov eax, 1               ;sys_exit
  70.       int 0x80
      

6
Python / Cifrado solitario
« en: Febrero 13, 2014, 12:48:47 pm »
Código: Python
  1. import string
  2. xAbc = string.ascii_lowercase + '-'
  3.  
  4. def solitario(texto, ristra, opt):
  5.     nText = [xAbc.find(x) + 1 for x in texto.lower()]
  6.     nRistra = [xAbc.find(x) + 1 for x in ristra.lower()]
  7.    
  8.     if opt == 1:
  9.         print "".join([xAbc[x - 1].replace('-', ' ') for x in [(nText<ul class="bbc_list"><li type="square"> + nRistra</li><li type="square">) % 26 for x in range(len(texto))]])[/li][/list]
  10.  
  11.     elif opt == 0:
  12.         print "".join([xAbc[x - 1].replace('-', ' ') for x in [(nText</li><li type="square"> - nRistra</li><li type="square">) % 26 for x in range(len(texto))]])[/li][/list]
  13.        
  14. #encoded output -> oexwa khqtw
  15. #decoded output -> donot usepc

7
Python / Cifrado progresivo
« en: Febrero 05, 2014, 07:14:44 pm »
Traduje este cifrado que hizo Metal:

Código: Python
  1. def progresivo(s, n, o):
  2.     encoded = [ord(s[0]) + n,]
  3.     decoded = [ord(s[0]) - n,]
  4.      
  5.     if o == 1:
  6.         for i in s[1::]:
  7.             encoded.append(ord(i) + encoded[-1])
  8.          
  9.         print "".join([unichr(x) for x in encoded])
  10.      
  11.     elif o == 0:
  12.         for i in s[1::]:
  13.             decoded.append(ord(i) - decoded[-1])
  14.              
  15.         print "".join([unichr(x) for x in decoded])
  16.  
  17. #Params: s = Texto a cifrar o descifrar | n = key | o = 1 -> cifrar, o = 0 -> descifrar
  18. #progresivo('sanko', 2, 1) -> output example uÖńƯȞ

8
Python / Cifrado 312
« en: Febrero 05, 2014, 07:13:45 pm »
Una traducción en python del cifrado 312 de Himanen:

Código: Python
  1. #Params | x = texto a cifrar | si z es 1 -> cifrar , cualquier otro valor -> descifrar
  2. print "".join((lambda x, z: [unichr(int(i[2]+i[0]+i[1])) if z == 1 else unichr(int(i[1]+i[2]+i[0])) for i in ['{0:03}'.format(ord(z)) for z in x]])('hola', 1))

Saludos

9
Python / Cifrado L213
« en: Febrero 05, 2014, 07:11:22 pm »
Un cifrado que hizo metal traducido a python:

Código: Python
  1. xAbc = 'LUCIFER213'
  2.  
  3. def xEnc(s, n):
  4.     print "".join([xAbc[int(x)] for x in [z for z in "".join(['{0:03}'.format((ord(a) + n)) for a in s])]])
  5.      
  6.  
  7. def xDec(s, n):
  8.     print "".join(chr(int("".join([str(xAbc.find(x)) for x in s[i:i+3]]))-n) for i in range(0,len(s),3))
  9.      
  10. #xEnc('Hola puta.', 20)
  11. #xDec('L3CUIUUC1UU2LECUICUI2UIRUU2LRR', 20)

Saludos

10
Python / Anonfiles uploader
« en: Diciembre 04, 2013, 01:55:36 pm »
Estaba codeando esta clase para incluir en el bot del reto hasta que me di cuenta de que esta solo iba a poder ser usada por aquel que tuviese el bot corriendo en su PC, digamos que soy un distraido, así que nada, os la dejo aqui por si a alguien le es de utilidad, no tiene nada de especial.

Código: Python
  1. import pycurl, cStringIO, json
  2. class Anonfiles:
  3.    
  4.    def _upload(self, sFilename):
  5.       self.sFilename = sFilename
  6.      
  7.       storage = cStringIO.StringIO()
  8.       PostFileStorage = cStringIO.StringIO()
  9.  
  10.       curl = pycurl.Curl()
  11.       postData=[('file', (pycurl.FORM_FILE, sFilename))]
  12.      
  13.       try:
  14.          curl.setopt(curl.WRITEFUNCTION, storage.write)
  15.          curl.setopt(curl.COOKIEFILE, '')
  16.          curl.setopt(curl.URL, '[url]https://anonfiles.com/api[/url]')
  17.          curl.setopt(curl.HTTPPOST, postData)
  18.          curl.setopt(curl.WRITEFUNCTION, PostFileStorage.write)
  19.          curl.perform()
  20.          
  21.       except:
  22.          self.upload_data = "An error has ocurred uploading the file"
  23.          
  24.       self.upload_data = json.loads(PostFileStorage.getvalue())
  25.       print self.upload_data["url"]

Saludos



11
Python / Bytescanner api improved
« en: Septiembre 20, 2013, 11:28:05 am »
Hace unos dias me dio por pegarle una ojeada a la "api" en python de bytescanner y le hice unas cuantas mejoras al code, aqui les dejo el mio y abajo el code original :

Código: Python
  1. #ByteScanner "API" coded by YAKIT
  2. #code debugging / improved code / by Sanko
  3.  
  4. import pycurl, cStringIO, errno, sys, hashlib, json
  5.  
  6. #Defining Buffers
  7. storage = cStringIO.StringIO()
  8. PostFileStorage = cStringIO.StringIO()
  9. ScanResultStorage = cStringIO.StringIO()
  10. ScanHistoryStorage = cStringIO.StringIO()
  11. ChangeLogStorage = cStringIO.StringIO()
  12. AVersionStorage = cStringIO.StringIO()
  13.  
  14. #Defining curl
  15. curl = pycurl.Curl()
  16. curl.setopt(curl.WRITEFUNCTION, storage.write)
  17. curl.setopt(curl.COOKIEFILE, '')
  18.  
  19. class bs_Api():
  20.    
  21.    def __init__(self):
  22.       """
  23.      self.__login('[email protected]', 'yourpassword')
  24.      self.__upload_file('test.exe')
  25.      self.__Result_ID(id)
  26.      self.__Scan_History()
  27.      self.__Change_Log()
  28.      self.__Check_AV_Version()
  29.      self.__Export_to('extension', id)
  30.      """
  31.    def __login(self, email, password):
  32.       #trying to log in
  33.       try:
  34.          curl.setopt(curl.URL, '[url]http://www.bytescanner.com/client2api.php[/url]')
  35.          curl.setopt(curl.POSTFIELDS, 'action=Auth&email=%s&password=%s'%(email, password))
  36.          curl.perform()
  37.          #storing the json data returned like login_data
  38.          self.login_data = json.loads(storage.getvalue())
  39.          
  40.       except:
  41.          print "An error has ocurred triying to log in bytescanner"
  42.          
  43.       #checking if you are logged
  44.       if self.login_data['success'] == False:
  45.          print ("<ul class="bbc_list"><li type="square"> "+self.login_data['error']['title'] + "\tReason: " + self.login_data['error']['reason'])[/li][/list]
  46.          sys.exit(errno.EACCES)
  47.          
  48.       self.dicc_login = {"ID":self.login_data['root'][0]['id'],
  49.                      "Email":self.login_data['root'][0]['email'],
  50.                      "Creation Date":self.login_data['root'][0]['created'],
  51.                      "Last Login":self.login_data['root'][0]['lastlogin'],
  52.                      "Last IP Logged":self.login_data['root'][0]['lastloginip']}
  53.       #print self.dicc_login
  54.            
  55.    def __upload_file(self, sFilename):
  56.       #reading the file to upload
  57.       try:
  58.          with open(sFilename): pass
  59.          
  60.       except IOError:
  61.          print "Unable to open %s" % sFilename
  62.          
  63.       postData=[('action', 'BinaryFileTransfer'),
  64.               ('binaryFile', (pycurl.FORM_FILE, sFilename))]
  65.              
  66.       try:
  67.          curl.setopt(curl.URL, '[url]http://www.bytescanner.com/startup.php[/url]')
  68.          curl.setopt(curl.HTTPPOST, postData)
  69.          curl.setopt(curl.WRITEFUNCTION, PostFileStorage.write)
  70.          curl.perform()
  71.          self.upload_data = json.loads(PostFileStorage.getvalue())
  72.          
  73.       except:
  74.          print "An error has ocurred uploading the file"
  75.          
  76.       #checking
  77.       if self.upload_data['success'] != True:
  78.          print ("</li><li type="square"> "+self.upload_data['error']['title'] + "\tReason: " + self.upload_data['error']['reason'])[/li][/list]
  79.          sys.exit(errno.EACCES)
  80.          
  81.       self.dicc_upload = {"Result ID":str(self.upload_data['root']),
  82.                      "MD5":hashlib.md5(open(sFilename).read()).hexdigest(),
  83.                      "SHA1":hashlib.sha1(open(sFilename).read()).hexdigest()}
  84.       #print self.dicc_upload
  85.      
  86.    def __Result_ID(self, r_ID):
  87.       #obtaining json result
  88.       try:
  89.          curl.setopt(curl.URL, '[url]http://www.bytescanner.com/api2client.php?action=scanResult&ResultID=%s'%[/url] r_ID)
  90.          curl.setopt(curl.WRITEFUNCTION, ScanResultStorage.write)
  91.          curl.perform()
  92.          self.result_data = json.loads(ScanResultStorage.getvalue())
  93.          
  94.       except:
  95.          print "An error has ocurred obtaining the json data"
  96.          
  97.       #checking
  98.       if self.result_data['success'] != True:
  99.          print ("</li><li type="square"> "+self.result_data['error']['title'] + "\tReason: " + self.result_data['error']['reason'])[/li][/list]
  100.          sys.exit(errno.EACCES)
  101.      
  102.       #print self.result_data
  103.      
  104.    def __Scan_History(self):
  105.       try:
  106.          curl.setopt(curl.URL, '[url]http://www.bytescanner.com/api2client.php?action=ScanHistory[/url]')
  107.          curl.setopt(curl.WRITEFUNCTION, ScanHistoryStorage.write)
  108.          curl.perform()
  109.          self.history_data = json.loads(ScanHistoryStorage.getvalue())
  110.          
  111.       except:
  112.          print "An error has ocurred obtaining your Scan History"
  113.          
  114.       #print self.history_data
  115.          
  116.    def __Change_Log(self):
  117.       try:
  118.          curl.setopt(curl.URL, '[url]http://www.bytescanner.com/api2client.php?action=ChangeLog[/url]')
  119.          curl.setopt(curl.WRITEFUNCTION, ChangeLogStorage.write)
  120.          curl.perform()
  121.          self.ChangeLog_data = json.loads(ChangeLogStorage.getvalue())
  122.          
  123.       except:
  124.          print "An error has ocurred obtaining the ChangeLog"
  125.          
  126.       #print self.ChangeLog_data
  127.      
  128.    def __Check_AV_Version(self):
  129.       try:
  130.          curl.setopt(curl.URL, '[url]http://www.bytescanner.com/api2client.php?action=AvVersion[/url]')
  131.          curl.setopt(curl.WRITEFUNCTION, AVersionStorage.write)
  132.          curl.perform()
  133.          self.AVersion_data = json.loads(AVersionStorage.getvalue())
  134.          
  135.       except:
  136.          print "An error has ocurred obtaining the ChangeLog"
  137.      
  138.       #print self.AVersion_data
  139.            
  140.    def __Export_to(self, ext_to, r_ID):
  141.       buf = cStringIO.StringIO()
  142.       ext_dicc = {'png':'Png', 'xls':'Excel', 'pdf':'Pdf'}
  143.      
  144.       try:
  145.          curl.setopt(curl.URL, '[url]http://www.bytescanner.com/export4client.php?action=Export2%s&ResultID=%s[/url]' %(ext_dicc[ext_to], r_ID))
  146.          curl.setopt(curl.WRITEFUNCTION, buf.write)
  147.          f = open('bs_report.%s'%(ext_to), 'w')
  148.          f.write(curl.perform())
  149.          f.close()
  150.          
  151.       except:
  152.          print "An error has ocurred saving the %s report" % ext_dicc[ext_to]

code original:
Código: Python
  1. #Author: Ersan YAKIT
  2. #Email : [email protected]
  3.  
  4. import pycurl, json
  5. import cStringIO
  6. import errno, sys
  7.  
  8. storage = cStringIO.StringIO()
  9. PostFileStorage = cStringIO.StringIO()
  10. ScanResultStorage = cStringIO.StringIO()
  11.  
  12. BYTESCANNER_EMAIL= "[email protected]"
  13. BYTESCANNER_PASSWORD= "yourbytescannerpassword"
  14.  
  15. c = pycurl.Curl()
  16. c.setopt(c.WRITEFUNCTION, storage.write)
  17. c.setopt(c.COOKIEFILE, '') #we want to store cookie into memory
  18.  
  19. #STEP I ( Login into system )
  20. c.setopt(c.URL, '[url]http://www.bytescanner.com/client2api.php[/url]')
  21. c.setopt(c.POSTFIELDS, 'action=Auth&email='+BYTESCANNER_EMAIL+'&password='+ BYTESCANNER_PASSWORD)
  22. c.perform()
  23.  
  24. data = json.loads(storage.getvalue())
  25.  
  26. if data['success'] != True:
  27.    print ("</li><li type="square"> "+data['error']['title'] + "\tReason: " + data['error']['reason'])[/li][/list]
  28.    sys.exit(errno.EACCES)
  29.  
  30. print ("</li><li type="square"> Logged In\n")[/li][/list]
  31. print("Welcome, "+data['root'][0]['email']+"\nLast Login: "+ data['root'][0]['lastlogin']+"\nLast Login Ip: "+ data['root'][0]['lastloginip']+"\n" )
  32.  
  33.  
  34. #STEP II ( Get File Name from user. )
  35. scanFile= raw_input("Enter Scan File Path: ")
  36. try:
  37.    with open(scanFile): pass
  38. except IOError:
  39.    print 'Unable to open :'+scanFile
  40. print("</li><li type="square"> Transfering file "+ scanFile +"\n")[/li][/list]
  41. ## sending File To server!
  42. postData=[
  43.    ('action', 'BinaryFileTransfer'),
  44.    ('binaryFile', (pycurl.FORM_FILE, scanFile))
  45. ]
  46. c.setopt(c.URL, '[url]http://www.bytescanner.com/startup.php[/url]')
  47. c.setopt(c.HTTPPOST, postData)
  48. c.setopt(c.WRITEFUNCTION, PostFileStorage.write)
  49. c.perform()
  50. data = json.loads(PostFileStorage.getvalue())
  51. if data['success'] != True:
  52.    print ("</li><li type="square"> "+data['error']['title'] + "\tReason: " + data['error']['reason'])[/li][/list]
  53.    sys.exit(errno.EACCES)
  54. print("</li><li type="square"> File transfer completed. Result ID: "+str(data['root']) )[/li][/list]
  55.  
  56. #STEP III recieve scan results
  57. print("</li><li type="square"> Starting request for scan results...\n");[/li][/list]
  58.  
  59. c.setopt(c.URL, '[url]http://www.bytescanner.com/api2client.php?action=scanResult&ResultID='+str(data[/url]['root']) )
  60. c.setopt(c.WRITEFUNCTION, ScanResultStorage.write)
  61. c.perform()
  62.  
  63. data = json.loads(ScanResultStorage.getvalue())
  64. if data['success'] != True:
  65.    print ("</li><li type="square"> "+data['error']['title'] + "\tReason: " + data['error']['reason'])[/li][/list]
  66.    sys.exit(errno.EACCES)
  67. print ('{0:30}\t{1:40}\t{2:30}\t{3:30}\n'.format("Antivirus Provider", "Antivirus Ver", "Scan Time", "Scan Result"))
  68.  
  69. for tmpIndex in data['root']:
  70.    print ('{0:30}\t{1:40}\t{2:30}\t{3:30}'.format(
  71.       tmpIndex['malwareScanProvider'],  
  72.       tmpIndex['malwareScanProviderVer'],
  73.       tmpIndex['malwareScanProviderResultTime'], tmpIndex['malwareScanProviderResult']
  74.    ))
  75.  
  76. storage.close()
  77. PostFileStorage.close()
  78. ScanResultStorage.close()
  79. print("</li><li type="square"> Scan Completed...\n")

PD : EL retorno se almacena en un diccionario, asi que cuando importen la clase acuerdense de parsear la informacion.
Saludos

12
Off Topic / Algún español que asista a la PyCon España 2013?
« en: Septiembre 12, 2013, 12:16:19 pm »
Pues eso, querría saber si algún usuario español de underc0de tiene pensado asistir a la primera PyCon España que se celebrara a finales de Noviembre en Madrid.
Para más info -> You are not allowed to view links. Register or Login

13
Python / Cifrado de Vigenère
« en: Septiembre 09, 2013, 06:22:56 pm »
Buenas, otra solución a un reto de udtools : You are not allowed to view links. Register or Login

Code :

Código: Python
  1. #!/usr/bin/env python
  2. # -*- coding: utf-8 -*-
  3.  
  4. # Cifrado Vigenere en Python - Sanko
  5. # Yi = (Xi + Zi) % 27
  6.  
  7. class cif_Vigenere():
  8.    
  9.    def __init__(self):
  10.       self.abecedario = 'ABCDEFGHIJKLMNÑOPQRSTUVWXYZ'
  11.       self.__encode("P A R I S  V A U T  B I E N", "L O U P L  O U P L  O U P L")
  12.       self.__decode("A O N X D  L U L E  P C T W", "L O U P L  O U P L  O U P L")
  13.      
  14.    def __encode(self, text, key):
  15.       encoded = ''
  16.       counter = 0
  17.      
  18.       text = text.upper()
  19.       key = key.upper()
  20.            
  21.       for i in range(len(text)):
  22.  
  23.          if counter > len(key) - 1:
  24.             counter = 0  
  25.          
  26.          if text[i] == ' ':
  27.             encoded += '5'.replace('5', ' ')
  28.             counter += 1
  29.            
  30.          else:
  31.             resultado = (self.abecedario.index(text[i]) + self.abecedario.index(key[counter]) + 1) % len(self.abecedario) - 1  
  32.             encoded += self.abecedario[resultado]
  33.             counter += 1
  34.            
  35.       print encoded
  36.      
  37.    
  38.    def __decode(self, enc_text, key):
  39.       decoded = ''
  40.       counter = 0
  41.      
  42.       key = key.upper()
  43.      
  44.       for i in range(len(enc_text)):
  45.          if counter > len(key) - 1:
  46.             counter = 0
  47.            
  48.          if enc_text[i] == ' ':
  49.             decoded += '5'.replace('5', ' ')
  50.             counter +=1
  51.    
  52.          else:
  53.             resultado = (self.abecedario.index(enc_text[i]) - self.abecedario.index(key[counter]) + 1) % len(self.abecedario) - 1
  54.             decoded += self.abecedario[resultado]
  55.             counter += 1
  56.            
  57.       print decoded
  58.      
  59. cif_Vigenere()
  60.  

Imágen :

14
Python / Cifrado Morse
« en: Septiembre 06, 2013, 11:26:43 am »
Bueno, este cifrado fue realizado con fin de resolver un reto de programación en You are not allowed to view links. Register or Login.

Código :

Código: Python
  1. # Cifrado Morse.py - Sanko
  2. # -*- coding: utf-8 -*-
  3.  
  4. class cif_morse():
  5.    
  6.    def __init__(self):
  7.       self.table = {'A':'.-', 'B':'-...', 'C':'-.-.',
  8.                  'D':'-..', 'E':'.', 'F':'..-.', 'G':'--.',
  9.                  'H':'....', 'I':'..', 'J':'.---', 'K':'-.-',
  10.                  'L':'.-..', 'M':'--', 'N':'-.', 'Ñ':'--.--',
  11.                  'O':'---', 'P':'.--.', 'Q':'--.-', 'R':'.-.',
  12.                  'S':'...', 'T':'-', 'U':'..-', 'V':'...-',
  13.                  'W':'.--', 'X':'-..-', 'Y':'-.--', 'Z':'--..',
  14.                  'Ä':'.-.-', 'Ö':'---.', 'Ü':'..--', '0':'-----',
  15.                  '1':'.----', '2':'..---', '3':'...--', '4':'....-',
  16.                  '5':'.....', '6':'-....', '7':'--...', '8':'---..',
  17.                  '9':'----.', '.':'.-.-.-', ',':'--..--', '?':'..--..',
  18.                  '!':'..--.', ':':'---...', '"':'.-..-.', "'":".----.",
  19.                  '=':'-...-', ' ':' '}
  20.      
  21.       self.table2 = {}
  22.      
  23.       # Inicializar desde aqui
  24.       self.__encode('Sanko os saluda')
  25.       self.__decode('... .- -. -.- ---   --- ...   ... .- .-.. ..- -.. .-')  
  26.  
  27.  
  28.      
  29.    def __encode(self, text):
  30.       self.text = text
  31.       self.encoded = ''
  32.      
  33.       if self.text != '':
  34.          self.text = self.text.upper()
  35.          
  36.          for i in self.text:
  37.             self.encoded += self.table[i] + ' '
  38.            
  39.          print "Encoded: %s"% self.encoded
  40.          
  41.  
  42.      
  43.    def __decode(self, en_text):      
  44.       self.en_text = en_text
  45.       self.decoded = ''
  46.      
  47.       for i in self.table:
  48.          self.table2[self.table[i]] = i
  49.      
  50.       self.en_text = self.en_text.split(' ')
  51.  
  52.       for x in self.en_text:
  53.          try:
  54.             self.en_text.remove('')
  55.          except:
  56.             pass
  57.          self.decoded += self.table2<ul class="bbc_list"><li type="square">[/li][/list]
  58.          
  59.       print "Decoded: %s"% self.decoded
  60.                  
  61. cif_morse()
      
Imágen :

15
Python / Cifrado Kamasutra
« en: Agosto 26, 2013, 09:13:55 pm »
Buenas, vengo a traerles la solución a un reto de You are not allowed to view links. Register or Login

Código: Python
  1. #Cifrado Kamasutra en Python - Sanko
  2. #Reto UDT - Cifrado Kamasutra
  3.  
  4. # -*- coding: utf-8 -*-
  5. from random import randint
  6. from string import maketrans
  7.  
  8. class cif_Kamasutra():
  9.    
  10.    def __init__(self):
  11.       self.text = raw_input("Write the text to encode|> ")
  12.       self.text = self.text.upper()
  13.       self._gen_alfabeto()
  14.      
  15.    def _gen_alfabeto(self):
  16.       #This func has been coded by Pink
  17.       self.alfabeto = ['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z']
  18.       letra1=""
  19.       letra2=""
  20.       self.retorno=""
  21.      
  22.       for n in range(len(self.alfabeto)):
  23.          ram = randint(0,len(self.alfabeto)-1)
  24.          letra1 = self.alfabeto[ram]
  25.          letra2 = self.alfabeto[n]
  26.          self.alfabeto[n] = letra1
  27.          self.alfabeto[ram] = letra2
  28.          
  29.       for n in range(len(self.alfabeto)):
  30.          self.retorno+=self.alfabeto[n]
  31.      
  32.       #extra code
  33.       print "\nDict: %s"% self.retorno
  34.       self.new_alphabet = self.retorno[::-1]
  35.  
  36.       self.__encode()
  37.       self.__decode()
  38.      
  39.    def __encode(self):
  40.       self.encoded = maketrans(self.retorno, self.new_alphabet)
  41.       self.final_str = self.text.translate(self.encoded)
  42.       print "Encoded: ", self.text.translate(self.encoded)
  43.      
  44.    def __decode(self):
  45.       decoded = maketrans(self.new_alphabet, self.retorno)
  46.       print "Decoded: ", self.final_str.translate(decoded)
  47.      
  48.  
  49. cif_Kamasutra()

Una imágen vale más que mil palabras:


Saludos

16
Python / Cifrado Escitala
« en: Agosto 26, 2013, 09:10:24 pm »
Buenas, hoy les traigo mi solución a un reto de programación en You are not allowed to view links. Register or Login

Código: Python
  1. #Cifrado escitala en python - Sanko
  2. #Reto cifrado escitala - udtools.net
  3.  
  4. # -*- coding: utf-8 -*-
  5.  
  6. from math import ceil
  7.  
  8. class cif_escitala():
  9.    
  10.    def __init__(self):
  11.       self.table = []
  12.       self.main()
  13.      
  14.    def main(self):
  15.       print "Escitala cipher Python\n"
  16.       self.text = raw_input("Write the text to encode|> ")
  17.       self.n_col = input("\nWrite the number of columns|> ")
  18.      
  19.       if self.text != '' and self.n_col != '':
  20.          self.__encode(self.text, self.n_col)
  21.          self.__decode()
  22.          
  23.          print "\nNumber of columns: %s" % self.n_col
  24.          print "Encoded: %s" % self.encoded
  25.          print "Decoded: %s" % self.decoded
  26.    
  27.    def __encode(self, text, n_col):
  28.       longitud = len(self.text)
  29.       if longitud > self.n_col:
  30.          h = ceil(longitud / self.n_col)
  31.          while h:
  32.             self.table.append(self.text[:self.n_col])
  33.             self.text = self.text[self.n_col:]
  34.             h -= 1
  35.            
  36.          self.table.append(self.text.ljust(self.n_col))
  37.          self.text = ''.join(map(''.join, zip(*self.table)))
  38.       else:
  39.          print "n_col is bigger than longitud"
  40.          
  41.       self.encoded = self.text.rstrip()
  42.      
  43.    def __decode(self):
  44.       self.decoded = self.__encode(self.encoded, ceil(len(self.encoded) / self.n_col))
  45.      
  46.      
  47. cif_escitala()

Una imágen vale más que mil palabras :


Saludos

17
Bugs y Exploits / La orca desembarca! - Grampus v.beta
« en: Julio 11, 2013, 09:18:34 pm »


Despues de mucho tiempo de espera, al menos por parte del equipo de desarrollo, Grampus Beta sale a la luz.
Para los que desconozcais el proyecto, Grampus es una herramienta dirigida especialmente a analistas forenses y a pentesters en general.
La herramienta facilita la recopilación de información a traves de la extracción de metadatos de diferentes documentos y tareas de finger/foot printing

Características :
- Extracción de metadatos de documentos e imágenes, formatos soportados : Openoffice/Libreoffice, Office 2007, Office 2003, PDF, jpg, flv y gif.
- Eliminación de metadatos extraidos de diferentes documentos e imágenes.
- Tres tipos de Crawlers, entre los que se encuentra un crawler de documentos (por extensión) usando Google hacking.
- Para la tarea del fingerprinting contamos con un server banner y un escaneo mediante Shodan usando su api


Objetivos :
Como desarrolladores nuestro objetivo sería la implementación de nuevas tareas para la recopilación de información y el mantenimiento de los bugs que vayan saliendo.
Fuera de eso, queremos incentivar el desarrollo colectivo para que esta herramienta pueda ir automanteniendose y autorenovandose gracias a la colaboración de desarrolladores que usen la herramienta y así conseguir el objetivo común de una herramienta multiplataforma, estable y eficiente.


Download :
Aqui os acerco el enlace de nuestro grupo en bitbucket, donde podreis ir viendo los repositorios de los proyectos que vayamos iniciando : You are not allowed to view links. Register or Login
Este sería el enlace de descarga del software : You are not allowed to view links. Register or Login
Y este sería el user-guide : You are not allowed to view links. Register or Login

18
Python / 24sms.net Sender
« en: Mayo 22, 2013, 04:51:35 pm »
Bueno os vengo a dejar un pequeñito code que hice para resolver unas dudas que se plantearón en este tema : You are not allowed to view links. Register or Login

Sin más el code y una imágen del mensaje recibido:

Código: Python
  1. # m.24sms.net app to send sms
  2. # Coded by Sanko
  3.  
  4. import urllib, urllib2
  5. from cookielib import CookieJar
  6.  
  7. class SMS_Sender():
  8.  
  9.     def __init__(self):
  10.         self._Responser()
  11.  
  12.     def _Responser(self):
  13.         self.__Params('Sanko', 'Aqui tu prefijo + numero de telefono')
  14.         #
  15.         try:
  16.             data_encoded = urllib.urlencode(self.data)
  17.             response = self.opener.open("[url]http://m.24sms.net/[/url]", data_encoded)
  18.             content = response.read()
  19.         except:
  20.             print "Error doing the response"
  21.  
  22.         def __Parser():
  23.             if content == "Site is doing maintenance,please come back later.":
  24.                 print "ERROR sending the SMS"
  25.             else:
  26.                 print "the SMS was sent correctly!"
  27.  
  28.         __Parser()
  29.  
  30.     def __Params(self, author, number):
  31.         self.author = author
  32.         self.number = number
  33.  
  34.         #capturing the cookies
  35.         try:
  36.             cj = CookieJar()
  37.             self.opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj))
  38.         except:
  39.             print "An error has ocurred capturing the cookies"
  40.         #params
  41.         self.data = {'al':1064, 'SendFrom':self.author, 'SendTo':self.number,
  42.                 'Msg':'Probando sms app - Sanko', 'submit':'Send'}
  43.  
  44.  
  45. SMS_Sender()


Imágen :


19
Python / Whatsapp Metadata Extractor
« en: Mayo 13, 2013, 06:22:08 pm »
Código: You are not allowed to view links. Register or Login
· WhatsApp Metadata Extractor :
       - main_manage.py (main de consola en forma de cliente)
       - DB_Extractor.py (extrae los metadatos de la BD)
       - metaimg_extractor.py (extrae los metadatos de los .jpg encontrados)


main_manage.py :
Código: Python
  1. # -*- coding: utf-8 *-*
  2. import DB_Extractor, metaimg_extractor
  3.  
  4. class WhatsApp_Extractor():
  5.  
  6.     def __init__(self):
  7.         self.__opt()
  8.  
  9.     def __opt(self):
  10.         #Uncomment the OPTION that you want to use
  11.  
  12.         #self.__opt1()  #-> DB METADATA EXTRACTOR
  13.         self.__opt2()  #-> IMG METADATA EXTRACTOR
  14.         #self.__opt3()  #-> BOTH, OPT1 AND OPT2
  15.  
  16.     def __opt1(self):
  17.         print "DB METADATA"
  18.         print "------------"
  19.         DB_Extractor.DB_Extractor()
  20.         print "------------"
  21.  
  22.     def __opt2(self):
  23.         print "IMG META"
  24.         print "------------"
  25.         metaimg_extractor.IMG_Meta()
  26.         print "------------"
  27.  
  28.     def __opt3(self):
  29.         print "DB METADATA"
  30.         print "------------"
  31.         DB_Extractor.DB_Extractor()
  32.         print "------------"
  33.         print "\nIMG META"
  34.         print "------------"
  35.         metaimg_extractor.IMG_Meta()
  36.         print "------------"
  37.  
  38. WhatsApp_Extractor()

DB_Extractor.py :
Código: Python
  1. # -*- coding: utf-8 *-*
  2. #Script to extract the metadata from the WhatsApp crypted DB
  3.  
  4. import sqlite3
  5. from Crypto.Cipher import AES
  6.  
  7. class DB_Extractor():
  8.  
  9.     def __init__(self):
  10.         self._manage_do()
  11.  
  12.     def _manage_do(self):
  13.         try:
  14.             self.__DB_Breaker('msgstore.db.crypt')
  15.             self.__DB_conn()
  16.             self.__SQL_Consulter()
  17.             #Log exporter
  18.         except:
  19.             print "Error starting the script"
  20.  
  21.     def __DB_Breaker(self, DBPath):
  22.         self.DBPath = DBPath
  23.         #breaking the hash
  24.         f = open(self.DBPath, 'rb')
  25.         key = "346a23652a46392b4d73257c67317e352e3372482177652c"
  26.         #triying to break the hash
  27.         try:
  28.             key = key.decode('hex')
  29.             cipher = AES.new(key, 1)
  30.             decoded = cipher.decrypt(f.read())
  31.             #Saving into a new db file
  32.             try:
  33.                 decoded_DB = open('metadb.db', 'wb')
  34.                 decoded_DB.write(decoded)
  35.                 decoded_DB.close()
  36.                 print "metadb.db has been created in the same directory"
  37.             except:
  38.                 print "An error has ocurred creating the decoded DB"
  39.         except:
  40.             print "Error decoding the hash"
  41.  
  42.  
  43.     def __DB_conn(self):
  44.         #triying to connect with the sqlite database
  45.         try:
  46.             self.conn = sqlite3.connect('metadb.db')
  47.             self.consult = self.conn.cursor()
  48.         except:
  49.             print "An error has ocurred connecting with the SQLite DB"
  50.  
  51.  
  52.     def __SQL_Consulter(self):
  53.         #Divided in :
  54.             # Messages
  55.             # Chat_list
  56.  
  57.         def __Messages():
  58.             #SQLConsult
  59.             try:
  60.                 self.consult.execute("SELECT key_remote_jid, key_from_me, \
  61.                remote_resource, status, datetime(timestamp), data, media_url, media_mime_type, \
  62.                media_size, latitude, longitude FROM messages;")
  63.  
  64.             except:
  65.                 print "An error has ocurred doing the SQL Consult"
  66.  
  67.             def __Shower():
  68.                 #Message details
  69.                 #nota : parsear status, comprobar si yo envio o recivo
  70.  
  71.                 for data in self.consult:
  72.                     try:
  73.                         print "\nMessages Details:"
  74.                         print "----------------------"
  75.  
  76.                         if str(data[2]):
  77.                             if str(data[1]) == '1':
  78.                                 print "From: me"
  79.                                 print "To: %s(group), integrant: %s"%(str(data[0]), str(data[2]))
  80.                             else:
  81.                                 print "From: %s(group), integrant: %s"%(str(data[0]), str(data[2]))
  82.                                 print "To: me"
  83.                         else:
  84.                             if str(data[1]) == '1':
  85.                                 print "From: me"
  86.                                 print "To: " + str(data[0])
  87.                             else:
  88.                                 print "From: " + str(data[0])
  89.                                 print "To: me"
  90.  
  91.                         print "Status: " + str(data[3])
  92.                         print "Timestamp: " + str(data[4])
  93.                         print "Message: " + str(data[5])
  94.                         print "Media content: %s, type: %s, size: %s"%(str(data[6]), str(data[7]), str(data[8]))
  95.                         print "Location(Lat: %s, Long: %s)"%(str(data[9]), str(data[10]))
  96.                         print "----------------------"
  97.  
  98.                     except:
  99.                         continue
  100.                         print "ERROR showing message details"
  101.  
  102.             __Shower()
  103.  
  104.  
  105.         def __Chat_list():
  106.             #SQLConsult
  107.             try:
  108.                 self.consult.execute("SELECT id, \
  109.                key_remote_jid FROM chat_list;")
  110.  
  111.             except:
  112.                 print "An error has ocurred doing the SQL Consult"
  113.  
  114.             def __Shower():
  115.                 #Chat list details
  116.                 for data in self.consult:
  117.                     try:
  118.                         print "\nChat_list"
  119.                         print "ID: " + str(data[0])
  120.                         print "Number: " + str(data[1])
  121.                         print "----------------------"
  122.                     except:
  123.                         continue
  124.                         print "ERROR showing chat list details"
  125.  
  126.             __Shower()
  127.  
  128.         #Initializing
  129.         __Messages()
  130.         __Chat_list()

metaimg_extractor.py :
Código: Python
  1. # -*- coding: utf-8 *-*
  2. import os, exif
  3.  
  4. class IMG_Meta():
  5.  
  6.     def __init__(self):
  7.         try:
  8.             self.__Media_extractor()
  9.             print "------------------------------------------------------\n"
  10.             self.__Profile_extractor()
  11.         except:
  12.             print "An error has ocurred starting the script"
  13.     def __Media_extractor(self):
  14.         try:
  15.             images = os.listdir('Media/WhatsApp Images/')
  16.         except:
  17.             print "An error has ocurred listing the files into the directory"
  18.  
  19.         def __Shower():
  20.             for i in images:
  21.                 print "-------------"
  22.                 print i
  23.                 obj = exif.extract_EXIF('Media/WhatsApp Images/%s' % i)
  24.                 print "-------------"
  25.  
  26.         __Shower()
  27.  
  28.     def __Profile_extractor(self):
  29.         try:
  30.             images = os.listdir('Profile Pictures/')
  31.         except:
  32.             print "An error has ocurred listing the files into the directory"
  33.  
  34.         def __Shower():
  35.             for i in images:
  36.                 print "-------------"
  37.                 print i
  38.                 obj = exif.extract_EXIF('Profile Pictures/%s' % i)
  39.                 print "-------------"
  40.  
  41.         __Shower()


Trabajando :




Saludos.

20
Informática Forense / Forense automatizado a un whatsapp
« en: Mayo 13, 2013, 05:58:17 pm »


Buenas a todos, ya hace un tiempo que no escribo algún que otro articulo y hoy aburrido hablando con unos amigos por whatsapp me quedo la duda de si whatsapp guardaba los logs de todo lo que hicíera y efectivamente whatsapp lo hacia.

Viendo la de cositas que se estaban guardando :
      - Conversaciones de tlfn a tlfn
      - Chats activos
      - Fotos de los perfiles que mire
      - Imágenes, audios, videos que me pasarón o que pase

      (Por ejemplo).

Pues me apetecio hacerle un forense y al tiempo que lo hago os haré una demo del forense a un whatsapp y vereís todos los datos que podemos sacar de utilidad.

Recrearemos un entorno en el que dispongo de acceso físico a un terminal.
El whatsapp es una buena forma de extraer información sobre el día día de la persona, se podría aplicar algo como "Dime con quien andas y te diré quien eres" pero convertido al método geek.


Empezamos con la DEMO :

Bueno, los ficheros de whatsapp se guardan por defecto en /storage/sdcard0/WhatsApp/ , y yo me enviaré los ficheros con Airdroid, una estupenda app para compartir archivos PC - Smartphone vía wifi.




Para pasar a estar conectados en "Modo de conexión remota" como ahí podeís ver solo hay que acceder a You are not allowed to view links. Register or Login
y te logueas con tu cuenta.




Y tan solo te queda acceder al directorio y descargar los arhivos de los que extraeremos los metadatos.



Una vez descargados los ficheros voy a proceder a comentaros que podemos encontrar en cada uno de los directorios y cómo podríamos extraerles el jugo.

Tenemos "Databases", "Media" y "Profile Pictures", he hecho un script para que extraiga los metadatos de los db.crypt, tambien extrae los ficheros de la carpeta media(imágenes, audios, videos) y tambien extrae las imágenes encontradas en Profile Pictures.

Databases : Aqui podremos encontrarnos una serie de ficheros con extensión "db.crypt", Whatsapp cifra los archivos SQLite con AES pero siempre usa la misma key "346a23652a46392b4d73257c67317e352e3372482177652c" y de este modo podré decodificarlos.

Media : Aqui nos encontramos con una seríe de archivos (imágenes, audios, videos y wallpapers).

Profile Pictures : Aqui nos encontraremos con todas las imágenes de perfil(de usuario) que hemos mirado desde nuestro whatsapp.


NOTA IMPORTANTE : Para extraer la información de todos estos archivos que hemos obtenido he codeado un script que automatiza todo el proceso (a excepción del proceso de obtención de los ficheros , puesto que se supone que tenemos acceso físico al terminal.)




Ahora os mostraré un esquema en forma de arbol para comprender un poco como funciona el script que he preparado:

· WhatsApp Metadata Extractor :
       - main_manage.py (main de consola en forma de cliente)
       - DB_Extractor.py (extrae los metadatos de la BD)
       - metaimg_extractor.py (extrae los metadatos de los .jpg encontrados)


He dividido el proyecto en 3 scripts, main_manage es el encargado de interactuar con el cliente (el que debemos ejecutar), DB_Extractor es el encargado de realizar las consultas con la BD para extraer toda la información(la que nos interesa) y metaimg_extractor es el encargado de buscar en "Media" y en "Profile Pictures" en busca de metadatos en los archivos .jpg (La mayoria vienen con ellos eliminados por defecto pero no me digas por qué algunas imágenes no se filtran y son subidas sin filtrarse).


Sin más os dejo los codes :

main_manage.py :
Código: Python
  1. # -*- coding: utf-8 *-*
  2. import DB_Extractor, metaimg_extractor
  3.  
  4. class WhatsApp_Extractor():
  5.  
  6.     def __init__(self):
  7.         self.__opt()
  8.  
  9.     def __opt(self):
  10.         #Uncomment the OPTION that you want to use
  11.  
  12.         #self.__opt1()  #-> DB METADATA EXTRACTOR
  13.         self.__opt2()  #-> IMG METADATA EXTRACTOR
  14.         #self.__opt3()  #-> BOTH, OPT1 AND OPT2
  15.  
  16.     def __opt1(self):
  17.         print "DB METADATA"
  18.         print "------------"
  19.         DB_Extractor.DB_Extractor()
  20.         print "------------"
  21.  
  22.     def __opt2(self):
  23.         print "IMG META"
  24.         print "------------"
  25.         metaimg_extractor.IMG_Meta()
  26.         print "------------"
  27.  
  28.     def __opt3(self):
  29.         print "DB METADATA"
  30.         print "------------"
  31.         DB_Extractor.DB_Extractor()
  32.         print "------------"
  33.         print "\nIMG META"
  34.         print "------------"
  35.         metaimg_extractor.IMG_Meta()
  36.         print "------------"
  37.  
  38. WhatsApp_Extractor()
[/spoiler]


DB_Extractor.py :
[spoiler]
Código: Python
  1. # -*- coding: utf-8 *-*
  2. #Script to extract the metadata from the WhatsApp crypted DB
  3.  
  4. import sqlite3
  5. from Crypto.Cipher import AES
  6.  
  7. class DB_Extractor():
  8.  
  9.     def __init__(self):
  10.         self._manage_do()
  11.  
  12.     def _manage_do(self):
  13.         try:
  14.             self.__DB_Breaker('msgstore.db.crypt')
  15.             self.__DB_conn()
  16.             self.__SQL_Consulter()
  17.             #Log exporter
  18.         except:
  19.             print "Error starting the script"
  20.  
  21.     def __DB_Breaker(self, DBPath):
  22.         self.DBPath = DBPath
  23.         #breaking the hash
  24.         f = open(self.DBPath, 'rb')
  25.         key = "346a23652a46392b4d73257c67317e352e3372482177652c"
  26.         #triying to break the hash
  27.         try:
  28.             key = key.decode('hex')
  29.             cipher = AES.new(key, 1)
  30.             decoded = cipher.decrypt(f.read())
  31.             #Saving into a new db file
  32.             try:
  33.                 decoded_DB = open('metadb.db', 'wb')
  34.                 decoded_DB.write(decoded)
  35.                 decoded_DB.close()
  36.                 print "metadb.db has been created in the same directory"
  37.             except:
  38.                 print "An error has ocurred creating the decoded DB"
  39.         except:
  40.             print "Error decoding the hash"
  41.  
  42.  
  43.     def __DB_conn(self):
  44.         #triying to connect with the sqlite database
  45.         try:
  46.             self.conn = sqlite3.connect('metadb.db')
  47.             self.consult = self.conn.cursor()
  48.         except:
  49.             print "An error has ocurred connecting with the SQLite DB"
  50.  
  51.  
  52.     def __SQL_Consulter(self):
  53.         #Divided in :
  54.             # Messages
  55.             # Chat_list
  56.  
  57.         def __Messages():
  58.             #SQLConsult
  59.             try:
  60.                 self.consult.execute("SELECT key_remote_jid, key_from_me, \
  61.                remote_resource, status, datetime(timestamp), data, media_url, media_mime_type, \
  62.                media_size, latitude, longitude FROM messages;")
  63.  
  64.             except:
  65.                 print "An error has ocurred doing the SQL Consult"
  66.  
  67.             def __Shower():
  68.                 #Message details
  69.                 #nota : parsear status, comprobar si yo envio o recivo
  70.  
  71.                 for data in self.consult:
  72.                     try:
  73.                         print "\nMessages Details:"
  74.                         print "----------------------"
  75.  
  76.                         if str(data[2]):
  77.                             if str(data[1]) == '1':
  78.                                 print "From: me"
  79.                                 print "To: %s(group), integrant: %s"%(str(data[0]), str(data[2]))
  80.                             else:
  81.                                 print "From: %s(group), integrant: %s"%(str(data[0]), str(data[2]))
  82.                                 print "To: me"
  83.                         else:
  84.                             if str(data[1]) == '1':
  85.                                 print "From: me"
  86.                                 print "To: " + str(data[0])
  87.                             else:
  88.                                 print "From: " + str(data[0])
  89.                                 print "To: me"
  90.  
  91.                         print "Status: " + str(data[3])
  92.                         print "Timestamp: " + str(data[4])
  93.                         print "Message: " + str(data[5])
  94.                         print "Media content: %s, type: %s, size: %s"%(str(data[6]), str(data[7]), str(data[8]))
  95.                         print "Location(Lat: %s, Long: %s)"%(str(data[9]), str(data[10]))
  96.                         print "----------------------"
  97.  
  98.                     except:
  99.                         continue
  100.                         print "ERROR showing message details"
  101.  
  102.             __Shower()
  103.  
  104.  
  105.         def __Chat_list():
  106.             #SQLConsult
  107.             try:
  108.                 self.consult.execute("SELECT id, \
  109.                key_remote_jid FROM chat_list;")
  110.  
  111.             except:
  112.                 print "An error has ocurred doing the SQL Consult"
  113.  
  114.             def __Shower():
  115.                 #Chat list details
  116.                 for data in self.consult:
  117.                     try:
  118.                         print "\nChat_list"
  119.                         print "ID: " + str(data[0])
  120.                         print "Number: " + str(data[1])
  121.                         print "----------------------"
  122.                     except:
  123.                         continue
  124.                         print "ERROR showing chat list details"
  125.  
  126.             __Shower()
  127.  
  128.         #Initializing
  129.         __Messages()
  130.         __Chat_list()

metaimg_extractor.py :
Código: Python
  1. # -*- coding: utf-8 *-*
  2. import os, exif
  3.  
  4. class IMG_Meta():
  5.  
  6.     def __init__(self):
  7.         try:
  8.             self.__Media_extractor()
  9.             print "------------------------------------------------------\n"
  10.             self.__Profile_extractor()
  11.         except:
  12.             print "An error has ocurred starting the script"
  13.     def __Media_extractor(self):
  14.         try:
  15.             images = os.listdir('Media/WhatsApp Images/')
  16.         except:
  17.             print "An error has ocurred listing the files into the directory"
  18.  
  19.         def __Shower():
  20.             for i in images:
  21.                 print "-------------"
  22.                 print i
  23.                 obj = exif.extract_EXIF('Media/WhatsApp Images/%s' % i)
  24.                 print "-------------"
  25.  
  26.         __Shower()
  27.  
  28.     def __Profile_extractor(self):
  29.         try:
  30.             images = os.listdir('Profile Pictures/')
  31.         except:
  32.             print "An error has ocurred listing the files into the directory"
  33.  
  34.         def __Shower():
  35.             for i in images:
  36.                 print "-------------"
  37.                 print i
  38.                 obj = exif.extract_EXIF('Profile Pictures/%s' % i)
  39.                 print "-------------"
  40.  
  41.         __Shower()



Unas imágenes trabajando :

DB_Extractor :


IMG extractor :



El archivo "Exif" que importamos en el metaimg_extractor podemos encontrarlo en el proyecto de grampus en bitbucket -> You are not allowed to view links. Register or Login

PD : El Forense podría llegar a hacerse en mayor profundidad, en este caso solo tratamos los datos que podrían ser más relevantes como conversaciones, envio de archivos y el análisis de los metadatos de las imágenes.
En fin, esto es todo, el script os automatizará todo el trabajo "duro"


Saludos !! , Sanko.



PD : You are not allowed to view links. Register or Login

Páginas: [1] 2 3 4