Помогите создать нерабочую прошивку путем удаления части кода и заменить хешсумму прошивки по резуль

Discussion in 'Беспроводные технологии/Wi-Fi/Wardriving' started by soundboom, 13 Oct 2020.

  1. soundboom

    soundboom New Member

    Joined:
    13 Oct 2020
    Messages:
    9
    Likes Received:
    0
    Reputations:
    0
    Есть полусгоревший роутер, и вот хочется поэкспериментировать.
    Прошивка с сайта производителя https://totolink.ru/assets/template/files/n300rt-n300rt-v224.rar
    Дело в том что в прошивке вписана хешсумма и роутер при закачке сразу считывает из этой прошивки хешсумму и расчитывает хешсумму непосредственно с этого файла прошивки который мы подсовываем, и если не совпадают хегсуммы то роутер не принимает прошивку, поэтому требуется с прощивки удалить где-то в середине 50% кода чтобы роутер с этой прошивкой перестал загружаться и найти где в этом файле записана хешсума и заменить старую хешсуму на новую ту что уже у нас получилась после удаления части кода прошивки.
    Я думаю такая схема должна прокатить.
    на роутере идёт две проверки, первая на хешсумму а вторая на модель производителя, то есть левую прошивку или поврежденную залить нельзя. поэтому интересно что будет если залить официальную прошивку но с удаленной частью кода и измененной хешсуммой.
    кто модифицирует эту прошивку тому по желанию скину видео всего процесса, как я закачиваю прошивку на роутер, как он устанавливает прошивку, и как потом не загружается или что вообще там будет происходить
     
    #1 soundboom, 13 Oct 2020
    Last edited: 13 Oct 2020
    1. Felis-Sapiens

      Felis-Sapiens Reservists Of Antichat

      Joined:
      21 Jul 2015
      Messages:
      616
      Likes Received:
      3,833
      Reputations:
      171
      А зачем нерабочую прошивку создавать?
      Модель другая, но структура файла такая же: https://github.com/utessel/edimax/b...a/package/librtk-inband/src/inband_cmd.c#L219 - проверка контрольной суммы.

      PHP:
      #! /usr/bin/env python3

      ENDIANNESS 'big'
      SIGNATURE_LEN 4

      headers 
      = {
          
      b'cr6c''FW_HEADER_WITH_ROOT',
          
      b'cs6c''FW_HEADER',
          
      b'r6cr''ROOT_HEADER',
          
      b'w6cg''WEB_HEADER'}


      def CHECKSUM_OK(data):
          
      sum 0
          
      for b in data:
              
      sum = (sum b) & 0xFF
          
      return sum == 0


      def fwChecksumOk
      (data):
          
      sum 0
          
      for i in range(0len(data), 2):
              
      sum = (sum int.from_bytes(data[i:i+2], ENDIANNESS)) & 0xFFFF
          
      return sum == 0


      def tohex
      (bsdelim):
          return 
      delim.join(f'{b:02x}' for b in bs)


      def read_part(stream):
          
      magic stream.read(SIGNATURE_LEN)
          if 
      len(magic) != SIGNATURE_LEN:
              print(
      'ERROR: failed to read next part')
              return 
      False
          
          
      if magic not in headers:
              
      model magic stream.read(0xFC)
              if 
      len(model) == 0x100:
                  print(
      'ERROR: unknown signature'tohex(magic' '))
              else:
                  print(
      'Model?:'model)
              return 
      False
          
          
      print('Start reading'headers[magic])
          
          
      bs stream.read(4)
          if 
      len(bs) != 4:
              print(
      'ERROR: failed to read startAddr')
              return 
      False
          startAddr 
      int.from_bytes(bsENDIANNESS)
          print(
      f'startAddr: 0x{startAddr:08X}')
          
          
      bs stream.read(4)
          if 
      len(bs) != 4:
              print(
      'ERROR: failed to read burnAddr')
              return 
      False
          burnAddr 
      int.from_bytes(bsENDIANNESS)
          print(
      f'burnAddr: 0x{burnAddr:08X}')
          
          
      bs stream.read(4)
          if 
      len(bs) != 4:
              print(
      'ERROR: failed to read len')
              return 
      False
          len_ 
      int.from_bytes(bsENDIANNESS)
          print(
      f'len: 0x{len_:08X}')
          
          
      data stream.read(len_)
          if 
      len(data) != len_:
              print(
      'ERROR: failed to read data')
              return 
      False
          
          
      if headers[magic] == 'WEB_HEADER':
              
      chksum_check CHECKSUM_OK(data)
          else:
              
      chksum_check fwChecksumOk(data)
          print(
      'Checksum:''OK' if chksum_check else 'FAIL')
          
          print()
          return 
      True

      with open
      ('TOTOLINK-N300RT-V2.2.4-B20180330.1621.web''rb') as f:
          while 
      read_part(f):
              
      pass
       
      fandor9, binarymaster, 4Fun and 2 others like this.
      1. soundboom

        soundboom New Member

        Joined:
        13 Oct 2020
        Messages:
        9
        Likes Received:
        0
        Reputations:
        0
        Что это вообще такое?))
        мне прошивка нужна а код вычисления хешсуммы)
         
        1. DSL2650NRU

          DSL2650NRU Well-Known Member

          Joined:
          12 Apr 2016
          Messages:
          467
          Likes Received:
          306
          Reputations:
          1
          На 4PDA этот роутер прошивали под опенврт вроде.
           
          1. soundboom

            soundboom New Member

            Joined:
            13 Oct 2020
            Messages:
            9
            Likes Received:
            0
            Reputations:
            0
            да смотрел я но там ничего такого не увидел.
            тем более мне не нужно опенврт
             
            Loading...