Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 22.12.2014, 09:56   #1
WinCoder
Заблокирован
 
Регистрация: 24.11.2014
Сообщений: 721
Репутация: 76
По умолчанию Huawei Unlock Code Calculator New Algo And 201 Algo

Приветствую. Бродил ночью по интернету и набрёл на интересную вещь. Один добрый человек вывалил в интернет алгоритмы подсчёта кодов разлочки новых модемов Huawei. Вещь лично для меня крайне нужная, и полезная, ибо до недавнего времени приходилось искать онлайн сервисы, некоторые из которых ещё и просили денег за код разлочки. Проблема в том, что исходники на СИ, в котором я не больно силён. Вопрос. Есть ли желающие взяться перевести код на делфи? Естественно на добровольных началах. Думаю данный код будет полезен не только мне.
P.S. МД, будьте любезны исправьте опечатку в топике. Unlock.
Вложения
Тип файла: rar Архив WinRAR.rar (20.7 Кб, 172 просмотров)

Последний раз редактировалось WinCoder; 22.12.2014 в 10:27.
WinCoder вне форума   Ответить с цитированием
Старый 22.12.2014, 10:11   #2
Человек_Борща
Модератор
Заслуженный модератор
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Адрес: Республика Беларусь, г. Минск
Сообщений: 11,447
Репутация: 2769
По умолчанию

Цитата:
Вопрос. Есть ли желающие взяться перевести код на делфи?
Если кода много, то не больно то и много этих желающих будет. Скучного времени не много.

Прилепи сорцы к посту, посмотрим

Так-то я могу переводить, не за спасибо естественно.
Человек_Борща вне форума   Ответить с цитированием
Старый 22.12.2014, 10:24   #3
WinCoder
Заблокирован
 
Регистрация: 24.11.2014
Сообщений: 721
Репутация: 76
По умолчанию

Цитата:
Так-то я могу переводить, не за спасибо естественно.
Речь как раз и шла о максимум спасибо. Расчёт на то, что возьмётся тот, кому это тоже нужно.
WinCoder вне форума   Ответить с цитированием
Старый 22.12.2014, 10:44   #4
Человек_Борща
Модератор
Заслуженный модератор
 
Аватар для Человек_Борща
 
Регистрация: 30.12.2009
Адрес: Республика Беларусь, г. Минск
Сообщений: 11,447
Репутация: 2769
По умолчанию

Архив в архиве внутри архива это круто...

Проект на QT...ни разу не C, то C++. Откройте qtcalc.pro и соберите проект. Если вам бинарник нужен.

Опишите как работает, дайте IMEI и что должно получится на выходе.

Последний раз редактировалось Человек_Борща; 22.12.2014 в 10:53.
Человек_Борща вне форума   Ответить с цитированием
Старый 22.12.2014, 17:44   #5
WinCoder
Заблокирован
 
Регистрация: 24.11.2014
Сообщений: 721
Репутация: 76
По умолчанию

Цитата:
Архив в архиве внутри архива это круто...
Ну я же не виноват, что на форум нельзя заливать Linux архивы. А перепаковывать было лень. Запихал, как было
Цитата:
Если вам бинарник нужен
Бинарник и так имеется. Нужен перевод на паскаль. Отвечаю на возможный вопрос, а нафига, если есть бинар? Хочу сделать из калькулятора непосредственно анлокер.
Цитата:
Опишите как работает, дайте IMEI и что должно получится на выходе.
Лучше я дам бинар. Запустите, введёте любой 15 значный, увидете результат.
http://rghost.ru/59891461
P.S. Автор кода сказал, что это тупо реверс в ассемблер, и перевод на СИ. Большая часть кода, это скорее всего подсчёт MD5. Подсчёт Old Algo (encrypt_v1 в коде) известен, поэтому его код прост. Гораздо более интересен New Algo (calc2) и Algo 201 (Calc201)
WinCoder вне форума   Ответить с цитированием
Старый 23.12.2014, 13:45   #6
Slym
Профессионал
 
Регистрация: 07.12.2011
Адрес: Siberia
Сообщений: 1,021
Репутация: 759
По умолчанию

чет у меня даже proc_index в диапазон не входит...
calc201('352239005314800', res);

Код:

function proc_index(const imei:string;version:integer):integer;
var
  i,csum,c1,ch,index:integer;
  cx:Int64;
begin
  csum:=0; // хеш IMEI
  for i:=1 to length(imei) do
  begin
    ch:=Ord(imei[i]);
    if version=201 then
      csum:=csum+((ch+i)*ch)*(ch+$139)
    else
      csum:=csum+((ch+i)*i);
  end;

  cx:=(-Int64($6db6db6d)*Int64(csum)) shr 32;
  c1:=((integer(cx)+csum)shr 2)-(csum shr 31);
  index:=csum-((c1 shl 3)-c1);
  result:=index;
end;

Все нашел... ох уж эти приведения типов...
__________________
Не стесняемся, плюсуем!

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

Slym Благодарю. Остальной код поможете перевести? Хотя бы один Encrupt_4

Последний раз редактировалось WinCoder; 23.12.2014 в 15:47.
WinCoder вне форума   Ответить с цитированием
Старый 23.12.2014, 16:18   #8
Slym
Профессионал
 
Регистрация: 07.12.2011
Адрес: Siberia
Сообщений: 1,021
Репутация: 759
По умолчанию

Код:

unit encrypt_1;

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

interface

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

implementation

function Encrypt(const imei:string;version:integer):string;
type
  PBuf=^TBuf;
  TBuf=array[0..15] of cardinal;
const
  srcbuf_201:TBuf = (
    $06E9C2A,$3CA2B3C,$01080DC,$30855EE,$3D3283A,$2F4F85A,$1F8808E,$3147D10,
    $34BBBB5,$29EEADD,$2318616,$50F3ADC,$0D11F38,$2123BD2,$4276C86,$355CAAD);
  srcbuf_2:TBuf = (
    $01966A9,$021058F,$02AEDA9,$037CE91,$0488C9F,$05E507D,$07A9BE5,$09F644B,
    $0CF35A1,$10D5F55,$15E2F25,$1C73D6B,$24FCFDD,$3015B47,$3E829E9,$5143685);
var
  srcbuf:PBuf;
  i:integer;
  sum,r1,r2,r3:Cardinal;
  cx:Int64;
  zvar:array[0..7] of integer;
begin
  if version = 201 then
    srcbuf:=@srcbuf_201
  else
    srcbuf:=@srcbuf_2;

  sum:=0;
  for i:=1 to Length(imei) do
    sum:=sum+ord(imei[i])*srcbuf^[i-1];

  for i:=low(zvar) to high(zvar) do
  begin
    r3:=(sum shr (i*4)) and $0f;
    cx:=int64($CCCCCCCD)*int64(r3);
    r2:=(cx shr 32);
    r2:=r2 shr 3;
    r1:=r2 shl 3;
    r2:=r2 shl 1;
    r2:=r2+r1;
    r3:=r3-r2;
    zvar[i]:=r3;
  end;
  if zvar[0] = 0 then
    inc(zvar[0]);

  SetLength(result,Length(zvar));
  for i:=low(zvar) to high(zvar) do
    result[i+1]:=chr(zvar[i]+$30);
end;

end.

__________________
Не стесняемся, плюсуем!
Slym вне форума   Ответить с цитированием
Старый 23.12.2014, 16:47   #9
WinCoder
Заблокирован
 
Регистрация: 24.11.2014
Сообщений: 721
Репутация: 76
По умолчанию

Да ладно? Перевели всё-таки? Вот это я понимаю, помогли. Не ожидал. Спасибо. Ушёл переводить оставшийся код.
WinCoder вне форума   Ответить с цитированием
Старый 23.12.2014, 16:51   #10
Slym
Профессионал
 
Регистрация: 07.12.2011
Адрес: Siberia
Сообщений: 1,021
Репутация: 759
По умолчанию

Encrupt_4 - в процессе
__________________
Не стесняемся, плюсуем!
Slym вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


01:25.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru