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

 eXeL@B —› Вопросы новичков —› Реверсинг BitFontCreator Pro
Посл.ответ Сообщение

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

Создано: 07 января 2015 10:59 · Поправил: injener
· Личное сообщение · #1

Здравствуйте.
Я являюсь начинающим исследователем программ и поэтому возникает куча вопросов.
Пытаюсь понять принцип генерации серийника к программе BitFontCreator Pro 3.5.
Серийник состоит из 4 шеснадцатиричных значений, разделенных символом "-" (sn1-sn2-sn3-sn4)
Четвертая часть номера не меняется (0xBAF7 подобрана экспериментальным путем) и влияет на порчу выходного С кода, генерируемого из шрифтов.
Для проверки серийника используется сумма кодов всех символов e-mail адреса (email_sum)
Обнаружил 2 места проверки серийника :
Непосредственно после ввода по адресу 0x40C2F0 с использованием условия 329*email_sum = 11*sn1+3*sn2+15*sn3
При запуске программы по адресу 0x437f80 с использованием условия 294*email_sum = 9*sn1+4*sn2+13*sn3
При попытке решения получившейся системы линейных уравнений получить целочисленное решение невозможно и в итоге серийник принятый в окне ввода не принимается при запуске, а номер прописанный сразу в реестр не принимается в окне ввода. Но программа при этом успешно запускается.
Еще может подскажите как перехватить место в коде куда отправляет 4 часть серийника функция SendMesageW по адресу 0x42B38B . Перерыл кучу документации, но не смог найти как перехватить место обработки принятой информации из параметра lParam=sn4.
Генератор номера написал, но его приходится ручками прописывать в реестр по причине того, что в окне ввода он бракуется.
Прошу помощи по дальнейшему восстановлению алгоритма генерации номера.
Файлы комментариев к коду из ollydbg 1.10 в аттаче. Исследуемый файл имеет имя BitFontCreatorPro (1).exe , чтобы сохранить исходный файл нетронутым.
Заранее благодарен за помощь.

6fe4_07.01.2015_EXELAB.rU.tgz - BitFontCreatorPro (1).zip



Ранг: 590.4 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 07 января 2015 12:07 · Поправил: r_e
· Личное сообщение · #2

Code:
  1. 329*email_sum = 11*sn1+3*sn2+15*sn3
  2. 294*email_sum = 9 *sn1+4*sn2+13*sn3
  3.  
  4. -35*email_sum = -2*sn1 + sn2 -2*sn3
  5. -35*email_sum + 2*sn1 + 2*sn3 = sn2
  6.  
  7. 329*email_sum = 11*sn1+ 3 * (-35*email_sum + 2*sn1 + 2*sn3) + 15*sn3
  8. 329*email_sum = 11*sn1+ -105*email_sum +6*sn1 + 6*sn3 + 15*sn3
  9. 434*email_sum = 17*sn1+21*sn3
  10. sn1 = (434*email_sum - 21*sn3) / 17

sn1 = (21*sn3 - 434*email_sum) / 17; Накосячил со знаком при переносе. Вывод не сильно меняется.

Целочисленные решения существуют, но для этого нужно решить уравнение a*x mod n = c

-----
старый пень





Ранг: 253.5 (наставник), 684thx
Активность: 0.260.25
Статус: Участник
radical

Создано: 07 января 2015 14:41 · Поправил: DimitarSerg
· Личное сообщение · #3

У меня чуть по-другому ... хм, надо разбираться
oops, 13*3 = 39 :D а не 52 как было
Code:
  1. 329*email_sum = 11*sn1+3*sn2+15*sn3
  2. 294*email_sum = 9 *sn1+4*sn2+13*sn3
  3.  
  4. 329*email_sum = 11*sn1+3*sn2+15*sn3 // *(-4)
  5. 294*email_sum = 9 *sn1+4*sn2+13*sn3 // *3 
  6.  
  7. -1316*sum = -44*sn1 -12*sn2 -60*sn3
  8. 882*sum    = 27*sn1 + 12*sn2+39*sn3
  9.  
  10. -------------
  11. -434*sum = -17*sn1-21*sn3
  12. 17*sn1 = 434*sum - 21*sn3
  13.  
  14. sn1 = (434*sum - 21*sn3) div 17
  15.  


Добавлено спустя 3 минуты
и получается 434*sum - 21*sn3 должно делиться на 17 без остатка

Добавлено спустя 39 минут
Code:
  1. sn2 = (273*sum - 8*sn3) div 17

(273*sum - 8*sn3) тоже должно делиться на 17 без остатка

Добавлено спустя 44 минуты
банальный перебор:
Code:
  1. var sn1,sn2,sn3,sum:Word;
  2. begin
  3.   sn3:=0;
  4.   repeat
  5.     inc(sn3);
  6.     sn1 := (434*sum - 21*sn3) div 17;
  7.     sn2 := (273*sum - 8*sn3) div 17;
  8.   until ( ((434*sum  - 21*sn3) mod 17 = 0) and ((273*sum  - 8*sn3) mod 17 =0) );
  9.   Edit1.Text:=Format('%0.4x-%0.4x-%0.4x-',[sn1,sn2,sn3])+'BAF7';
  10. end;


ds
ds@mail.ua
5F83-3C16-0005-BAF7

-----
ds


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

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

Создано: 07 января 2015 15:55
· Личное сообщение · #4

Огромное спасибо за помощь с генерацией серийного номера.
Похоже после двух дней копания в исходниках уже голова перестала соображать.
Теперь мне останется только найти куда уходит четвертая часть номера. Ведь мне просто повезло что я его угадал.
Еще раз спасибо за помощь.



Ранг: 590.4 (!), 408thx
Активность: 0.360.18
Статус: Модератор

Создано: 07 января 2015 16:04
· Личное сообщение · #5

DimitarSerg
После того как подобрал sn3 и вычислил sn1, sn2 вычисляется из подстановки сделанной выше
sn2 = 2*sn1 + 2*sn3 -35*email_sum

-----
старый пень





Ранг: 253.5 (наставник), 684thx
Активность: 0.260.25
Статус: Участник
radical

Создано: 07 января 2015 16:34 · Поправил: DimitarSerg
· Личное сообщение · #6

r_e
а можно получить sn3, а потом генерить:
sn3:=(k * 17) + sn3 , где k - рандом, ест-но (k * 17) + sn3 должно быть менее 0x7FFF и остальные переменные чтоб в WORD влезали )

sn1 := (434*sum - 21*sn3) div 17;
sn2 := (273*sum - 8*sn3) div 17; или уже как у тебя sn2 := 2*sn1 + 2*sn3 -35*sum

-----
ds




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

Создано: 07 января 2015 20:16 · Поправил: injener
· Личное сообщение · #7

Всем огромная благодарность за помощь.
По быстрому набросал генератор на базе AutoIt v3 и рекомендаций DimitarSerg.
Буду дальше смотреть программу от этого же производителя BitFontCreator Grayscale.
Защита немного посложнее, но довольно похожая.
Может получится все-таки выяснить куда именно функция SendMessageW передает сообщение с четвертой частью серийника.
Если интересно попробовать получившийся генератор ключей, то он в приложениях.

При правильном значении экспорт чистый , а при неправильном ко всем символам применяется маска.
На скринах один и тот же символ (ПРОБЕЛ 0x20) при разных значениях ключа 0xbaf7 и 0xbaf8






f1ad_07.01.2015_EXELAB.rU.tgz - keygen.au3




Ранг: 253.5 (наставник), 684thx
Активность: 0.260.25
Статус: Участник
radical

Создано: 07 января 2015 20:46
· Личное сообщение · #8

injener
А 4-ая часть точно не рандом ? Проверил со своим серийником и последним блоком из 1111 - экспорт вроде норм. Как проявляется тот глюк/проверка ?

-----
ds




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

Создано: 08 января 2015 13:02 · Поправил: injener
· Личное сообщение · #9

Я наконец докопался до истины где именно проверяется 4 часть серийника
Сначала в процессе передачи сообщения функцией SendMessageW обработчик размещает данные в памяти (скрин 1), а затем номер проверяется при помощи битовых масок (скрин 2 и 3) sn4 & 0x000A , sn4 & 0x0001 , sn4 & 0x0200 , sn4 & 0x8000
В итоге число 0x820B будет принято успешно и в меню Help пропадает пункт меню Register.
PS. Значение 0xFFFF тоже успешно проходит проверку, но отказывается сохранять файл










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

Создано: 21 марта 2015 12:35
· Личное сообщение · #10

По видимому, там есть еще одна проверка - через случайное время использования (от получаса до нескольких часов) редактор рушится с предложением заплатить денег - MessageBox "Some error happening.\r\nPlease purcase lincense from our site."



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

Создано: 07 марта 2017 05:13 · Поправил: jonmey
· Личное сообщение · #11

injener пишет:
Буду дальше смотреть программу от этого же производителя BitFontCreator Grayscale.
Защита немного посложнее, но довольно похожая.

с генерацией серийников к BitFontCreator Grayscale есть подвижки?
Или еще кто-нибудь разбирался?



Ранг: 262.5 (наставник), 337thx
Активность: 0.340.25
Статус: Участник

Создано: 07 марта 2017 12:06
· Личное сообщение · #12

jonmey пишет:
с генерацией серийников

Факторизуй 398-битный N, дай нам P, Q и будут серийники



Ранг: 9.0 (гость), 6thx
Активность: 0.030.02
Статус: Участник

Создано: 07 марта 2017 21:50
· Личное сообщение · #13

TryAga1n
Где ты там рса увидел ?


 eXeL@B —› Вопросы новичков —› Реверсинг BitFontCreator Pro
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати