Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.12.2014, 17:45   #11
WinCoder
Заблокирован
 
Регистрация: 24.11.2014
Сообщений: 721
По умолчанию

Перевожу encrypt_6, как перевести это?

Код:
chash=(unsigned char*)hash+0x1c;  // тот самый buf40-0xac
phash=(unsigned char*)hash;
Объявление переменных
Код:
unsigned int hash[26];
unsigned char* chash;
unsigned char* phash;
WinCoder вне форума Ответить с цитированием
Старый 23.12.2014, 18:00   #12
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

Код:
unit encrypt_4;
//
//  Калькулятор nlock-кодов для модемов Huawei с новым алгоритмом v201
//  Автор - forth32
//  2014 год
//  Портировал Delphi - Slym
//  Ветка для вычисления кодов с индексом 3
//

interface
function Encrypt(const imei:string;version:integer):string;

implementation

uses SysUtils, HashMD5;

function Encrypt(const imei:string;version:integer):string;
var
  S:string;
  MD5:T4LongWordRecord;
  buf:PByteArray;
  i,r:integer;
  res:array[0..3] of byte;
begin
  if version=2 then
    S:='hwideadatacard'
  else
    S:='dfkdkfllekkodk';
  MD5:=HashValueStr(S);
  SetString(S,PChar(@MD5),SizeOf(MD5));
  s:=imei+s;
  MD5:=HashValueStr(s);

  buf:=PByteArray(@MD5);
  for i:=0 to 3 do
    res[i]:=(buf^[i] xor buf^[i+4]) xor (buf^[i+8] xor buf^[i+12]);

  r:=0;
  for i:=0 to 3 do
    r:=(r shl 8) or (res[i] and $ff);
  r:=(r or $2000000) and (not $fc000000);
  result:=IntToStr(r);
end;

end.
Вложения
Тип файла: zip HashMD5.zip (2.5 Кб, 58 просмотров)
Не стесняемся, плюсуем!

Последний раз редактировалось Slym; 23.12.2014 в 18:24. Причина: перезалил HashMD5.pas
Slym вне форума Ответить с цитированием
Старый 23.12.2014, 18:14   #13
WinCoder
Заблокирован
 
Регистрация: 24.11.2014
Сообщений: 721
По умолчанию

Slym encrypt_4 считает не верно.

Последний раз редактировалось WinCoder; 23.12.2014 в 19:35.
WinCoder вне форума Ответить с цитированием
Старый 23.12.2014, 19:52   #14
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

Там не просто так дан rehash4 и всякие извраты с массивом от rehash4 . Encrypt_4 использует их. чего не вижу в вашем переводе.

Encode_4 перевел, лежит на рабочем компе.. завтра закину.
Человек_Борща вне форума Ответить с цитированием
Старый 23.12.2014, 19:59   #15
WinCoder
Заблокирован
 
Регистрация: 24.11.2014
Сообщений: 721
По умолчанию

Человек_Борща Ждём. Хотя я уже начинаю сомневаться, а нужен ли перевод. Это ассемблер, а не оригинальная функция хеширования. Достать бы оригинальную...
WinCoder вне форума Ответить с цитированием
Старый 23.12.2014, 20:08   #16
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

Цитата:
Сообщение от Человек_Борща Посмотреть сообщение
Там не просто так дан rehash4 и всякие извраты с массивом от rehash4 . Encrypt_4 использует их. чего не вижу в вашем переводе.

Encode_4 перевел, лежит на рабочем компе.. завтра закину.
Там MD5, я его перелопачивать не стал а взял из левого заведомо рабочего модуля

хм у меня верно считает... давай твой imei

3 ветка
357239005314800 calc201- 41028861
356239005314800 calc2- 57050088

Код:
unit encrypt_5_v2;
//
//  Калькулятор nlock-кодов для модемов Huawei с новым алгоритмом v2
//  Автор - forth32
//  2014 год
//  Портировал Delphi - Slym
//  Ветка для вычисления кодов с индексом 3
//
interface

function Encrypt(const imei:string;version:integer):string;

implementation

function Encrypt(const imei:string;version:integer):string;
const
  PW_table:string = '5739146280098765432112345678905\000';
var
  buf:string;
  i:integer;
  b1,b2:byte;
begin
  result:=StringOfChar('0',8);
  buf:=imei+'Z';
  for i:=1 to length(result) do
  begin
    b2:=(byte(buf[i]) xor byte(buf[i+8])) and $ff;
    b1:=b2 and $0f;
    result[i]:=PW_table[(b2 shr 4)+b1+1];
  end;
  if result[1]='0' then
  begin
    i:=2;
    while i<=8 do
    begin
      if result[i]<>'0' then
        break;
      inc(i)
    end;
    result[1]:=Chr(i-1+ord('0'));
  end;
end;

end.
Не стесняемся, плюсуем!

Последний раз редактировалось Slym; 23.12.2014 в 20:11.
Slym вне форума Ответить с цитированием
Старый 23.12.2014, 22:09   #17
WinCoder
Заблокирован
 
Регистрация: 24.11.2014
Сообщений: 721
По умолчанию

Так это код ветки Encrypt_5, а переодресация IMEY 357239005314800 идёт на Encrypt_4. Какой индекс выдаёт proc_index?
WinCoder вне форума Ответить с цитированием
Старый 23.12.2014, 22:35   #18
Slym
Участник клуба
 
Регистрация: 07.12.2011
Сообщений: 1,025
По умолчанию

Выкладываю весь проект
у меня считает правильно
Вложения
Тип файла: zip huaweicalc_d7.zip (11.1 Кб, 78 просмотров)
Не стесняемся, плюсуем!
Slym вне форума Ответить с цитированием
Старый 24.12.2014, 00:38   #19
WinCoder
Заблокирован
 
Регистрация: 24.11.2014
Сообщений: 721
По умолчанию

Смотри не совпадения с оригинальной программой
Цитата:
Ветка 0
352239005314800 calc201- 29081473
355239005314800 calc2- 48821554
Ветка 1
354239005314800 calc201- 95001296
354238005314800 calc201- 29181796
353239005314800 calc2- 92430611
Ветка 3
357239005314800 calc201- 41028861
356239005314800 calc2- 57050088
Ветка 4
354239005314800 calc2- 66469054

Результаты со скомпилированного СИ

Ветка 0
352239005314800 calc201- 29081473
355239005314800 calc2- 38560202 // НЕ СОВПАЛО
Ветка 1
354239005314800 calc201- 95001296
354238005314800 calc201- 29181796 // этот не верен, но совпадает первый. Убери
с кода чтоб не путаться
353239005314800 calc2- 66469054 // НЕ СОВПАЛО
Ветка 3
357239005314800 calc201- 41028861
356239005314800 calc2- 93534458 //НЕ СОВПАЛО
Ветка 4
354239005314800 calc2- 66469054
WinCoder вне форума Ответить с цитированием
Старый 24.12.2014, 00:41   #20
Человек_Борща
Старожил
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Сообщений: 11,442
По умолчанию

все склонен дyмать что там своя магия. мд5 используется явно от ssl.
Человек_Борща вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Algo 2 -=$mile_Cr@Ft=- Паскаль, Turbo Pascal, PascalABC.NET 0 28.11.2008 15:59
calculator II leonw Общие вопросы Delphi 3 08.08.2008 11:09