Как узнать пароль от программы S200 контроллера

    • #93409
      Николай
      Ключник

      misha1 Февраль 26, 2022 3:53

      Здравствуйте !
      Есть технологическая линия китайского производства. В шкафу управления стоит контроллер S200 с программой под паролем внутри. Мне понадобился пароль, для манипуляций с программой. Как мне распаролить программу ? Может есть специальный софт для этого ?

      andreyit Февраль 26, 2022 5:30

      Есть софт, если версия прошивки ниже 2.0, и стоит именно 3-х уровненный пароль.
      Хотя есть 4 уровень или версия 2.0 или выше – то тоже есть решение, которое на форуме не раз проскакивало.

      Sam N Март 03, 2022 9:10

      считываешь память программы
      устройством CH341A .
      как расшифровать в дампе пароль стораз описано.
      если 4 уровень защиты, то взлом аппаратный.

      Serg70 Февраль 03, 2023 6:00

      pss7_v1.84a

      Sam N Май 08, 2023 4:14

      Spoiler
      Show

      Код:

      #!/usr/bin/python3 def byte_char(hexstr): # from 'pass_for_s7.pdf' if ( hexstr=='8a'): return ' ' #space if ( hexstr=='8b'): return '!' if ( hexstr=='88'): return ''' if ( hexstr=='89'): return '#' if ( hexstr=='8e'): return '$' if ( hexstr=='8f'): return '%' if ( hexstr=='8c'): return '&' if ( hexstr=='8d'): return ''' if ( hexstr=='82'): return '(' if ( hexstr=='83'): return ')' if ( hexstr=='80'): return '*' if ( hexstr=='81'): return '+' if ( hexstr=='86'): return ',' if ( hexstr=='87'): return '-' if ( hexstr=='84'): return '.' if ( hexstr=='85'): return '/' if ( hexstr=='9a'): return '0' if ( hexstr=='9b'): return '1' if ( hexstr=='98'): return '2' if ( hexstr=='99'): return '3' if ( hexstr=='9e'): return '4' if ( hexstr=='9f'): return '5' if ( hexstr=='9c'): return '6' if ( hexstr=='9d'): return '7' if ( hexstr=='92'): return '8' if ( hexstr=='93'): return '9' if ( hexstr=='90'): return ':' if ( hexstr=='91'): return ',' if ( hexstr=='96'): return '&lt,' if ( hexstr=='97'): return '=' if ( hexstr=='94'): return '&gt,' if ( hexstr=='95'): return '?' if ( hexstr=='ea'): return '@' if ( hexstr=='eb'): return 'A' if ( hexstr=='e8'): return 'B' if ( hexstr=='e9'): return 'C' if ( hexstr=='ee'): return 'D' if ( hexstr=='ef'): return 'E' if ( hexstr=='ec'): return 'F' if ( hexstr=='ed'): return 'G' if ( hexstr=='e2'): return 'H' if ( hexstr=='e3'): return 'I' if ( hexstr=='e0'): return 'J' if ( hexstr=='e1'): return 'K' if ( hexstr=='e6'): return 'L' if ( hexstr=='e7'): return 'M' if ( hexstr=='e4'): return 'N' if ( hexstr=='e5'): return 'O' if ( hexstr=='fa'): return 'P' if ( hexstr=='fb'): return 'Q' if ( hexstr=='f8'): return 'R' if ( hexstr=='f9'): return 'S' if ( hexstr=='fe'): return 'T' if ( hexstr=='ff'): return 'U' if ( hexstr=='fc'): return 'V' if ( hexstr=='fd'): return 'W' if ( hexstr=='f2'): return 'X' if ( hexstr=='f3'): return 'Y' if ( hexstr=='f0'): return 'Z' if ( hexstr=='f1'): return '[' if ( hexstr=='f6'): return '' if ( hexstr=='f7'): return ']' if ( hexstr=='f4'): return '^' if ( hexstr=='f5'): return '_' #03 fc ef 04 07 ef f9 0c 6f # V E R B A T I &lt, # | | # xor (fc,04) = f8 def xor_str(a,b): result = int(a, 16) ^ int(b, 16) # convert to integers and xor them return '{:x}'.format(result) # convert back to hexadecimal def byte_translate(_16byte_string): print ('_16byte_string',_16byte_string) hexstr='' i=0 hexstr=[0,0,0,0,0,0,0,0,0] for j in range(0,16,2): code='' hexstr[i] = _16byte_string[j] + _16byte_string[j+1] if j&lt,3: #print(j,'=jhexstr',hexstr[i], print('decoded char ', byte_char (hexstr[i]) ) #if (byte_char (hexstr) == None): continue if j&gt,2: print('decoded with XOR', byte_char (xor_str(hexstr[i], hexstr[i-2] ) )) i=i+1 return with open('FILENAME.Bin', 'rb') as f: hexdata = f.read().hex() f.close() LenHex=len(hexdata) if (LenHex&lt,1000 or hexdata[0:12] != '4e4f44494e4e') : # in my case it was 4e4f44494e4e print (LenHex) print ('wrong file format') print ( hexdata[0:12]) exit(0) #if protection level=04 #decrease level down to 03 #change CRC # if result None that means here is wrong place for password for i in range (0, LenHex - 15): #in my case poiner was 48510 if ( hexdata[i]=='0' and ( hexdata[i+1]=='3' or hexdata[i+1]=='4') ): if (hexdata[i+2]=='8' or hexdata[i+2]=='9' or hexdata[i+2]=='e' or hexdata[i+2]=='f'): print ('pointer', i, hexdata[i:i+20]) byte_translate( hexdata[i+2:i+18]) i=i+18 exit(0)

Viewing 0 reply threads
  • Вы должны войти в систему, чтобы ответить в этой теме.
Интepecнoe нa фopумe:
Авторизация
*
*
Регистрация
*
*
*
Генерация пароля
×