UnlockClub.Ru

Опросы

Какое устройство вы у нас разблокировали?




















  

Новости

Алгоритмы разблокировки Huawei и Alcatel

Алгоритм разблокировки Huawei и AlcatelВ этой статье мы постараемся немного приоткрыть вам завесу тайны над алгоритмами разблокировки Huawei и Alcatel. Все знают, что устройства данных производителей разблокируются кодом, но как рассчитывается и откуда берется код разблокировки?

В нашей статье о причинах блокирования телефонов мы писали о том, что код разблокировки может быть функцией от IMEI телефона (и, таким образом, может быть просчитан) или же жёстко зашит во флеш-чипе телефона (и тогда его узнают только через внутреннюю базу данных производителя). Давайте рассмотрим модели модемов Huawei cо старым алгоритмом, о которых мы писали ранее - разблокировка модемов Huawei. Как мы и говорили,  код разблокировки для них можно просчитать специальным калькулятором, но как же устроен этот калькулятор внутри?

Естественно, что производитель тщательно скрывает алгоритм генерации кодов раблокировки (в случае с модемами Huawei со старым алгоритмом, Old Algo, код разблокировки является функцией от IMEI, т.е. NCK = f(IMEI)), но в данном случае алгоритм уже успел утечь в сеть и в этой статье мы с вами его рассмотрим. Повторюсь, что все описанное относится только к моделям E150, E1550, E155, E156, E156G, E160, E160G, E161, E166, E169, E169G, E170, E172, E176, E180, E182E, E196, E226, E270, E271, E272, E510, E612, E618, E620, E630, E630+, E660, E660A, E800, E870, E880, EG162, EG162G, EG602, EG602G, Vodafone K2540, Vodafone K3515, Vodafone K3520, Vodafone K3565, Vodafone K3715 и др.

Алгоритм генератора NCK кодов для Huawei

Исходный код алгоритма на PHP выглядит следующим образом:

Huawei Algo PHP Source
function CalcOldNCK($imei,$secret = "hwe620datacard") {

$magic = substr(md5($secret),8,16);
$n = str_split(md5(    $imei . $magic    ),2);

foreach ($n as &$v) { $v = hexdec($v); }

$n1 = $n[0] ^ $n[4] ^ $n[8] ^ $n[12];
$n2 = $n[1] ^ $n[5] ^ $n[9] ^ $n[13];
$n3 = $n[2] ^ $n[6] ^ $n[10] ^ $n[14];
$n4 = $n[3] ^ $n[7] ^ $n[11] ^ $n[15];

$s = sprintf("%02s",dechex($n1)) . sprintf("%02s",dechex($n2)) . sprintf("%02s",dechex($n3)) . sprintf("%02s",dechex($n4));
$n = sprintf("%d", (hexdec($s) | 0x2000000) & 0x3FFFFFF);
return $n;

}

  1. Здесь, на входе функции CalcOldNck - $imei - это строка с IMEI устройства, а $secret - секретная константа, равная  hwe620datacard.
  2. Как мы видим, вначале считается MD5 хещ от $secret, который равен "a32fe72c5e8dd316726b0335d5513ba0", затем от него берутся выделенные 16 символов. Это и будет $magic.
  3. Затем мы считаем MD5 хеш от контакенации IMEI и полученной константы $magic. Предположим, что IMEI у нас 860650020246212, тогда объединение IMEI и $magic - дадут нам строку "8606500202462125e8dd316726b0335", а MD5 хеш от нее соответственно "9423f197fafad4887ee169fe0547cf7a".
  4. Разобьем эту строку на байты в шестнадцатиричном представлении, т.е. 0x94, 0x23, 0xf1 и т.п.
  5. В результате получим массив:

    Array
    (
    [0] => 148
    [1] => 35
    [2] => 241
    [3] => 151
    [4] => 250
    [5] => 250
    [6] => 212
    [7] => 136
    [8] => 126
    [9] => 225
    [10] => 105
    [11] => 254
    [12] => 5
    [13] => 71
    [14] => 207
    [15] => 122
    )
  6. Как видно, нулевой элемент массива - это  0x94 (148 в десятичном представлении), первый -   0x23 (35) и т.п.
  7. Далее мы считаем числа n1, n2, n3, n4 (фактически это байты будущего NCK) по формулам:

    $n1 = $n[0] ^ $n[4] ^ $n[8] ^ $n[12];
    $n2 = $n[1] ^ $n[5] ^ $n[9] ^ $n[13];
    $n3 = $n[2] ^ $n[6] ^ $n[10] ^ $n[14];
    $n4 = $n[3] ^ $n[7] ^ $n[11] ^ $n[15];

  8. Где - это операция "исключающее ИЛИ", т.е. XOR.
  9. Таким образом получаем:

    n1 = 148 xor 250 xor 126 xor 5 = 21
    n2 = 35 xor 250 xor 225 xor 71 = 127
    n3 = 241 xor 212 xor 105 xor 207 = 131
    n4 = 151 xor 136 xor 254 xor 122 = 155

  10. Или в шестнадцатиричной системе (n1,n2,n3,n4) = (15,7f,83,9b). Объединяем эти числа, и получаем шестнадцатиричное число - 157F839B (360678299).
  11. И у нас остался последний шаг, а именно  для получения NCK выполняем над ним следующее преобразование - 0x157F839B or 0x2000000 and 0x3FFFFFF. Это вполне можно сделать с помощью стандартного Windows калькулятора, переключив его в вид программиста.
  12. В результате этой операции получаем 0x37F839B. Переведя его в десятичную систему счисления, получаем искомый NCK (код разблокировки) - 58688411.

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

Пример расчета кода разблокировки Huawei по Old Algo

Как видно, посчитать код разблокировки Huawei по Old Algo не так уж и сложно ;)

В начале статьи я говорил, что мы расскажем и про алгоритм генерации кодов разблокировки для Alcatel. В приведенном архиве Alcatel Code Calc Delphi Source.rar вы найдете исходники на Delphi для следующих моделей телефонов Alcatel - V670, C700, C701, PLAYBOY, C707, C717, V770, C820, C825, MANDARINA DUCK, S215, S218, S319, S320, S321, S520, MISS SIXTY, S853. Авторство исходников принадлежит ulymar (atf team member). Код очень структурированный и разобраться в нем не составит особенных проблем даже для начинающих программистов. Форма скомпилированного приложения выглядит следующим образом:

Alcatel Code Calculator. Калькулятор кодов разблокировки для телефонов Alcatel.


Возврат к списку