Сейчас на форуме: (+7 невидимых)

 eXeL@B —› Протекторы —› ASProtect 1.X - регфайл с HardwareID
Посл.ответ Сообщение

Ранг: 1.5 (гость)
Активность: 0=0
Статус: Участник

Создано: 19 августа 2011 18:11
· Личное сообщение · #1

Здравствуйте, скажите, а где-нибудь описана структура сабжа? Интересует сам принцип наложения HardwareID на алгоритм дешифрования RSA. Насколько я понимаю, публичный ключ от хвида не зависит, иначе надо было бы учитывать его при запаковке проги, а раз так, то хвид как-то дополнительно накладывается при распаковке публичным ключом. Публичный ключ зашифрован хвидом или как-то так?

Чтобы доказать, что я внимательно просмотрел весь форум, привожу ссылку --> Link <-- где задается тот же вопрос, но ответа там не воспоследовало...

Если это важно, то интерес к сабжу чисто образовательный, в данный момент никакую кокретную софтину не ломаю.

Заранее спасибо.



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 20 августа 2011 06:25
· Личное сообщение · #2

HardwareID в аспре сделан лоховски. У ключа есть цифровая подпись. Ключ состоит в своей бинарной (если хотите, информационной) сути из константы шифрования, параметров и HardwareID. Т.е. он банально проверяется на соответствие и не влияет на расшифровку данных программы (если шифрование вообще имело место).

Для 2.x у меня есть детализация по структуре ключа, но это уже не по сабжу. До 1.x не дошли руки.



Ранг: 1.5 (гость)
Активность: 0=0
Статус: Участник

Создано: 20 августа 2011 07:23
· Личное сообщение · #3

Спасибо за ответ!
Если так, то что ж тут такого уж лоховского? Когда прога шифруется, никакого хвида нет в наличии. Иначе им надо было бы каждую копию шифровать отдельно, а это очень неудобно. Можно, если у тебя выделенный сервер для этого есть. А с пхп да майскулом этого не сделать. Или есть очевидное более "правильное" решение? Можно, конечно, попробовать шифровать публичный ключ хвидом и вставлять его в рег файл, но такую фишку тоже, наверное, можно просечь. Так что ничего лучше ЦП и я не вижу... тоже лох, наверное...

Если в 2.Х принцип наложения хвида тот же (чисто сравнение), то тема, видимо, закрыта. А если там другой принцип, то, если возможно, приведите, пожалуйста, структуру и принцип наложения ключа с хвид.

-Спасибо.



Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 20 августа 2011 08:55
· Личное сообщение · #4

Ну в арме если у меня нет хвида, то имея валидный серийник и регистрационное имя ничего сделать нельзя (ну, если не учитывать другие дыры). Они там в ключ зашивают HWID xor SymmetricKey, т.е. не имея HWID симметричный ключ из серийника выдрать невозможно. Так что схема у аспра все-таки лоховская.

Думаю, лучше кто-нибудь еще напишет конкретно по 1.x. Я серьезно занимался только 2-ой версией прота.




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 20 августа 2011 13:53 · Поправил: PE_Kill
· Личное сообщение · #5

int ты не прав ща клаву куплю отпишусь

Купил клаву

int пишет:
Т.е. он банально проверяется на соответствие и не влияет на расшифровку данных программы (если шифрование вообще имело место).

Это не верно, HWID туда вообще не зашивается. Если ключ не привязан к железу, то формируется буфер, туда записываются данные типа имени юзера, организация и прочее, потом этот буфер шифруется RSA. Если ключ привязан к железу, то буфер сначала шифруется HWID'ом (XOR подобным алгоритмом), а потом только шифруется RSA. Шифрование кода тут не при чем, не имея HWID мы не сможем расшифровать буфер и не сможем вытащить из буфера 10 байтный ключ дешифрования кода. Имея валидный ключ на другое железо, но не имея HWID этого железа, HWID можно сбрутфорсить, у меня есть наработки по этому делу. Но там чистая эвристика и не большая дыра в алго шифрования, поэтому наработки сырые и я их не выкладываю. Да и ситуация такая встречается ОЧЕНЬ редко.

Awak00m пишет:
Если в 2.Х принцип наложения хвида тот же (чисто сравнение), то тема, видимо, закрыта.

В 2.x всё еще сложнее. Вот тут я выкладывал псевдокод для 2.x версии:
http://exelab.ru/f/action=vthread&forum=13&topic=11596&page=35#22

-----
Yann Tiersen best and do not fuck




Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 20 августа 2011 15:25
· Личное сообщение · #6

А сейчас ты писал мышкой?

Блин, PE_Kill, ну от меня сейчас далеко мой исходник кейгена. Так что сложно сказать.

PE_Kill пишет:
10 байтный ключ дешифрования кода

10-ти байтный??? Я писал про 2.x вообще-то. И там 8 байт.




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 20 августа 2011 15:31 · Поправил: PE_Kill
· Личное сообщение · #7

int пишет:
А сейчас ты писал мышкой?

Да, на экранной клаве.

int пишет:
10-ти байтный??? Я писал про 2.x вообще-то. И там 8 байт.

Я про EncConst. В 1.х она 10 байт, в 2.х 4 байта.

ЗЫ Я всё описывал для 1.х о чем и спрашивал ТС

-----
Yann Tiersen best and do not fuck




Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 20 августа 2011 15:39
· Личное сообщение · #8

PE_Kill пишет:
в 2.х 4 байта.

Нет, все-таки 8. Иначе было бы слишком легко сбрутить. Может в ранних версиях и было 4, хотя это бы означало изменение структуры SKE ключа, а этого вроде не было. Да, 4 байта, затупил. Но хвид там есть.

PE_Kill
стареешь? вот код:

Code:
  1. void DecryptKey (HWND hWnd)
  2. {
  3.          char name[257];
  4.          char origkey[256];
  5.          char hardware_id[14];
  6.          char cBuf[255];
  7.          unsigned char decoded[512], *ptr, *ptr2;
  8.          unsigned char bit_number, bit_number2;
  9.          char modeID;
  10.          char date_flag, date_len;
  11.          unsigned int date, exp_date;
  12.          short int day, month, year;
  13.          aspr_hwid asp_hwid;
  14.          unsigned int hwid, user_hwid, enc_const;
  15.          bool isHardwareLocked, isUnlockSections, isExpire;
  16.  
  17.          #define TEST
  18.          GetDlgItemText(hWnd, IDC_NAME, name, sizeof(name));
  19.          GetDlgItemText(hWnd, IDC_KEY, origkey, sizeof(origkey));
  20.          GetDlgItemText(hWnd, IDC_HWID, hardware_id, sizeof(hardware_id));
  21. #ifdef TEST
  22.          strcpy(name ,"Jupiter\r\nFree Software Foundation");
  23.          strcpy(origkey ,"FZ8EC9D-W9M9E-W8QH3-XMY5X-VMBXX-QTL3U-ZSWQX");
  24.          strcpy(hardware_id ,"19D7E308-8A61");
  25. #endif
  26.          if (base_decode(origkey, decoded, sizeof(decoded), BASE32_POWER))
  27.          {
  28.                  MessageBox(hWnd, "Base32_decode: invalid format of string! Custom serial check or invalid serial...",
  29.                         "Error", MB_OK);
  30.          }
  31.          xor_array(decoded, name);
  32.          ptr = decoded;
  33.          bit_number = 1;
  34.          modeID = extract_data(&bit_number, &ptr, 4);
  35.          sprintf(cBuf, "%d", modeID);
  36.          SetDlgItemText(hWnd, IDC_MODEID, cBuf);
  37.          date_flag = extract_data(&bit_number, &ptr, 4);
  38.          if (date_flag != 2)
  39.                  date_len = 12;
  40.          else
  41.                  date_len = 14;
  42.          date = extract_data(&bit_number, &ptr, date_len);
  43.          //encode_date(1, 1, 2003, &date_point); // 37622
  44.          decode_date(date + date_point, &day, &month, &year);
  45.          sprintf(cBuf, "%02d-%02d-%04d (0x%X)", day, month, year, date);
  46.          SetDlgItemText(hWnd, IDC_DATE, cBuf);
  47.          // TEST POSSIBLE MODES
  48.          isHardwareLocked = true;
  49.          isUnlockSections = true;
  50.          isExpire = true;
  51.          ptr2 = ptr; // copy ptr
  52.          bit_number2 = bit_number; // copy bit number
  53.          // if expiration date is present, it's next
  54.          exp_date = extract_data(&bit_number2, &ptr2, date_len);
  55.          // Test HWID:
  56.          user_hwid = asp_hwid.asprotect_crc((unsigned char*)hardware_id, strlen(hardware_id));
  57.          enc_const = 0;
  58.          // test exp+hwid
  59.          hwid = extract_data(&bit_number2, &ptr2, 32);
  60.          if (hwid != user_hwid)
  61.          {
  62.                  // test exp+ec+hwid
  63.                  enc_const = hwid;
  64.                  hwid = extract_data(&bit_number2, &ptr2, 32);
  65.                  if (hwid != user_hwid)
  66.                  {
  67.                         // test hwid
  68.                         ptr2 = ptr; // copy ptr
  69.                         bit_number2 = bit_number; // copy bit number
  70.                         hwid = extract_data(&bit_number2, &ptr2, 32);
  71.                         if (hwid != user_hwid)
  72.                         {
  73.                               // test ec+hwid
  74.                               enc_const = hwid;
  75.                               hwid = extract_data(&bit_number2, &ptr2, 32);
  76.                               if (hwid != user_hwid)
  77.                               {
  78.                                    isHardwareLocked = false;
  79.                               }
  80.                               else
  81.                               {
  82.                                    isExpire = false;
  83.                               }
  84.                         }
  85.                         else
  86.                         {
  87.                               isExpire = false;
  88.                               isUnlockSections = false;
  89.                         }
  90.                  }
  91.          }
  92.          if (!isHardwareLocked)
  93.          {
  94.                  // possible size of signature: 96/160/192 bits => 12, 20, 24 bytes
  95.          }
  96.          if (isUnlockSections)
  97.          {
  98.                  sprintf(cBuf, "%X", enc_const);
  99.                  SetDlgItemText(hWnd, IDC_ENCCONST, cBuf);
  100.                  CheckDlgButton(hWnd, IDC_CHECK_UNLOCK, BST_CHECKED);
  101.          }
  102.          if (isExpire)
  103.          {
  104.                  decode_date(exp_date + date_point, &day, &month, &year);
  105.                  sprintf(cBuf, "%02d-%02d-%04d (0x%X)", day, month, year, exp_date);
  106.                  SetDlgItemText(hWnd, IDC_EXPDATE, cBuf);
  107.                  CheckDlgButton(hWnd, IDC_CHECK_EXP, BST_CHECKED);
  108.          }
  109.  
  110.          // TODO: подсчитать кол-во бит в дате, вычленить Today
  111.          // изобрести способ проверки наличия ExpirationDate
  112.          // выдрать при наличии ExpirationDate, а дальше
  113.          // EncryptionConst и HardwareID
  114.  
  115.          return;
  116. }





Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 20 августа 2011 16:02
· Личное сообщение · #9

