• Olá Visitante, se gosta do forum e pretende contribuir com um donativo para auxiliar nos encargos financeiros inerentes ao alojamento desta plataforma, pode encontrar mais informações sobre os várias formas disponíveis para o fazer no seguinte tópico: leia mais... O seu contributo é importante! Obrigado.

Openbox V6 F7S V8S etc Firmware para ALI3511

Status
Não está aberto para novas respostas.

Diogovictoriano

GF Bronze
Entrou
Jun 30, 2018
Mensagens
25
Gostos Recebidos
0
Ao analisar mais uma vez o código Python descobri uma serie de coisas e ainda há lá muito mais info e pistas.
Esta e outra informação esteve sempre à frente dos meus olhos mas só agora a vi.
  1. O endpoint "/chip_with_sn_production" tem 3 argumentos e não 2 como pensava estes são "key", "chip_sn" e "successed"
    Isto faz-me começar acreditar novamente na tua ideia que podemos usar uma key e gerar infinitas autenticações até os chineses detectarem só temos é de enviar successed = 0 eheh
    Exemplo https://45.248.86.44/dpt/api/chip_with_sn_production?key=bbd43b00-a99e-55e3-9828-71ba26097347&chip_sn=MTQzODE1QUIwMzAzMDAwMA==&successed=0
    Quando descobrir o formato do chip_sn ao certo testo se isto é verdade.

  2. O servidor devolve erros pelo Header da resposta ao pedido HTTP
    Info retirada do Header "reason → Error: Invalid chip sn len"

  3. O numero de serie que é extraído da box é enviado ao servidor codificado por base64
    Info retirada código python do software de autenticação "chipsn_sign = base64.b64encode(chipsn_sign)"

Com uma ferramenta tipo Postman ou Chrome DevTools com opção "Preserve Log" podemos ver a informação de erro.




Excelente Diogovictoriano com esta informação já consigo avançar....
Analise preliminar é que o teu sniffer está com problemas de codificação ou tem alguns erros na comunicação mas consigo ver o padrão.

Temos de olhar para isto como hexadecimal e não ASCII.
O separador indica se a box já foi autenticada ou não.
  • "ª" ou 0xAA (hexadecimal) significa não autenticada e em seguida vai o numero de serie de 8 Bytes, agora tenho a certeza são 8 Bytes
  • "®" ou 0xAE (hexadecimal) significa autenticada e em seguida 8 Bytes de zeros

"getsn 8" com resposta "GSNª.8.«...." ou "47 53 4E AA 14 38 15 AB 03 03 00 00" significa numero de serie "14 38 15 AB 03 03 00 00" em hexadecimal 0x143815AB03030000

"getsn 8" com resposta "GSNªàà8M[04][03][00][00]" ou "47 53 4E AA E0 E0 38 4D 04 03 00 00" significa numero de serie "E0 E0 38 4D 04 03 00 00" em hexadecimal 0xE0E0384D04030000

"getsn 8" com resposta "GSN®........" ou "47 53 4E AE 00 00 00 00 00 00 00 00" significa que a box está codificada, isto acontece nas duas boxes, separador "®" ou 0xAE e numero de serie "00 00 00 00 00 00 00 00"

Este novo sniffing confirma que no "burnsn" os primeiros 8 Bytes são o numero de serie.
O que me leva a pensar.... será que estão a reescrever o numero de serie?
Se assim for podemos usar um comando "burnsn" sniffado para todas as boxes como Qu4k3 sugeriu.

Se alguém puder testar esta teoria que envie este hexadecimal a uma box não autenticada com o Termite mas tem de instalar o plugin Hex View Ver anexo 156543 e ativar Ver anexo 156544 em Settings -> Plugins
Código:
0x0A6275726E736E20382036342033320A143815AB030300006D647DA4D602994DFF878E70D8374BFF0B55194B060B0B7C682E742AEE2D4651BC4AA5FA359ACA5733638E8C76F20581AE9E39603F66D14BE9FC1263B037ACC37F14E64ABE736C9C4FD54F97C03B6AB5806B25293FBE6B616C72B4083E6B9984

A solução até pode ser esta mas vou continuar a tentar explorar o servidor da solovox.

O meu sniffer é por cabo, será por isso?

Eu testei enviar um comando pelo putty e o sniffer respondeu corretamente, vou testar com outra box ;)
 

Qu4k3

Super-Moderador
Team GForum
Entrou
Abr 9, 2009
Mensagens
166
Gostos Recebidos
89
Estamos a dar bantante importancia ao chipsn.
Mas analisem isto:

Código:
def serial_read_chipsn(self, chip_sn_len = 0):
        if chip_sn_len == 0:
            self.error = self.worker.tr('Error: serial_read_chipsn chip_sn_len == 0')
            return
        if not self.serial_inited:
            self.error = self.worker.tr('Error: serial_read_chipsn serial not inited')
            return
        chip_sn_size = c_uint32(chip_sn_len)
        chip_sn_buff = create_string_buffer(chip_sn_size.value)
       [COLOR="#FF0000"] ret = self.serial.production_read_chip_sn(chip_sn_buff, chip_sn_size)
        if ret == 0:
            chip_sn = string_at(chip_sn_buff, chip_sn_size.value)[/COLOR]
            return chip_sn

o programa cria o chipsn se o retour for igual a 0

se puderem enviar o hex do burnsn diretamente para uma box nao autenticada e darem feedback era bom. nao consegui ter uma box para testes. possivelmente so domingo.
 

flash242424

GF Bronze
Membro Inactivo
Entrou
Dez 10, 2010
Mensagens
39
Gostos Recebidos
0
sim, logo ou amanhã vou tentar testar com outra box :)

Faz o mesmo que fizes-te para a anterior, envia-lhe "getsn 8" pelo Termite e guarda a resposta, assim temos mais dados.
Contudo antes de fazeres a autenticação oficial e sniffing, experimenta enviar com o Termite o hexadecimal que deixei no post anterior se funcionar já temos solução.
Não te esqueças de instalar o plugin e ativar, senão vais estar a enviar ASCII e não Hex ;)

Estamos a dar bantante importancia ao chipsn.
Mas analisem isto:

Código:
def serial_read_chipsn(self, chip_sn_len = 0):
        if chip_sn_len == 0:
            self.error = self.worker.tr('Error: serial_read_chipsn chip_sn_len == 0')
            return
        if not self.serial_inited:
            self.error = self.worker.tr('Error: serial_read_chipsn serial not inited')
            return
        chip_sn_size = c_uint32(chip_sn_len)
        chip_sn_buff = create_string_buffer(chip_sn_size.value)
       [COLOR="#FF0000"] ret = self.serial.production_read_chip_sn(chip_sn_buff, chip_sn_size)
        if ret == 0:
            chip_sn = string_at(chip_sn_buff, chip_sn_size.value)[/COLOR]
            return chip_sn

o programa cria o chipsn se o retour for igual a 0

se puderem enviar o hex do burnsn diretamente para uma box nao autenticada e darem feedback era bom. nao consegui ter uma box para testes. possivelmente so domingo.

Esse método é o responsável pela leitura do numero de serie ele nunca cria o numero de serie, vai buscar ai buffer 8 Bytes e mais nada.
Se ret não for 0 ele nunca retorna nada, o que vai acontecer é mais uma repetição do comando getsn até que consiga recolher o numero de serie.

Não estás a ler bem o código mas concordo que provavelmente já temos o problema solucionado basta enviar o comando hex completo do burnsn, só experimentando.
 

Diogovictoriano

GF Bronze
Entrou
Jun 30, 2018
Mensagens
25
Gostos Recebidos
0
Pessoal já tentei enviar o código para uma box não autenticada, mas não deu, apareceu na tv: "burn OTP fail" :/ logo já envio os sniffs e as respostas dos comandos enviados :)
 

Diogovictoriano

GF Bronze
Entrou
Jun 30, 2018
Mensagens
25
Gostos Recebidos
0
Cá vão os dados :)

getsn 8 antes do auth:

Código:
67 65 74 73 6e 38 0a                             getsn8.         
                                                                 
                                                                 
67 65 74 73 6e 20 38 0a                          getsn 8.        
47 53 4e aa 10 28 91 2a 2a 02 00 00              GSNª.(‘**...    
                                                                 
67 65 74 73 6e 20 38 0a                          getsn 8.        
47 53 4e aa 10 28 91 2a 2a 02 00 00              GSNª.(‘**...

getsn 8 depois do auth:

Código:
67 65 74 73 6e 20 38 0a                          getsn 8.        
                                                                 
                                                                 
67 65 74 73 6e 20 38 0a                          getsn 8.

código do @Flash242424:

Código:
20 00 90 02 94 10 90 02 38 20 36 34 20 33 32 0a   .�.”.�.8 64 32.
14 38 15 ab 03 03 00 00 6d 64 7d a4 d6 02 99 4d  .8.«....md}¤Ö.™M
ff 87 8e 70 d8 37 4b ff 0b 55 19 4b 06 0b 0b 7c  ÿ‡ŽpØ7Kÿ.U.K...|
68 2e 74 2a ee 2d 46 51 bc 4a a5 fa 35 9a ca 57  h.t*î-FQ¼J¥ú5šÊW
33 63 8e 8c 76 f2 05 81 ae 9e 39 60 3f 66 d1 4b  3cŽŒvò.�®ž9`?fÑK
e9 fc 12 63 b0 37 ac c3 7f 14 e6 4a be 73 6c 9c  éü.c°7¬Ã.æJ¾slœ
4f d5 4f 97 c0 3b 6a b5 80 6b 25 29 3f be 6b 61  OÕO—À;jµ€k%)?¾ka
6c 72 b4 08 3e 6b 99 84 0a                       lr´.>k™„.       
42 53 4e e4                                      BSNä

erro apresentado na tv:


burn otp fail.PNG


sniff do auth:

Código:
0a 67 65 74 73 6e 20 38 0a 47 53 4e aa 10 28 91  .getsn 8.GSNª.(‘
2a 2a 02 00 00 0a 62 75 72 6e 73 6e 20 38 20 36  **....burnsn 8 6
34 20 33 32 0a 10 28 91 2a 2a 02 00 00 19 44 81  4 32..(‘**....D�
d0 2c 98 a0 98 89 8c fc ac 44 e3 03 8f bd 2d b2  Ð,˜ ˜‰Œü¬Dã.�½-²
af 44 bc 75 4f a6 c0 2c 75 3d 37 24 e8 c2 af 98  ¯D¼uO¦À,u=7$诘
c6 f8 d0 ee a5 86 c2 a3 93 d8 81 3c f0 37 ab 7a  ÆøÐ£“Ø�<ð7«z
2e 1c 55 62 57 ad 33 af a1 07 0f 4b bd 05 33 8b  ..UbW­3¯¡..K½.3‹
9f 7f 2c 27 bb 0d fa 57 2e 52 45 92 b8 68 c7 e1  Ÿ,'».úW.RE’¸hÇá
e3 13 e8 74 c7 b0 94 4d e2 e5 f1 cf 68           ã.ètÇ°”MâåñÏh   
42 53 4e aa                                      BSNª            
0a 67 65 74 73 6e 20 38 0a 47 53 4e ae 00 00 00  .getsn 8.GSN®...
00 00 00 00 00 0a 67 65 74 73 6e 20 38 0a 47 53  ......getsn 8.GS
4e ae 00 00 00 00 00 00 00 00 0a 67 65 74 73 6e  N®.........getsn
20 38 0a 47 53 4e ae 00 00 00 00 00 00 00 00 0a   8.GSN®.........
67 65 74 73 6e 20 38 0a 47 53 4e ae 00 00 00 00  getsn 8.GSN®....
00 00 00 00 0a 67 65 74 73 6e 20 38 0a 47 53 4e  .....getsn 8.GSN
ae 00 00 00 00 00 00 00 00 0a 67 65 74 73 6e 20  ®.........getsn 
38 0a 47 53 4e ae 00 00 00 00 00 00 00 00 0a 67  8.GSN®.........g
65 74 73 6e 20 38 0a 47 53 4e ae 00 00 00 00 00  etsn 8.GSN®.....
00 00 00 0a 67 65 74 73 6e 20 38 0a 47 53 4e ae  ....getsn 8.GSN®
00 00 00 00 00 00 00 00 0a 67 65 74 73 6e 20 38  .........getsn 8
0a 47 53 4e ae 00 00 00 00 00 00 00 00 0a 67 65  .GSN®.........ge
74 73 6e 20 38 0a 47 53 4e ae 00 00 00 00 00 00  tsn 8.GSN®......
00 00 0a 67 65 74 73 6e 20 38 0a 47 53 4e ae 00  ...getsn 8.GSN®.
00 00 00 00 00 00 00 0a 67 65 74 73 6e 20 38 0a  ........getsn 8.
47 53 4e ae 00 00 00 00 00 00 00 00 0a 67 65 74  GSN®.........get
73 6e 20 38 0a 47 53 4e ae 00 00 00 00 00 00 00  sn 8.GSN®.......
00 0a 67 65 74 73 6e 20 38 0a 47 53 4e ae 00 00  ..getsn 8.GSN®..
00 00 00 00 00 00 0a 67 65 74 73 6e 20 38 0a 47  .......getsn 8.G
53 4e ae 00 00 00 00 00 00 00 00 0a 67 65 74 73  SN®.........gets
6e 20 38 0a 47 53 4e ae 00 00 00 00 00 00 00 00  n 8.GSN®........
0a 67 65 74 73 6e 20 38 0a 47 53 4e ae 00 00 00  .getsn 8.GSN®...
00 00 00 00 00 0a 67 65 74 73 6e 20 38 0a 47 53  ......getsn 8.GS
4e ae 00 00 00 00 00 00 00 00 0a 67 65 74 73 6e  N®.........getsn
20 38 0a 47 53 4e ae 00 00 00 00 00 00 00 00 0a   8.GSN®.........
67 65 74 73 6e 20 38 0a 47 53 4e ae 00 00 00 00  getsn 8.GSN®....
00 00 00 00 0a 67 65 74 73 6e 20 38 0a 47 53 4e  .....getsn 8.GSN
ae 00 00 00 00 00 00 00 00 0a 67 65 74 73 6e 20  ®.........getsn 
38 0a 47 53 4e ae 00 00 00 00 00 00 00 00 0a 67  8.GSN®.........g
65 74 73 6e 20 38 0a 47 53 4e ae 00 00 00 00 00  etsn 8.GSN®.....
00 00 00 0a 67 65 74 73 6e 20 38 0a 47 53 4e ae  ....getsn 8.GSN®
00 00 00 00 00 00 00 00 0a 67 65 74 73 6e 20 38  .........getsn 8
0a 47 53 4e ae 00 00 00 00 00 00 00 00 0a 67 65  .GSN®.........ge
74 73 6e 20 38 0a 47 53 4e ae 00 00 00 00 00 00  tsn 8.GSN®......
00 00 0a 67 65 74 73 6e 20 38 0a 47 53 4e ae 00  ...getsn 8.GSN®.
00 00 00 00 00 00 00 0a 67 65 74 73 6e 20 38 0a  ........getsn 8.
47 53 4e ae 00 00 00 00 00 00 00 00 0a 67 65 74  GSN®.........get
73 6e 20 38 0a 47 53 4e ae 00 00 00 00 00 00 00  sn 8.GSN®.......
00 0a 67 65 74 73 6e 20 38 0a 47 53 4e ae 00 00  ..getsn 8.GSN®..
00 00 00 00 00 00 0a 67 65 74 73 6e 20 38 0a 47  .......getsn 8.G
53 4e ae 00 00 00 00 00 00 00 00 0a 67 65 74 73  SN®.........gets
6e 20 38 0a 47 53 4e ae 00 00 00 00 00 00 00 00  n 8.GSN®........
0a 67 65 74 73 6e 20 38 0a 47 53 4e ae 00 00 00  .getsn 8.GSN®...
00 00 00 00 00 0a 67 65 74 73 6e 20 38 0a 47 53  ......getsn 8.GS
4e ae 00 00 00 00 00 00 00 00 0a 67 65 74 73 6e  N®.........getsn
20 38 0a 47 53 4e ae 00 00 00 00 00 00 00 00 0a   8.GSN®.........
67 65 74 73 6e 20 38 0a 47 53 4e ae 00 00 00 00  getsn 8.GSN®....
00 00 00 00 0a 67 65 74 73 6e 20 38 0a 47 53 4e  .....getsn 8.GSN
ae 00 00 00 00 00 00 00 00 0a 67 65 74 73 6e 20  ®.........getsn 
38 0a 47 53 4e ae 00 00 00 00 00 00 00 00 0a 67  8.GSN®.........g
65 74 73 6e 20 38 0a 47 53 4e ae 00 00 00 00 00  etsn 8.GSN®.....
00 00 00 0a 67 65 74 73 6e 20 38 0a 47 53 4e ae  ....getsn 8.GSN®
00 00 00 00 00 00 00 00 0a 67 65 74 73 6e 20 38  .........getsn 8
0a 47 53 4e ae 00 00 00 00 00 00 00 00 0a 67 65  .GSN®.........ge
74 73 6e 20 38 0a 47 53 4e ae 00 00 00 00 00 00  tsn 8.GSN®......
00 00 0a 67 65 74 73 6e 20 38 0a 47 53 4e ae 00  ...getsn 8.GSN®.
00 00 00 00 00 00 00 0a 67 65 74 73 6e 20 38 0a  ........getsn 8.
47 53 4e ae 00 00 00 00 00 00 00 00 0a 67 65 74  GSN®.........get
73 6e 20 38 0a 47 53 4e ae 00 00 00 00 00 00 00  sn 8.GSN®.......
00 0a 67 65 74 73 6e 20 38 0a 47 53 4e ae 00 00  ..getsn 8.GSN®..
00 00 00 00 00 00 0a 67 65 74 73 6e 20 38 0a 47  .......getsn 8.G
53 4e ae 00 00 00 00 00 00 00 00 0a 67 65 74 73  SN®.........gets
6e 20 38 0a 47 53 4e ae 00 00 00 00 00 00 00 00  n 8.GSN®........
0a 67 65 74 73 6e 20 38 0a 47 53 4e ae 00 00 00  .getsn 8.GSN®...
00 00 00 00 00 0a 67 65 74 73 6e 20 38 0a 47 53  ......getsn 8.GS
4e ae 00 00 00 00 00 00 00 00 0a 67 65 74 73 6e  N®.........getsn
20 38 0a 47 53 4e ae 00 00 00 00 00 00 00 00 0a   8.GSN®.........
67 65 74 73 6e 20 38 0a 47 53 4e ae 00 00 00 00  getsn 8.GSN®....
00 00 00 00 0a 67 65 74 73 6e 20 38 0a 47 53 4e  .....getsn 8.GSN
ae 00 00 00 00 00 00 00 00 0a 67 65 74 73 6e 20  ®.........getsn 
38 0a 47 53 4e ae 00 00 00 00 00 00 00 00 0a 67  8.GSN®.........g
65 74 73 6e 20 38 0a 47 53 4e ae 00 00 00 00 00  etsn 8.GSN®.....
00 00 00 0a 67 65 74 73 6e 20 38 0a 47 53 4e ae  ....getsn 8.GSN®
00 00 00 00 00 00 00 00 0a 67 65 74 73 6e 20 38  .........getsn 8
0a 47 53 4e ae 00 00 00 00 00 00 00 00 0a 67 65  .GSN®.........ge
74 73 6e 20 38 0a 47 53 4e ae 00 00 00 00 00 00  tsn 8.GSN®......
00 00 0a 67 65 74 73 6e 20 38 0a 47 53 4e ae 00  ...getsn 8.GSN®.
00 00 00 00 00 00 00 0a 67 65 74 73 6e 20 38 0a  ........getsn 8.
47 53 4e ae 00 00 00 00 00 00 00 00 0a 67 65 74  GSN®.........get
73 6e 20 38 0a 47 53 4e ae 00 00 00 00 00 00 00  sn 8.GSN®.......
00 0a 67 65 74 73 6e 20 38 0a 47 53 4e ae 00 00  ..getsn 8.GSN®..
00 00 00 00 00 00 0a 67 65 74 73 6e 20 38 0a 47  .......getsn 8.G
53 4e ae 00 00 00 00 00 00 00 00 0a 67 65 74 73  SN®.........gets
6e 20 38 0a 47 53 4e ae 00 00 00 00 00 00 00 00  n 8.GSN®........
0a 67 65 74 73 6e 20 38 0a 47 53 4e ae 00 00 00  .getsn 8.GSN®...
00 00 00 00 00 0a 67 65 74 73 6e 20 38 0a 47 53  ......getsn 8.GS
4e ae 00 00 00 00 00 00 00 00 0a 67 65 74 73 6e  N®.........getsn
20 38 0a 47 53 4e ae 00 00 00 00 00 00 00 00 0a   8.GSN®.........
67 65 74 73 6e 20 38 0a 47 53 4e ae 00 00 00 00  getsn 8.GSN®....
00 00 00 00 0a 67 65 74 73 6e 20 38 0a 47 53 4e  .....getsn 8.GSN
ae 00 00 00 00 00 00 00 00 0a 67 65 74 73 6e 20  ®.........getsn 
38 0a 47 53 4e ae 00 00 00 00 00 00 00 00 0a 67  8.GSN®.........g
65 74 73 6e 20 38 0a 47 53 4e ae 00 00 00 00 00  etsn 8.GSN®.....
00 00 00 0a 67 65 74 73 6e 20 38 0a 47 53 4e ae  ....getsn 8.GSN®
00 00 00 00 00 00 00 00 0a 67 65 74 73 6e 20 38  .........getsn 8
0a 47 53 4e ae 00 00 00 00 00 00 00 00 0a 67 65  .GSN®.........ge
74 73 6e 20 38 0a 47 53 4e ae 00 00 00 00 00 00  tsn 8.GSN®......
00 00 0a 67 65 74 73 6e 20 38 0a 47 53 4e ae 00  ...getsn 8.GSN®.
00 00 00 00 00 00 00 0a 67 65 74 73 6e 20 38 0a  ........getsn 8.
47 53 4e ae 00 00 00 00 00 00 00 00 0a 67 65 74  GSN®.........get
73 6e 20 38 0a 47 53 4e ae 00 00 00 00 00 00 00  sn 8.GSN®.......
00 0a 67 65 74 73 6e 20 38 0a 47 53 4e ae 00 00  ..getsn 8.GSN®..
00 00 00 00 00 00 0a 67 65 74 73 6e 20 38 0a 47  .......getsn 8.G
53 4e ae 00 00 00 00 00 00 00 00 0a 67 65 74 73  SN®.........gets
6e 20 38 0a 47 53 4e ae 00 00 00 00 00 00 00 00  n 8.GSN®........
0a 67 65 74 73 6e 20 38 0a 47 53 4e ae 00 00 00  .getsn 8.GSN®...
00 00 00 00 00 0a 67 65 74 73 6e 20 38 0a 47 53  ......getsn 8.GS
4e ae 00 00 00 00 00 00 00 00 0a 67 65 74 73 6e  N®.........getsn
20 38 0a 47 53 4e ae 00 00 00 00 00 00 00 00 0a   8.GSN®.........
67 65 74 73 6e 20 38 0a 47 53 4e ae 00 00 00 00  getsn 8.GSN®....
00 00 00 00 0a 67 65 74 73 6e 20 38 0a 47 53 4e  .....getsn 8.GSN
ae 00 00 00 00 00 00 00 00 0a 67 65 74 73 6e 20  ®.........getsn 
38 0a 47 53 4e ae 00 00 00 00 00 00 00 00 0a 67  8.GSN®.........g
65 74 73 6e 20 38 0a 47 53 4e ae 00 00 00 00 00  etsn 8.GSN®.....
00 00 00 0a 67 65 74 73 6e 20 38 0a 47 53 4e ae  ....getsn 8.GSN®
00 00 00 00 00 00 00 00 0a 67 65 74 73 6e 20 38  .........getsn 8
0a 47 53 4e ae 00 00 00 00 00 00 00 00 0a 67 65  .GSN®.........ge
74 73 6e 20 38 0a 47 53 4e ae 00 00 00 00 00 00  tsn 8.GSN®......
00 00 0a 67 65 74 73 6e 20 38 0a 47 53 4e ae 00  ...getsn 8.GSN®.
00 00 00 00 00 00 00 0a 67 65 74 73 6e 20 38 0a  ........getsn 8.
47 53 4e ae 00 00 00 00 00 00 00 00 0a 67 65 74  GSN®.........get
73 6e 20 38 0a 47 53 4e ae 00 00 00 00 00 00 00  sn 8.GSN®.......
00 0a 67 65 74 73 6e 20 38 0a 47 53 4e ae 00 00  ..getsn 8.GSN®..
00 00 00 00 00 00 0a 67 65 74 73 6e 20 38 0a 47  .......getsn 8.G
53 4e ae 00 00 00 00 00 00 00 00 0a 67 65 74 73  SN®.........gets
6e 20 38 0a 47 53 4e ae 00 00 00 00 00 00 00 00  n 8.GSN®........
0a 67 65 74 73 6e 20 38 0a 47 53 4e ae 00 00 00  .getsn 8.GSN®...
00 00 00 00 00 0a 67 65 74 73 6e 20 38 0a 47 53  ......getsn 8.GS
4e ae 00 00 00 00 00 00 00 00 0a 67 65 74 73 6e  N®.........getsn
20 38 0a 47 53 4e ae 00 00 00 00 00 00 00 00 0a   8.GSN®.........
67 65 74 73 6e 20 38 0a 47 53 4e ae 00 00 00 00  getsn 8.GSN®....
00 00 00 00 0a 67 65 74 73 6e 20 38 0a 47 53 4e  .....getsn 8.GSN
ae 00 00 00 00 00 00 00 00 0a 67 65 74 73 6e 20  ®.........getsn 
38 0a 47 53 4e ae 00 00 00 00 00 00 00 00 0a 67  8.GSN®.........g
65 74 73 6e 20 38 0a 47 53 4e ae 00 00 00 00 00  etsn 8.GSN®.....
00 00 00 0a 67 65 74 73 6e 20 38 0a 47 53 4e ae  ....getsn 8.GSN®
00 00 00 00 00 00 00 00 0a 67 65 74 73 6e 20 38  .........getsn 8
0a 47 53 4e ae 00 00 00 00 00 00 00 00 0a 67 65  .GSN®.........ge
74 73 6e 20 38 0a 47 53 4e ae 00 00 00 00 00 00  tsn 8.GSN®......
00 00 0a 67 65 74 73 6e 20 38 0a 47 53 4e ae 00  ...getsn 8.GSN®.
00 00 00 00 00 00 00 0a 67 65 74 73 6e 20 38 0a  ........getsn 8.
47 53 4e ae 00 00 00 00 00 00 00 00 0a 67 65 74  GSN®.........get
73 6e 20 38 0a 47 53 4e ae 00 00 00 00 00 00 00  sn 8.GSN®.......
00 0a 67 65 74 73 6e 20 38 0a 47 53 4e ae 00 00  ..getsn 8.GSN®..
00 00 00 00 00 00 0a 67 65 74 73 6e 20 38 0a 47  .......getsn 8.G
53 4e ae 00 00 00 00 00 00 00 00 0a 67 65 74 73  SN®.........gets
6e 20 38 0a 47 53 4e ae 00 00 00 00 00 00 00 00  n 8.GSN®........
0a 67 65 74 73 6e 20 38 0a 47 53 4e ae 00 00 00  .getsn 8.GSN®...
00 00 00 00 00 0a 67 65 74 73 6e 20 38 0a 47 53  ......getsn 8.GS
4e ae 00 00 00 00 00 00 00 00 0a 67 65 74 73 6e  N®.........getsn
20 38 0a 47 53 4e ae 00 00 00 00 00 00 00 00 0a   8.GSN®.........
67 65 74 73 6e 20 38 0a 47 53 4e ae 00 00 00 00  getsn 8.GSN®....
00 00 00 00 0a 67 65 74 73 6e 20 38 0a 47 53 4e  .....getsn 8.GSN
ae 00 00 00 00 00 00 00 00 0a 67 65 74 73 6e 20  ®.........getsn 
38 0a 47 53 4e ae 00 00 00 00 00 00 00 00 0a 67  8.GSN®.........g
65 74 73 6e 20 38 0a 47 53 4e ae 00 00 00 00 00  etsn 8.GSN®.....
00 00 00 0a 67 65 74 73 6e 20 38 0a 47 53 4e ae  ....getsn 8.GSN®
00 00 00 00 00 00 00 00 0a 67 65 74 73 6e 20 38  .........getsn 8
0a 47 53 4e ae 00 00 00 00 00 00 00 00 0a 67 65  .GSN®.........ge
74 73 6e 20 38 0a 47 53 4e ae 00 00 00 00 00 00  tsn 8.GSN®......
00 00 0a 67 65 74 73 6e 20 38 0a 47 53 4e ae 00  ...getsn 8.GSN®.
00 00 00 00 00 00 00 0a 67 65 74 73 6e 20 38 0a  ........getsn 8.
47 53 4e ae 00 00 00 00 00 00 00 00 0a 67 65 74  GSN®.........get
73 6e 20 38 0a 47 53 4e ae 00 00 00 00 00 00 00  sn 8.GSN®.......
00 0a 67 65 74 73 6e 20 38 0a 47 53 4e ae 00 00  ..getsn 8.GSN®..
00 00 00 00 00 00 0a 67 65 74 73 6e 20 38 0a 47  .......getsn 8.G
53 4e ae 00 00 00 00 00 00 00 00 0a 67 65 74 73  SN®.........gets
6e 20 38 0a 47 53 4e ae 00 00 00 00 00 00 00 00  n 8.GSN®........
0a 67 65 74 73 6e 20 38 0a 47 53 4e ae 00 00 00  .getsn 8.GSN®...
00 00 00 00 00 0a 67 65 74 73 6e 20 38 0a 47 53  ......getsn 8.GS
4e ae 00 00 00 00 00 00 00 00 0a 67 65 74 73 6e  N®.........getsn
20 38 0a 47 53 4e ae 00 00 00 00 00 00 00 00 0a   8.GSN®.........
67 65 74 73 6e 20 38 0a 47 53 4e ae 00 00 00 00  getsn 8.GSN®....
00 00 00 00                                      ....
 
Última edição:

flash242424

GF Bronze
Membro Inactivo
Entrou
Dez 10, 2010
Mensagens
39
Gostos Recebidos
0
Pessoal já tentei enviar o código para uma box não autenticada, mas não deu, apareceu na tv: "burn OTP fail" :/ logo já envio os sniffs e as respostas dos comandos enviados :)

Excelente trabalho e sniffing :)
Não será necessário mais sniffings de autenticaçoes oficiais.
Amanhã noite ou segunda já me dedico a analisar.
Pena o burnsn não ter funcionado mas fico na dúvida se o comando foi bem enviado ou interpretado porque a parte inicial do hex não coincide com o do sniffing. O que se terá passado?
 

Diogovictoriano

GF Bronze
Entrou
Jun 30, 2018
Mensagens
25
Gostos Recebidos
0
Excelente trabalho e sniffing :)
Não será necessário mais sniffings de autenticaçoes oficiais.
Amanhã noite ou segunda já me dedico a analisar.
Pena o burnsn não ter funcionado mas fico na dúvida se o comando foi bem enviado ou interpretado porque a parte inicial do hex não coincide com o do sniffing. O que se terá passado?

Também não percebi, tentei enviar várias vezes o código, mudei os parâmetros de serie a ver se resolvia, mas a resposta era sempre a mesma e a box dava sempre o burn otp fail :/
 

Qu4k3

Super-Moderador
Team GForum
Entrou
Abr 9, 2009
Mensagens
166
Gostos Recebidos
89
Excelente trabalho e sniffing :)
Não será necessário mais sniffings de autenticaçoes oficiais.
Amanhã noite ou segunda já me dedico a analisar.
Pena o burnsn não ter funcionado mas fico na dúvida se o comando foi bem enviado ou interpretado porque a parte inicial do hex não coincide com o do sniffing. O que se terá passado?

Boas. Penso que comeco a entender..
Tem a ver com o burnsn 8 64 32.
Teremos que enviar o codigo separadamente.. tipo
burnsn 8 64 32
Codigo de 8 bits = hex do getsn da box
Codigo 64 bits = hex de um sniff
Codigo 32 bits = hex de um sniff

Tudo em hex.
 

Qu4k3

Super-Moderador
Team GForum
Entrou
Abr 9, 2009
Mensagens
166
Gostos Recebidos
89
Boas. Penso que comeco a entender..
Tem a ver com o burnsn 8 64 32.
Teremos que enviar o codigo separadamente.. tipo
burnsn 8 64 32
Codigo de 8 bits = hex do getsn da box
Codigo 64 bits = hex de um sniff
Codigo 32 bits = hex de um sniff

Tudo em hex.

Bytes.. perdao ;)
 

flash242424

GF Bronze
Membro Inactivo
Entrou
Dez 10, 2010
Mensagens
39
Gostos Recebidos
0
Tenho boas noticias aqui deixo os progressos.

Estive analisar o processo usado pela solovox e já o percebi todo.
O que fazem é o seguinte (deixo o processo todo para que fique documentado):
  1. Vão buscar à box o numero de serie do chip pela porta serie com o comando "getsn 8" (são os 8 Bytes menos significativos)
  2. Assinam o numero de serie do chip com o método sign_chip_sn(c_char_p, c_char_p, c_uint32, c_void_p) da biblioteca "Mp_Serial.dll"
  3. Convertem o numero de serie do chip assinado para base64
  4. Enviam ao servidor de licenças o numero de serie do chip assinado e em base64
  5. O servidor de licenças devolve o numero de serie do chip encriptado e em base64
    Estou a tentar descobrir o algoritmo que usam para cifrar o numero de serie do chip assinado.
    Usa coisa que sei é que usam a data (timestamp) no algoritmo porque a resposta muda se fizermos vários pedidos.
    Outra coisa boa é que se enviar pedidos com "successed=0" parece-me que não são descontadas licenças
    Ou será apenas porque está a ser utilizado um numero de serie que já foi autenticado?
    Código:
    [COLOR="#00FF00"]https://45.248.86.44/dpt/api/chip_with_sn_production?key=[COLOR="#FF0000"][usar_key_valida][/COLOR]&chip_sn=ECiRKioCAABv01JdlWwSZMcmEiRnSNaHMhsLQNJyOIU8NEVorb1qMg==&successed=0[/COLOR]
    Resposta 1:
    [COLOR="#FFA500"]   {
          "echipsn": "ECiRKioCAAALhJGTYhdaMJbi0AzUD8WYJeObNo4gjK74duwoEN9esSWXuymilX8Z8vPFGojxJsll4Zs3CIkvWcHw0BhTMnSNlpBin2xJnj7C/1yAR5ZG/VMJDO9yH5AOxHcXC0Qv2Dc="
       }[/COLOR]
    
    Resposta 2:
    [COLOR="#FFA500"]   {
           "echipsn": "ECiRKioCAAAxznLQijCGavfSMoeLwTEYAE5ixr+DBVXPDRoDFkNr92Qv3Ya7suuiCWm2MrHWNh8bcxynlPwnkBBSVu2iQMP144KoCGqQYZ4/3Qcg0lziXcJf6m6P3H0GINt2syla+zk="
       }[/COLOR]
    
    Resposta 3:
    [COLOR="#FFA500"]   {  
           "echipsn": "ECiRKioCAAAmAD56LfAzgGiH7MOMvrKCBOKwCf3jNjP7cHD3IhNg8GHynvKe+yLXPXHrwm6xjEbzNdyn/f0dPTRWXrSMSf9YVWjrRxhKvUFKuo7HpBCgbyz2fR/2D7Dyfw2TR6RbFr0="
       }[/COLOR]
    
    [COLOR="#FF0000"]ATENÇÃO[/COLOR][COLOR="#FFA500"] --- Cuidado ao usar esta chamada ao servidor, não consigo garantir que não vá ser descontada uma licença[/COLOR]
    [COLOR="#00FF00"]https://45.248.86.44/dpt/api/chip_with_sn_production?key=[usar_key_valida]&chip_sn=ECiRKioCAABv01JdlWwSZMcmEiRnSNaHMhsLQNJyOIU8NEVorb1qMg==&successed=1[/COLOR]
    Resposta:
    [COLOR="#FFA500"]   {  
           "producted": [numero de licenças gastas],
           "number": 30,
           "successed": 1
       }[/COLOR]
  6. Convertem o numero de serie do chip encriptado em bytes
  7. Enviam à box por porta serie o comando "burnsn 8 64 32" + Bytes do numero de serie do chip encriptado

Tentei descompilar a "Mp_Serial.dll" para perceber como assinam o numero de serie do chip mas sem sucesso, sei que está escrita em C mas ainda não consegui ter código legível.
Então segui a estratégia de a usar tal como está, para isso escrevi um script em python que simula o processo descrito acima e tudo bate certo.

Código:
import sys
import os
path = os.path.dirname(os.path.realpath(__file__))
sys.path.append(path)
from ctypes import *
import json
import random
import binascii
import string
import base64
import time

SN_SIZE = 8
DEGEST_SIZE = 32

def main():
    libfile = os.getcwd() + '/Mp_Serial.dll'
    serial = CDLL(libfile)
    serial.sign_chip_sn.argtypes = [c_char_p, c_char_p, c_uint32, c_void_p]
    
    ## colar hex da resposta ao getsn8
    #getsn8 = '47 53 4E AA 14 38 15 AB 03 03 00 00'
    getsn8 = '47 53 4e aa 10 28 91 2a 2a 02 00 00'
    
    getsn8 = bytes.fromhex(getsn8)
    chipsn = getsn8.strip()[-SN_SIZE:]
    print('\n chipsn hex')
    print(chipsn.hex())

    chipsn_sign = ''
    data_in = c_char_p(chipsn)
    in_size = c_uint32(len(chipsn))
    out_size = c_uint32(in_size.value + DEGEST_SIZE)
    data_out = create_string_buffer(out_size.value)
    if 0 == serial.sign_chip_sn(data_in, data_out, in_size, byref(out_size)):
        chipsn_sign = string_at(data_out, out_size.value)
    else:
        print('Error: request_key_data sign chip sn failed!')
        return
    print('\n chipsn_sign hex')
    print(chipsn_sign.hex())

    chipsn_sign = base64.b64encode(chipsn_sign)
    print('\n chipsn_sign base64')
    print(chipsn_sign.decode("utf-8"))

    ## colar aqui e_chip_sn vindo do servidor da solovox
    ## https://45.248.86.44/dpt/api/chip_with_sn_production?key=[usar_key_valida]&chip_sn=ECiRKioCAABv01JdlWwSZMcmEiRnSNaHMhsLQNJyOIU8NEVorb1qMg==&successed=0
    #   {
    #       "echipsn": "ECiRKioCAAALhJGTYhdaMJbi0AzUD8WYJeObNo4gjK74duwoEN9esSWXuymilX8Z8vPFGojxJsll4Zs3CIkvWcHw0BhTMnSNlpBin2xJnj7C/1yAR5ZG/VMJDO9yH5AOxHcXC0Qv2Dc="
    #   }
    #   {
    #       "echipsn": "ECiRKioCAAAxznLQijCGavfSMoeLwTEYAE5ixr+DBVXPDRoDFkNr92Qv3Ya7suuiCWm2MrHWNh8bcxynlPwnkBBSVu2iQMP144KoCGqQYZ4/3Qcg0lziXcJf6m6P3H0GINt2syla+zk="
    #   }
    #   {   
    #       "echipsn": "ECiRKioCAAAmAD56LfAzgGiH7MOMvrKCBOKwCf3jNjP7cHD3IhNg8GHynvKe+yLXPXHrwm6xjEbzNdyn/f0dPTRWXrSMSf9YVWjrRxhKvUFKuo7HpBCgbyz2fR/2D7Dyfw2TR6RbFr0="
    #   }
    e_chip_sn = 'ECiRKioCAAAmAD56LfAzgGiH7MOMvrKCBOKwCf3jNjP7cHD3IhNg8GHynvKe+yLXPXHrwm6xjEbzNdyn/f0dPTRWXrSMSf9YVWjrRxhKvUFKuo7HpBCgbyz2fR/2D7Dyfw2TR6RbFr0='
    print('\n e_chip_sn base64')
    print(e_chip_sn)
    e_chip_sn = base64.b64decode(e_chip_sn)
    print('\n e_chip_sn hex')
    print(e_chip_sn.hex())

    len_e_chip_sn = len(e_chip_sn) - SN_SIZE - DEGEST_SIZE
    print('\n len_e_chip_sn')
    print(len_e_chip_sn)

    print('\n COMANDO BURN hex')
    print((bytes('\x0Aburnsn %s %s %s\x0A'%(SN_SIZE, len_e_chip_sn, DEGEST_SIZE), 'utf-8')+e_chip_sn).hex())

if __name__ == '__main__':
  main()

Ao correr o script para box (47 53 4e aa 10 28 91 2a 2a 02 00 00) do Diogovictoriano temos:
Código:
 chipsn hex
1028912a2a020000

 chipsn_sign hex
1028912a2a0200006fd3525d956c1264c72612246748d687321b0b40d27238853c344568adbd6a32

 chipsn_sign base64
ECiRKioCAABv01JdlWwSZMcmEiRnSNaHMhsLQNJyOIU8NEVorb1qMg==

 e_chip_sn base64
ECiRKioCAAAmAD56LfAzgGiH7MOMvrKCBOKwCf3jNjP7cHD3IhNg8GHynvKe+yLXPXHrwm6xjEbzNdyn/f0dPTRWXrSMSf9YVWjrRxhKvUFKuo7HpBCgbyz2fR/2D7Dyfw2TR6RbFr0=

 e_chip_sn hex
1028912a2a02000026003e7a2df033806887ecc38cbeb28204e2b009fde33633fb7070f7221360f061f29ef29efb22d73d71ebc26eb18c46f335dca7fdfd1d3d34565eb48c49ff585568eb47184abd414aba8ec7a410a06f2cf67d1ff60fb0f27f0d9347a45b16bd

 len_e_chip_sn
64

 COMANDO BURN hex
0a6275726e736e20382036342033320a1028912a2a02000026003e7a2df033806887ecc38cbeb28204e2b009fde33633fb7070f7221360f061f29ef29efb22d73d71ebc26eb18c46f335dca7fdfd1d3d34565eb48c49ff585568eb47184abd414aba8ec7a410a06f2cf67d1ff60fb0f27f0d9347a45b16bd

Já dominamos o processo deles, só o e_chip_sn não bate certo com os sniffings mas é normal porque a cifra é dinâmica.
Vou continuar a trabalhar no sentido de quebrar a cifra vinda do servidor.

Podemos testar se podemos usar uma key para todas as autenticações porque enviamos "successed=0" quando interrogamos o servidor para obter o numero de serie do chip encriptado.
Para tal preciso que partilhem o numero de serie de uma box que não esteja autenticada.
Depois gero o comando burnsn para a autenticar e testamos se desconta uma licença ou não.
Alguém consegue um numero de serie de uma box que não esteja autenticada?
 

Diogovictoriano

GF Bronze
Entrou
Jun 30, 2018
Mensagens
25
Gostos Recebidos
0
Tenho boas noticias aqui deixo os progressos.

Estive analisar o processo usado pela solovox e já o percebi todo.
O que fazem é o seguinte (deixo o processo todo para que fique documentado):
  1. Vão buscar à box o numero de serie do chip pela porta serie com o comando "getsn 8" (são os 8 Bytes menos significativos)
  2. Assinam o numero de serie do chip com o método sign_chip_sn(c_char_p, c_char_p, c_uint32, c_void_p) da biblioteca "Mp_Serial.dll"
  3. Convertem o numero de serie do chip assinado para base64
  4. Enviam ao servidor de licenças o numero de serie do chip assinado e em base64
  5. O servidor de licenças devolve o numero de serie do chip encriptado e em base64
    Estou a tentar descobrir o algoritmo que usam para cifrar o numero de serie do chip assinado.
    Usa coisa que sei é que usam a data (timestamp) no algoritmo porque a resposta muda se fizermos vários pedidos.
    Outra coisa boa é que se enviar pedidos com "successed=0" parece-me que não são descontadas licenças
    Ou será apenas porque está a ser utilizado um numero de serie que já foi autenticado?
    Código:
    [COLOR="#00FF00"]https://45.248.86.44/dpt/api/chip_with_sn_production?key=[COLOR="#FF0000"][usar_key_valida][/COLOR]&chip_sn=ECiRKioCAABv01JdlWwSZMcmEiRnSNaHMhsLQNJyOIU8NEVorb1qMg==&successed=0[/COLOR]
    Resposta 1:
    [COLOR="#FFA500"]   {
          "echipsn": "ECiRKioCAAALhJGTYhdaMJbi0AzUD8WYJeObNo4gjK74duwoEN9esSWXuymilX8Z8vPFGojxJsll4Zs3CIkvWcHw0BhTMnSNlpBin2xJnj7C/1yAR5ZG/VMJDO9yH5AOxHcXC0Qv2Dc="
       }[/COLOR]
    
    Resposta 2:
    [COLOR="#FFA500"]   {
           "echipsn": "ECiRKioCAAAxznLQijCGavfSMoeLwTEYAE5ixr+DBVXPDRoDFkNr92Qv3Ya7suuiCWm2MrHWNh8bcxynlPwnkBBSVu2iQMP144KoCGqQYZ4/3Qcg0lziXcJf6m6P3H0GINt2syla+zk="
       }[/COLOR]
    
    Resposta 3:
    [COLOR="#FFA500"]   {  
           "echipsn": "ECiRKioCAAAmAD56LfAzgGiH7MOMvrKCBOKwCf3jNjP7cHD3IhNg8GHynvKe+yLXPXHrwm6xjEbzNdyn/f0dPTRWXrSMSf9YVWjrRxhKvUFKuo7HpBCgbyz2fR/2D7Dyfw2TR6RbFr0="
       }[/COLOR]
    
    [COLOR="#FF0000"]ATENÇÃO[/COLOR][COLOR="#FFA500"] --- Cuidado ao usar esta chamada ao servidor, não consigo garantir que não vá ser descontada uma licença[/COLOR]
    [COLOR="#00FF00"]https://45.248.86.44/dpt/api/chip_with_sn_production?key=[usar_key_valida]&chip_sn=ECiRKioCAABv01JdlWwSZMcmEiRnSNaHMhsLQNJyOIU8NEVorb1qMg==&successed=1[/COLOR]
    Resposta:
    [COLOR="#FFA500"]   {  
           "producted": [numero de licenças gastas],
           "number": 30,
           "successed": 1
       }[/COLOR]
  6. Convertem o numero de serie do chip encriptado em bytes
  7. Enviam à box por porta serie o comando "burnsn 8 64 32" + Bytes do numero de serie do chip encriptado

Tentei descompilar a "Mp_Serial.dll" para perceber como assinam o numero de serie do chip mas sem sucesso, sei que está escrita em C mas ainda não consegui ter código legível.
Então segui a estratégia de a usar tal como está, para isso escrevi um script em python que simula o processo descrito acima e tudo bate certo.

Código:
import sys
import os
path = os.path.dirname(os.path.realpath(__file__))
sys.path.append(path)
from ctypes import *
import json
import random
import binascii
import string
import base64
import time

SN_SIZE = 8
DEGEST_SIZE = 32

def main():
    libfile = os.getcwd() + '/Mp_Serial.dll'
    serial = CDLL(libfile)
    serial.sign_chip_sn.argtypes = [c_char_p, c_char_p, c_uint32, c_void_p]
    
    ## colar hex da resposta ao getsn8
    #getsn8 = '47 53 4E AA 14 38 15 AB 03 03 00 00'
    getsn8 = '47 53 4e aa 10 28 91 2a 2a 02 00 00'
    
    getsn8 = bytes.fromhex(getsn8)
    chipsn = getsn8.strip()[-SN_SIZE:]
    print('\n chipsn hex')
    print(chipsn.hex())

    chipsn_sign = ''
    data_in = c_char_p(chipsn)
    in_size = c_uint32(len(chipsn))
    out_size = c_uint32(in_size.value + DEGEST_SIZE)
    data_out = create_string_buffer(out_size.value)
    if 0 == serial.sign_chip_sn(data_in, data_out, in_size, byref(out_size)):
        chipsn_sign = string_at(data_out, out_size.value)
    else:
        print('Error: request_key_data sign chip sn failed!')
        return
    print('\n chipsn_sign hex')
    print(chipsn_sign.hex())

    chipsn_sign = base64.b64encode(chipsn_sign)
    print('\n chipsn_sign base64')
    print(chipsn_sign.decode("utf-8"))

    ## colar aqui e_chip_sn vindo do servidor da solovox
    ## https://45.248.86.44/dpt/api/chip_with_sn_production?key=[usar_key_valida]&chip_sn=ECiRKioCAABv01JdlWwSZMcmEiRnSNaHMhsLQNJyOIU8NEVorb1qMg==&successed=0
    #   {
    #       "echipsn": "ECiRKioCAAALhJGTYhdaMJbi0AzUD8WYJeObNo4gjK74duwoEN9esSWXuymilX8Z8vPFGojxJsll4Zs3CIkvWcHw0BhTMnSNlpBin2xJnj7C/1yAR5ZG/VMJDO9yH5AOxHcXC0Qv2Dc="
    #   }
    #   {
    #       "echipsn": "ECiRKioCAAAxznLQijCGavfSMoeLwTEYAE5ixr+DBVXPDRoDFkNr92Qv3Ya7suuiCWm2MrHWNh8bcxynlPwnkBBSVu2iQMP144KoCGqQYZ4/3Qcg0lziXcJf6m6P3H0GINt2syla+zk="
    #   }
    #   {   
    #       "echipsn": "ECiRKioCAAAmAD56LfAzgGiH7MOMvrKCBOKwCf3jNjP7cHD3IhNg8GHynvKe+yLXPXHrwm6xjEbzNdyn/f0dPTRWXrSMSf9YVWjrRxhKvUFKuo7HpBCgbyz2fR/2D7Dyfw2TR6RbFr0="
    #   }
    e_chip_sn = 'ECiRKioCAAAmAD56LfAzgGiH7MOMvrKCBOKwCf3jNjP7cHD3IhNg8GHynvKe+yLXPXHrwm6xjEbzNdyn/f0dPTRWXrSMSf9YVWjrRxhKvUFKuo7HpBCgbyz2fR/2D7Dyfw2TR6RbFr0='
    print('\n e_chip_sn base64')
    print(e_chip_sn)
    e_chip_sn = base64.b64decode(e_chip_sn)
    print('\n e_chip_sn hex')
    print(e_chip_sn.hex())

    len_e_chip_sn = len(e_chip_sn) - SN_SIZE - DEGEST_SIZE
    print('\n len_e_chip_sn')
    print(len_e_chip_sn)

    print('\n COMANDO BURN hex')
    print((bytes('\x0Aburnsn %s %s %s\x0A'%(SN_SIZE, len_e_chip_sn, DEGEST_SIZE), 'utf-8')+e_chip_sn).hex())

if __name__ == '__main__':
  main()

Ao correr o script para box (47 53 4e aa 10 28 91 2a 2a 02 00 00) do Diogovictoriano temos:
Código:
 chipsn hex
1028912a2a020000

 chipsn_sign hex
1028912a2a0200006fd3525d956c1264c72612246748d687321b0b40d27238853c344568adbd6a32

 chipsn_sign base64
ECiRKioCAABv01JdlWwSZMcmEiRnSNaHMhsLQNJyOIU8NEVorb1qMg==

 e_chip_sn base64
ECiRKioCAAAmAD56LfAzgGiH7MOMvrKCBOKwCf3jNjP7cHD3IhNg8GHynvKe+yLXPXHrwm6xjEbzNdyn/f0dPTRWXrSMSf9YVWjrRxhKvUFKuo7HpBCgbyz2fR/2D7Dyfw2TR6RbFr0=

 e_chip_sn hex
1028912a2a02000026003e7a2df033806887ecc38cbeb28204e2b009fde33633fb7070f7221360f061f29ef29efb22d73d71ebc26eb18c46f335dca7fdfd1d3d34565eb48c49ff585568eb47184abd414aba8ec7a410a06f2cf67d1ff60fb0f27f0d9347a45b16bd

 len_e_chip_sn
64

 COMANDO BURN hex
0a6275726e736e20382036342033320a1028912a2a02000026003e7a2df033806887ecc38cbeb28204e2b009fde33633fb7070f7221360f061f29ef29efb22d73d71ebc26eb18c46f335dca7fdfd1d3d34565eb48c49ff585568eb47184abd414aba8ec7a410a06f2cf67d1ff60fb0f27f0d9347a45b16bd

Já dominamos o processo deles, só o e_chip_sn não bate certo com os sniffings mas é normal porque a cifra é dinâmica.
Vou continuar a trabalhar no sentido de quebrar a cifra vinda do servidor.

Podemos testar se podemos usar uma key para todas as autenticações porque enviamos "successed=0" quando interrogamos o servidor para obter o numero de serie do chip encriptado.
Para tal preciso que partilhem o numero de serie de uma box que não esteja autenticada.
Depois gero o comando burnsn para a autenticar e testamos se desconta uma licença ou não.
Alguém consegue um numero de serie de uma box que não esteja autenticada?

Eu arranjo :) logo ou amanhã já devo conseguir isso ;)
 

Qu4k3

Super-Moderador
Team GForum
Entrou
Abr 9, 2009
Mensagens
166
Gostos Recebidos
89
Tenho boas noticias aqui deixo os progressos.

Estive analisar o processo usado pela solovox e já o percebi todo.
O que fazem é o seguinte (deixo o processo todo para que fique documentado):
  1. Vão buscar à box o numero de serie do chip pela porta serie com o comando "getsn 8" (são os 8 Bytes menos significativos)
  2. Assinam o numero de serie do chip com o método sign_chip_sn(c_char_p, c_char_p, c_uint32, c_void_p) da biblioteca "Mp_Serial.dll"
  3. Convertem o numero de serie do chip assinado para base64
  4. Enviam ao servidor de licenças o numero de serie do chip assinado e em base64
  5. O servidor de licenças devolve o numero de serie do chip encriptado e em base64
    Estou a tentar descobrir o algoritmo que usam para cifrar o numero de serie do chip assinado.
    Usa coisa que sei é que usam a data (timestamp) no algoritmo porque a resposta muda se fizermos vários pedidos.
    Outra coisa boa é que se enviar pedidos com "successed=0" parece-me que não são descontadas licenças
    Ou será apenas porque está a ser utilizado um numero de serie que já foi autenticado?
    Código:
    [COLOR="#00FF00"]https://45.248.86.44/dpt/api/chip_with_sn_production?key=[COLOR="#FF0000"][usar_key_valida][/COLOR]&chip_sn=ECiRKioCAABv01JdlWwSZMcmEiRnSNaHMhsLQNJyOIU8NEVorb1qMg==&successed=0[/COLOR]
    Resposta 1:
    [COLOR="#FFA500"]   {
          "echipsn": "ECiRKioCAAALhJGTYhdaMJbi0AzUD8WYJeObNo4gjK74duwoEN9esSWXuymilX8Z8vPFGojxJsll4Zs3CIkvWcHw0BhTMnSNlpBin2xJnj7C/1yAR5ZG/VMJDO9yH5AOxHcXC0Qv2Dc="
       }[/COLOR]
    
    Resposta 2:
    [COLOR="#FFA500"]   {
           "echipsn": "ECiRKioCAAAxznLQijCGavfSMoeLwTEYAE5ixr+DBVXPDRoDFkNr92Qv3Ya7suuiCWm2MrHWNh8bcxynlPwnkBBSVu2iQMP144KoCGqQYZ4/3Qcg0lziXcJf6m6P3H0GINt2syla+zk="
       }[/COLOR]
    
    Resposta 3:
    [COLOR="#FFA500"]   {  
           "echipsn": "ECiRKioCAAAmAD56LfAzgGiH7MOMvrKCBOKwCf3jNjP7cHD3IhNg8GHynvKe+yLXPXHrwm6xjEbzNdyn/f0dPTRWXrSMSf9YVWjrRxhKvUFKuo7HpBCgbyz2fR/2D7Dyfw2TR6RbFr0="
       }[/COLOR]
    
    [COLOR="#FF0000"]ATENÇÃO[/COLOR][COLOR="#FFA500"] --- Cuidado ao usar esta chamada ao servidor, não consigo garantir que não vá ser descontada uma licença[/COLOR]
    [COLOR="#00FF00"]https://45.248.86.44/dpt/api/chip_with_sn_production?key=[usar_key_valida]&chip_sn=ECiRKioCAABv01JdlWwSZMcmEiRnSNaHMhsLQNJyOIU8NEVorb1qMg==&successed=1[/COLOR]
    Resposta:
    [COLOR="#FFA500"]   {  
           "producted": [numero de licenças gastas],
           "number": 30,
           "successed": 1
       }[/COLOR]
  6. Convertem o numero de serie do chip encriptado em bytes
  7. Enviam à box por porta serie o comando "burnsn 8 64 32" + Bytes do numero de serie do chip encriptado

Tentei descompilar a "Mp_Serial.dll" para perceber como assinam o numero de serie do chip mas sem sucesso, sei que está escrita em C mas ainda não consegui ter código legível.
Então segui a estratégia de a usar tal como está, para isso escrevi um script em python que simula o processo descrito acima e tudo bate certo.

Código:
import sys
import os
path = os.path.dirname(os.path.realpath(__file__))
sys.path.append(path)
from ctypes import *
import json
import random
import binascii
import string
import base64
import time

SN_SIZE = 8
DEGEST_SIZE = 32

def main():
    libfile = os.getcwd() + '/Mp_Serial.dll'
    serial = CDLL(libfile)
    serial.sign_chip_sn.argtypes = [c_char_p, c_char_p, c_uint32, c_void_p]
    
    ## colar hex da resposta ao getsn8
    #getsn8 = '47 53 4E AA 14 38 15 AB 03 03 00 00'
    getsn8 = '47 53 4e aa 10 28 91 2a 2a 02 00 00'
    
    getsn8 = bytes.fromhex(getsn8)
    chipsn = getsn8.strip()[-SN_SIZE:]
    print('\n chipsn hex')
    print(chipsn.hex())

    chipsn_sign = ''
    data_in = c_char_p(chipsn)
    in_size = c_uint32(len(chipsn))
    out_size = c_uint32(in_size.value + DEGEST_SIZE)
    data_out = create_string_buffer(out_size.value)
    if 0 == serial.sign_chip_sn(data_in, data_out, in_size, byref(out_size)):
        chipsn_sign = string_at(data_out, out_size.value)
    else:
        print('Error: request_key_data sign chip sn failed!')
        return
    print('\n chipsn_sign hex')
    print(chipsn_sign.hex())

    chipsn_sign = base64.b64encode(chipsn_sign)
    print('\n chipsn_sign base64')
    print(chipsn_sign.decode("utf-8"))

    ## colar aqui e_chip_sn vindo do servidor da solovox
    ## https://45.248.86.44/dpt/api/chip_with_sn_production?key=[usar_key_valida]&chip_sn=ECiRKioCAABv01JdlWwSZMcmEiRnSNaHMhsLQNJyOIU8NEVorb1qMg==&successed=0
    #   {
    #       "echipsn": "ECiRKioCAAALhJGTYhdaMJbi0AzUD8WYJeObNo4gjK74duwoEN9esSWXuymilX8Z8vPFGojxJsll4Zs3CIkvWcHw0BhTMnSNlpBin2xJnj7C/1yAR5ZG/VMJDO9yH5AOxHcXC0Qv2Dc="
    #   }
    #   {
    #       "echipsn": "ECiRKioCAAAxznLQijCGavfSMoeLwTEYAE5ixr+DBVXPDRoDFkNr92Qv3Ya7suuiCWm2MrHWNh8bcxynlPwnkBBSVu2iQMP144KoCGqQYZ4/3Qcg0lziXcJf6m6P3H0GINt2syla+zk="
    #   }
    #   {   
    #       "echipsn": "ECiRKioCAAAmAD56LfAzgGiH7MOMvrKCBOKwCf3jNjP7cHD3IhNg8GHynvKe+yLXPXHrwm6xjEbzNdyn/f0dPTRWXrSMSf9YVWjrRxhKvUFKuo7HpBCgbyz2fR/2D7Dyfw2TR6RbFr0="
    #   }
    e_chip_sn = 'ECiRKioCAAAmAD56LfAzgGiH7MOMvrKCBOKwCf3jNjP7cHD3IhNg8GHynvKe+yLXPXHrwm6xjEbzNdyn/f0dPTRWXrSMSf9YVWjrRxhKvUFKuo7HpBCgbyz2fR/2D7Dyfw2TR6RbFr0='
    print('\n e_chip_sn base64')
    print(e_chip_sn)
    e_chip_sn = base64.b64decode(e_chip_sn)
    print('\n e_chip_sn hex')
    print(e_chip_sn.hex())

    len_e_chip_sn = len(e_chip_sn) - SN_SIZE - DEGEST_SIZE
    print('\n len_e_chip_sn')
    print(len_e_chip_sn)

    print('\n COMANDO BURN hex')
    print((bytes('\x0Aburnsn %s %s %s\x0A'%(SN_SIZE, len_e_chip_sn, DEGEST_SIZE), 'utf-8')+e_chip_sn).hex())

if __name__ == '__main__':
  main()

Ao correr o script para box (47 53 4e aa 10 28 91 2a 2a 02 00 00) do Diogovictoriano temos:
Código:
 chipsn hex
1028912a2a020000

 chipsn_sign hex
1028912a2a0200006fd3525d956c1264c72612246748d687321b0b40d27238853c344568adbd6a32

 chipsn_sign base64
ECiRKioCAABv01JdlWwSZMcmEiRnSNaHMhsLQNJyOIU8NEVorb1qMg==

 e_chip_sn base64
ECiRKioCAAAmAD56LfAzgGiH7MOMvrKCBOKwCf3jNjP7cHD3IhNg8GHynvKe+yLXPXHrwm6xjEbzNdyn/f0dPTRWXrSMSf9YVWjrRxhKvUFKuo7HpBCgbyz2fR/2D7Dyfw2TR6RbFr0=

 e_chip_sn hex
1028912a2a02000026003e7a2df033806887ecc38cbeb28204e2b009fde33633fb7070f7221360f061f29ef29efb22d73d71ebc26eb18c46f335dca7fdfd1d3d34565eb48c49ff585568eb47184abd414aba8ec7a410a06f2cf67d1ff60fb0f27f0d9347a45b16bd

 len_e_chip_sn
64

 COMANDO BURN hex
0a6275726e736e20382036342033320a1028912a2a02000026003e7a2df033806887ecc38cbeb28204e2b009fde33633fb7070f7221360f061f29ef29efb22d73d71ebc26eb18c46f335dca7fdfd1d3d34565eb48c49ff585568eb47184abd414aba8ec7a410a06f2cf67d1ff60fb0f27f0d9347a45b16bd

Já dominamos o processo deles, só o e_chip_sn não bate certo com os sniffings mas é normal porque a cifra é dinâmica.
Vou continuar a trabalhar no sentido de quebrar a cifra vinda do servidor.

Podemos testar se podemos usar uma key para todas as autenticações porque enviamos "successed=0" quando interrogamos o servidor para obter o numero de serie do chip encriptado.
Para tal preciso que partilhem o numero de serie de uma box que não esteja autenticada.
Depois gero o comando burnsn para a autenticar e testamos se desconta uma licença ou não.
Alguém consegue um numero de serie de uma box que não esteja autenticada?

Bom trabalho.
Vou tentar arranjar uma box para teste.
 

java_88

GF Bronze
Entrou
Ago 17, 2007
Mensagens
43
Gostos Recebidos
0
Boas

Reparei numa coisa nao sei se ajuda ....

Ja lhe comprei 120 key a solovox e todas as que me enviaram comecam com o numero 5b será por coincidência?
Ou o gerador de keys está formatado para isso?
Amigos no que poder ajudar avisem pois ainda tenho 12 keys e nao aa vou usar se precisarem mandem mp

Abraço e bom trabalho
 

Diogovictoriano

GF Bronze
Entrou
Jun 30, 2018
Mensagens
25
Gostos Recebidos
0
Boas

Reparei numa coisa nao sei se ajuda ....

Ja lhe comprei 120 key a solovox e todas as que me enviaram comecam com o numero 5b será por coincidência?
Ou o gerador de keys está formatado para isso?
Amigos no que poder ajudar avisem pois ainda tenho 12 keys e nao aa vou usar se precisarem mandem mp

Abraço e bom trabalho

boas java_88,

eu comprei 30 keys, mas estas começam com o numero: d6...
isto pode ser um numero sequencial, penso eu :)
 

flash242424

GF Bronze
Membro Inactivo
Entrou
Dez 10, 2010
Mensagens
39
Gostos Recebidos
0
Boas

Reparei numa coisa nao sei se ajuda ....

Ja lhe comprei 120 key a solovox e todas as que me enviaram comecam com o numero 5b será por coincidência?
Ou o gerador de keys está formatado para isso?
Amigos no que poder ajudar avisem pois ainda tenho 12 keys e nao aa vou usar se precisarem mandem mp

Abraço e bom trabalho

O formato da key de licenciamento é GUID (or UUID) Wiki e Generador online.
Sim é coincidência, na actualidade usa-se muito este formato para chaves únicas.
 

flash242424

GF Bronze
Membro Inactivo
Entrou
Dez 10, 2010
Mensagens
39
Gostos Recebidos
0
Descobertas na tentativa de quebrar o formato do e_chip_sn.

  1. Não é usado um algoritmo de cifra mas sim um algoritmo de digest, também conhecido por hash

  2. Estão a usar Python do lado do servidor de licenciamento vemos isso pelo header dos pedidos (server →Apache/2.4.6 (CentOS) OpenSSL/1.0.1e-fips PHP/5.4.16 mod_wsgi/3.4 Python/2.7.5)
    Então fui procurar que algoritmos de disgest existem já feitos no Python.
    Código:
    >>> import hashlib
    >>> hashlib.algorithms_available
    {'sha3_224', 'SHA512', 'MD4', 'whirlpool', 'SHA384', 'shake_256', 'dsaEncryption', 'sha', 'SHA', 'MD5', 'ecdsa-with-SHA1', 'sha256', 'SHA224', 'SHA1', 'sha384', 'DSA', 'DSA-SHA', 'sha1', 'SHA256', 'RIPEMD160', 'blake2b', 'md4', 'md5', 'dsaWithSHA', 'sha512', 'sha3_512', 'ripemd160', 'blake2s', 'sha3_384', 'sha224', 'shake_128', 'sha3_256'}
    Acredito que estão a usar um destes, só tenho de descobrir qual.

  3. Na documentação do Python mais em concreto hashlib https://docs.python.org/3/library/hashlib.html encontrei este bocado de código.
    Código:
    >>> import hashlib
    >>> m = hashlib.sha256()
    >>> m.update(b"Nobody inspects")
    >>> m.update(b" the spammish repetition")
    >>> m.digest()
    b'\x03\x1e\xdd}Ae\x15\x93\xc5\xfe\\\x00o\xa5u+7\xfd\xdf\xf7\xbcN\x84:\xa6\xaf\x0c\x95\x0fK\x94\x06'
    >>> m.digest_size
    32
    >>> m.block_size
    64

  4. Digam lá se já não viram aqueles tamanhos em algum lado ;)
    O "burnsn 8 64 32" significa:
    • 8 Bytes para numero de serie do chip
    • 64 Bytes para tamanho do bloco
    • 32 Bytes para tamanho do digest

Estamos cada vez mais perto :Espi27:
 

java_88

GF Bronze
Entrou
Ago 17, 2007
Mensagens
43
Gostos Recebidos
0
Siga para a frente e o caminho .... se conseguirmos descobrir isto a seguir e para programar para a Nasa....😀😀😀😀
 
Status
Não está aberto para novas respostas.
Topo