eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 1 марта!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: alexsey007, KDA (+2 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Вопросы новичков —› Помогите решить уравнение расчета проверки пароля
Посл.ответ Сообщение

Ранг: 2.0 (гость)
Статус: Участник

Создано: 6 апреля 2015 08:15 New!
Цитата · Личное сообщение · #1

Добрый день! Ситуация такова имеется ЧПУ станок система ITNC530 последнее время выползло окно с требованием ввести пароль так как прошло 2000 часов его работы, и надо провести его сервисное обслуживание производителем . В связи с санкциями немцы, а они производители станка больно то не хотят с нами общаться. Вообщем решил я попробовать сам добыть пароль сделал бекап системы нашел как я думаю те файлы которые как раз отвечают за проверку пароля . Пароль генерируется по ID ключа он есть. Ну вот дальше привожу код Python 2.7.
Code:
  1. def setInspektionKey(self, ID, PW): 
  2.         result = False 
  3.         ID = int(ID) 
  4.         myID = ID 
  5.         listAttr = [] 
  6.         dictAttr = {} 
  7.  
  8.         dictAttr['Name'] = "id" 
  9.         dictAttr['Value'] = str(ID) 
  10.         listAttr.append(dictAttr) 
  11.  
  12.         dictAttr = {} 
  13.  
  14.         dictAttr['Name'] = SMARTPW 
  15.         dictAttr['Value'] = str(PW) 
  16.         listAttr.append(dictAttr) 
  17.  
  18.         #pwInternal = (ID ^(((ID%7)+1)*0x06000000-1))+100000000 
  19.         #if(pwInternal == int(PW) and (pwInternal > 100000000 or pwInternal < 999999999)): 
  20.         self.calculateiKey() 
  21.         if( int(PW) == int(self.m_iKeyPw) ): 
  22.             result = True 
  23.             'ID und PW in Konfigdatei schreiben' 
  24.             node = self.dmgXMLPasre.getNode(IKEYS) 
  25.             'sichern stelle, ob SmartID in Konfig vorhanden ist' 
  26.             foundID = False 
  27.  
  28.             size = len(self.m_SmartKeyList) 
  29.             for i in range(size): 
  30.                 SmartKeyData = self.m_SmartKeyList[i] 
  31.                 if(SmartKeyData.m_ID != None and (int(SmartKeyData.m_ID) == int (myID))): 
  32.                     foundID = True 
  33.                     break 
  34.             if(foundID): 
  35.                 nodeLast, nodeNext = self.dmgXMLPasre.getLastAndNextNode(SMARTKEY, None, str(myID)) 
  36.                 self.dmgXMLPasre.repleaseAttribut(node, nodeLast,SMARTKEY, listAttr) 
  37.             else: 
  38.                 self.dmgXMLPasre.addAttribut(node, SMARTKEY,listAttr) 
  39.             self.readSmartKeyConfig() 
  40.         return result 
  41.  
  42.     def getIDAndPW(self): 
  43.         SmartID = None 
  44.         SmartPw = None 
  45.         result, pw = self.isInspektionKeyValid() 
  46.         if(result and pw!=None and self.smartKeyID > 0): 
  47.             SmartID = self.smartKeyID 
  48.             SmartPw = pw 
  49.         elif(result and pw==13 and self.smartKeyID > 0): 
  50.             'ServiceKey' 
  51.             SmartID = self.smartKeyID 
  52.             SmartPw = pw 
  53.         elif(self.smartKeyID > 0 and ((self.smartKeyID > 10000000) or (self.smartKeyID < 139999999))): 
  54.             SmartID = self.smartKeyID 
  55.         else: 
  56.             size = len(self.m_SmartKeyList) - 1 
  57.             if(size >= 0): 
  58.                 SmartKeyData = self.m_SmartKeyList[size] 
  59.                 SmartID = SmartKeyData.m_ID 
  60.         return(SmartID, SmartPw) 
  61.  
  62.     def isInspektionKeyValid(self): 
  63.         result = False 
  64.         pw = None 
  65.         'aus Kofig.Datei die eingetragene Password und die zugehГ¶rige ID ermitteln' 
  66.         size = len(self.m_SmartKeyList) 
  67.         for i in range(size): 
  68.             SmartKeyData = self.m_SmartKeyList[i] 
  69.             if(int(SmartKeyData.m_ID) == self.smartKeyID): 
  70.                 self.calculateiKey() 
  71.                 pw = SmartKeyData.m_PW 
  72.                 if( int(pw) == int (self.m_iKeyPw) ): 
  73.                     result = True 
  74.                 break 
  75.  
  76.         if(not result): 
  77.             skey = str(self.smartKeyID) 
  78.             index1 = int(string.find(skey, "1", 0)) 
  79.             index2 = int(string.find(skey, "3", 0)) 
  80.  
  81.             if(SUMULATE_ITNC == 0 and Simulate == 0): 
  82.                 value = (self.smartKeyID ^(((self.smartKeyID%7)+1)*0x06000000-1))+100000000 
  83.                 if((value > 100000000 or value < 999999999)): 
  84.  
  85.                     if(index1 == 0 and index2 == 1): 
  86.                         result = True 
  87.                         pw = 13 
  88.                     else: 
  89.                         pw = value 
  90.             else: 
  91.                 if(index1 == 0 and index2 == 1): 
  92.                     result = True 
  93.                     pw = 13 
  94.  
  95.         return (result, pw) 
  96.  
  97.     def calculateiKey(self): 
  98.         if(self.m_BTIndex > 0 and self.smartKeyID > 0): 
  99.             value1 = (self.smartKeyID ^(((self.smartKeyID%7)+1)*0x06000000-1))+100000000 
  100.             value2 = (65535 ^( self.m_BTIndex*(((self.m_BTIndex%7)+1) + 1000))) * 10000000 
  101.             self.m_iKeyPw = value1 + value2 
  102.         else: 
  103.             self.m_iKeyPw = 0 
  104.  
  105.  
  106.     def CallBackSmartKeyID(self, dict): 
  107.       if dict != None: 
  108.           strText = dict[DG_PIT_Unicat_Nummer] 
  109.           if(len(strText) > 0 and int(strText) > 0): 
  110.               self.m_SmartKeyActive = True 
  111.               self.smartKeyID = int(strText) 
  112.               self.m_MachineCheckView.updateStateOkButton() 
  113.  
  114.     def CallBackKeySwitchID(self, dict): 
  115.       if dict != None: 
  116.           strText = dict["BG_AKTIVE_BA"] 
  117.           if(len(strText) > 0): 
  118.               if(int(strText) == 5 and not self.m_SmartKeyActive): 
  119.                   self.smartKeyID = 130000161 
  120.                   self.m_MachineCheckView.updateStateOkButton() 
  121.               elif(int(strText) != 5 and not self.m_SmartKeyActive): 
  122.                   self.smartKeyID = 0 
  123.                   self.m_MachineCheckView.updateStateOkButton()


Вот вставил участок кода который как я думаю отвечает за проверку пароля, теперь собственно вопросы которые меня пока ставят в тупик и заставили обратится к Вам

Code:
  1. def calculateiKey(self): 
  2.         if(self.m_BTIndex > 0 and self.smartKeyID > 0): 
  3.             value1 = (self.smartKeyID ^(((self.smartKeyID%7)+1)*0x06000000-1))+100000000 
  4.             value2 = (65535 ^( self.m_BTIndex*(((self.m_BTIndex%7)+1) + 1000))) * 10000000 
  5.             self.m_iKeyPw = value1 + value2 
  6.         else: 
  7.             self.m_iKeyPw = 0


Вот эта функция self.smartKeyID как я понял равна self.smartKeyID = 130000161

А вот ,что это такое self.m_BTIndex это ID моего ключа?

И еще я не знаю как решить вот эту формулу

Code:
  1. value1 = (self.smartKeyID ^(((self.smartKeyID%7)+1)*0x06000000-1))+100000000
  2. value2 = (65535 ^( self.m_BTIndex*(((self.m_BTIndex%7)+1) + 1000))) * 10000000


Мне непонятен вот этот участок (self.smartKeyID ^(((self.smartKeyID%7)+1)*0x06000000

Ну вот вкратце объяснил проблему , да часы переводить на системе пробовал словил глюк, станок начал ощутимо притормаживать. Патчить не вариант .Да прикладываю полностью скрипт .

{ Атач доступен только для участников форума } - MachineCheck.py


Ранг: 222.1 (наставник)
Статус: Участник
radical

Создано: 6 апреля 2015 11:11 · Поправил: DimitarSerg New!
Цитата · Личное сообщение · #2

EvgenyAly пишет:
И еще я не знаю как решить вот эту формулу

Я так понял её и не надо "решать". Это в одну сторону расчёт m_iKeyPw (self.m_iKeyPw = value1 + value2), а проверка вроде isInspektionKeyValid.

Как я вижу - надо только свой smartKeyID и BTIndex в функу передать и получить готовый ключ.

Ранг: 39.2 (посетитель)
Статус: Участник

Создано: 6 апреля 2015 12:03 New!
Цитата · Личное сообщение · #3

m_BTIndex читается из файла basetechnology.xml, вот тут код:
Code:
  1.         
  2.        'get MaschineNummer Type'
  3.         txt = com.read("\TABLE\'" + PathTableMTYP + "'\NR\" + "1" + "\*")
  4.         if (txt != None):
  5.             self.m_MTypNummer = txt['VALUE']
  6.             strMTyp = ""
  7.             for iLen in range(4):
  8.                 strMTyp+=self.m_MTypNummer[iLen]
  9.             self.m_MTypNummer = strMTyp
  10.  
  11.         'find BT Index from BaseXMLFile'
  12.         sizeBaseFile = len(self.m_lstBaseTechnologie)
  13.         for x in range (sizeBaseFile):
  14.             myBasisTechnologie = self.m_lstBaseTechnologie[x]
  15.             if( int(myBasisTechnologie.m_MTYP) == int(self.m_MTypNummer)):
  16.                 self.m_BTIndex = int(myBasisTechnologie.m_BT)
  17.                 break;

По коду видно что сначала оно читает тип вашего станка с COM-порта, потом выбирает m_BTIndex согласно типу станка (m_MTypNummer).

Выше оно читает SmartKeyID с СОМ порта двумя способами.
Code:
  1.         'SmartKeyID abfragen'
  2.         if(Simulate == 0):
  3.             com.runReadHotlink(PLCAddress + DG_PIT_Unicat_Nummer, self.CallBackSmartKeyID)
  4.             com.runReadHotlink(PLCAddress + "BG_AKTIVE_BA", self.CallBackKeySwitchID)


Согласно коду внутри CallBackSmartKeyID и CallBackKeySwitchID выходит следующее:
Если первый способ чтения сработает, то smartKeyID будет равен прочитанному значению.
Если первый способ не сработает, то smartKeyID будет равен либо 130000161 либо 0.


Ранг: 1002.1 (!!!!)
Статус: Участник

Создано: 6 апреля 2015 12:21 New!
Цитата · Личное сообщение · #4

не может у ЧПУ станка стоят защита в каких то питон файлах
если что то и есть, то с ком порта итд куда отправляются какие то ответы на полученные хеши(результаты)
я так думаю

Добавлено спустя 1 минуту
все начало темы --> Link <--

| Сообщение посчитали полезным: dosprog


Ранг: 2.0 (гость)
Статус: Участник

Создано: 6 апреля 2015 13:00 New!
Цитата · Личное сообщение · #5

Ну да там тоже я запостил просто там по существу ничего пока не подсказали поэтому сюда обратился. Защита конечно не может ,в моем случае это не защита а надоедливый банер просящий бабла. На функцианальность никак не влияющий, но все же когда все оплачено и опять денег просят как то напрягает.

Добавлено спустя 3 минуты
DimitarSerg пишет:
Я так понял её и не надо "решать". Это в одну сторону расчёт m_iKeyPw (self.m_iKeyPw = value1 + value2), а проверка вроде isInspektionKeyValid.


а для чего это тогда

EvgenyAly пишет:
value1 = (self.smartKeyID ^(((self.smartKeyID%7)+1)*0x06000000-1))+100000000
value2 = (65535 ^( self.m_BTIndex*(((self.m_BTIndex%7)+1) + 1000))) * 10000000


Ранг: 1002.1 (!!!!)
Статус: Участник

Создано: 6 апреля 2015 14:29 New!
Цитата · Личное сообщение · #6

если бы это был баннер то его можно просто закоментить
а вы там намекаете что у вас оборудование начинает подглюкивать

Ранг: 379.3 (мудрец)
Статус: Участник

Создано: 6 апреля 2015 14:47 New!
Цитата · Личное сообщение · #7

а smartKeyID это случаем не номер ключа smartKey/eutron?

Ранг: 2.0 (гость)
Статус: Участник

Создано: 6 апреля 2015 15:05 New!
Цитата · Личное сообщение · #8

smartKeyID у меня есть официальный лицензионный, а вот с этим я не совсем понял self.m_BTIndex , а за разумные деньги никто не возьмется помочь ,просто станок не мой я по найму работаю за зарплату, а от репутации в карму себе на работе не отказался бы всеми необходимыми файлами обеспечил бы все есть

Ранг: 39.2 (посетитель)
Статус: Участник

Создано: 6 апреля 2015 15:25 New!
Цитата · Личное сообщение · #9

Берете файл basetechnology.xml, ищите там данные между двумя тэгами BASIS и MTYP. Где MTYP тип станка, а BASIS это ваш m_BTIndex, потом подставляете smartKeyID и m_BTIndex сюда (вместо 11111111 и 222222222):
Code:
  1. m_BTIndex = int(11111111)
  2. smartKeyID = int(222222222)
  3. value1 = (smartKeyID ^(((smartKeyID%7)+1)*0x06000000-1))+100000000
  4. value2 = (65535 ^( m_BTIndex*(((m_BTIndex%7)+1) + 1000))) * 10000000
  5. m_iKeyPw = value1 + value2
  6. print(m_iKeyPw)

Сохраняете как .py файл запускаете и наслаждаетесь результатом.

PS. Если не знаете какой у вас MTYP, то действуйте перебором.

| Сообщение посчитали полезным: EvgenyAly


Ранг: 375.8 (мудрец)
Статус: Участник
"Тибериумный реверсинг"

Создано: 6 апреля 2015 18:08 New!
Цитата · Личное сообщение · #10

iTNC 530 - это слово мне знакомо! Есть TNCremoNT, написанный на VB, который просто проапргрейдить, наплевав на визги проги о просьбе подключить донгл. See also: https://exelab.ru/f/index.php?action=vthread&forum=2&topic=22400

BfoX пишет:
а smartKeyID это случаем не номер ключа smartKey/eutron?

речь идет о DMG MORI SMARTkey https://ru.trademarks.directory/view/DE500000307501779/
эта хрень в стойку втыкается, наскольк я помню!

EvgenyAly
а как Вы вытаскивали файлы? Там, вроде, кроме основной папки расшаренной (которую через TNCremoNT можно юзать открыто), существуют две системные папки, которые запаролены.

| Сообщение посчитали полезным: EvgenyAly


Ранг: 2.0 (гость)
Статус: Участник

Создано: 6 апреля 2015 18:22 New!
Цитата · Личное сообщение · #11

Через tncremo и вытаскивал делал бекап системы на симулятор itnc530 и потом уже копипастом в папку для опытов, а пароль для доступа к plc 807667 есть еще для более глубокого проникновения

Ранг: 379.3 (мудрец)
Статус: Участник

Создано: 6 апреля 2015 18:38 New!
Цитата · Личное сообщение · #12

EvgenyAly

так все же эта хрень DMG MORI SMARTkey - донгл или нет?

Ранг: 375.8 (мудрец)
Статус: Участник
"Тибериумный реверсинг"

Создано: 6 апреля 2015 18:45 New!
Цитата · Личное сообщение · #13

EvgenyAly пишет:
Через tncremo и вытаскивал делал бекап системы на симулятор itnc530

Там жетский диск должен стоять, к нему доступа прямого нет?
Питоновские файлы в отдельной папке хранятся?
EvgenyAly пишет:
plc 807667

в смысле, коды?
Code:
  1. ==============================================================
  2. ; Номера кода:
  3. ; ==============================================================
  4. ; Машинный параметр, редактирующий ................. 95148
  5. ; Пользовательский список готовности машинных параметров.. 123
  6. ; Редактировать/контролировать программу PLC ..................... 807667
  7. ; Читать стек с
  8. танка с ЧПУ / СИСТЕМНЫЙ: разделите ............ 79513
  9. ; Компенсация смещения ....................... 75368 (ЦЕНТИБАР)
  10. ; Непредохранить PGM............................. 86357
  11. ; Сегмент памяти, 4 канавки .................688379
  12. ; Стереть полную оперативную память (M0..
  13. M999, B0.. B127).... 531210
  14. ; Записать системные данные FN17 .................... 555343
  15. ; Сбросить PLC, противостоят ......................... 857282 (часы)
  16. ; Сетевой монитор ........................... NETMONI
  17. ; Сетевая установка{устройство} ............................. NET123
  18. ; Монитор отключения устройства ............................... DSP123


там, кстати у этой чпшуной фирмы HEIDENHAIN (может путаю) должно существовать удаленное подключенние к стану (при условии корректной настройки сети с выходом в инет). Я читал в гайдах по станку с iTNC 530.

Добавлено спустя 1 минуту
BfoX пишет:
так все же эта хрень DMG MORI SMARTkey - донгл или нет?

я думаю нечто среднее между донглом и картой доступа, которой контролирует этот самый доступ к станку (оператор, наладчик, рабочий, инженер по обслуживанию).

Ранг: 2.0 (гость)
Статус: Участник

Создано: 6 апреля 2015 21:00 · Поправил: EvgenyAly New!
Цитата · Личное сообщение · #14

я тоже думаю что это нечто среднее там 4 уровня доступа переключаются кнопкой.доступ к hdd есть .да коды как наскрине подходят но не все

Ранг: 375.8 (мудрец)
Статус: Участник
"Тибериумный реверсинг"

Создано: 7 апреля 2015 17:40 New!
Цитата · Личное сообщение · #15

EvgenyAly пишет:
доступ к hdd есть

ко мне попал список файлов в PLC - ничего интересного, основные данные в SYS лежат?? а от него какой дер паролен?EvgenyAly пишет:
я тоже думаю что это нечто среднее там 4 уровня доступа переключаются кнопкой

я еще прочитал, что ось iTNC не запустится без данного девайса (DMG MORI SMARTkey), но это ж, наверняка, можно "вылечить"

сама ITNC - linux подобная ось ?!

Ранг: 2.0 (гость)
Статус: Участник

Создано: 7 апреля 2015 17:48 · Поправил: EvgenyAly New!
Цитата · Личное сообщение · #16

Операционая система там heros5 пишу по памяти могу в буквах ошибиться это Linux. Но есть эмулятор itnc530 под винду работает без ключа.Вот только не получается пока прогу на эмуляторе запустить.До sys пока не дошел ничего сказать не могу.

Ранг: 392.6 (мудрец)
Статус: Участник

Создано: 7 апреля 2015 18:34 · Поправил: dosprog New!
Цитата · Личное сообщение · #17

ELF_7719116 пишет:
сама ITNC - linux подобная ось ?!


Там такая ситуация.
Изначально они тулили интерфейс танка(iTNC) на самодельный сильно порезанный Linux.
Назвали они эту свою чудо-недо-линукс-систему HerOS (придумали..).
На этой системе запускается интерфейс станка - программа называется iTNC.
На 1Гб флеш-диске три логических диска - система, параметры, программы ЧПУ.
Логические диски отформатированы в FAT16.
В симуляторе, кстати, тоже три каталога - SYS, PLC, PRG - это типа они, те логические диски.

Поскольку привередливые юзеры не хотят чудо-HerOS, а желают вожделенную винду,
хейденхайнщики придумали, как запустить свою iTNC под этой самой виндой -
заделали самодельный эмулятор своего HerOS'a для винды, назвали его WinHerOS.

Теперь для любителей винды они предлагают вариант - не HerOS, а винда+WinHerOS.
СтОит, естественно, значительно дороже.

EvgenyAly пишет:
Вот только не получается пока прогу на эмуляторе запустить.


Всё типа как на станке, какие проблемы?..
Эта iTNC программа очень высокого уровня (в смысле верхнего),
разницы нету никакой - винда, HerOS, - в ней всё едино.


Ранг: 2.0 (гость)
Статус: Участник

Создано: 7 апреля 2015 20:11 New!
Цитата · Личное сообщение · #18

На станке она сама запускатся стала по прошествии 2000 часов И просить пароль , а на эмуляторе то есть на винде я не знаю как запустить попробую поковырять завтра может чего и выйдет.

Ранг: 392.6 (мудрец)
Статус: Участник

Создано: 7 апреля 2015 21:33 · Поправил: dosprog New!
Цитата · Личное сообщение · #19

reversecode пишет:
не может у ЧПУ станка стоят защита в каких то питон файлах
если что то и есть, то с ком порта итд куда отправляются какие то ответы на полученные хеши(результаты)
я так думаю


В данном случае может. Считается, что в тех питон-файлах никто не лазит. Хотя так считать действительно странно.
Впрочем, это .лядские художества заводчан фирмы DMG MORI, открывших для себя прелесть программирования на питоне. В двоичные файлы системы фирма Heidenhain им бы лазить так смело не позволила. Думаю, у них там действует лицензионное соглашение, где это оговорено.



EvgenyAly пишет:
а на эмуляторе то есть на винде я не знаю как запустить попробую поковырять завтра может чего и выйдет


Вот насчитанные пароли для известного SmartKeyID:
---Удален ошибочный вариант на Си с переполнением unsigned long ---


А вообще можно попробовать поковырять функцию в питоновском файле MachineCheck.py
и засунуть его обратно на станок, тогда пароль можно вводить любой понравившийся:
Code:
  1. def isInspektionKeyValid(self):
  2.     result = False     '<-------------------- тут поменять на' result=True 
  3.     pw = None
  4.     'aus Kofig.Datei die eingetragene Password und die zugeh..rige ID ermitteln'
  5.     size = len(self.m_SmartKeyList)
  6.     for i in range(size):
  7.         SmartKeyData = self.m_SmartKeyList[i]
  8.         if(int(SmartKeyData.m_ID) == self.smartKeyID):
  9.             self.calculateiKey()
  10.             pw = SmartKeyData.m_PW
  11.             if( int(pw) == int (self.m_iKeyPw) ):
  12.                 result=True
  13.             break
  14.  
  15.     if(not result):
  16.     ....................

Ранг: 2.0 (гость)
Статус: Участник

Создано: 8 апреля 2015 11:22 New!
Цитата · Личное сообщение · #20

Чем дальше тем интересней получилось два варианта расчета пароля ,станок пока все равно в работе к нему не подпускают просто для себя интересно какое решение верное вот это от dosprog:

Code:
  1. smartKeyID=30039887
  2.  
  3. m_BTIndex=101    m_iKeyPw=3314840880
  4. m_BTIndex=102    m_iKeyPw=844775472
  5. m_BTIndex=103    m_iKeyPw=2649677360
  6. m_BTIndex=104    m_iKeyPw=139611952
  7. m_BTIndex=105    m_iKeyPw=664579248
  8. m_BTIndex=106    m_iKeyPw=2479481136
  9. m_BTIndex=107    m_iKeyPw=4274383024
  10. m_BTIndex=108    m_iKeyPw=1754317616
  11. m_BTIndex=109    m_iKeyPw=3509219504
  12. m_BTIndex=110    m_iKeyPw=949154096
  13. m_BTIndex=111    m_iKeyPw=2664055984
  14. m_BTIndex=112    m_iKeyPw=3609023280
  15. m_BTIndex=113    m_iKeyPw=1058957872
  16. m_BTIndex=114    m_iKeyPw=2783859760
  17. m_BTIndex=115    m_iKeyPw=193794352
  18. m_BTIndex=116    m_iKeyPw=1878696240
  19. m_BTIndex=117    m_iKeyPw=3543598128
  20. m_BTIndex=118    m_iKeyPw=893532720
  21. m_BTIndex=119    m_iKeyPw=2258500016
  22. m_BTIndex=120    m_iKeyPw=3933401904
  23. m_BTIndex=121    m_iKeyPw=1293336496
  24. m_BTIndex=122    m_iKeyPw=2928238384
  25. m_BTIndex=123    m_iKeyPw=248172976
  26. m_BTIndex=124    m_iKeyPw=1843074864
  27. m_BTIndex=125    m_iKeyPw=3417976752
  28. m_BTIndex=126    m_iKeyPw=907976752
  29. m_BTIndex=127    m_iKeyPw=2512878640
  30. m_BTIndex=128    m_iKeyPw=4097780528
  31. m_BTIndex=129    m_iKeyPw=1367715120
  32. m_BTIndex=201    m_iKeyPw=1827137584
  33. m_BTIndex=202    m_iKeyPw=2632039472
  34. m_BTIndex=203    m_iKeyPw=447072176
  35. m_BTIndex=204    m_iKeyPw=1281974064
  36. m_BTIndex=205    m_iKeyPw=2096875952
  37. m_BTIndex=206    m_iKeyPw=2891777840
  38. m_BTIndex=207    m_iKeyPw=3666679728
  39. m_BTIndex=208    m_iKeyPw=126614320
  40. m_BTIndex=209    m_iKeyPw=861516208
  41. m_BTIndex=210    m_iKeyPw=3391516208
  42. m_BTIndex=211    m_iKeyPw=4156418096
  43. m_BTIndex=212    m_iKeyPw=606352688
  44. m_BTIndex=213    m_iKeyPw=1331254576
  45. m_BTIndex=214    m_iKeyPw=2036156464
  46. m_BTIndex=215    m_iKeyPw=2721058352
  47. m_BTIndex=216    m_iKeyPw=3385960240
  48. m_BTIndex=217    m_iKeyPw=2040992944
  49. m_BTIndex=218    m_iKeyPw=2735894832
  50. m_BTIndex=219    m_iKeyPw=3410796720
  51. m_BTIndex=220    m_iKeyPw=4065698608
  52. m_BTIndex=221    m_iKeyPw=405633200
  53. m_BTIndex=222    m_iKeyPw=1020535088
  54. m_BTIndex=223    m_iKeyPw=1615436976
  55. m_BTIndex=301    m_iKeyPw=3769557680
  56. m_BTIndex=501    m_iKeyPw=2629110960


Или вот это от bbuk :

Code:
  1. BTIndex: 101; iKeyPw: 952502613296
  2. BTIndex: 102; iKeyPw: 941442613296
  3. BTIndex: 103; iKeyPw: 930362613296
  4. BTIndex: 104; iKeyPw: 919262613296
  5. BTIndex: 105; iKeyPw: 915492613296
  6. BTIndex: 106; iKeyPw: 904422613296
  7. BTIndex: 107; iKeyPw: 893332613296
  8. BTIndex: 108; iKeyPw: 882222613296
  9. BTIndex: 109; iKeyPw: 871092613296
  10. BTIndex: 110; iKeyPw: 859942613296
  11. BTIndex: 111; iKeyPw: 848772613296
  12. BTIndex: 112; iKeyPw: 845422613296
  13. BTIndex: 113; iKeyPw: 834282613296
  14. BTIndex: 114; iKeyPw: 823122613296
  15. BTIndex: 115; iKeyPw: 811942613296
  16. BTIndex: 116; iKeyPw: 800742613296
  17. BTIndex: 117; iKeyPw: 789522613296
  18. BTIndex: 118; iKeyPw: 778282613296
  19. BTIndex: 119; iKeyPw: 775352613296
  20. BTIndex: 120; iKeyPw: 764142613296
  21. BTIndex: 121; iKeyPw: 752912613296
  22. BTIndex: 122; iKeyPw: 741662613296
  23. BTIndex: 123; iKeyPw: 730392613296
  24. BTIndex: 124; iKeyPw: 719102613296
  25. BTIndex: 125; iKeyPw: 707792613296
  26. BTIndex: 126; iKeyPw: 705282613296
  27. BTIndex: 127; iKeyPw: 694002613296
  28. BTIndex: 128; iKeyPw: 682702613296
  29. BTIndex: 129; iKeyPw: 671382613296
  30. BTIndex: 201; iKeyPw: 2565922613296
  31. BTIndex: 202; iKeyPw: 2553842613296
  32. BTIndex: 203; iKeyPw: 2555952613296
  33. BTIndex: 204; iKeyPw: 2543902613296
  34. BTIndex: 205; iKeyPw: 2531832613296
  35. BTIndex: 206; iKeyPw: 2519742613296
  36. BTIndex: 207; iKeyPw: 2507632613296
  37. BTIndex: 208; iKeyPw: 2495502613296
  38. BTIndex: 209; iKeyPw: 2483352613296
  39. BTIndex: 210; iKeyPw: 2485882613296
  40. BTIndex: 211; iKeyPw: 2473762613296
  41. BTIndex: 212; iKeyPw: 2461622613296
  42. BTIndex: 213; iKeyPw: 2449462613296
  43. BTIndex: 214; iKeyPw: 2437282613296
  44. BTIndex: 215; iKeyPw: 2425082613296
  45. BTIndex: 216; iKeyPw: 2412862613296
  46. BTIndex: 217; iKeyPw: 2415812613296
  47. BTIndex: 218; iKeyPw: 2403622613296
  48. BTIndex: 219; iKeyPw: 2391412613296
  49. BTIndex: 220; iKeyPw: 2379182613296
  50. BTIndex: 221; iKeyPw: 2366932613296
  51. BTIndex: 222; iKeyPw: 2354662613296
  52. BTIndex: 223; iKeyPw: 2342372613296
  53. BTIndex: 301; iKeyPw: 2885692613296
  54. BTIndex: 501; iKeyPw: 4795812613296


Да и вот этот скрипт от dosprog :

Code:
  1. #include <io.h>
  2. main(){
  3. unsigned long i,value1,value2,m_iKeyPw,smartKeyID=30039887;
  4. unsigned long m_BTIndex[]={
  5.  101,102,103,104,105,106,107,108,109,110,111
  6. ,112,113,114,115,116,117,118,119,120,121,122
  7. ,123,124,125,126,127,128,129,201,202,203,204
  8. ,205,206,207,208,209,210,211,212,213,214,215
  9. ,216,217,218,219,220,221,222,223,301,501};
  10. printf("For smartKeyID = %lu\n",smartKeyID);
  11. for(i=0;i<sizeof(m_BTIndex)/sizeof(unsigned long);i++){
  12. value1=(smartKeyID^(((smartKeyID%7)+1)*0x06000000-1))+100000000;
  13. value2=(65535^(m_BTIndex[i]*(((m_BTIndex[i]%7)+1)+1000)))*10000000;
  14. m_iKeyPw=value1 + value2;
  15. printf("\nm_BTIndex=%lu m_iKeyPw = %lu" ,m_BTIndex[i] ,m_iKeyPw);
  16. }}


не получилось запустить пишет ошибка синтаксиса пробовал и на питоне Python27 и Python34

просто результаты разные пробовать все подряд или еще порассуждать


Ранг: 516.5 (!)
Статус: Участник
Победитель турнира 2010

Создано: 8 апреля 2015 11:32 New!
Цитата · Личное сообщение · #21

EvgenyAly пишет:
не получилось запустить пишет ошибка синтаксиса пробовал и на питоне Python27 и Python34


Не удивительно, что программа на С не стартует на питоне.

Ранг: 392.6 (мудрец)
Статус: Участник

Создано: 8 апреля 2015 11:54 · Поправил: dosprog New!
Цитата · Личное сообщение · #22

EvgenyAly пишет:
просто результаты разные


А я вчера перечитал ветку на reverse4you, увидел, что там дополнительная информация,
проверил пару тамошних результатов от OKOB'а - у меня вышли другие. Не знаю, чьи верные.
Потому и выложил свой вариант. Проверяйте. Программа на Си.


--Добавлено--
EvgenyAly пишет:
... пробовать все подряд или еще порассуждать

Погляжу ещё в чём там дело. В Python2.7 действительно результаты, совпадающие с результатами OKOB'а.

--Добавлено2--
Различные результаты на Си и на Питоне2.7 получаются при вычислении value2:
value2 = (65535 ^(m_BTIndex*(((m_BTIndex%7)+1) + 1000))) <-----тут ещё результаты совпадают
value2= value2*10000000 <---------------------------а тут происходит умножение с переполнением 32-бит unsigned long в Си,
в Питоне же результат расширяется автоматически до 64 бит, поэтому оказывается верным.

*********************************************************************************
ИТАК, вариант от OKOB'а на Питоне верный, мой вариант ошибочный. Потру-ка я предыдущий пост, чтобы не морочить голову...
*********************************************************************************


--Добавлено3--
Просто из принципа - исправленный вариант на Си, но костыльно, через использование double:
Code:
  1. #include <io.h>
  2. main(){
  3. unsigned long t,i,value1,value2,m_iKeyPw,smartKeyID=30039887;
  4. double        dblpw;
  5. unsigned long m_BTIndex[]={
  6.  101,102,103,104,105,106,107,108,109,110,111
  7. ,112,113,114,115,116,117,118,119,120,121,122
  8. ,123,124,125,126,127,128,129,201,202,203,204
  9. ,205,206,207,208,209,210,211,212,213,214,215
  10. ,216,217,218,219,220,221,222,223,301,501};
  11. printf("\nFor smartKeyID = %lu\n",smartKeyID);
  12. for(i=0;i<sizeof(m_BTIndex)/sizeof(unsigned long);i++){
  13. value1=(smartKeyID^(((smartKeyID%7)+1)*0x06000000-1))+100000000;
  14. value2=(65535^(m_BTIndex[i]*(((m_BTIndex[i]%7)+1)+1000))) *10000000;
  15. m_iKeyPw=value1 + value2;
  16. t     =(65535^(m_BTIndex[i]*(((m_BTIndex[i]%7)+1)+1000)));
  17. dblpw = value1+ (double)t*10000000;
  18. printf("\nm_BTIndex=%4lu m_iKeyPw = %0.0f" ,m_BTIndex[i] ,dblpw);
  19. }getch();}
Code:
  1. For smartKeyID = 30039887
  2.  
  3. m_BTIndex= 101  m_iKeyPw = 952502613296
  4. m_BTIndex= 102  m_iKeyPw = 941442613296
  5. m_BTIndex= 103  m_iKeyPw = 930362613296
  6. m_BTIndex= 104  m_iKeyPw = 919262613296
  7. m_BTIndex= 105  m_iKeyPw = 915492613296
  8. m_BTIndex= 106  m_iKeyPw = 904422613296
  9. m_BTIndex= 107  m_iKeyPw = 893332613296
  10. m_BTIndex= 108  m_iKeyPw = 882222613296
  11. m_BTIndex= 109  m_iKeyPw = 871092613296
  12. m_BTIndex= 110  m_iKeyPw = 859942613296
  13. m_BTIndex= 111  m_iKeyPw = 848772613296
  14. m_BTIndex= 112  m_iKeyPw = 845422613296
  15. m_BTIndex= 113  m_iKeyPw = 834282613296
  16. m_BTIndex= 114  m_iKeyPw = 823122613296
  17. m_BTIndex= 115  m_iKeyPw = 811942613296
  18. m_BTIndex= 116  m_iKeyPw = 800742613296
  19. m_BTIndex= 117  m_iKeyPw = 789522613296
  20. m_BTIndex= 118  m_iKeyPw = 778282613296
  21. m_BTIndex= 119  m_iKeyPw = 775352613296
  22. m_BTIndex= 120  m_iKeyPw = 764142613296
  23. m_BTIndex= 121  m_iKeyPw = 752912613296
  24. m_BTIndex= 122  m_iKeyPw = 741662613296
  25. m_BTIndex= 123  m_iKeyPw = 730392613296
  26. m_BTIndex= 124  m_iKeyPw = 719102613296
  27. m_BTIndex= 125  m_iKeyPw = 707792613296
  28. m_BTIndex= 126  m_iKeyPw = 705282613296
  29. m_BTIndex= 127  m_iKeyPw = 694002613296
  30. m_BTIndex= 128  m_iKeyPw = 682702613296
  31. m_BTIndex= 129  m_iKeyPw = 671382613296
  32. m_BTIndex= 201  m_iKeyPw = 2565922613296
  33. m_BTIndex= 202  m_iKeyPw = 2553842613296
  34. m_BTIndex= 203  m_iKeyPw = 2555952613296
  35. m_BTIndex= 204  m_iKeyPw = 2543902613296
  36. m_BTIndex= 205  m_iKeyPw = 2531832613296
  37. m_BTIndex= 206  m_iKeyPw = 2519742613296
  38. m_BTIndex= 207  m_iKeyPw = 2507632613296
  39. m_BTIndex= 208  m_iKeyPw = 2495502613296
  40. m_BTIndex= 209  m_iKeyPw = 2483352613296
  41. m_BTIndex= 210  m_iKeyPw = 2485882613296
  42. m_BTIndex= 211  m_iKeyPw = 2473762613296
  43. m_BTIndex= 212  m_iKeyPw = 2461622613296
  44. m_BTIndex= 213  m_iKeyPw = 2449462613296
  45. m_BTIndex= 214  m_iKeyPw = 2437282613296
  46. m_BTIndex= 215  m_iKeyPw = 2425082613296
  47. m_BTIndex= 216  m_iKeyPw = 2412862613296
  48. m_BTIndex= 217  m_iKeyPw = 2415812613296
  49. m_BTIndex= 218  m_iKeyPw = 2403622613296
  50. m_BTIndex= 219  m_iKeyPw = 2391412613296
  51. m_BTIndex= 220  m_iKeyPw = 2379182613296
  52. m_BTIndex= 221  m_iKeyPw = 2366932613296
  53. m_BTIndex= 222  m_iKeyPw = 2354662613296
  54. m_BTIndex= 223  m_iKeyPw = 2342372613296
  55. m_BTIndex= 301  m_iKeyPw = 2885692613296
  56. m_BTIndex= 501  m_iKeyPw = 4795812613296

Результаты совпадают с питоновской процедурой.


Ранг: 2.0 (гость)
Статус: Участник

Создано: 9 апреля 2015 10:09 New!
Цитата · Личное сообщение · #23

Вообщем попробовал я и наткнулся на проблему длина пароля 9 символов больше вводить не дает.

Ранг: 392.6 (мудрец)
Статус: Участник

Создано: 9 апреля 2015 13:27 · Поправил: 3 июля 2016 01:29 dosprog New!
Цитата · Личное сообщение · #24

Попробуйте запихнуть на станок поправленный файл MachineCheck.py.
Вот инсталляшка для этого, переделанная из фирменной от DMG.
Там и старый и новый файлы, старый в ней сохранён как MachineCheck_OLD.py .


--Добавлено--
3 июля 2015 г.
)) -- и ни ответа, ни привета..

 eXeL@B —› Вопросы новичков —› Помогите решить уравнение расчета проверки пароля

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS