comment
IRC Chat
play_arrow
Este sitio utiliza cookies propias y de terceros. Si continúa navegando consideramos que acepta el uso de cookies. OK Más Información.

Bytescanner api improved

  • 1 Respuestas
  • 1939 Vistas

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado Sanko

  • *
  • Underc0der
  • Mensajes: 541
  • Actividad:
    0%
  • Reputación 0
  • ¿Puedes?
    • Ver Perfil
    • Underc0de
« 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('yourmail@hotmail.com', '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, 'http://www.bytescanner.com/client2api.php')
  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 ("[x] "+self.login_data['error']['title'] + "\tReason: " + self.login_data['error']['reason'])
  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, 'http://www.bytescanner.com/startup.php')
  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 ("[x] "+self.upload_data['error']['title'] + "\tReason: " + self.upload_data['error']['reason'])
  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, 'http://www.bytescanner.com/api2client.php?action=scanResult&ResultID=%s'% 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 ("[x] "+self.result_data['error']['title'] + "\tReason: " + self.result_data['error']['reason'])
  100.                         sys.exit(errno.EACCES)
  101.                
  102.                 #print self.result_data
  103.                
  104.         def __Scan_History(self):
  105.                 try:
  106.                         curl.setopt(curl.URL, 'http://www.bytescanner.com/api2client.php?action=ScanHistory')
  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, 'http://www.bytescanner.com/api2client.php?action=ChangeLog')
  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, 'http://www.bytescanner.com/api2client.php?action=AvVersion')
  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, 'http://www.bytescanner.com/export4client.php?action=Export2%s&ResultID=%s' %(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 : ersanyakit@yahoo.com.tr
  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= "youremailaddress@bytescanner.com"
  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, 'http://www.bytescanner.com/client2api.php')
  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 ("[x] "+data['error']['title'] + "\tReason: " + data['error']['reason'])
  28.         sys.exit(errno.EACCES)
  29.  
  30. print ("[+] Logged In\n")
  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("[+] Transfering file "+ scanFile +"\n")
  41. ## sending File To server!
  42. postData=[
  43.         ('action', 'BinaryFileTransfer'),
  44.         ('binaryFile', (pycurl.FORM_FILE, scanFile))
  45. ]
  46. c.setopt(c.URL, 'http://www.bytescanner.com/startup.php')
  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 ("[x] "+data['error']['title'] + "\tReason: " + data['error']['reason'])
  53.         sys.exit(errno.EACCES)
  54. print("[+] File transfer completed. Result ID: "+str(data['root']) )
  55.  
  56. #STEP III recieve scan results
  57. print("[+] Starting request for scan results...\n");
  58.  
  59. c.setopt(c.URL, 'http://www.bytescanner.com/api2client.php?action=scanResult&ResultID='+str(data['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 ("[x] "+data['error']['title'] + "\tReason: " + data['error']['reason'])
  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("[+] Scan Completed...\n")

PD : EL retorno se almacena en un diccionario, asi que cuando importen la clase acuerdense de parsear la informacion.
Saludos
« Última modificación: Marzo 16, 2014, 08:55:59 pm por Expermicid »
Sigueme en Twitter : @Sankosk
Estos nuevos staff no tienen puta idea XD

Desconectado TeNeX

  • *
  • Underc0der
  • Mensajes: 41
  • Actividad:
    0%
  • Reputación 0
    • Ver Perfil
« Respuesta #1 en: Septiembre 20, 2013, 01:24:43 pm »
Hey esta muy bueno tu aporte... Ojala alguien hiciera eso con scapy o un tuto

 

¿Te gustó el post? COMPARTILO!