Página 1 de 6 1 2 ... Último
  1. #1

    Registo
    Dec 2010
    Idade
    32
    Posts
    39

    Lightbulb Openbox V6 F7S V8S etc Firmware para ALI3511

    Como já tinha publicado é possível ter as Openboxes V6 F7S V8S a funcionar sem problemas de imagem nos canais SD (problema conhecido onde temos som mas não temos imagem).
    Para tal é necessário instalar a firmware da Solovox V8S plus seja este por USB ou RS232 (null modem).
    O problema é que a Solovox não fornece as suas firmwares de forma grátis e tem um processo de licenciamento que deve ser feito por cabo RS232 e software deles.

    Decidi abrir este tópico para tornar publico as estratégias que em conjunto com outros utilizadores temos vindo a trabalhar, bem como as nossas descobertas.
    Não irei citar esses mesmos que se desejarem identifiquem-se neste tópico.

    Ferramentas/Software/Firmware Solovox
    http://www.solovox.xyz/download

    Resumo do que sabemos em relação à firmware da solovox:
    1. A firmware no código vai ler uma chave à memoria (vou chamar password) e valida-a com o numero de serie se esta password está certa caso não estivesse dava "NO AUTH"
    2. Existe um servidor para gerir as licenças que a Solovox vende e é este que gerava as passwords para as boxes (actualmente em https://45.248.86.44)
    3. Existe um software (dpt_main_2.4.exe) para licenciar as boxes que:
      1. Pergunta à box qual o numero de serie
      2. Envia ao servidor o numero de serie
      3. Servidor gera a password e marca a licença como gasta
      4. Guarda na box essa password em processo OTP



    • Anular licenciamento na firmware - reverse engeniring da firmware
      É necessário usar um firmware decrypter para começar por separar as varias partes da firmware, apenas encontrei uma parte (AppsData) de diferença entre a firmware da solovox e a original, esta parte nada deve influenciar para o que queremos fazer, então extrai o maincode.
      Este maincode em lzma se estiver tudo ok deve ser possível descompactar com 7-zip.
      O problema é que está cifrado e não sabemos qual é a chave para fazer o decrypt.
      Alguém sabe como passar este problema?

      Código:
      File size = 7340032 bytes ( 7168 kB )
      ---------------Part1---------------
      Name        : bootloader
      ID          : 0x23010010
      SIZE DATA   : 0x00000000
      OFFSET      : 0x0001EE00
      Version     : DVBS2---0.1.0
      Date        : 2017-08-22
      Actual CRC  : 0x4E435243
      No CRC!  - OK!
      ------------------------------------
      ---------------Part2---------------
      Name        : MemCfg
      ID          : 0x07F80100
      SIZE DATA   : 0x00000870
      OFFSET      : 0x00001000
      Version     : 00000001
      Date        : 2014-5-15
      Actual CRC  : 0x4E435243
      No CRC!  - OK!
      ------------------------------------
      ---------------Part3---------------
      Name        : upgcode
      ID          : 0x05FA0100
      SIZE DATA   : 0x00000000
      OFFSET      : 0x00010200
      Version     : upg 1.0.0
      Date        : 2017-08-22
      Actual CRC  : 0x4E435243
      No CRC!  - OK!
      ------------------------------------
      ---------------Part4---------------
      Name        : maincode
      ID          : 0x01FE0101
      SIZE DATA   : 0x002613E6
      OFFSET      : 0x00380000
      Version     : M3511 HD
      Date        : 2017-08-22
      Actual CRC  : 0x1242DF8D
      Calculate CRC   : 0x1242DF8D - OK!
      ------------------------------------
      ---------------Part5---------------
      Name        : seecode
      ID          : 0x06F90101
      SIZE DATA   : 0x00111797
      OFFSET      : 0x0011FF80
      Version     : MSEE Demo
      Date        : 2017-08-22
      Actual CRC  : 0xFA52204F
      Calculate CRC   : 0xFA52204F - OK!
      ------------------------------------
      ---------------Part6---------------
      Name        : AppsData
      ID          : 0x50AF0100
      SIZE DATA   : 0x00010070
      OFFSET      : 0x00040080
      Version     : 1.0.0
      Date        : 2016-2-27
      Actual CRC  : 0x4E435243
      No CRC!  - OK!
      ------------------------------------
      ---------------Part7---------------
      Name        : BOOTLOG
      ID          : 0x02FD0200
      SIZE DATA   : 0x0000F3A9
      OFFSET      : 0x00010000
      Version     : 1.0.0
      Date        : 2017-08-22
      Actual CRC  : 0xDCB91805
      Calculate CRC   : 0xDCB91805 - OK!
      ------------------------------------
      ---------------Part8---------------
      Name        : Radioback
      ID          : 0x02FD0100
      SIZE DATA   : 0x00009566
      OFFSET      : 0x00010000
      Version     : 1.0.0
      Date        : 2017-08-22
      Actual CRC  : 0x9482F52C
      Calculate CRC   : 0x9482F52C - OK!
      ------------------------------------
      ---------------Part9---------------
      Name        : defaultdb
      ID          : 0x03FC0100
      SIZE DATA   : 0x000193C0
      OFFSET      : 0x0001FF80
      Version     : 1.1.0
      Date        : 2014-4-15
      Actual CRC  : 0x2075EFDC
      Calculate CRC   : 0x2075EFDC - OK!
      ------------------------------------
      ---------------Part10---------------
      Name        : userdb
      ID          : 0x04FB0100
      SIZE DATA   : 0x00170070
      OFFSET      : 0x00000000
      Version     : 1.0.0
      Date        : 2017-8-22
      Actual CRC  : 0x4E435243
      No CRC!  - OK!
      ------------------------------------
      Abaixo deixo ferramentas que usei:
      FirmwareDecrypter_v8.9.zip
      http://www.satedu.cba.pl/index.php?a...Test%20Folder&

      Ali__tools_Console_v4.0__CRC_FIXER.rar
      http://www.satedu.cba.pl/index.php?a...Test%20Folder&


    • Snifar pedidos HTTP com Wireshark
      Ainda sem sucesso devido aos chineses não serem amadores e terem usado no servidor de licenças certificado SSL (https) para dificultar o sniffing dos pedidos HTTP.


    • Snifar porta serie (RS232) para perceber como é feito o licenciamento
      Sei que começa pelo comando ".getsn 8." para pedir à box o numero de serie.
      Ainda não tenho um snifing completo dos comandos da porta serie porque uma vez a box licenciada não dá para licenciar de novo.
      Se alguém por licenciar uma box por favor use um snifer por software ou hardware e guarde os comandos trocados entre o software de autenticação e a box.


    • Reverse engeniring do software de licencimento
      Consegui fazer decompile ao software de autenticação da solovox (dpt_main_2.4.exe).
      Já tenho uma versão em Python legível mas ainda não perfeita, contudo já descobri que estou certo na estratégia que usaram para licenciar as boxes.
      Outra coisa que descobri foi os endpoints do servidor para a API.

      RSC_ORDER_INFO = '/order_info'
      RSC_PRODUCTION = '/chip_with_sn_production'

      Exemplo order_info para receber informação das licenças:
      https://45.248.86.44/dpt/api/order_i...8-71ba26097347

      (com key vazia curiosamente tem licenças por usar)
      https://45.248.86.44/dpt/api/order_info?key=

      Exemplo chip_with_sn_production para receber password:
      https://45.248.86.44/dpt/api/chip_wi..._n_sei_formato

      Continuo a tentar ler o código para perceber quais os comandos usados na porta serie.

      Código Python das principais classes (tenho completo se alguém necessitar peça por mp)
      Código:
      # -*- coding: utf-8 -*-
      
      __author__     = "Roy Wang (roy.dicovi@gmail.com)"
      __version__    = "2.4"
      __date__       = "$Date: 2013/11/26 14:00:00 $"
      __copyright__  = "Copyright (c) 2013 Dicovi"
      __license__    = "Dicovi"
      
      
      from PyQt4.QtGui import *  
      from PyQt4.QtCore import *
      import sys, os
      from dpt_client import *
      from ui_dpt import *
      import serial
      import sip, decimal
      import dpt_qrc
      
      class DptClientCfg():
          def __init__(self):
              self.port = 0
              self.key = ''
              self.api = ''
              self.lan = "english"
              self.cfgfilename = './production.cfg'
              
          def readcfg(self):
              if not os.path.exists(self.cfgfilename):
                  return False
              try:
                  file_hander = open(self.cfgfilename, 'r')
              except (IOError, OSError):
                  return False
              
              lines  = file_hander.readlines()
              file_hander.close()
          
              for line in lines:
                  line = str(line).strip()
                  if line.startswith('#'):
                      continue
                  value = str(line.split('=')[1]).strip()
                  if line.startswith('port') or line.startswith('PORT'):
                      value = value.lstrip('COM')
                      value = value.lstrip('com')
                      if not value.isdigit():
                          return False
                      self.port = int(value)
                  if line.startswith('productionkey') or line.startswith('PRODUCTIONKEY'):
                      self.key = value
                  if line.startswith('LANGUAGE') or line.startswith('language'):
                      self.lan = value
                  if line.startswith('API') or line.startswith('api'):
                      self.api = value
              if self.port == 0:
                  return False
              if self.key == '':      
                  return False
              return True
          
          def writecfg(self):        
              try:
                  file_hander = open(self.cfgfilename, 'w')
              except (IOError, OSError):
                  return False
              
              item = "language=" + self.lan + "\n"
              file_hander.write(item)
              item = "port=COM"+str(self.port) + "\n"
              file_hander.write(item)
              item = "productionkey=" + self.key + "\n"
              file_hander.write(item)
              item = "api=" + self.api + "\n"
              file_hander.write(item)
              file_hander.close()
              return True
      
      '''
      class MovieSplashScreen(QSplashScreen):
          def __init__(self, movie, parent = None):
              movie.jumpToFrame(0)
              pixmap = QPixmap(movie.frameRect().size())
              QSplashScreen.__init__(self, pixmap)
              self.movie = movie
              self.movie.frameChanged.connect(self.repaint)
              
          def showEvent(self, event):
              self.movie.start()
              
          def hideEvent(self, event):
              self.movie.stop()
              
          def paintEvent(self, event):
              painter = QPainter(self)
              pixmap = self.movie.currentPixmap()
              self.setMask(pixmap.mask())
              painter.drawPixmap(0, 0, pixmap)
              
          def sizeHint(self):
              return self.movie.scaledSize()
      '''
          
      class waitDlg(QDialog):
          def __init__(self, parent=None,  win_x=0, win_y=0, win_w=0, win_h=0):
              super(waitDlg, self).__init__(parent)
              w = h = 128
              x = win_x + (win_w - w)/2
              y = win_y + (win_h - h)/2
              self.setGeometry(x,y,w,h)
              self.resize(128,128)
              #self.gif = QGraphicsView("./icon/loading.gif")
              
              self.label = QLabel(self)
              #self.label.setText("Waitting...")
              self.label.resize(128,128)
              self.movie = QMovie(":/icon/loading.gif")
              #print self.movie.currentImage()
              #print self.movie.currentPixmap()
          
              self.label.setMovie(self.movie)
              self.setWindowFlags(Qt.FramelessWindowHint)
              self.setAutoFillBackground(True)
              self.movie.start()
          def __del__(self):
              self.movie.stop()
      
      
        
      class DptMainWin(QMainWindow):
          def scan_serial(self):
              """scan for available ports. return a list of tuples (num, name)"""
              available = []
              for i in range(16):
                  try:
                      s = serial.Serial(i)
                      available.append(s.portstr)
                      s.close()   # explicit close 'cause of delayed GC in java
                  except serial.SerialException:
                      pass
              return available
          
          def update_translate(self):
              self.setWindowTitle(self.tr("Production Tools"))
              self.ui.menuHelp.setTitle(self.tr("Help"))
              self.ui.actionAbout.setText(self.tr("About"))
              self.ui.label_lan.setText(self.tr("Language"))
              self.ui.label_port.setText(self.tr("Serial Port"))
              self.ui.label_api.setText(self.tr("API"))
              self.ui.label_key.setText(self.tr("Production Key"))
              self.ui.label_info.setText(self.tr("Information"))
              self.ui.label_model.setText(self.tr("Model"))
              self.ui.label_order.setText(self.tr("Order"))
              self.ui.label_total.setText(self.tr("Total"))
              self.ui.label_producted.setText(self.tr("Producted"))
              self.ui.start.setText(self.tr("Start")) 
          
          def __init__(self, app, parent=None):
              super(DptMainWin, self).__init__(parent)
              self.app = app
              
              self.cfg = DptClientCfg()
              self.cfg.readcfg() 
              self.trans = None
              if self.cfg.lan == "chinese":
                  trans = QTranslator()
                  trans.load(":/zh_CN.qm")
                  self.app.installTranslator(trans)
                  self.trans = trans
              
              ui = Ui_mainWindow()
              ui.setupUi(self)
              self.ui = ui
              self.update_translate()
              
              ui.lan.addItems((u"English", u"简体中文"))
              if self.cfg.lan == "chinese":
                  ui.lan.setCurrentIndex(1)
              else:
                  ui.lan.setCurrentIndex(0)
              
              self.connect(ui.lan, SIGNAL("currentIndexChanged(int)"), self.change_lan)
              available_port = self.scan_serial()
              ui.port.addItems(available_port)
              
             
              if self.cfg.port > 0:
                  port = "COM" + str(self.cfg.port)
                  idx = ui.port.findText(port)
                  if idx >= 0:
                      ui.port.setCurrentIndex(idx)
              
              if len(self.cfg.api) > 0:
                  ui.api.setText(self.cfg.api)
              if len(self.cfg.key) > 0:
                  ui.production_key.setText(self.cfg.key)
              
              ui.total.setProperty("intValue", 0)
              ui.producted.setProperty("intValue", 0)
              ui.result.setProperty("intValue", 0)
              #ui.info.setDisabled(True)
              #ui.model.setDisabled(True)
              #ui.order.setDisabled(True)
              
              self.connect(ui.start,SIGNAL("clicked()"),self.tweak_production)
              #self.connect(ui.actionAbout, SIGNAL("clicked()"), self.showAbout)
              ui.actionAbout.triggered.connect(self.showAbout)
              
              self.worker = DptClientWorker()  
              self.connect(self.worker, SIGNAL("msg_out"), self.update_msg)
              self.connect(self.worker, SIGNAL("update_num"), self.update_num)
              self.connect(self.worker, SIGNAL("update_info"), self.update_info)
              self.connect(self.worker, SIGNAL("finished()"), self.stop_update_ui) 
              self.connect(self.worker, SIGNAL("terminated()"), self.stop_update_ui)
              self.connect(self.worker, SIGNAL("update_result"), self.update_result_led)
              
              
              self.productioning = False       
              self.wait = None
          
          def closeEvent(self, event):
              if self.productioning:
                  self.worker.stop()
                  if None == self.wait:
                      self.wait = waitDlg(win_x=self.x(), win_y=self.y(), win_w=self.width(), win_h=self.height()) #waitDlg()
                      self.wait.exec_()
              while self.productioning:
                  time.sleep(0.1)
                  
          def change_lan(self, idx):
              if idx == 1:
                  self.cfg.lan = "chinese"
              else:
                  self.cfg.lan = "english"
              self.cfg.writecfg()
              
              if self.trans is not None:
                  self.app.removeTranslator(self.trans)
                  self.trans = None
                  
              if self.cfg.lan == "chinese":
                  trans = QTranslator()
                  trans.load(":/zh_CN.qm")
                  self.app.installTranslator(trans)
                  self.trans = trans
                  
              self.update_translate()
                  
      
          def tweak_production(self):
              if not self.productioning:
                  key = self.ui.production_key.text()
                  api = self.ui.api.text()
                  key = str(key).strip()
                  api = str(api).strip()
                  if len(api)==0 or len(key) == 0:
                      return
                  if not str(api).startswith("https://"):
                      return
                  
                  portstr = str(self.ui.port.currentText())
                  if len(portstr) == 0:
                      return
                  
                  #print "start production"
                  port = int(portstr.lstrip("COM").lstrip("com"))
                  self.ui.api.setDisabled(True)
                  self.ui.lan.setDisabled(True)
                  self.ui.port.setDisabled(True)
                  self.ui.production_key.setDisabled(True)
                  self.ui.start.setText(self.tr("Stop"))
      
                  self.ui.info.clear()
                  self.worker.set_param(unicode(api), port, unicode(key))
                  self.cfg.port = port
                  self.cfg.key = key
                  self.cfg.api = api
                  self.cfg.writecfg()
                  self.worker.start()
                  self.productioning = True
              else:
                  #print "stop production"
                  self.worker.stop()
                  if None == self.wait:
                      self.wait = waitDlg(win_x=self.x(), win_y=self.y(), win_w=self.width(), win_h=self.height()) 
                      self.wait.exec_()            
                  #if not self.wait.isActiveWindow():
                  #    self.wait.exec_()
      
          
          def stop_update_ui(self):
              #print "stop_update_ui"
              ui = self.ui
              ui.lan.setDisabled(False)
              ui.port.setDisabled(False)
              ui.api.setDisabled(False)
              ui.production_key.setDisabled(False)
              ui.model.clear()
              ui.order.clear()
              ui.info.clear()
              ui.total.setProperty("intValue", 0)
              ui.producted.setProperty("intValue", 0)
              ui.result.setProperty("intValue", 0)
              
              #ui.info.clear()
              ui.start.setText(self.tr("Start"))
              ui.start.setDisabled(False)
              
              #self.******.finish(self)
              if None != self.wait:
                  self.wait.close()
                  self.wait.destroy()
                  self.wait = None
              #if self.wait.isActiveWindow():
              #    self.wait.close()
              self.productioning = False
              
          
          def update_msg(self, clean=0, msg=""):
              ui = self.ui
              if clean == 1:
                  ui.info.clear()
              if msg != "":
                  ui.info.append(msg)
              
              
          def update_num(self, total=0, producted=0):
              ui = self.ui
              ui.total.setProperty("intValue", total)
              ui.producted.setProperty("intValue", producted)
              
          def update_result_led(self, result = 0):
              ui = self.ui
              ui.result.setProperty("intValue", result)
              
              
          def update_info(self, info):
              if not isinstance(info, dict):
                  return
              ui = self.ui
              if dict(info).has_key('model_description'):
                  ui.model.setText(info['model_description'])
              if dict(info).has_key('order_description'):
                  ui.order.setText(info['order_description'])
              if dict(info).has_key('number'):
                  ui.total.setProperty("intValue", info['number'])
              if dict(info).has_key('producted'):
                  ui.producted.setProperty("intValue", info['producted'])
          
          def showAbout(self):
              QMessageBox.about(self, self.tr("About"), self.tr("DTP Version: ") + __version__)
      
      
      #trans = QTranslator()
      #trans.load("zh_CN")
      app=QApplication(sys.argv)
      #app.installTranslator(trans)
      #app.removeTranslator(trans)
      win=DptMainWin(app=app)
      win.show()
      app.exec_()
      https://pastebin.com/tP61q2tv
      https://pastebin.com/ZHt5DUqa


    • Desenvolver ou corrigir problema numa firmware antiga
      Alguém sabe onde se pode encontrar código fonte duma firmware para estes processadores?


    Com todas estas estratégias combinadas é certo que conseguimos colocar estas boxs com processador ALI3511 de volta a funcionar sem ter de se pagar licenças.
    Toda ajuda é bem-vinda.
    Tentarei de futuro organizar a informação melhor.
    Última edição por flash242424; 12-03-2019 às 16:34. Razão: Completar links

  2. #2

    Registo
    Apr 2009
    Idade
    30
    Posts
    69
    Bom trabalho. A parte do sniff amanha ja devo ter algo. Cumps

  3. #3

    Registo
    Apr 2009
    Idade
    30
    Posts
    69
    Ha uns tempos encontrei este source do bootloader:
    https://github.com/jinfeng-geeya/3202C

  4. #4

    Registo
    Dec 2010
    Idade
    32
    Posts
    39
    Citação Postado originalmente por Qu4k3 Ver Post
    Ha uns tempos encontrei este source do bootloader:
    https://github.com/jinfeng-geeya/3202C
    Boa partilha Qu4k3, é um começo mas o ideal era encontrar o maincode, quando tiver tempo vou dar uma vista de olhos.
    Estou a ver que vou ter de aprender chinês que estás firmwares estão todas em chinoca ahhahaha

  5. #5

    Registo
    Apr 2009
    Idade
    30
    Posts
    69
    Citação Postado originalmente por flash242424 Ver Post
    Boa partilha Qu4k3, é um começo mas o ideal era encontrar o maincode, quando tiver tempo vou dar uma vista de olhos.
    Estou a ver que vou ter de aprender chinês que estás firmwares estão todas em chinoca ahhahaha
    Estive a dar uma vista de olhos no que postaste.
    Ja pensaste em alterar a parte em que o dptclient envia a informacao a api para atualizar o "producted" para este nao enviar o "+1" ? Se o resultado for positivo poderiamos guardar uma key fixa pelo menos ate eles descobrirem a manobra...

    Quanto a ideia de que tinhamos falado de enviar sempre a mesma info para as box, nao vai dar:

    Error: This chip sn already producted':

    Eles guardam o sn.

    :/
    Última edição por Qu4k3; 12-03-2019 às 19:40.

  6. #6

    Registo
    Sep 2017
    Posts
    6
    a solovox colocou hoje no site deles de como funciona o processo de autenticação das boxes com chipset ali3511, dêm uma olhada, pode dar algumas informações interessantes.

  7. #7

    Registo
    Jun 2018
    Posts
    23
    Estive a fazer sniffing a uma box e pelo que vi eles acedem a um servidor FTP

  8. #8

    Registo
    Dec 2010
    Idade
    32
    Posts
    39
    Citação Postado originalmente por Qu4k3 Ver Post
    Estive a dar uma vista de olhos no que postaste.
    Ja pensaste em alterar a parte em que o dptclient envia a informacao a api para atualizar o "producted" para este nao enviar o "+1" ? Se o resultado for positivo poderiamos guardar uma key fixa pelo menos ate eles descobrirem a manobra...

    Quanto a ideia de que tinhamos falado de enviar sempre a mesma info para as box, nao vai dar:

    Error: This chip sn already producted':

    Eles guardam o sn.

    :/
    A ideia é boa vou analisar melhor porque acho que o +1 (licença utilizada) é contabilizado quando é pedido ao servidor a password para guardar na box.
    Se assim for não temos como saltar o +1.
    Analisa a parte do RSC_PRODUCTION em https://pastebin.com/tP61q2tv a ver se concordas.

    Citação Postado originalmente por alheir0 Ver Post
    a solovox colocou hoje no site deles de como funciona o processo de autenticação das boxes com chipset ali3511, dêm uma olhada, pode dar algumas informações interessantes.
    Sim publicaram dia 8 de março mas apenas explicam como usar o software de autencticação deles.

    Citação Postado originalmente por Diogovictoriano Ver Post
    Estive a fazer sniffing a uma box e pelo que vi eles acedem a um servidor FTP
    Boa descoberta!!! Vamos ter de analisar aquele script_new.pak, mais uma peça no puzzle.
    Repara no contudo do servidor ftp://uyw3463610001:987654321a@47.88.101.81 parece o ftp onde a firmware vai buscar os updates para listas de canais e firmwares.
    Grande porta abriste, boa!

    Temos novos dados que acrencento ao topico.
    Sniffing da box com numero de serie OPHDV8201811L05226
    Código:
    
    getsn 8
           GSN¦¦x
                 H+
                   burnsn 8 64 32
                                 ¦x
                                   H+d¦/o¦¦??/g¦¦¤s=iX¦¦¦/¦PQ¦? *MY¦¦¦¦¦^¦,E¦B¦Kn¦¦m>¦¦¦j¦a¦.¦¦cJo¦¦¦¦¦^@¦¦?¦¦H
                               burnok
    
                                     getsn 8
    
                                            getsn 8
    
                                                   getsn 8
                                                          url = ftp://47.88.101.81/script_new.pak
    user_name = uyw3463610001
    pwd= 987654321a
    
    getsn 8
    
           getsn 8
    
                  getsn 8
    
                         getsn 8
                                netif:lo is default
    netif:en is default
    
    getsn 8
    
           getsn 8
    
                  getsn 8
                         fepg_com_data_load 24 cnt load mm!
    
    getsn 8
    
           getsn 8
                  pvr_push_vod_test: test path:/mnt/uda1/pvod
    
    getsn 8
    
           getsn 8
    
                  getsn 8
    
                         getsn 8
    
                                getsn 8
    
                                       getsn 8
    
                                              getsn 8
    
                                                     getsn 8
    
                                                            getsn 8
    
                                                                   getsn 8
    
                                                                          getsn 8
    
                                                                                 get                                                                                        sn 8
    
        getsn 8
    
               getsn 8
    
                      getsn 8
    
                             getsn 8
    
                                    getsn 8
    
                                           getsn 8
                                                  fepg_com_fake_update_task start.
    
    getsn 8
    
           getsn 8
    
                  getsn 8
    
                         getsn 8
    
                                getsn 8
    
                                       getsn 8
    
                                              getsn 8
    
                                                     getsn 8
    
                                                            getsn 8
    
                                                                   getsn 8
    
                                                                          getsn 8
                                                                                 url                    
    Última edição por flash242424; 12-03-2019 às 22:39.

  9. #9

    Registo
    Dec 2010
    Idade
    32
    Posts
    39
    Código:
    START=|APP|10|0
    NAME=|570065006100740068006500720020004100700070006C00690063006100740069006F006E002E000000
    DESC=|5900610068006F006F00200077006500610074006800650072002C002000610064006400200061006E0020006100700070006C00690063006100740069006F006E00200074006F0020004E006500740077006F0072006B0020004100700070002E000000
    DATE=|21.10.2013
    URL=|ftp://47.88.101.81/weather.pak
    USER=|uyw3463610001
    PWD=|987654321a
    VER=|0
    FILE_SIZE=|218823
    PLATFORM=|255
    OEM_ID=|2
    END=|APP
    
    START=|DBS|10|0
    NAME=|540050004C006900730074005F00500052004F0047005F004100750073007400720061006C00690061005F0032003000310037003000330033000000
    DESC=|540050004C006900730074005F00500052004F0047005F004100750073007400720061006C00690061005F00320030003100370030003300330031000000
    DATE=|25.07.2017
    URL=|ftp://47.88.101.81/TPList_PROG_Australia_20170331.pak
    USER=|uyw3463610001
    PWD=|987654321a
    VER=|1
    FILE_SIZE=|72781
    PLATFORM=|1
    OEM_ID=|2
    END=|DBS
    
    START=|DBS|10|0
    NAME=|540050004C006900730074005F00500052004F0047005F004500750072006F00700065005F003100370030003800300031000000
    DESC=|540050004C006900730074005F00500052004F0047005F004500750072006F00700065005F003100370030003800300031000000
    DATE=|01.08.2017
    URL=|ftp://47.88.101.81/TPList_PROG_Europe_170801.pak
    USER=|uyw3463610001
    PWD=|987654321a
    VER=|1
    FILE_SIZE=|171683
    PLATFORM=|1
    OEM_ID=|2
    END=|DBS
    
    START=|DBS|10|0
    NAME=|540050004C006900730074005F00500052004F0047005F004900720065006C0061006E0064005F00320030003100370030003500300033000000
    DESC=|540050004C006900730074005F00500052004F0047005F004900720065006C0061006E0064005F00320030003100370030003500300033000000
    DATE=|25.07.2017
    URL=|ftp://47.88.101.81/TPList_PROG_Ireland_20170503.pak
    USER=|uyw3463610001
    PWD=|987654321a
    VER=|1
    FILE_SIZE=|94429
    PLATFORM=|1
    OEM_ID=|2
    END=|DBS
    
    START=|DBS|10|0
    NAME=|540050004C006900730074005F00500052004F0047005F0055004B005F00320030003100370030003700320035000000
    DESC=|540050004C006900730074005F00500052004F0047005F0055004B005F00320030003100370030003700320035000000
    DATE=|25.07.2017
    URL=|ftp://47.88.101.81/TPList_PROG_UK_20170725.pak
    USER=|uyw3463610001
    PWD=|987654321a
    VER=|1
    FILE_SIZE=|102664
    PLATFORM=|1
    OEM_ID=|2
    END=|DBS
    
    START=|DBS|10|0
    NAME=|5400500020004C006900730074002000460069006C006500200046006F007200200041007300690061000000
    DESC=|5400500020004C006900730074002000460069006C006500200046006F007200200041007300690061000000
    DATE=|25.07.2017
    URL=|ftp://47.88.101.81/TP_List_File_For_Asia.pak
    USER=|uyw3463610001
    PWD=|987654321a
    VER=|1
    FILE_SIZE=|59465
    PLATFORM=|1
    OEM_ID=|2
    END=|DBS
    
    START=|DBS|10|0
    NAME=|540050005F004C006900730074002000460069006C006500200046006F00720020004D006900640064006C006500200045006100730074000000
    DESC=|540050005F004C006900730074002000460069006C006500200046006F00720020004D006900640064006C006500200045006100730074000000
    DATE=|25.07.2017
    URL=|ftp://47.88.101.81/TP_List_File_For_Middle_East.pak
    USER=|uyw3463610001
    PWD=|987654321a
    VER=|1
    FILE_SIZE=|64923
    PLATFORM=|1
    OEM_ID=|2
    END=|DBS
    
    START=|DBS|10|0
    NAME=|5400500020004C006900730074002000460069006C006500200046006F00720020004E006F00720074006800200041006D0065007200690063000000
    DESC=|5400500020004C006900730074002000460069006C006500200046006F00720020004E006F00720074006800200041006D00650072006900630061000000
    DATE=|25.07.2017
    URL=|ftp://47.88.101.81/TP_List_File_For_North_America.pak
    USER=|uyw3463610001
    PWD=|987654321a
    VER=|1
    FILE_SIZE=|44383
    PLATFORM=|1
    OEM_ID=|2
    END=|DBS
    
    START=|DBS|10|0
    NAME=|5400500020004C006900730074002000460069006C006500200046006F007200200053006F00750074006800200041006D0065007200690063000000
    DESC=|5400500020004C006900730074002000460069006C006500200046006F007200200053006F00750074006800200041006D00650072006900630061000000
    DATE=|25.07.2017
    URL=|ftp://47.88.101.81/TP_List_File_For_South_America.pak
    USER=|uyw3463610001
    PWD=|987654321a
    VER=|1
    FILE_SIZE=|39021
    PLATFORM=|1
    OEM_ID=|2
    END=|DBS
    
    START=|DBS|10|0
    NAME=|540050005F00500052004F0047005F0053007000610069006E005F00320030003100380030003700330031000000
    DESC=|540050005F00500052004F0047005F0053007000610069006E005F00320030003100380030003700330031000000
    DATE=|31.07.2018
    URL=|ftp://47.88.101.81/TP_PROG_Spain_20180731.pak
    USER=|uyw3463610001
    PWD=|987654321a
    VER=|1
    FILE_SIZE=|81632
    PLATFORM=|1
    OEM_ID=|2
    END=|DBS
    
    START=|DBS|10|0
    NAME=|540050005F00500052004F0047005F0050006F00720074007500670075006500730065005F00320030003100390030003200320032000000
    DESC=|540050005F00500052004F0047005F0050006F00720074007500670075006500730065005F00320030003100390030003200320032000000
    DATE=|22.02.2019
    URL=|ftp://47.88.101.81/TP_PROG_Portuguese_20190222.pak
    USER=|uyw3463610001
    PWD=|987654321a
    VER=|1
    FILE_SIZE=|46550
    PLATFORM=|1
    OEM_ID=|2
    END=|DBS
    
    START=|SOFTCAM|10|0
    NAME=|53006F0066007400630061006D0020004B00650079000000
    DESC=|53006F0066007400630061006D0020004B0065007900200066006F00720020007500700064006100740069006E0067000000
    DATE=|29.12.2017
    URL=|ftp://47.88.101.81/softcam_180316.pak
    USER=|uyw3463610001
    PWD=|987654321a
    VER=|1
    FILE_SIZE=|11882
    PLATFORM=|255
    OEM_ID=|2
    END=|SOFTCAM
    
    START=|SW_BIN|10|0
    NAME=|4F00500045004E0042004F0058005F00560036005F00560037005F005600380050004C00550053005F004C00450044005F0031003700300038000000
    DESC=|4F00500045004E0042004F0058005F00560036005F00560037005F005600380050004C00550053005F004C00450044005F003100370030003800320034000000
    DATE=|03.01.2018
    URL=|ftp://47.88.101.81/OPENBOX_V6_V7_V8PLUS_LED_170824.pak
    USER=|uyw3463610001
    PWD=|987654321a
    VER=|1
    FILE_SIZE=|3793225
    PLATFORM=|32
    OEM_ID=|1
    END=|SW_BIN
    
    START=|SW_BIN|10|0
    NAME=|53004F004C004F0056004F0058005F00560036005F00560037005F005600380050004C00550053005F004C00450044005F0031003700300038000000
    DESC=|53004F004C004F0056004F0058005F00560036005F00560037005F005600380050004C00550053005F004C00450044005F003100370030003800320034000000
    DATE=|03.01.2018
    URL=|ftp://47.88.101.81/SOLOVOX_V6_V7_V8PLUS_LED_170824.pak
    USER=|uyw3463610001
    PWD=|987654321a
    VER=|1
    FILE_SIZE=|3797763
    PLATFORM=|32
    OEM_ID=|1
    END=|SW_BIN
    
    START=|SW_BIN|10|0
    NAME=|53005F0042004F0058005F00560036005F00560037005F005600380050004C00550053005F004C00450044005F003100370030003800320034000000
    DESC=|53005F0042004F0058005F00560036005F00560037005F005600380050004C00550053005F004C00450044005F003100370030003800320034000000
    DATE=|03.01.2018
    URL=|ftp://47.88.101.81/S_BOX_V6_V7_V8PLUS_LED_170824.pak
    USER=|uyw3463610001
    PWD=|987654321a
    VER=|1
    FILE_SIZE=|3840992
    PLATFORM=|32
    OEM_ID=|1
    END=|SW_BIN
    
    START=|SW_BIN|10|0
    NAME=|53005F0042004F0058005F00560037005F005600370050004C00550053005F005600460044005F003100370030003800320034000000
    DESC=|53005F0042004F0058005F00560037005F005600370050004C00550053005F005600460044005F003100370030003800320034000000
    DATE=|03.01.2018
    URL=|ftp://47.88.101.81/S_BOX_V7_V7PLUS_VFD_170824.pak
    USER=|uyw3463610001
    PWD=|987654321a
    VER=|1
    FILE_SIZE=|3840983
    PLATFORM=|32
    OEM_ID=|1
    END=|SW_BIN
    Infelizmente o scrypt_new.pak não tem nada de interessante e apenas uma lista de updates para firmware.
    Vou continuar analisar os dados do sniffing da porta serie.

  10. #10

    Registo
    Apr 2009
    Idade
    30
    Posts
    69
    Citação Postado originalmente por flash242424 Ver Post
    A ideia é boa vou analisar melhor porque acho que o +1 (licença utilizada) é contabilizado quando é pedido ao servidor a password para guardar na box.
    Se assim for não temos como saltar o +1.
    Analisa a parte do RSC_PRODUCTION em https://pastebin.com/tP61q2tv a ver se concordas.


    Sim publicaram dia 8 de março mas apenas explicam como usar o software de autencticação deles.


    Boa descoberta!!! Vamos ter de analisar aquele script_new.pak, mais uma peça no puzzle.
    Repara no contudo do servidor ftp://uyw3463610001:987654321a@47.88.101.81 parece o ftp onde a firmware vai buscar os updates para listas de canais e firmwares.
    Grande porta abriste, boa!

    Temos novos dados que acrencento ao topico.
    Sniffing da box com numero de serie OPHDV8201811L05226
    Código:
    
    getsn 8
           GSN¦¦x
                 H+
                   burnsn 8 64 32
                                 ¦x
                                   H+d¦/o¦¦??/g¦¦¤s=iX¦¦¦/¦PQ¦? *MY¦¦¦¦¦^¦,E¦B¦Kn¦¦m>¦¦¦j¦a¦.¦¦cJo¦¦¦¦¦^@¦¦?¦¦H
                               burnok
    
                                     getsn 8
    
                                            getsn 8
    
                                                   getsn 8
                                                          url = ftp://47.88.101.81/script_new.pak
    user_name = uyw3463610001
    pwd= 987654321a
    
    getsn 8
    
           getsn 8
    
                  getsn 8
    
                         getsn 8
                                netif:lo is default
    netif:en is default
    
    getsn 8
    
           getsn 8
    
                  getsn 8
                         fepg_com_data_load 24 cnt load mm!
    
    getsn 8
    
           getsn 8
                  pvr_push_vod_test: test path:/mnt/uda1/pvod
    
    getsn 8
    
           getsn 8
    
                  getsn 8
    
                         getsn 8
    
                                getsn 8
    
                                       getsn 8
    
                                              getsn 8
    
                                                     getsn 8
    
                                                            getsn 8
    
                                                                   getsn 8
    
                                                                          getsn 8
    
                                                                                 get                                                                                        sn 8
    
        getsn 8
    
               getsn 8
    
                      getsn 8
    
                             getsn 8
    
                                    getsn 8
    
                                           getsn 8
                                                  fepg_com_fake_update_task start.
    
    getsn 8
    
           getsn 8
    
                  getsn 8
    
                         getsn 8
    
                                getsn 8
    
                                       getsn 8
    
                                              getsn 8
    
                                                     getsn 8
    
                                                            getsn 8
    
                                                                   getsn 8
    
                                                                          getsn 8
                                                                                 url                    
    Esse sniff fizeste durante a auth?
    O ftp e sem duvuda o que eles usam na firmware para update by network. E mais uma box, a eutubox que sao dos mesmos fabricantes.. tambem usa o mesmo ftp.

  11. #11

    Registo
    Sep 2006
    Posts
    19
    bom dia, eu não percebo nada de programação , se esta pergunta não se enquadrar neste topico peço já imensa desculpa.
    eu ao tentar inserir uma nova firmware aparece atualização de dados muito grande, será que tirando partes da firmware,e assim ser mais pequena, pondo uma firmware so com o essencial, permitiria a box aceita la ? e será que assim depois permitiria de fazer uma atualização da SOLOVOX, via network da box?
    muito obrigado

  12. #12

    Registo
    Apr 2009
    Idade
    30
    Posts
    69
    Citação Postado originalmente por mister jo Ver Post
    bom dia, eu não percebo nada de programação , se esta pergunta não se enquadrar neste topico peço já imensa desculpa.
    eu ao tentar inserir uma nova firmware aparece atualização de dados muito grande, será que tirando partes da firmware,e assim ser mais pequena, pondo uma firmware so com o essencial, permitiria a box aceita la ? e será que assim depois permitiria de fazer uma atualização da SOLOVOX, via network da box?
    muito obrigado
    Estas a fugir ao topico, mas a resposta a tua duvida é que para ja isso é impossivel. Ainda nao se conseguiu modificar a firmware. Ja se conseguir sacar o ftp, possivelmente num futuro proximo poderemos aplicalo na firmware anterior.
    A estudar....
    Cumps

  13. #13

    Registo
    Dec 2010
    Idade
    32
    Posts
    39
    Citação Postado originalmente por Qu4k3 Ver Post
    Esse sniff fizeste durante a auth?
    O ftp e sem duvuda o que eles usam na firmware para update by network. E mais uma box, a eutubox que sao dos mesmos fabricantes.. tambem usa o mesmo ftp.
    Foi feito pelo Diogovictoriano mas sim durante a autenticação.
    Pena os dados estarem um pouco baralhados, comandos da box misturados com comandos do software, nem sei bem onde começam e acabam.
    Mas para ja é o que temos que é melhor que nada ;)

    Para já sabemos que existem os seguintes comandos:
    • getsn 8
      Serve para obter o numero de serie do chip/box aquele "8" suspeito que seja o tamanho de bits ou algo do género, no servidor de licenças tambem há uma referencia a "chipsn_len": 8

    • burnsn 8 64 32 ¦xH+d¦/o¦¦??/g¦¦¤s=iX¦¦¦/¦PQ¦? *MY¦¦¦¦¦^¦,E¦B¦Kn¦¦m>¦¦¦j¦a¦.¦¦cJo¦¦¦¦¦^@¦¦?¦¦H
      Serve para indicar à box a password a guardar ainda não percebo os parâmetros "8" "64" "32"

    • burnok
      Serve para box confirmar que OTP correu bem

    • url = ftp:// 47.88.101.81/script_new.pak
      Serve para definir endereço do ftp provavelmente

    • user_name = uyw3463610001
      Serve para definir username do ftp provavelmente

    • pwd = 987654321a
      Serve para definir password do ftp provavelmente

    • fepg_com_fake_update_task start.
    • pvr_push_vod_test: test path:/mnt/uda1/pvod
    • fepg_com_data_load 24 cnt load mm!
    • netif:lo is default
    • netif:en is default
      Não faço ideia se é lixo enviado pela porta serie ou se importa
    Última edição por flash242424; 13-03-2019 às 11:27.

  14. #14

    Registo
    Apr 2009
    Idade
    30
    Posts
    69
    Citação Postado originalmente por flash242424 Ver Post
    Foi feito pelo Diogovictoriano mas sim durante a autenticação.
    Pena os dados estarem um pouco baralhados, comandos da box misturados com comandos do software, nem sei bem onde começam e acabam.
    Mas para ja é o que temos que é melhor que nada ;)

    Para já sabemos que existem os seguintes comandos:
    • getsn 8
      Serve para obter o numero de serie do chip/box aquele "8" suspeito que seja o tamanho de bits ou algo do género, no servidor de licenças tambem há uma referencia a "chipsn_len": 8
    • burnsn 8 64 32 ¦xH+d¦/o¦¦??/g¦¦¤s=iX¦¦¦/¦PQ¦? *MY¦¦¦¦¦^¦,E¦B¦Kn¦¦m>¦¦¦j¦a¦.¦¦cJo¦¦¦¦¦^@¦¦?¦¦H
      Serve para indicar à box a password a guardar ainda não percebo os parâmetros "8" "64" "32"
    • burnok
      Serve para box confirmar que OTP correu bem
    • url = ftp://47.88.101.81/script_new.pak[/url]
      Serve para definir endereço do ftp provavelmente
    • user_name = uyw3463610001
      Serve para definir username do ftp provavelmente
    • pwd = 987654321a
      Serve para definir password do ftp provavelmente
    • fepg_com_fake_update_task start.
    • pvr_push_vod_test: test path:/mnt/uda1/pvod
    • fepg_com_data_load 24 cnt load mm!
    • netif:lo is default
    • netif:en is default
      Não faço ideia se é lixo enviado pela porta serie ou se importa
    Hoje ao final da tarde devo ter um sniff completo. Depois dou novidades. Entretanto estou a ver o ftp deles.

    So nao compreendo a parte de ele ir ao ftp durante a autentificacao. Porque mesmo sem auth o ftp funciona..
    Última edição por Qu4k3; 13-03-2019 às 11:41.

  15. #15

    Registo
    Sep 2006
    Posts
    19
    ok, muito obrigado pelo informação e pelo o vosso trabalho em tentar solucionar os problemas da v8s
    Cumprimentos

Página 1 de 6 1 2 ... Último

Tópicos Similares

  1. Firmware para acordar Openbox V5S-Skybox F5S
    Por Peace2you no fórum Firmware Openbox/ Skybox S
    Respostas: 17
    Último Post: 28-09-2015, 10:55
  2. Qual o melhor firmware para Openbox X5
    Por enfsou no fórum Dúvidas / Comentários
    Respostas: 8
    Último Post: 16-08-2014, 17:49
  3. Firmware Openbox X5 pode ser alterado para Openbox X5 Pro?
    Por policarpo123 no fórum Dúvidas / Comentários
    Respostas: 8
    Último Post: 14-08-2014, 12:03
  4. Novo firmware para openbox x5 2014_02_13
    Por cheester no fórum Firmware Openbox/ Skybox X, Q e V
    Respostas: 19
    Último Post: 12-05-2014, 19:16

Tags para este Tópico

Permissões de Postagem

  • Você não pode iniciar novos tópicos
  • Você não pode enviar respostas
  • Você não pode enviar anexos
  • Você não pode editar suas mensagens
  •  

Conectar

Conectar