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

 eXeL@B —› Протекторы —› Armadillo (Туторы, скрипты, плагины etc)
<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . >>
Посл.ответ Сообщение

Ранг: 189.9 (ветеран), 334thx
Активность: 0.30
Статус: Участник

Создано: 13 апреля 2012 17:49 · Поправил: Модератор
· Личное сообщение · #1

Armadillo Key Tool

--> github.com/mrexodia/akt <--


Tutorial:
PDF: --> Armadillo Key Tool Manual.pdf <--
Видео: --> Armadillo_ECDSA_Patching <-- (требует установленный Flash Player)

| Сообщение посчитали полезным: matrix, huckfuck, AKAB, Isaev, plutos

Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 01 мая 2012 21:28
· Личное сообщение · #2

Смотри KeyMaker.c там из encryption_template высчитываются все значения. Хотя при формирования ключа Y не нужен,P и Pub статичны(и вроде тоже не нужны для формирования).Симметрик ни что иное как crc32(без последнего not eax) от encryption_template.



Ранг: 281.8 (наставник), 272thx
Активность: 0.250.01
Статус: Участник
Destroyer of protectors

Создано: 01 мая 2012 21:35
· Личное сообщение · #3

Vovan666 пишет:
Смотри KeyMaker.c там из encryption_template высчитываются все значения. Хотя при формирования ключа Y не нужен,P и Pub статичны(и вроде тоже не нужны для формирования).Симметрик ни что иное как crc32(без последнего not eax) от encryption_template.

как брутить теперь понял, правда наврятли эт к чему-то приведёт. вообшем может не правильно изъясняюсь, попробую ещё раз: пихаю в ген от вела P, Y, Pvt, Pub, SymmetricKey, Name (имя юзера) и hwid. и получаю валидный ключ который прога хавает. и вроде всё ок, но пихать в релизы веловский ген штоле?! а рипать ипанёшься.



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

Создано: 01 мая 2012 21:54
· Личное сообщение · #4

Для этого обычно модифицируют исходник KeyMaker.c, убирая оттуда этапы получения P, Y, Pvt, Pub, SymmetricKey из encryption_template.



Ранг: 281.8 (наставник), 272thx
Активность: 0.250.01
Статус: Участник
Destroyer of protectors

Создано: 01 мая 2012 22:13 · Поправил: MasterSoft
· Личное сообщение · #5

int пишет:
Для этого обычно модифицируют исходник KeyMaker.c, убирая оттуда этапы получения P, Y, Pvt, Pub, SymmetricKey из encryption_template.

Воооот, самое оно))) Может подскажешь конкретней, чо вырезать от туда надо? а то как я говорил в сях не оч.

FrenFolio
Спс, ща будем пробовать)

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


Ранг: 340.0 (мудрец), 22thx
Активность: 0.120
Статус: Участник
THETA

Создано: 02 мая 2012 01:15 · Поправил: FrenFolio
· Личное сообщение · #6

Vovan666 пишет:
Симметрик ни что иное как crc32(без последнего not eax) от encryption_template.

Вообще-то не совсем верно. Для схем Short V3 используется хеширование Encryption template (он же Private Key в тулзе vel'а, обычная текстовая строка) по алгоритму MD5, но а для всех предыдущих - CRC32, точнее алгоритм CRC32 JamCRC (включая схему Unsigned).

int пишет:
Для этого обычно модифицируют исходник KeyMaker.c, убирая оттуда этапы получения P, Y, Pvt, Pub, SymmetricKey из encryption_template.

MasterSoft пишет:
Воооот, самое оно))) Может подскажешь конкретней, чо вырезать от туда надо? а то как я говорил в сях не оч.

В принципе, в кг можно вставлять P и Pub и без предварительного расчета, потому как это константы для определенной схемы и уровня ключа (кроме Unsigned, там не используется подпись ключа).
Для кг нужно закомментировать строки с получением Symmetric Key (подставив вместо них значения, полученные после брута и последующего фильтрования по значению Check Sum из массива публичных ключей):
в функции CreateSignedKey 2 раза - это расчет для схем V2, V3 Signed (а) и V3 Short, включая подпись ECDSA (б)
а) symmetrickey=crc32(temp, strlen(temp), NewCRC32)^hardwareID;
б) symmetrickey=i[0]^i[1]^hardwareID;
где hardwareID - форматированное значение из строки в число HWID (число типа int, 32 бита).
Для Unsigned ключей - в функции CreateKey:
k[0]=((unsigned long)crc32(cooked, strlen(cooked), NewCRC32))^hardwareID^HWIDXOR;
- первые 4 байта в буфере k - это symmetrickey, поксоренный на HWID.