int пишет:
стареешь?

Перечитай ветку с начала. ТС спрашивал про 1.x я отвечал про 1.x, ты отвечаешь про 2.х и код приводишь для 2.х

-----
Yann Tiersen best and do not fuck




Ранг: 101.0 (ветеран), 344thx
Активность: 1.150
Статус: Участник

Создано: 20 августа 2011 18:55
· Личное сообщение · #10

Ну да, а я и не говорил за 1.x. Просто предположил, что там могло быть сделано также плохо. Ты меня просто хвидом удивил. Я сначала подумал, что ты про обе версии говоришь.



Ранг: 1.5 (гость)
Активность: 0=0
Статус: Участник

Создано: 24 августа 2011 10:10
· Личное сообщение · #11

PE_Kill пишет:
Если ключ привязан к железу, то буфер сначала шифруется HWID'ом (XOR подобным алгоритмом), а потом только шифруется RSA. Шифрование кода тут не при чем, не имея HWID мы не сможем расшифровать буфер и не сможем вытащить из буфера 10 байтный ключ дешифрования кода. Имея валидный ключ на другое железо, но не имея HWID этого железа, HWID можно сбрутфорсить

О, как... Несколько вопросов сразу возникает:
Я правильно понимаю, что для дешифрации вышеозначенного "буфера" используется открытый ключ RSA, который зашит в самой проге, и, следовательно, он одинаковый для всех копий проги данной версии? Аспровый кейген шифрует буфер закрытым ключом, а прога дешифрует его открытым? Если так, то расшифровать буфер (без учета хвида) можно, достав из проги открытый ключ? Это реально?
Остается ХВИД. А чем он в принципе отличается от имени юзера и другой инфы из ключа? Ведь, насколько я понимаю, все это, как правило, известно. Почему надо обязательно _иметь_ железо, совпадающее с хвидом? Или конкретный алгоритм "ксоренья хвидом" все-таки неизвестен, так что приходится отдать это на откуп самому аспру?
И еще. Я правильно понял, что для шифрации/дешифрации кода в Аспре RSA не применяется? Тут спорят про 8-байтный/10-байтный ключ - это симметричный алгоритм, или что?

-Спасибо КультПросвету! ;)

ЗЫ: поздравляю с приобретением новой клавы!




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 24 августа 2011 11:03 · Поправил: PE_Kill
· Личное сообщение · #12

Awak00m пишет:
Я правильно понимаю, что для дешифрации вышеозначенного "буфера" используется открытый ключ RSA, который зашит в самой проге, и, следовательно, он одинаковый для всех копий проги данной версии?

Правильно

Awak00m пишет:
Аспровый кейген шифрует буфер закрытым ключом, а прога дешифрует его открытым?

Да

Awak00m пишет:
Если так, то расшифровать буфер (без учета хвида) можно, достав из проги открытый ключ?

Да

Awak00m пишет:
Это реально?

Вполне

Awak00m пишет:
Остается ХВИД. А чем он в принципе отличается от имени юзера и другой инфы из ключа?

Тем, что он НЕ ЗАПИСЫВАЕТСЯ в ключ, этим значением наоборот шифруются данные ключа.

Awak00m пишет:
Почему надо обязательно _иметь_ железо, совпадающее с хвидом?

Никого не надо иметь, нужно лишь знать значение HWID для дешифровки буфера ключа.

Awak00m пишет:
Или конкретный алгоритм "ксоренья хвидом" все-таки неизвестен

Наоборот известен, он весьма крив.

Awak00m пишет:
И еще. Я правильно понял, что для шифрации/дешифрации кода в Аспре RSA не применяется?

Правильно. В 2.х версиях используется RC4 ссылку на псевдокод я приводил, в 1.x не смотрел, но ключи дешифровки разной длинны, возможно в 1.х от стандартной EncConst взят какой то хешь. Мне особо не надо было эту версию копать. Но то, что это не RSA это точно, RSA слишком медленный алгоритм и ключ для дешифровки кода раздул бы основной до томика война и мир, а солод наоборот всю жизнь укорачивает что можно и нельзя.

-----
Yann Tiersen best and do not fuck




Ранг: 315.1 (мудрец), 631thx
Активность: 0.30.33
Статус: Модератор
CrackLab

Создано: 06 октября 2011 16:01 · Поправил: SReg
· Личное сообщение · #13

PE_Kill пишет:
Да и ситуация такая встречается ОЧЕНЬ редко.

А вот как раз такая ситуация! Есть софтина спи*енная, key.bin был в папке с прогой, hwid естественно нету.

PE_Kill пишет:
HWID можно сбрутфорсить, у меня есть наработки по этому делу

Может быть (если у вас появится время\желание) поможете?




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 06 октября 2011 16:38
· Личное сообщение · #14

SReg хорошо попробую. Только в чем необходимость, код зашифрован? И еще какой инсталятор скачать с сайта _ttp://www.tile3d.com/ под ту версию, что ты залил?

-----
Yann Tiersen best and do not fuck




Ранг: 315.1 (мудрец), 631thx
Активность: 0.30.33
Статус: Модератор
CrackLab

Создано: 06 октября 2011 16:50
· Личное сообщение · #15

PE_Kill пишет:
Только в чем необходимость, код зашифрован?

ага, вкусные фитчи все по ключу(
ну да, 5.1




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 06 октября 2011 17:45
· Личное сообщение · #16

SReg пишет:
ну да, 5.1

Епта, я про дистры:
Кафель 5.1 HOME
Кафель 5.1 PROF
Кафель 5.1 + Render

или без разницы?

-----
Yann Tiersen best and do not fuck




Ранг: 315.1 (мудрец), 631thx
Активность: 0.30.33
Статус: Модератор
CrackLab

Создано: 06 октября 2011 18:02
· Личное сообщение · #17

PE_Kill
а, да без разницы, и зачем дистр то вообще? прога и так робыть...




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 06 октября 2011 18:20 · Поправил: PE_Kill
· Личное сообщение · #18

У меня не работает, иначе бы не спрашивал. Ладно, занимаюсь...

ADD: SReg готово, отправил результаты в личку.

-----
Yann Tiersen best and do not fuck


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

Ранг: -0.1 (гость), 1thx
Активность: 0=0
Статус: Участник

Создано: 24 октября 2011 15:21
· Личное сообщение · #19

Всем привет
все таки получилось отвязать Кафель 5.1 от ограничений?




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 24 октября 2011 17:31
· Личное сообщение · #20

В запросы со всеми своими кафелями.


 eXeL@B —› Протекторы —› ASProtect 1.X - регфайл с HardwareID
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати