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

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
  2. Felis-Sapiens

    Felis-Sapiens Reservists Of Antichat

    Joined:
    21 Jul 2015
    Messages:
    615
    Likes Received:
    3,819
    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.
  3. soundboom

    soundboom New Member

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

    DSL2650NRU Well-Known Member

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

    soundboom New Member

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