Второе изменение, которое нужно сделать, - это заменить вызов функции GenerateKeyNumberFromString для расчета Pvt из MakeSignature (подсчет значений a, b для сообщения по схеме Эль-Гамаля) на свой Pvt (уже подсчитанный), то есть заменить

GenerateKeyNumberFromString(pvtkeystring, p, &pvt, keysystem, ((keysystem==KS_V3 || keysystem==KS_SHORTV3) ? level+1 : 0));

на вызов
BigInt_FromString(YOUR_PVT, &pvt);
где YOUR_PVT - твой Pvt, в ASCII формате (причем должен быть обязательно записан как десятичное число!), &pvt - это буфер, куда будет записан заданный Pvt, уже в формате большого числа.

В принципе, можно и не заморачиваться с сырцом армы вообще, а просто взять и пропатчить библиотеку "CodeGen.dll" - это стандартная библиотека для генерации ключей, которая есть в каждой версии армы. Могу показать, каким образом ее пропатчить, чтобы можно было использовать в кейгене при своих значениях Pvt и Symmetric Key, без знания приватного ключа (то есть как в тулзе vel'а при нажатии на Create) . Если кому-то это нужно, конечно.

-----
Программист SkyNet


| Сообщение посчитали полезным: MasterSoft, DimitarSerg, Gideon Vi, mak, obfuskator


Ранг: 340.0 (мудрец), 22thx
Активность: 0.120
Статус: Участник
THETA

Создано: 02 мая 2012 11:47 · Поправил: FrenFolio
· Личное сообщение · #7

Итак, пропатчить "CodeGen.dll" (здесь эта библиотека взята из армы v8.60 Public Build) можно следующим образом.

Для примера ниже использованы значения Symmetric Key = 79D02C58 и Pvt = 325777739216451639733 (число в десятичной системе счисления). Эти значения получены для игры "Luxor Evolved", скачать ее можно здесь. Кстати, в игрушке использовано 4 сертификата, в данном примере кг дает ключи сроком действия на 30 минут, так что он только для демонстрации метода.

I. Схема Unsigned

изменено с
Code:
  1. 10003193  |.  6A FF         PUSH -1                                  ; NewCRC32
  2. 10003195  |.  50            PUSH EAX                                 ; strlen(cooked)
  3. 10003196  |.  8D4C24 14     LEA ECX,DWORD PTR SS:[ESP+14]
  4. 1000319A  |.  51            PUSH ECX                                 ; cooked
  5. 1000319B  |.  E8 B0EEFFFF   CALL 10002050                            ; CodeGen.10002050
  6. 100031A0  |.  338424 2C0200>XOR EAX,DWORD PTR SS:[ESP+22C]           ; k[0]=((unsigned long)crc32(cooked, strlen(cooked), NewCRC32))^hardwareID^HWIDXOR;
  7. ...
  8. 100031D3  |.  83C4 14       ADD ESP,014h

на
Code:
  1. 10003193      B8 4808322B   MOV EAX,79D02C58                         ; заданный Symmetric Key
  2. 10003198      90            NOP
  3. 10003199      90            NOP
  4. 1000319A      90            NOP                                     
  5. 1000319B      90            NOP
  6. 1000319C      90            NOP
  7. 1000319D      90            NOP
  8. 1000319E      90            NOP
  9. 1000319F      90            NOP
  10. 100031A0  |.  338424 2C0200>XOR EAX,DWORD PTR SS:[ESP+22C]           ; k[0]=((unsigned long)crc32(cooked, strlen(cooked), NewCRC32))^hardwareID^HWIDXOR;
  11. ...
  12. 100031D3  |.  83C4 14       ADD ESP,8

Так как коллизий для CRC32 очень много, то можно легко сбрутить Encryption Tempate (но он будет не тот, что задан разрабом!) по известному Symmetric Key и тогда не нужно будет патчить "CodeGen.dll". На моем компе < 1 минуты уходит для нахождения хотя бы одной строки длиной 8 символов из набора {0...9 | A...Z} .

II. Схемы V2 и V3 Signed

изменено с
Code:
  1. 100074C2  |.  6A FF            PUSH -1                                  ; NewCRC32
  2. 100074C4  |.  50               PUSH EAX                                 ; strlen(temp)
  3. 100074C5  |.  8D9424 3C040000  LEA EDX,DWORD PTR SS:[ESP+43C]
  4. 100074CC  |.  52               PUSH EDX                                 ; temp
  5. 100074CD  |.  E8 7EABFFFF      CALL 10002050                            ; crc32(temp, strlen(temp), NewCRC32)
  6. 100074D2  |.  8BE8             MOV EBP,EAX
  7. 100074D4  |.  33AC24 54060000  XOR EBP,DWORD PTR SS:[ESP+654]           ; symmetrickey=crc32(temp, strlen(temp), NewCRC32)^hardwareID;
  8. 100074DB      83C4 0C          ADD ESP,0Ch

на
Code:
  1. 100074C2    BD 215DFDF3     MOV EBP,79D02C58                         ; заданный Symmetric Key
  2. 100074C7    33AC24 54060000 XOR EBP,DWORD PTR SS:[ESP+654] ; Symmetric Key (XOR) HardwareID
  3. 100074CE    90              NOP
  4. 100074CF    90              NOP
  5. 100074D0    90              NOP
  6. 100074D1    90              NOP
  7. 100074D2    90              NOP
  8. 100074D3    90              NOP
  9. 100074D4    90              NOP                                     
  10. 100074D5    90              NOP
  11. 100074D6    90              NOP
  12. 100074D7    90              NOP
  13. 100074D8    90              NOP
  14. 100074D9    90              NOP
  15. 100074DA    90              NOP
  16. 100074DB    90              NOP
  17. 100074DC    90              NOP
  18. 100074DD    90              NOP


III. Схема Short V3

патч Symmetric key

изменено с
Code:
  1. 1000741A  |.  6A 00         PUSH 0                                   ; /* ShortV3 format */
  2. 1000741C  |.  8D9424 380400>LEA EDX,DWORD PTR SS:[ESP+438]
  3. 10007423  |.  52            PUSH EDX                                 ; temp
  4. 10007424  |.  8D4424 2C     LEA EAX,DWORD PTR SS:[ESP+2C]
  5. 10007428  |.  50            PUSH EAX                                 ; i
  6. 10007429  |.  E8 82D4FFFF   CALL 100048B0                            ; GetKeyMD5(i, temp, 0);
  7. 1000742E  |.  8B6C24 34     MOV EBP,DWORD PTR SS:[ESP+34]            ; i[0]
  8. 10007432  |.  336C24 30     XOR EBP,DWORD PTR SS:[ESP+30]            ; i[0]^i[1]
  9. 10007436  |.  83C4 0C       ADD ESP,0C
  10. 10007439  |.  33AC24 48060000  XOR EBP,DWORD PTR SS:[ESP+648]           ; symmetrickey=i[0]^i[1]^hardwareID;

на
Code:
  1. 1000741A    BD 215DFDF3     MOV EBP,79D02C58                   ; заданный Symmetric Key
  2. 1000741F    33AC24 48060000 XOR EBP,DWORD PTR SS:[ESP+648] ; Symmetric Key (XOR) HardwareID
  3. 10007426    90              NOP
  4. 10007427    90              NOP
  5. 10007428    90              NOP                                    
  6. 10007429    90              NOP                                     
  7. 1000742A    90              NOP
  8. 1000742B    90              NOP
  9. 1000742C    90              NOP
  10. 1000742D    90              NOP
  11. 1000742E    90              NOP                                     
  12. 1000742F    90              NOP
  13. 10007430    90              NOP
  14. 10007431    90              NOP
  15. 10007432    90              NOP                                   
  16. 10007433    90              NOP
  17. 10007434    90              NOP
  18. 10007435    90              NOP
  19. 10007436    90              NOP
  20. 10007437    90              NOP
  21. 10007438    90              NOP
  22. 10007439    90              NOP                                     
  23. 1000743A    90              NOP
  24. 1000743B    90              NOP
  25. 1000743C    90              NOP
  26. 1000743D    90              NOP
  27. 1000743E    90              NOP
  28. 1000743F    90              NOP

Патч расчетного Pvt на свой (этот патч будет общим также для схем Unsigned и Signed V2 и V3 > подмена расчетного Pvt)
замена ф-ии GenerateKeyNumberFromString(pvtkeystring, p, &pvt, keysystem);
на ф-ию BigInt_FromString(const char *string, BigInt target)
(с параметром = строке Pvt как ASCII -> = "325777739216451639733")
Code:
  1. 10006FD2    83FE 01         CMP ESI,1
  2. 10006FD5    74 09           JE SHORT 10006FE0                        ; CodeGen.10006FE0
  3. 10006FD7    83FE 02         CMP ESI,2
  4. 10006FDA    74 04           JE SHORT 10006FE0                        ; CodeGen.10006FE0
  5. 10006FDC    33C0            XOR EAX,EAX
  6. 10006FDE    EB 0A           JMP SHORT 10006FEA                       ; CodeGen.10006FEA
  7. 10006FE0    8B8424 78040000 MOV EAX,DWORD PTR SS:[ESP+478]
  8. 10006FE7    83C0 01         ADD EAX,1
  9. 10006FEA    50              PUSH EAX                                 ; keysystem
  10. 10006FEB    8B4424 48       MOV EAX,DWORD PTR SS:[ESP+48]            ; указатель на pvtkeystring (Encryption Template)
  11. 10006FEF    8D5424 38       LEA EDX,DWORD PTR SS:[ESP+38]
  12. 10006FF3    52              PUSH EDX                                 ; &pvt
  13. 10006FF4    57              PUSH EDI                                 ; p
  14. 10006FF5    50              PUSH EAX                                 ; pvtkeystring
  15. 10006FF6    8BC6            MOV EAX,ESI
  16. 10006FF8    E8 A3FAFFFF     CALL 10006AA0                            ; GenerateKeyNumberFromString(pvtkeystring, p, &pvt, keysystem);
  17. 10006FFD    8B4C24 5C       MOV ECX,DWORD PTR SS:[ESP+5C]
  18. 10007001    8B5424 44       MOV EDX,DWORD PTR SS:[ESP+44]            ; указатель на pvt
  19. 10007005    8B4424 40       MOV EAX,DWORD PTR SS:[ESP+40]
  20. 10007009    51              PUSH ECX                                 ; y
  21. 1000700A    57              PUSH EDI                                 ; p
  22. 1000700B    52              PUSH EDX                                 ; pvt
  23. 1000700C    50              PUSH EAX                                 ; pub
  24. 1000700D    E8 5EF9FFFF     CALL 10006970                            ; BigInt_PowerModulus(pub, pvt, p, y);
  25. 10007012    8B35 2C0B0210   MOV ESI,DWORD PTR DS:[10020B2C]
  26. 10007018    83C4 20         ADD ESP,020h

на
Code:
  1. 10006FD2    90              NOP
  2. 10006FD3    90              NOP
  3. 10006FD4    90              NOP
  4. 10006FD5    90              NOP
  5. 10006FD6    90              NOP
  6. 10006FD7    90              NOP
  7. 10006FD8    90              NOP
  8. 10006FD9    90              NOP
  9. 10006FDA    90              NOP
  10. 10006FDB    90              NOP
  11. 10006FDC    90              NOP
  12. 10006FDD    90              NOP
  13. 10006FDE    90              NOP
  14. 10006FDF    90              NOP
  15. 10006FE0    90              NOP
  16. 10006FE1    90              NOP
  17. 10006FE2    90              NOP
  18. 10006FE3    90              NOP
  19. 10006FE4    90              NOP
  20. 10006FE5    90              NOP
  21. 10006FE6    90              NOP
  22. 10006FE7    90              NOP
  23. 10006FE8    90              NOP
  24. 10006FE9    90              NOP
  25. 10006FEA    90              NOP
  26. 10006FEB    90              NOP                                      
  27. 10006FEC    90              NOP
  28. 10006FED    90              NOP
  29. 10006FEE    8B4424 44       MOV EAX,DWORD PTR SS:[ESP+44] ; указатель на строку Pvt в ASCII (число в десятичной форме)
  30. 10006FF2    8B5424 34       MOV EDX,DWORD PTR SS:[ESP+34] ; буфер с форматированным большим числом Pvt
  31. 10006FF6    52              PUSH EDX
  32. 10006FF7    50              PUSH EAX
  33. 10006FF8    E8 93E9FFFF     CALL 10005990                            ; BigInt_FromString(const char *string, BigInt target)
  34. 10006FFD    8B4C24 54       MOV ECX,DWORD PTR SS:[ESP+54]            ; указатель на Y (в формате большого числа)
  35. 10007001    8B5424 3C       MOV EDX,DWORD PTR SS:[ESP+3C]            ; указатель на Pvt
  36. 10007005    8B4424 38       MOV EAX,DWORD PTR SS:[ESP+38]            ; указатель на Pub
  37. 10007009    51              PUSH ECX                                 ; y
  38. 1000700A    57              PUSH EDI                                 ; p
  39. 1000700B    52              PUSH EDX                                 ; pvt
  40. 1000700C    50              PUSH EAX                                 ; pub
  41. 1000700D    E8 5EF9FFFF     CALL 10006970                            ; BigInt_PowerModulus(pub, pvt, p, y);
  42. 10007012    8B35 2C0B0210   MOV ESI,DWORD PTR DS:[10020B2C]
  43. 10007018    83C4 18         ADD ESP,018h


-----
Программист SkyNet




Ранг: 30.8 (посетитель), 1thx
Активность: 0.010
Статус: Участник

Создано: 02 мая 2012 12:13
· Личное сообщение · #8

Никто не пробовал, выбручивать Pvt под Level 10?
На современном компе с NVIDIA за пару дней вполне реально…




Ранг: 340.0 (мудрец), 22thx
Активность: 0.120
Статус: Участник
THETA

Создано: 02 мая 2012 12:24 · Поправил: FrenFolio
· Личное сообщение · #9

В одно сообщение всё не влезло, так что пришлось продолжить здесь.

В кейгене (ниже код для MASM) нужно объявить вызов CreateCode3 из внешней dll и задать полученный Pvt (в десятичном виде).

Code:
  1.  
  2. EXTERN                     C          CreateCode3 : PROC
  3.  
  4. ;#####################################################################
  5.  
  6. .data
  7.  
  8. ;#####################################################################
  9.  
  10. ; получена из Resolve DLP v1.3 = Pvt по введенной Y (тулза от vel'a)
  11. Pvt_string                              DB "325777739216451639733",0   
  12.  
  13. ;#####################################################################
  14.  
  15. .data?
  16.  
  17. ;#####################################################################
  18.  
  19. ; буфер для имени, на которое генерируется ключ
  20. lpName                       DB     128 dup (?) 
  21.  
  22. ;#####################################################################
  23.  
  24. .code
  25.  
  26. ;#####################################################################
  27.  
  28. GenerateKey             PROC
  29.          
  30.          ; вызов функции CreateCode3 напрямую из "CodeGen.dll"
  31.          PUSH 0            ; -> OtherInfo 5 -> равен = 0, если не используется
  32.          PUSH 0            ; -> OtherInfo 4 -> равен = 0, если не используется
  33.          PUSH 0            ; -> OtherInfo 3 -> равен = 0, если не используется
  34.          PUSH 0            ; -> OtherInfo 2 -> равен = 0, если не используется
  35.          PUSH 0            ; -> OtherInfo 1 -> равен = 0, если не используется
  36.          PUSH 0            ; -> HWID (преобразованный в DWORD), и равен = 0, если не используется
  37.          PUSH OFFSET Pvt_string
  38.          PUSH OFFSET lpName
  39.          PUSH 6            ; -> ключи типа Signed V3 Level 6
  40.          CALL CreateCode3
  41.          ; v EAX -> указатель на сгенерированный ключ
  42.          ADD ESP, 9*4         ; -> восстановить стек после вызова
  43.  
  44. @Output_Serial:
  45.  
  46.          ; пример ключа
  47.          ; Reg Name: FrenFolio
  48.          ; Key: 2CF5-AB77-9770-ABA1-D8E1-A45F-D2A1-B047-99C6-D5DE-9EE9-E78B
  49.          invoke OutputSerial
  50.          
  51. @Return:
  52.          
  53.          Ret
  54. GenerateKey EndP


Вот ссылка на кейген с пропатченной dll (пример)- ТыЦ (там же приложена "CodeGen_ORIG.dll" - это оригинальная dll от армы, без изменений, приложил на всякий пожарный).

-----
Программист SkyNet




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

Создано: 02 мая 2012 12:55
· Личное сообщение · #10

Iona пишет:
На современном компе с NVIDIA за пару дней вполне реально…

Где-то была статья про то, как в ECC на кривой Коблица два 4 младших бита "сбрасываются", если можно так выразиться. Получаем ECDSA-109 вместо ECDSA-113. Был бы алгоритм брута хоть какой, я бы перевел на CUDA, не вопрос.

По поводу DLP калькулятора: выложить не могу, т.к. не я писал. Как выяснилось благодаря vel'у, писал и не BUBlic, а взял готовый и сгенерировал константы под арму. Если TSRh одобрит, то могу рипнуть из ArmaTool, как уже сделали пару негодяев из ROGUE (ребята с этой команды, собственно, и сообщили о рипе). В любом случае для уровней 5 - 9 инструмент от vel'а работает в десятки раз быстрее.



Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 02 мая 2012 17:19
· Личное сообщение · #11

Обновил дампер зашифрованных сертификатов(certs_crypted.bin) для армы 8.x 9.x
Теперь извлекается соль и дополнительная информация по сертификатам.

bf1b_02.05.2012_EXELAB.rU.tgz - Arma_sert_extractor.rar

| Сообщение посчитали полезным: DimitarSerg, tihiy_grom, ajax, mak, obfuskator


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

Создано: 02 мая 2012 17:26
· Личное сообщение · #12

Кто-нибудь может выложить ДЛП ресолвер 1.3 ?! (если он не приватен)

-----
ds




Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 02 мая 2012 17:29
· Личное сообщение · #13

DimitarSerg
http://exelab.ru/f/action=vthread&forum=3&topic=16291

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

Ранг: 281.8 (наставник), 272thx
Активность: 0.250.01
Статус: Участник
Destroyer of protectors

Создано: 06 мая 2012 11:52
· Личное сообщение · #14

про багу, правда толком ничего не ясно ибо всё на французском, может кто-нибудь разъяснит на досуге? на тутсах Apuromafo выкладывал рабочий ген для level 10 используя эту багу.

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

Ранг: 189.9 (ветеран), 334thx
Активность: 0.30
Статус: Участник

Создано: 06 мая 2012 12:56
· Личное сообщение · #15

А что за релиз от NGEN?



Ранг: 281.8 (наставник), 272thx
Активность: 0.250.01
Статус: Участник
Destroyer of protectors

Создано: 06 мая 2012 13:11
· Личное сообщение · #16

NikolayD пишет:
А что за релиз от NGEN?

https://ssl.exelab.ru/faq/Armadillo



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

Создано: 06 мая 2012 13:14
· Личное сообщение · #17

MasterSoft
Помнишь нулевую подпись в аспре? Так вот это тоже самое. При проверке цифровой подписи должны соблюдаться обязательные условия. Для каждой ЭЦП они свои. Ну так вот для ECDSA надо проверять подпись на бесконечно удаленную точку.

Look here:
http://en.wikipedia.org/wiki/Elliptic_Curve_DSA

Глава "Signature verification algorithm". Смотри только на формулы. Что будет, если нам удастся сделать w = 0? А будет вот что:

r == 0 * G + 0 * Qa

Чтобы это было верным, надо просто сделать r = 0. Едем дальше. Надо сделать w = 0. Если просто для этого попытаться сделать s = 0, то Armadillo падает (баг первый). А можно, учитывая данное выражение:

w = s^(-1) mod N

s = 0 не катит. Что можно сделать еще? Можно еще s = N сделать. Итак, в KeyMaker.c наблюдаем N (он такой для всех программ):

5192296858534827627896703833467507
Переводим в HEX:
FFFFFFFFFFFFFFFDBF91AF6DEA73
Обратный порядок байт:
73EA6DAF91BFFDFFFFFFFFFFFFFF

r это координата x точки эллиптической кривой. Подсчитываем r:
1267584991505177
480DCA1242B19
192B24A1DC800400000000000000

Получаем таким образом две половинки ЭЦП.

О проблемах:
1) Исправление данной ошибки можно сделать БЕЗ изменения алгоритма генерации ключа и вообще каких-либо изменений в схеме. Требуется просто вставить проверку бесконечно удаленной точки в алгоритме проверки ключа. Все! Значит в следующих версиях армы этой ошибки уже не будет (если она все еще есть).
2) Как вы могли заметить, hash игнорируется. А что это значит? Значит подпись "верна" для любого ключа. А значит если в программе 3 сертификата, например таких (и в таком порядке):

Продленная trial-лицензия на 60 дней (дополнительные 60 дней к 30 дням триала)
Лицензия на 10 устройств
Неограниченное кол-во устройств

В таком случае мы сможем сделать ключ только для первого сертификата. А он отстой полный.

Вывод: Armadillo лохи, NGEN молодцы, метод отстойный и не пригодный.

P.S. У меня есть мой авторский перевод этой статьи. Но выкладывать не хочу, т.к. нужно дорабатывать. Если кто-то очень сильный и смелый хочет довести его (перевод) до ума, велкам в ЛС.

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

Ранг: 39.2 (посетитель), 16thx
Активность: 0.020
Статус: Участник

Создано: 06 мая 2012 13:16 · Поправил: bbuc
· Личное сообщение · #18

MasterSoft
Почти литературный перевод его поста на английский язык:
http://sebsauvage.net/paste/?d29fe48fbdcce4ab#rBLWM0STwdOg1NNC0XZ+9G3iKTyVEZb5AGytJDSZ9n4=

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

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

Создано: 06 мая 2012 13:22
· Личное сообщение · #19

Да, а еще в конце статьи, он дрочит на TEA и пытается доказать "что сбрутить нереально". Приводит в пример 200 дней на своем компьютере (это уже не 1000 лет) и вот он перевел на CUDA (как ему это удалось??? ) и выиграл множитель 3 - 4. Для сравнения. Мой брутер требует 18 дней на моем компьютере и на CUDA не переносится вообще! Я уже не говорю о распараллеливании вычислений на несколько машин и более мощном компьютере. Нереально, да?

Короче кг/ам статейка. Всю работу сделали NGEN, а уже по ключу видно, что надо было сделать.



Ранг: 189.9 (ветеран), 334thx
Активность: 0.30
Статус: Участник

Создано: 06 мая 2012 13:29 · Поправил: NikolayD
· Личное сообщение · #20

MasterSoft пишет:
https://ssl.exelab.ru/faq/Armadillo

это я уже видел. Только где и чего они зарелизили?

new: нашёл )))



Ранг: 30.8 (посетитель), 1thx
Активность: 0.010
Статус: Участник

Создано: 06 мая 2012 15:46
· Личное сообщение · #21

Где-то с версии 7,40 эта бага уже не работает, при вводе ключа прога падает.
И генерить ключ можна было под любой сертификат.



Ранг: 281.8 (наставник), 272thx
Активность: 0.250.01
Статус: Участник
Destroyer of protectors

Создано: 06 мая 2012 16:14
· Личное сообщение · #22

Iona
да, это правда.

int пишет:
73EA6DAF91BFFDFFFFFFFFFFFFFF

это N

int пишет:
r это координата x точки эллиптической кривой. Подсчитываем r:
1267584991505177
480DCA1242B19
192B24A1DC800400000000000000

как посчитать r?



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

Создано: 06 мая 2012 16:56
· Личное сообщение · #23

Iona пишет:
И генерить ключ можна было под любой сертификат.

Пример в студию! ;)



Ранг: 30.8 (посетитель), 1thx
Активность: 0.010
Статус: Участник

Создано: 06 мая 2012 21:52
· Личное сообщение · #24

int пишет:
Пример в студию! ;)

Это не моя задача вытаскивать приват на паблик.
В свое время Vel делал утилиту выбираешь файл и через десять минут,
получаешь ключи под все сертификаты, а дальше выбираешь то что тебе подходит.



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

Создано: 07 мая 2012 00:05
· Личное сообщение · #25

Ну понятно. Короче рассказываю. Я не придумал, что это работает только для одного сертификата. Да, можно найти программу, где это будет работать на всех сертификатах. Но в некоторых версиях (причем я не разобрался, это кастомные версии исключительно или просто начиная с какой-то версии) есть ДОПОЛНИТЕЛЬНАЯ проверка, введенная против патча публичных ключей, либо патча функции CheckECDSASignature. Проверка заключается в том, что из симметричного ключа получается контрольная сумма. Далее идет перебор массива публичных ключей - совпала подпись, значит проверяем полученную из серийного номера контрольную сумму с тем, что стоит в массиве для данного публичного ключа. Не совпало - ключ неверный (патч обнаружен!). Эту проверку тоже начали патчить. Т.е. делали патч CheckECDSASignature и патч в 1 - 2 - ух местах, чтобы "разблокировать заблокированные сертификаты", как называли это в TSRh.

Таким образом, чтобы работали все сертификаты, можно сделать ключ с нулевой подписью + запатчить эти проверки. Какая нафиг разница патчить CheckECDSASignature или делать ключ с нулевой подписью, если все равно надо что-то патчить?

В любом случае, я свое мнение озвучил. Метод отстой и не пригодный. Как было верно замечено, сейчас уже вполне пора задуматься о взломе ECDSA-113. Без всяких "но", которыми являются патчи и некорректные реализации проверок.



Ранг: 30.8 (посетитель), 1thx
Активность: 0.010
Статус: Участник

Создано: 07 мая 2012 05:38
· Личное сообщение · #26

У меня такое впечатление, что мы учились по разным туторам.
Все это делается чистым кейгенном, без всякого патчинга.



Ранг: 456.3 (мудрец), 340thx
Активность: 0.280.02
Статус: Участник
Android Reverser

Создано: 07 мая 2012 09:46
· Личное сообщение · #27

Iona
Ну дык если ты так уверен в своей правоте, приведи прогу, где нормальный серт будет 2-м или 3-м, ну и сгенеренную валидную пару для этого серта. Если ты прав - интег признает, что он лошок. А так, нет оснований не доверять знаниям интега.

-----
SaNX


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

Ранг: 30.8 (посетитель), 1thx
Активность: 0.010
Статус: Участник

Создано: 07 мая 2012 12:10
· Личное сообщение · #28

@SaNX
Не вижу смысла что-то доказывать.
В прошлый раз инт по удалял все мои доказательства.
Пусть каждый останется при своем мнении, а кому надо тот разберется.
А то одни не смогли сбрутить симкей и выложили релиз по нулевой точте.
Другие не смогли разобраться как кейгенить под разные сертификаты, и выложили брут.
А между прочим разработчики не пофиксили баг по нулевой точке,
Просто после очередной перекомпиляции он исчез сам собой.
Так что в будущем он еще может вернуться.



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

Создано: 07 мая 2012 13:55
· Личное сообщение · #29

Iona пишет:
У меня такое впечатление, что мы учились по разным туторам.

У меня такое впечатление, что вам надо получать знания исследуя программы в дизассемблере/отладчике, а не читая чужие статьи в стиле "HowTo". Без обид.

SaNX пишет:
приведи прогу, где нормальный серт будет 2-м или 3-м

А смысл? Я такую прогу тоже могу найти))) Задача найти прогу, где это не работает. И вот вам пример:

VBto Converter

Брутим симметричные ключи (armabrut_cuda -a 0 -h 04c3b887, ...):
04c3b887 = 05d7c05c VB=>VJ#
0918289a = f614cb51 VB=>Delphi
1854411b = dbbceae9 VB=>VBNET
290f0746 = 47462cc0 VB=>MSVC++
529aa7f3 = 143bd728 VB6=>C#, VBNET
49bc23e6 = 47bea239 VB=>VBNET
60c6de0c = 642e7301 VB=>Delphi
6c5ba562 = 08fc7ea6 VB=>MSVC++
6d61b46f = 391c4023 Full version Time Expert
59375011 = 139616b6 VB=>CPP Builder
8bd6f1ec = f3782773 VB=>VJ#
b9470c9f = 9a4f6d96 VB=>CPP Builder
c4865161 = e65626ce VB6=>VCNET
f72ad6f4 = 2218248e VB6=>VCNET
f76c591e = 4a82be7e Full version Time

Пытаемся сделать ключ для Full Version Time Expert
BC54-6640
Test
01END8-GVMD74-M3QQ7U-KDNY8V-ZZFZZZ-ZZZZZZ-ZWCJP9-51VJ00-800000-000000

Получаем "Key valid and has been stored". Пробуем сделать тоже самое для "Full Version Time"

01END8-GVMHVU-BUT77U-KDNY8V-ZZFZZZ-ZZZZZZ-ZWCJP9-51VJ00-800000-000000

Получаем "The name/key you entered does not appear to be valid. Please try again." (и так для любого из оставшихся 13 сертификатов). В данном случае нам повезло, и мы имеем возможность зарегистрировать программу с лучшим сертификатом без патча. Но такое везение очень редкое, как правило.

А вот патч, который решает эту проблему (правда в этом патче подпись не проверяется вообще, но это можно исправить). Мне лень сейчас выдергивать Security.dll и показывать, что там надо патчить, но это войдет в мою статью номер 4 (напомню, что статья номер 2 находится под правкой Юпитера, статья по 3-ей арме пока не дописана, а в 4-ой я планирую рассмотреть механизм взлома, включая все этапы кейгенинга). Что интересно, это версия армы 5.20 или 5.40 (не помню), задолго до появления линеек 6.xx и 7.xx.

http://rghost.ru/private/37954956/c309f4c05e29eaa068cf9628f96304a2
Пароль: ExEL@B2012



Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 07 мая 2012 18:29
· Личное сообщение · #30

int
offtop
для VBto Converter надо еще второй other info заполнять для Test это 000Ch
Это так на случай если кто-то будет себе hwid для пробы менять.




Ранг: 673.3 (! !), 400thx
Активность: 0.40.31
Статус: Участник
CyberMonk

Создано: 08 мая 2012 14:24
· Личное сообщение · #31

Вопрос немного не по теме, скиньте пожалуйста ECDLP Solver v0.3a by MR.HAANDI который под куда был модифицирован, был в сети, но ссылки не доступны. Спасибо

-----
RE In Progress [!] Coding Hazard [!] Stay Clear of this Cube



<< . 1 . 2 . 3 . 4 . 5 . 6 . 7 . 8 . 9 . >>
 eXeL@B —› Протекторы —› Armadillo (Туторы, скрипты, плагины etc)
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


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