Форум   Статьи   Новости   Файлы   Bugtraq   Сниффер   Друзья   О Клубе
  , 10:27   #1
Форумчанин
 
Аватар для forte
 
Регистрация: 13.05.2010
Сообщений: 87

Репутация: 38 / 1
Thumbs up Keygening TuneUp Utilities 2010

Предупреждение
Спойлер
Програма в озноакомителных целях
Prgoram Name TuneUp Utilities 2010
Спойлер
Спойлер
Website www.tune-up.com
Compiler Borland Delphi
Protection ECDSA, Base-29, Hashing
Инструменты
Спойлер
OllyDbg
IDA Pro
PEiD
ECDLP Solver v0.2a by MR. HAANDI
ECCTool
Всем привет,
этом уроке
Спойлер
я научу вас, как решить защиты как ECDSA, реализованы с использованием
Crypto + +. Я надеюсь, вы хотели бы этого учебника.
Начало
Спойлер
Я надеюсь, вы готовы начать. На первый, скачать программу от его веб-сайта, установить и следовать этому
Учебник.
Открыть
PEiD и анализа Integrator.exe из папки программы.
(Экран 1)
Спойлер
PEiD говорит, что это приложение написано на Borland Delphi. Позволяет сканировать с канал тоже. (Экран 2)
Спойлер
нет известных сигнатур найдены ...
Реверсивные этого приложения
Хорошо, позволяет открыть это программы в OllyDbg и начать реальный анализ. Нажмите кнопку Run (F9), и вы увидите,
это заставка. (Экран 3)
Спойлер
Ну, мой испытательный срок истек было от долгого времени. Я не собираюсь патч этом экране,
потому что я действительно сосать в исправлений J, поэтому я собираюсь сделать Keymaker для него J. Нажмите на
Введите ключ продукта и ввести свои данные. (Экран 4)
Спойлер
хм ... позволяет проверить, если наш ключ продукта является действительным или нет. Хех, конечно, это не Я. (экран 5)
Спойлер
MessageBoxA появляется которой является информирование нас, что этот продукт ключ недействительный ..., нажмите кнопку ОК J
Установить ВР по MessageBoxA и MessageBoxW в OllyDbg
Бамм! Отладчик остановится на MessageBoxW (экран 6)
Спойлер
Нажмите Ctrl + F9, чтобы выполнить программу до возвращения функции. В то время, вы должны нажать на кнопку ОК, если
MessageBox появляется снова J. Хорошо, удалить точку останова, и позволяет искать процедура, где это
MessageBox вызван.
Нажмите F7 ... и смотреть на ваш процессор окно ... Кажется, ничего интересного ... Нажмите Ctrl + F9 и F7,
, чтобы получить основные процедуры, где этот MessageBox называется. Вы, вероятно, быть здесь. (Экран 7)
Спойлер
Хорошо, теперь найти процедуру старта. Это в 0025051C. Установить Вр на нем и выберите пункт Выполнить. Нажмите кнопку Активировать и
вернуться к процессору окна. Начать отслеживание ... на первой программы получает текст, то преобразования WideChar
Для Unicode ... Создать ключ продукта ... и наконец ... Проверка. (Экран 8)
Спойлер
Перейти в в этот призыв. (Экран 9)
Спойлер
Главная процедура проверки внутри этого вызова. (Экран 10)
Спойлер
Мы будем прыгать в процедуру, которая находится в tulic.dll. Да, его на 10004400. Хм ... позволяет анализировать
это. DLL в PEiD. Я думаю, мы получим что-то интересное в нем
Спойлер
Вау, канал нашел
Спойлер
что-то действительно интересное для нас J. (Screen11): P
Найдено несколько стандартных NIST рекомендовал ECC простых чисел, AES, и SHA-1/256/512.
Хорошо позволяет копать глубже, и проанализировать эту DLL в МАР J. После анализа этой библиотеки, применяются VC + + подписей
и прыгать в адрес 10004400 J. (Экран 12)
Я знаю, что кто-то предпочитает, чтобы загрузить некоторые Crypto + + библиотеки, компилировать их в VC + + 2008,
и сделать подписи для МАР, используя чутье. Это не очень хорошая идея, потому что, результат был бы не
быть столь же хорошо, как вы хотите. Так что лучшее решение заключается в признании Crypto + + функции вручную.
Это просто, поверьте мне J
Спойлер
Нажмите
Спойлер
клавишу F5 для декомпилировать этот код.
(Tulic_1.htm) Хорошо, сейчас, используя OllyDbg + МАР, мы признаем все
функций, которые находятся здесь J
Таким образом, я не буду объяснять процесс, как легко использовать OllyDbg + МАР вместе, я думаю, вы можете сделать. Файл карты в
МАР себя, и применить его в OllyDBG. Итак ...
Сначала мы должны
Спойлер
декомпилировать процедура, которая находится на 10001160.
Спойлер
v6 = sub_10001160(&v22, &v39);
&v39 is our serial
&v22 is decrypted buffer
Дважды щелкните на sub_10001160 и смотреть на процедуру J (sub_10001160). Ну, это меня ушло более 30
минут, чтобы понять, что делает эту процедуру. Это основа-29 процедуры, осуществляется с помощью Crypto + +
Спойлер
Bignumbers J.
Алфавит, используемый = "0123456789ABCDEFHJKMNPQRTVWXY"
Да, 29 символов J. Ну, это символы не столь важны на здесь ... Мы должны понимать, вручную все
в нем ...
Для сохранения Вашего времени, я дам декомпилированы листинг к вам, и объяснить, как База-29 работает J
Серийный формате = XXXXXX-XXXXXX-XXXXXX-XXXXXX-XXXXXX-XXXXXX
, Где "Х" является символ из Base29Alphabet
Спойлер
Пусть X = 123456-234567-345678-456789-567891-678912 в формате base29, и мы должны преобразовать его в Hex
Сначала программа преодоления этой строки, результат = 219876-198765-987654-876543-765432-654321
Base-29 Hex
Спойлер
Chars Numbers
0 00
1 01
2 02
3 03
4 04
5 05
6 06
7 07
8 08
9 09
A 0A
B 0B
C 0C
D 0D
E 0E
F 0F
H 10
J 11
K 12
M 13
N 14
P 15
Q 16
R 17
T 18
V 19
W 1A
X 1B
Y 1C
Scheme 1
В схеме 1, вы увидите База-29 алфавит. Таким образом, позволяет продолжать наше руководство базы преобразования
Спойлер
First Char = "2"
In the scheme 2(29) = 2(hex)
2(hex)*29(dec) = 3A
Result = 3A
Next Char = "1"
In the scheme 1(29) = 1(hex)
Result+1(hex) =3B
3B*29(dec)=6AF
Next Char = "9"
In the scheme 9(29) = 9(hex)
Result+9(hex) =6B8
6B8*29(dec)=C2D8
Продолжайте, пока последний.
Спойлер
Если у вас нет времени, или просто ленивы, попробовать свои базы-29 кодер /
Декодер, что я включил этот урок. Его записать в Masm.If вы хотите С + + или Delphi версий,
Отъезд мой кейгенов.
Хорошо, позволяет остановить воспроизведение игр и начал работать очень тяжело: р. У нас есть провести анализ всех Crypto + +
процедуры и получить все необходимые Params сделать Keymaker. Ну, я не читал Crypto + + FAQ и
источников, поэтому, моя функция имена будут слышал немного странно: р.
Не волнуйтесь, это совершенно очевидно
.
Спойлер
text:100046D8 lea esi, [esp+3F4h+var_308]
.text:100046DF call Cryptopp_Init
.text:100046E4 push 1
.text:100046E6 push offset One
.text:100046EB lea ecx, [esp+3FCh+One_Big]
.text:100046EF push ecx
.text:100046F0 mov byte ptr [esp+400h+var_4], 3
.text:100046F8 call BigIn
.text:100046FD mov esi, eax
.text:100046FF push 8
.text:10004701 push offset Order
.text:10004706 lea edx, [esp+3FCh+Order_Big]
.text:1000470A push edx
.text:1000470B mov byte ptr [esp+400h+var_4], 4
.text:10004713 call BigIn
.text:10004718 mov [esp+3F4h+Q], eax
.text:1000471C push 8
.text:1000471E push offset Gy
.text:10004723 lea eax, [esp+3FCh+g_y]
.text:1000472A push eax
.text:1000472B mov byte ptr [esp+400h+var_4], 5
.text:10004733 call BigIn
.text:10004738 mov [esp+3F4h+big1], eax
.text:1000473C push 8
.text:1000473E push offset Gx
.text:10004743 lea ecx, [esp+3FCh+g_x]
.text:1000474A push ecx
.text:1000474B mov byte ptr [esp+400h+var_4], 6
.text:10004753 call BigIn
.text:10004758 mov edx, [esp+3F4h+big1]
.text:1000475C push edx
.text:1000475D push eax
.text:1000475E lea eax, [esp+3FCh+point]
.text:10004762 push eax
.text:10004763 mov byte ptr [esp+400h+var_4], 7
.text:1000476B call SetPoint
.text:10004770 mov [esp+3F4h+PointG], eax
.text:10004774 push 8
.text:10004776 push offset B
.text:1000477B lea ecx, [esp+3FCh+b_]
.text:10004782 push ecx
.text:10004783 mov byte ptr [esp+400h+var_4], 8
.text:1000478B call BigIn
.text:10004790 mov [esp+3F4h+big1], eax
.text:10004794 push 8
.text:10004796 push offset A
.text:1000479B lea edx, [esp+3FCh+a_]
.text:100047A2 push edx
.text:100047A3 mov byte ptr [esp+400h+var_4], 9
.text:100047AB call BigIn
.text:100047B0 mov [esp+3F4h+A_], eax
.text:100047B4 mov byte ptr [esp+3F4h+var_4], 0Ah
.text:100047BC push 8
.text:100047BE push offset Prime
.text:100047C3 lea eax, [esp+3FCh+P]
.text:100047CA push eax
.text:100047CB call BigIn
Таким образом, вы можете спросить, что происходит в этом коде. Ну, на первый Инициализирует Crypto + +, то, Инициализация
Некоторые большие числа.
Спойлер
big1=1
q=7FFFFFFF8FEC8315
Gy=5C14E97245A02108
Gx=3C90F52BB9A8E47E
b=11576242CF8AB221
a=2BA8E5080D488534
p=7FFFFFFFFFFFFFE7
Это основные Params ECDSA. Позволяет проверить другие части
.text:100047D0 mov ecx, [esp+3F4h+big1]
.text:100047D4 push ecx
.text:100047D5 mov ecx, [esp+3F8h+A_]
.text:100047D9 lea edx, [esp+3F8h+var_1CC]
.text:100047E0 push edx
.text:100047E1 mov edx, eax
.text:100047E3 mov byte ptr [esp+3FCh+var_4], 0Bh
.text:100047EB call InitCurveParams
.text:100047F0 mov ecx, [esp+3F4h+Q]
.text:100047F4 mov edx, [esp+3F4h+PointG]
.text:100047F8 push esi
.text:100047F9 push ecx
.text:100047FA push edx
.text:100047FB lea ecx, [esp+400h+var_2FC]
.text:10004802 mov byte ptr [esp+400h+var_4], 0Ch
.text:1000480A call sub_100053F0
.text:1000480F lea esi, [esp+3F4h+var_1CC]
.text:10004816 mov byte ptr [esp+3F4h+var_4], 0Bh
.text:1000481E call sub_10003F60
.text:10004823 lea ecx, [esp+3F4h+P]
.text:1000482A call BigDestroy
.text:1000482F lea ecx, [esp+3F4h+a_]
.text:10004836 call BigDestroy
.text:1000483B lea ecx, [esp+3F4h+b_]
.text:10004842 call BigDestroy
.text:10004847 lea eax, [esp+3F4h+point]
.text:1000484B call CurveDestroy
.text:10004850 lea ecx, [esp+3F4h+g_x]
.text:10004857 call BigDestroy
.text:1000485C lea ecx, [esp+3F4h+g_y]
.text:10004863 call BigDestroy
.text:10004868 lea ecx, [esp+3F4h+Order_Big]
.text:1000486C call BigDestroy
.text:10004871 lea ecx, [esp+3F4h+One_Big]
.text:10004875 mov byte ptr [esp+3F4h+var_4], 3
.text:1000487D call BigDestroy
.text:10004882 cmp edi, 1
.text:10004885 jnz short loc_100048D8
.text:10004887 cmp [esp+3F4h+var_3E0], 7
.text:1000488C jnz short loc_100048D8
.text:1000488E push 8
.text:10004890 push offset Wx
.text:10004895 lea eax, [esp+3FCh+Order_Big]
.text:10004899 push eax
.text:1000489A call BigIn
.text:1000489F mov esi, eax
.text:100048A1 push 8
.text:100048A3 push offset Wy
.text:100048A8 lea ecx, [esp+3FCh+One_Big]
.text:100048AC push ecx
.text:100048AD mov byte ptr [esp+400h+var_4], 0Dh
.text:100048B5 call BigIn
.text:100048BA push esi
.text:100048BB push eax
.text:100048BC lea edx, [esp+3FCh+point]
.text:100048C0 push edx
.text:100048C1 mov byte ptr [esp+400h+var_4], 0Eh
.text:100048C9 call SetPoint
.text:100048CE mov byte ptr [esp+3F4h+var_4], 0Fh
.text:100048D6 jmp short loc_10004920
.text:100048D8 ; ----------------------------
.text:100048D8
.text:100048D8 loc_100048D8: ; CODE XREF: MainCheck+485j
.text:100048D8 ; MainCheck+48Cj
.text:100048D8 push 8
.text:100048DA push offset Zx
.text:100048DF lea eax, [esp+3FCh+Order_Big]
.text:100048E3 push eax
.text:100048E4 call BigIn
.text:100048E9 mov esi, eax
.text:100048EB push 8
.text:100048ED push offset Zy
.text:100048F2 lea ecx, [esp+3FCh+One_Big]
.text:100048F6 push ecx
.text:100048F7 mov byte ptr [esp+400h+var_4], 10h
.text:100048FF call BigIn
.text:10004904 push esi
.text:10004905 push eax
.text:10004906 lea edx, [esp+3FCh+point]
.text:1000490A push edx
.text:1000490B mov byte ptr [esp+400h+var_4], 11h
.text:10004913 call SetPoint
.text:10004918 mov byte ptr [esp+3F4h+var_4], 12h
.text:10004920
.text:10004920 loc_10004920: ; CODE XREF: MainCheck+4D6j
.text:10004920 push eax
.text:10004921 lea ecx, [esp+3F8h+var_308]
.text:10004928 call sub_10005DB0
.text:1000492D lea eax, [esp+3F4h+point]
.text:10004931 call CurveDestroy
.text:10004936 lea ecx, [esp+3F4h+One_Big]
.text:1000493A call BigDestroy
.text:1000493F lea ecx, [esp+3F4h+Order_Big]
.text:10004943 mov byte ptr [esp+3F4h+var_4], 3
.text:1000494B call BigDestroy
.text:10004950 mov eax, [esp+3F4h+var_300]
.text:10004957 mov ecx, [eax+4]
.text:1000495A lea edx, [esp+ecx+3F4h+var_300]
.text:10004961 push edx
.text:10004962 lea eax, [esp+3F8h+var_170]
.text:10004969 push eax
.text:1000496A call sub_10006590
.text:1000496F push 10h
.text:10004971 lea ecx, [esp+3F8h+var_2C]
.text:10004978 push ecx
.text:10004979 push 6
.text:1000497B lea edx, [esp+400h+var_1C]
.text:10004982 push edx
.text:10004983 lea ecx, [esp+404h+var_170]
.text:1000498A mov byte ptr [esp+404h+var_4], 13h
.text:10004992 call SignatureVerify
.text:10004997 test al, al
.text:10004999 jnz short loc_100049A3
.text:1000499B mov [esp+3F4h+var_3D8], 5
.text:100049A3
.text:100049A3 loc_100049A3: ; CODE XREF: MainCheck+599j
.text:100049A3 lea esi, [esp+3F4h+var_94]
.text:100049AA mov byte ptr [esp+3F4h+var_4], 3
.text:100049B2 call Clearbuffers
.text:100049B7 lea eax, [esp+3F4h+var_98]
.text:100049BE call clearbuffers2
.text:100049C3 lea esi, [esp+3F4h+var_238]
.text:100049CA mov byte ptr [esp+3F4h+var_4], 0
.text:100049D2 call Clearbuffers
.text:100049D7 lea eax, [esp+3F4h+var_23C]
.text:100049DE call clearbuffers2
Ладно, теперь идти в SignatureVerify, чтобы получить другие необходимые Params.
Спойлер
.text:10029E60 SignatureVerify proc near ; CODE XREF: MainCheck+592p
.text:10029E60 ; DATA XREF: .rdata:10057FF0o
.text:10029E60
.text:10029E60 var_C = dword ptr -0Ch
.text:10029E60 arg_8 = dword ptr 0Ch
.text:10029E60 arg_10 = dword ptr 14h
.text:10029E60 arg_14 = dword ptr 18h
.text:10029E60 arg_18 = dword ptr 1Ch
.text:10029E60 arg_1C = dword ptr 20h
.text:10029E60
.text:10029E60 push 0FFFFFFFFh
.text:10029E62 push offset loc_1004E5D8
.text:10029E67 mov eax, large fs:0
.text:10029E6D push eax
.text:10029E6E push ecx
.text:10029E6F push ebx
.text:10029E70 push esi
.text:10029E71 push edi
.text:10029E72 mov eax, dword_10067100
.text:10029E77 xor eax, esp
.text:10029E79 push eax
.text:10029E7A lea eax, [esp+20h+var_C]
.text:10029E7E mov large fs:0, eax
.text:10029E84 mov esi, ecx
.text:10029E86 mov eax, [esi]
.text:10029E88 mov edx, [eax+24h]
.text:10029E8B call edx ; SHA-1 Init
.text:10029E8D mov edi, eax
.text:10029E8F mov [esp+10h], edi
.text:10029E93 mov ecx, [esp+10h+arg_1C]
.text:10029E97 mov edx, [esp+10h+arg_18]
.text:10029E9B push ecx ; 16 or 0x10
.text:10029E9C mov [esp+14h+arg_8], 0
.text:10029EA4 mov eax, [esi]
.text:10029EA6 mov eax, [eax+28h]
.text:10029EA9 push edx ; B29DecryptSerial
.text:10029EAA push edi ; Digest
.text:10029EAB mov ecx, esi
.text:10029EAD call eax ; SHA-1 Update
.text:10029EAF mov eax, [esp+10h+arg_14]
.text:10029EB3 mov ecx, [esp+10h+arg_10]
.text:10029EB7 mov edx, [edi]
.text:10029EB9 mov edx, [edx+0Ch]
.text:10029EBC push eax; 0x06, длина третьей части
.text:10029EBD push ec; Серийный +0 x10, третья часть сериала
.text:10029EBE mov ecx, edi
.text:10029EC0 call edx;SHA-1 Заключительные и преобразования 160 бит хэш строки до 63 бит
.text:10029EC2 mov eax, [esi]
.text:10029EC4 mov edx, [eax+30h]
.text:10029EC7 push edi
.text:10029EC8 mov ecx, esi
.text:10029ECA call edx ; ECDSA Verify
.text:10029ECC mov dword ptr [esp+1Ch], 0FFFFFFFFh
.text:10029ED4 mov bl, al
.text:10029ED6 mov eax, [edi]
.text:10029ED8 mov edx, [eax]
.text:10029EDA push 1
.text:10029EDC mov ecx, edi
.text:10029EDE call edx
.text:10029EE0 mov al, bl
.text:10029EE2 mov ecx, [esp+20h+var_C]
.text:10029EE6 mov large fs:0, ecx
.text:10029EED pop ecx
.text:10029EEE pop edi
.text:10029EEF pop esi
.text:10029EF0 pop ebx
.text:10029EF1 add esp, 10h
.text:10029EF4 retn 10h
.text:10029EF4 SignatureVerify endp
Перейти в ECDSA Убедитесь вызовов и позволяет начать анализируем J
Это место есть только 4 интересных мест, большой Init Ser_part1, Большой инициализации Ser_part2, Большой Init Hash, Call
RealECDSAVerify
Спойлер
.text:10006914 lea ecx, [esp+88h+var_20]
.text:10006918 mov bl, 1
.text:1000691A push ecx
.text:1000691B mov [esi+5Ch], bl
.text:1000691E call BigIn
.text:10006923 mov [esp+80h], bl
.text:1000692A mov eax, [esi+2Ch]
.text:1000692D mov ecx, [esi+30h]
.text:10006930 push eax
.text:10006931 push ecx
.text:10006932 lea edx, [esp+88h+var_34]
.text:10006936 push edx
.text:10006937 call BigIn
.text:1000693C mov ecx, [esp+80h+var_54]
.text:10006940 add esi, 48h
.text:10006943 push esi
.text:10006944 lea edx, [esp+84h+var_34]
.text:10006948 push edx
.text:10006949 lea edx, [esp+88h+var_20]
.text:1000694D push edx
.text:1000694E mov edx, [esp+8Ch+var_50]
.text:10006952 mov byte ptr [esp+8Ch], 2
.text:1000695A mov eax, [ecx]
.text:1000695C push edx
.text:1000695D mov edx, [esp+90h+var_4C]
.text:10006961 mov eax, [eax+4]
.text:10006964 push edx
.text:10006965 call eax ; RealECDSAVerify

Опять же, давайте анализируем эту функцию слишком

Спойлер
.text:100060D0 ECDSA_Verify proc near ; DATA XREF: .rdata:10057FA8o
.text:100060D0
.text:100060D0 var_B5 = byte ptr -0B5h
.text:100060D0 var_B4 = dword ptr -0B4h
.text:100060D0 var_B0 = byte ptr -0B0h
.text:100060D0 var_A8 = dword ptr -0A8h
.text:100060D0 var_A4 = dword ptr -0A4h
.text:100060D0 var_9C = byte ptr -9Ch
.text:100060D0 var_94 = dword ptr -94h
.text:100060D0 var_90 = dword ptr -90h
.text:100060D0 var_8C = dword ptr -8Ch
.text:100060D0 var_88 = byte ptr -88h
.text:100060D0 var_80 = dword ptr -80h
.text:100060D0 var_7C = dword ptr -7Ch
.text:100060D0 var_74 = byte ptr -74h
.text:100060D0 var_6C = dword ptr -6Ch
.text:100060D0 var_68 = dword ptr -68h
.text:100060D0 var_60 = byte ptr -60h
.text:100060D0 var_58 = dword ptr -58h
.text:100060D0 var_54 = dword ptr -54h
.text:100060D0 var_4C = byte ptr -4Ch
.text:100060D0 var_44 = dword ptr -44h
.text:100060D0 var_40 = dword ptr -40h
.text:100060D0 var_38 = byte ptr -38h
.text:100060D0 var_C = dword ptr -0Ch
.text:100060D0 var_4 = dword ptr -4
.text:100060D0 arg_0 = dword ptr 4
.text:100060D0 arg_4 = dword ptr 8
.text:100060D0 arg_8 = dword ptr 0Ch
.text:100060D0 arg_C = dword ptr 10h
.text:100060D0 arg_10 = dword ptr 14h
.text:100060D0
.text:100060D0 push 0FFFFFFFFh
.text:100060D2 push offset loc_10051AA3
.text:100060D7 mov eax, large fs:0
.text:100060DD push eax
.text:100060DE sub esp, 0ACh
.text:100060E4 push ebx
.text:100060E5 push ebp
.text:100060E6 push esi
.text:100060E7 push edi
.text:100060E8 mov eax, dword_10067100
.text:100060ED xor eax, esp
.text:100060EF push eax
.text:100060F0 lea eax, [esp+0CCh+var_C]
.text:100060F7 mov large fs:0, eax
.text:100060FD mov ecx, [esp+0CCh+arg_0]
.text:10006104 mov [esp+0CCh+var_B4], 0
.text:1000610C mov eax, [ecx]
.text:1000610E mov edx, [eax+20h]
.text:10006111 call edx
.text:10006113 mov ebx, [esp+0CCh+arg_C]
.text:1000611A mov esi, 1
.text:1000611F mov ebp, eax
.text:10006121 cmp [ebx+10h], esi
.text:10006124 jz short loc_1000613A
.text:10006126 cmp [ebp+10h], esi
.text:10006129 jz loc_100061D3
.text:1000612F mov edx, ebp
.text:10006131 mov eax, ebx
.text:10006133 call sub_100194F0
.text:10006138 jmp short loc_1000614A
.text:1000613A ; ----------------------------
.text:1000613A
.text:1000613A loc_1000613A: ; CODE XREF: ECDSA_Verify+54j
.text:1000613A cmp [ebp+10h], esi
.text:1000613D jnz short loc_10006152
.text:1000613F mov edx, ebp
.text:10006141 mov eax, ebx
.text:10006143 call sub_100194F0
.text:10006148 neg eax
.text:1000614A
.text:1000614A loc_1000614A: ; CODE XREF: ECDSA_Verify+68j
.text:1000614A test eax, eax
.text:1000614C jge loc_100061D3
.text:10006152
.text:10006152 loc_10006152: ; CODE XREF: ECDSA_Verify+6Dj
.text:10006152 push esi
.text:10006153 lea edi, [esp+0D0h+var_9C]
.text:10006157 call Big_Create
.text:1000615C mov [esp+0CCh+var_4], 0
.text:10006167 mov [esp+0CCh+var_B4], esi
.text:1000616B cmp [ebx+10h], esi
.text:1000616E jz short loc_10006181
.text:10006170 cmp [esp+0CCh+var_8C], esi
.text:10006174 jz short loc_10006198
.text:10006176 mov edx, edi
.text:10006178 mov eax, ebx
.text:1000617A call sub_100194F0
.text:1000617F jmp short loc_10006194
.text:10006181 ; ----------------------------
.text:10006181
.text:10006181 loc_10006181: ; CODE XREF: ECDSA_Verify+9Ej
.text:10006181 cmp [esp+0CCh+var_8C], esi
.text:10006185 jnz short loc_100061D3
.text:10006187 lea edx, [esp+0CCh+var_9C]
.text:1000618B mov eax, ebx
.text:1000618D call sub_100194F0
.text:10006192 neg eax
.text:10006194
.text:10006194 loc_10006194: ; CODE XREF: ECDSA_Verify+AFj
.text:10006194 test eax, eax
.text:10006196 jl short loc_100061D3
.text:10006198
.text:10006198 loc_10006198: ; CODE XREF: ECDSA_Verify+A4j
.text:10006198 mov eax, [esp+0CCh+arg_10]
.text:1000619F mov edx, ebp
.text:100061A1 call sub_100031B0
.text:100061A6 test al, al
.text:100061A8 jnz short loc_100061D3
.text:100061AA push esi
.text:100061AB lea edi, [esp+0D0h+var_B0]
.text:100061AF call Big_Create
.text:100061B4 mov eax, [esp+0CCh+arg_10]
.text:100061BB mov edx, edi
.text:100061BD mov [esp+0CCh+var_B4], 3
.text:100061C5 call sub_10003200
.text:100061CA mov [esp+0CCh+var_B5], 0
.text:100061CF test al, al
.text:100061D1 jz short loc_100061D8
.text:100061D3
.text:100061D3 loc_100061D3: ; CODE XREF: ECDSA_Verify+59j
.text:100061D3 ; ECDSA_Verify+7Cj ...
.text:100061D3 mov [esp+0CCh+var_B5], 1
.text:100061D8
.text:100061D8 loc_100061D8: ; CODE XREF: ECDSA_Verify+101j
.text:100061D8 test byte ptr [esp+0CCh+var_B4], 2
.text:100061DD jz short loc_10006216
.text:100061DF mov esi, [esp+0CCh+var_A8]
.text:100061E3 mov edi, [esp+0CCh+var_A4]
.text:100061E7 and [esp+0CCh+var_B4], 0FFFFFFFDh
.text:100061EC add esi, esi
.text:100061EE add esi, esi
.text:100061F0 push esi ; size_t
.text:100061F1 push 0 ; int
.text:100061F3 push edi ; void *
.text:100061F4 call _memset
.text:100061F9 add esp, 0Ch
.text:100061FC push edi ; void *
.text:100061FD cmp esi, 10h
.text:10006200 jb short loc_10006209
.text:10006202 call sub_1003B549
.text:10006207 jmp short loc_1000620E
.text:10006209 ; ------------------------------
.text:10006209
.text:10006209 loc_10006209: ; CODE XREF: ECDSA_Verify+130j
.text:10006209 call _free
.text:1000620E
.text:1000620E loc_1000620E: ; CODE XREF: ECDSA_Verify+137j
.text:1000620E mov esi, 1
.text:10006213 add esp, 4
.text:10006216
.text:10006216 loc_10006216: ; CODE XREF: ECDSA_Verify+10Dj
.text:10006216 mov [esp+0CCh+var_4], 0FFFFFFFFh
.text:10006221 test byte ptr [esp+0CCh+var_B4], 1
.text:10006226 jz short loc_1000625A
.text:10006228 mov edi, [esp+0CCh+var_94]
.text:1000622C mov esi, [esp+0CCh+var_90]
.text:10006230 add edi, edi
.text:10006232 add edi, edi
.text:10006234 push edi ; size_t
.text:10006235 push 0 ; int
.text:10006237 push esi ; void *
.text:10006238 call _memset
.text:1000623D add esp, 0Ch
.text:10006240 push esi ; void *
.text:10006241 cmp edi, 10h
.text:10006244 jb short loc_1000624D
.text:10006246 call sub_1003B549
.text:1000624B jmp short loc_10006252
.text:1000624D ; ----------------------------
.text:1000624D
.text:1000624D loc_1000624D: ; CODE XREF: ECDSA_Verify+174j
.text:1000624D call _free
.text:10006252
.text:10006252 loc_10006252: ; CODE XREF: ECDSA_Verify+17Bj
.text:10006252 mov esi, 1
.text:10006257 add esp, 4
.text:1000625A
.text:1000625A loc_1000625A: ; CODE XREF: ECDSA_Verify+156j
.text:1000625A cmp [esp+0CCh+var_B5], 0
.text:1000625F jz short loc_10006268
.text:10006261 xor al, al
.text:10006263 jmp loc_1000649A
.text:10006268 ; ---------------------------
.text:10006268
.text:10006268 loc_10006268: ; CODE XREF: ECDSA_Verify+18Fj
.text:10006268 mov ecx, [esp+0CCh+arg_10]
.text:1000626F push ebp
.text:10006270 lea eax, [esp+0D0h+var_88]
.text:10006274 push eax
.text:10006275 call Modular_Inverse
.text:1000627A mov eax, [esp+0CCh+arg_8]
.text:10006281 mov [esp+0CCh+var_4], esi
.text:10006288 lea edi, [esp+0CCh+var_88]
.text:1000628C lea esi, [esp+0CCh+var_B0]
.text:10006290 call Multiply
.text:10006295 mov ecx, eax
.text:10006297 mov eax, ebp
.text:10006299 lea esi, [esp+0CCh+var_60]
.text:1000629D mov byte ptr [esp+0CCh+var_4], 2
.text:100062A5 call Mod
.text:100062AA mov byte ptr [esp+0CCh+var_4], 4
.text:100062B2 mov esi, [esp+0CCh+var_A8]
.text:100062B6 mov eax, [esp+0CCh+var_A4]
.text:100062BA add esi, esi
.text:100062BC add esi, esi
.text:100062BE push esi ; size_t
.text:100062BF push 0 ; int
.text:100062C1 push eax ; void *
.text:100062C2 mov edi, eax
.text:100062C4 call _memset
.text:100062C9 add esp, 0Ch
.text:100062CC push edi ; void *
.text:100062CD cmp esi, 10h
.text:100062D0 jb short loc_100062D9
.text:100062D2 call sub_1003B549
.text:100062D7 jmp short loc_100062DE
.text:100062D9 ; ---------------------------
.text:100062D9
.text:100062D9 loc_100062D9: ; CODE XREF: ECDSA_Verify+200j
.text:100062D9 call _free
.text:100062DE
.text:100062DE loc_100062DE: ; CODE XREF: ECDSA_Verify+207j
.text:100062DE add esp, 4
.text:100062E1 lea edi, [esp+0CCh+var_88]
.text:100062E5 mov eax, ebx
.text:100062E7 lea esi, [esp+0CCh+var_9C]
.text:100062EB call Multiply
.text:100062F0 mov ecx, eax
.text:100062F2 mov eax, ebp
.text:100062F4 lea esi, [esp+0CCh+var_74]
.text:100062F8 mov byte ptr [esp+0CCh+var_4], 5
.text:10006300 call Mod
.text:10006305 mov byte ptr [esp+0CCh+var_4], 7
.text:1000630D mov esi, [esp+0CCh+var_94]
.text:10006311 mov eax, [esp+0CCh+var_90]
.text:10006315 add esi, esi
.text:10006317 add esi, esi
.text:10006319 push esi ; size_t
.text:1000631A push 0 ; int
.text:1000631C push eax ; void *
.text:1000631D mov edi, eax
.text:1000631F call _memset
.text:10006324 add esp, 0Ch
.text:10006327 push edi ; void *
.text:10006328 cmp esi, 10h
.text:1000632B jb short loc_10006334
.text:1000632D call sub_1003B549
.text:10006332 jmp short loc_10006339
.text:10006334 ; ----------------------------
.text:10006334
.text:10006334 loc_10006334: ; CODE XREF: ECDSA_Verify+25Bj
.text:10006334 call _free
.text:10006339
.text:10006339 loc_10006339: ; CODE XREF: ECDSA_Verify+262j
.text:10006339 mov ecx, [esp+0D0h+arg_4]
.text:10006340 mov edx, [ecx]
.text:10006342 mov edx, [edx+14h]
.text:10006345 add esp, 4
.text:10006348 lea eax, [esp+0CCh+var_74]
.text:1000634C push eax
.text:1000634D lea eax, [esp+0D0h+var_60]
.text:10006351 push eax
.text:10006352 lea eax, [esp+0D4h+var_38]
.text:10006359 push eax
.text:1000635A call edx ; Ecurve_Mult2 (just like in Miracl)
.text:1000635C mov ecx, [esp+0CCh+arg_0]
.text:10006363 mov byte ptr [esp+0CCh+var_4], 8
.text:1000636B mov edx, [ecx]
.text:1000636D mov edx, [edx+3Ch]
.text:10006370 push eax
.text:10006371 lea eax, [esp+0D0h+var_4C]
.text:10006378 push eax
.text:10006379 call edx ; GetPoint
.text:1000637B mov ecx, eax
.text:1000637D mov eax, ebp
.text:1000637F lea esi, [esp+0CCh+var_B0]
.text:10006383 mov byte ptr [esp+0CCh+var_4], 9
.text:1000638B call Mod
.text:10006390 mov edx, eax
.text:10006392 mov eax, ebx
.text:10006394 call ; If (v=r)Compare то подпись верна
.text:10006399 mov esi, [esp+0CCh+var_A8]
.text:1000639D add esi, esi
.text:1000639F add esi, esi
.text:100063A1 push esi ; size_t
.text:100063A2 mov bl, al
.text:100063A4 mov eax, [esp+0D0h+var_A4]
.text:100063A8 push 0 ; int
.text:100063AA push eax ; void *
.text:100063AB mov edi, eax
.text:100063AD call _memset
.text:100063B2 add esp, 0Ch
.text:100063B5 push edi ; void *
.text:100063B6 cmp esi, 10h
.text:100063B9 jb short loc_100063C2
.text:100063BB call sub_1003B549
.text:100063C0 jmp short loc_100063C7
.text:100063C2 ; --------------------------
.text:100063C2
.text:100063C2 loc_100063C2: ; CODE XREF: ECDSA_Verify+2E9j
.text:100063C2 call _free
.text:100063C7
.text:100063C7 loc_100063C7: ; CODE XREF: ECDSA_Verify+2F0j
.text:100063C7 mov esi, [esp+0D0h+var_44]
.text:100063CE mov eax, [esp+0D0h+var_40]
.text:100063D5 add esp, 4
.text:100063D8 add esi, esi
.text:100063DA add esi, esi
.text:100063DC push esi ; size_t
.text:100063DD push 0 ; int
.text:100063DF push eax ; void *
.text:100063E0 mov edi, eax
.text:100063E2 call _memset
.text:100063E7 add esp, 0Ch
.text:100063EA push edi ; void *
.text:100063EB cmp esi, 10h
.text:100063EE jb short loc_100063F7
.text:100063F0 call sub_1003B549
.text:100063F5 jmp short loc_100063FC
.text:100063F7 ; -------------------------------
.text:100063F7
.text:100063F7 loc_100063F7: ; CODE XREF: ECDSA_Verify+31Ej
.text:100063F7 call _free
.text:100063FC
.text:100063FC loc_100063FC: ; CODE XREF: ECDSA_Verify+325j
.text:100063FC add esp, 4
.text:100063FF lea eax, [esp+0CCh+var_38]
.text:10006406 call CurveDestroy
.text:1000640B mov esi, [esp+0CCh+var_6C]
.text:1000640F mov eax, [esp+0CCh+var_68]
.text:10006413 add esi, esi
.text:10006415 add esi, esi
.text:10006417 push esi ; size_t
.text:10006418 push 0 ; int
.text:1000641A push eax ; void *
.text:1000641B mov edi, eax
.text:1000641D call _memset
.text:10006422 add esp, 0Ch
.text:10006425 push edi ; void *
.text:10006426 cmp esi, 10h
.text:10006429 jb short loc_10006432
.text:1000642B call sub_1003B549
.text:10006430 jmp short loc_10006437
.text:10006432 ; -------------------------
.text:10006432
.text:10006432 loc_10006432: ; CODE XREF: ECDSA_Verify+359j
.text:10006432 call _free
.text:10006437
.text:10006437 loc_10006437: ; CODE XREF: ECDSA_Verify+360j
.text:10006437 mov esi, [esp+0D0h+var_58]
.text:1000643B mov eax, [esp+0D0h+var_54]
.text:1000643F add esp, 4
.text:10006442 add esi, esi
.text:10006444 add esi, esi
.text:10006446 push esi ; size_t
.text:10006447 push 0 ; int
.text:10006449 push eax ; void *
.text:1000644A mov edi, eax
.text:1000644C call _memset
.text:10006451 add esp, 0Ch
.text:10006454 push edi ; void *
.text:10006455 cmp esi, 10h
.text:10006458 jb short loc_10006461
.text:1000645A call sub_1003B549
.text:1000645F jmp short loc_10006466
.text:10006461 ; ------------------------------
.text:10006461
.text:10006461 loc_10006461: ; CODE XREF: ECDSA_Verify+388j
.text:10006461 call _free
.text:10006466
.text:10006466 loc_10006466: ; CODE XREF: ECDSA_Verify+38Fj
.text:10006466 mov esi, [esp+0D0h+var_80]
.text:1000646A mov eax, [esp+0D0h+var_7C]
.text:1000646E add esp, 4
.text:10006471 add esi, esi
.text:10006473 add esi, esi
.text:10006475 push esi ; size_t
.text:10006476 push 0 ; int
.text:10006478 push eax ; void *
.text:10006479 mov edi, eax
.text:1000647B call _memset
.text:10006480 add esp, 0Ch
.text:10006483 push edi ; void *
.text:10006484 cmp esi, 10h
.text:10006487 jb short loc_10006490
.text:10006489 call sub_1003B549
.text:1000648E jmp short loc_10006495
.text:10006490 ; ---------------------------
.text:10006490
.text:10006490 loc_10006490: ; CODE XREF: ECDSA_Verify+3B7j
.text:10006490 call _free
.text:10006495
.text:10006495 loc_10006495: ; CODE XREF: ECDSA_Verify+3BEj
.text:10006495 add esp, 4
.text:10006498 mov al, bl
.text:1000649A
.text:1000649A loc_1000649A: ; CODE XREF: ECDSA_Verify+193j
.text:1000649A mov ecx, [esp+0CCh+var_C]
.text:100064A1 mov large fs:0, ecx
.text:100064A8 pop ecx
.text:100064A9 pop edi
.text:100064AA pop esi
.text:100064AB pop ebp
.text:100064AC pop ebx
.text:100064AD add esp, 0B8h
.text:100064B3 retn 14h
.text:100064B3 ECDSA_Verify endp
Эта процедура делает этого шага ..

Спойлер
1) w=s^-1 mod q
2) u1=h*w mod q
3) u2=r*w mod q
4) W(x,y) = u1*G+u2*R
5) compare Wx and r
Когда я обратный Ecurve_mult2 функции, я обнаружил, (х, у) для точки Р.
Rx=215141D4BFAD6E8B
Ry=78A17D3B13C04139
Хорошо, теперь давайте решать ECDLP
Используйте эту работу файл для ее решения:
GF := GF(9223372036854775783);
E := EllipticCurve([GF|3146016162463647028,1249575460707938849]);
G := E![4364257607069262974,6635184828027248904];
K := E![2400772458369871499,8692366448489677113];
/*
FactorCount:=1;
9223372034974450453;
*/
После 1 часа
Спойлер
(в моей машине) вы получите к
K = 5374398140324704042
Хорошо, использование ECCTool проверить все Params, если они все правы, мы будем продолжать вспять Последняя, третья
часть сериала J
Ну, что мы помним из третьей части? Это хеширование с модифицированной SHA-1 хэш и хэш использует
в процедуре проверки ECDSA.
Хорошо, давайте вернемся к процедуре проверки Главного.
Спойлер
.text:1000458C mov al, [esp+3F4h+var_1B]
.text:10004593 test al, 1Fh
.text:10004595 jnz short loc_100045A1
.text:10004597 mov [esp+3F4h+var_3E0], 0
.text:1000459F jmp short loc_100045AE
.text:100045A1 ; ----------------------------------
.text:100045A1
.text:100045A1 loc_100045A1: ; CODE XREF: MainCheck+195j
.text:100045A1 movzx eax, al
.text:100045A4 and eax, 1Fh
.text:100045A7 add eax, 6
.text:100045AA mov [esp+3F4h+var_3E0], eax
Ну, если второй байт третьей части, равна нулю, то Badboy, если 1 или больше, то
Спойлер
secondbyte=secondbyte+6
After it
.text:10004887 cmp [esp+3F4h+var_3E0], 7
.text:1000488C jnz short loc_100048D8
Ну, я играл немного с ним, и понял, что это делает лицензии, если
Спойлер
secondbyte +6 = 7, то, вы
будет генерировать ключ для версии 2009, если его 2, вы будете получать на 2010 версию, если ее 3, вы будете получать
на 2011 версии и т.д. Я не хотел, чтобы обратить вспять эту процедуру проверки лицензий настолько хороша, что в
Поэтому я заполнил все байты, кроме этого, и последний, с Zero. Я не заполнен последний байт с
нулю, чтобы сохранить ее размер, в противном случае он будет генерировать сериалы не нравится XXXXXX-XXXXXX-XXXXXX-XXXXXXXXXXXX-
XXXXXX
Я наполнил его "Q", вы можете заполнить с любой другой символ, как хотите, но вы должны изменить ECDSA
хэш, потому что это изменение, после изменения этого байта . Я надеюсь, вы понимаете, эта часть тоже .
Вы можете играть с этой лицензией проверки, и даже сделать кейгенов для 2011,2012 .. версий, я даю
это вам .
Теперь давайте код Keygen для этого.
Keygening
Самой большой проблемой для меня было то,
Спойлер
что я не мог сделать Keygen в АНМ. Потому что, Есть
не любой крипто ECDSA библиотеки на ассемблере. Независимо, я знаю, C + + и Delphi слишком . Мой C + +
код 100% прокомментировал, поэтому я не буду объяснять здесь. Кстати, C + + Keygen немного багги,
некоторые сериалы может не работать, потому что некоторые буферов (знаю точно) не был очищен.
Таким образом, позволяет проверить мои Delphi Keygen
Вы должны FGInt и ECGFp библиотеки для компиляции моего проекта.
Спойлер
procedure TForm1.Button1Click(Sender: TObject);
var
Serial, szSerial, rnd, Serpart1, Serpart2, Ser : string;
i : integer;
p,a,b,q,Gx,Gy,x,m,k,r,s,temp1,temp2,temp3 : TFGInt;
G,MulPoint : TECPoint;
begin
Base10StringToFGInt('9223372036854775783',p);
Base10StringToFGInt('3146016162463647028',a);
Base10StringToFGInt('1249575460707938849',b);
Base10StringToFGInt('9223372034974450453',q);
Base10StringToFGInt('4364257607069262974',Gx);
Base10StringToFGInt('6635184828027248904',Gy);
Base10StringToFGInt('5374398140324704042',x);
Base10StringToFGInt('4200423053714110858',m);
repeat
szSerial:='';
Serial:='';
randomize();
rnd:=IntToStr(random(12345678));
Base10StringToFGInt(rnd,k); // random number
G.XCoordinate:=Gx; // Gx
G.YCoordinate:=Gy; // Gy
G.Infinity:=FALSE; // lsb
ECPointKMultiple(G,p,a,k,MulPoint); // Multiply point with scalar
FGIntMod(MulPoint.XCoordinate,q,r); // Get Signature 1
FGIntToBase256String(r,Serpart1); // Serial1 base = 16
ConvertBase256StringToHexString(Serpart1,Serpart1); // Serial1 base = 16
FGintMulMod(r,x,q,temp1);
FGIntAdd(temp1,m,temp1);
FGIntMod(temp1,q,temp3);
FGIntModInv(k,q,temp2);
FGIntMulMod(temp3,temp2,q,s); // Get Signature 2
FGIntToBase256String(s,Serpart2); // Serial2 base = 256
ConvertBase256StringToHexString(Serpart2,Serpart2); // Serial2 base = 16
szSerial:=Serpart1+Serpart2+'000200000051'; // make Hex Serial
Base29Encrypt(szSerial,Serial); // Encrypt serial with Base-29
FGIntDestroy(k); // Destroy FGInt number
FGIntDestroy(r); // Destroy FGInt number
FGIntDestroy(s); // Destroy FGInt number
FGIntDestroy(temp1); // Destroy FGInt number
FGIntDestroy(temp2); // Destroy FGInt number
FGIntDestroy(temp3); // Destroy FGInt number
ECPointDestroy(G); // Destroy Point
ECPointDestroy(MulPoint); // Destroy point
until length(Serial) = $2A; // Length of output must be $2A chars
For i := 2 to length(Serial) do // remove the first char from serial
Begin
Ser := Ser + Serial[i];
End;
Edit1.Text:=Ser; // Show serial number
FGIntDestroy(p); // Destroy FGInt number
FGIntDestroy(a); // Destroy FGInt number
FGIntDestroy(b); // Destroy FGInt number
FGIntDestroy(q); // Destroy FGInt number
FGIntDestroy(Gx); // Destroy FGInt number
FGIntDestroy(Gy); // Destroy FGInt number
FGIntDestroy(x); // Destroy FGInt number
FGIntDestroy(m); // Destroy FGInt number
end;
Я надеюсь, ясно для вас. Теперь скомпилировать его и сделать несколько сериалов.
Примеры:
Спойлер
87A1BJ-9QD1VH-6P0HQH-AB53Q7-BC98AD-8BDVRB
8N0KYT-RTKN7P-6DN58P-JQDB40-6T0RMJ-HYMCBB
5233T5-BK8T4J-WBCAN4-8BXWAB-T7K08A-E9M2TQ
Есть к возможным сериалах: р, где К случайное число, К = (1, Q-1)
Попробуйте сами, в любом случае, они должны работать на любой машине.
References
Приветствия
Спойлер
KKR_WE_RULE
qpt^J
Особая благодарность вам за чтение этого учебника
keygen
 

Последний раз редактировалось forte; 16.09.2010 в 16:58.
Пользователь вне форума    
Наши Спонсоры
  , 12:56   #2
Форумчанин
 
Аватар для forte
 
Регистрация: 13.05.2010
Сообщений: 87

Репутация: 38 / 1
По умолчанию Re: Keygening TuneUp Utilities 2010

Наверно я забил што то добавит.Перевод от автора здес:
 

Последний раз редактировалось forte; 16.09.2010 в 14:47.
Пользователь вне форума    
  , 11:33   #3
Новичок
 
Регистрация: 20.11.2010
Сообщений: 1

Репутация: 0 / 0
По умолчанию Re: Keygening TuneUp Utilities 2010

Цитата:
Файл не найден
 
Пользователь вне форума    
  , 22:31   #4
Новичок
 
Регистрация: 31.10.2010
Сообщений: 2

Репутация: 0 / 0
По умолчанию Re: Keygening TuneUp Utilities 2010

Файл не найден
 
Пользователь вне форума    
 

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
TuneUp Utilities 2010 9.0.2000.16 Final Rus Cracked NAIK Софт для Windows 6 17.03.2012 17:25
Video vkontakte Triton Delphi 59 05.06.2011 15:48
Хит-парад вредоносных программ 2010 года alexfedoruk Архив новостей 8 13.01.2011 14:57
Microsoft откладывает выпуск пакета Office 2010 Ice_pro Архив новостей 0 30.11.2009 23:24



Часовой пояс GMT +2
Powered by vBulletin® 3.x.x Copyright ©2000 - 2012, Jelsoft Enterprises Ltd.

Copyright © 2008 - 2013 «HPC» Реклама на сайте Правила Форума Пользовательское соглашение Работа на сайте
При копировании материалов ставьте ссылку на источник
Все материалы представлены только в ознакомительных целях, администрация за их использование ответственности не несет.