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

 eXeL@B —› Вопросы новичков —› Программа с привязкой к железу
Посл.ответ Сообщение

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

Создано: 23 ноября 2009 02:56 · Поправил: Модератор
· Личное сообщение · #1

Доброго всем времени суток. Как говориться сразу к делу. Вообщем данная программа по идее привязывается либо к железу либо к cd носителю либо к флеш. Если раскроете архив увидите 2 ini файла
Norm.ini и Norm2.ini первый очевидно для флеша второй для железа судя по строчкам [SET] и [COMPUTE]
и NormaKey.ini куда заносятся сведения о регистрации.
Запустив программу можно поковырять раздел регистрации находящийся во вкладке Помощь. Для регистрации необходимо ввести
Номер договора :
Pin-код: (начинается с букв NP для этой версии программы)
Код: (будет автоматически сгенерирован по Pinу)
и Ключ:
При нажатии на ОК программа перезапуститься и новые данные впишутся в NormaKey.ini

Прежде чем лезть в отладчик откроем программу в Restorator 2007. Т.к. программа написана на Delphi и ничем не упакована в разделе RCData мы можем увидеть интригующие формочики TCODEGENERATEFRM, TEDITPROFUCTFRM, TKEYGENERATEFRM, TKEYMAINTFRM, TFRMREGISTER. С последней кстати нам и придется работать.

Открывая в Olly программу сразу смотрим все доступные Text Strings где мы можем обнаружить весьма интригующие записи

Code:
  1. Address=004AFAAA        Disassembly=ASCII "TFrmRegister"
  2.  
  3. Address=004C36B3    Disassembly=MOV ECX,NormaF.004C3A54   Text string=ASCII "NormaKey.Ini"



Поставим брекпоинт на 2 строчке для NormaKey.ini , т.к. если пройти по 1 адрессу там недалеко начинается некая загадочная функция связанная с TFrmRegister но весьма туманно.

Копание в близлежащих к строчке содержащей NormaKey.ini мало что дало....если подняться выше и поставить брекпоинт на саму корневую функцию по адресу
Code:
  1. 004C34CC  /$ 55             PUSH EBP

и пошагово пытаться отследить что произойдёт то особого явного эффекта это не даёт, но если дойти до момента когда программа выдаёт сообщение об отсутствии регистрации то можно наткнуть на интересную фукнцию

Code:
  1. 004A93F4  /$ 55             PUSH EBP


на которую ссылаются два Local calls from 004A9B3B, 004A9B74

И содержащей строки
Code:
  1. 004A949D  |. B8 50954A00    MOV EAX,NormaF.004A9550                  ; ASCII "noNNRegister"
  2. 004A94BC  |. B8 68954A00    MOV EAX,NormaF.004A9568                  ; ASCII "noRegister"
  3. 004A94F5  |. B8 7C954A00    MOV EAX,NormaF.004A957C                  ; ASCII "noFoundDoc"


и 3 джампа....
Code:
  1. 004A946D  |. 75 78          JNZ SHORT NormaF.004A94E7    
  2. 004A9498  |. 74 1F          JE SHORT NormaF.004A94B9
  3. 004A94B7  |. EB 1D          JMP SHORT NormaF.004A94D6

которые управляют выдаваемыми сообщениями noNNRegister noRegister noFoundDoc

Если поставить брекпоинт и на 004A93F4 и потом пошагово смотреть что произойдёт то можно наткнуться на
Code:
  1. 004A9429  |. FF51 74        CALL DWORD PTR DS:[ECX+74]

и при дохождения до этой строчки мы будем отправленны
на
Code:
  1. 004BDD98  /. 55             PUSH EBP

который достаточно часто используется программой.

Непомню на каком шаге и где именно но я откопал что программа оперирует с адресом 009D1F14 в Dump'e , там она хранит сведения из NormaKey.ini при запуске и работы программы можно увидеть что там будет введёный нами ключ.

Вот вроде и всё что я умудрился нарыть.....только вот всё равно непонятно что делать дальше =( Посдкажите где зарыта собака!
Премного благодарен заранее!

P.S. ссылка на саму программку :
http://ifolder.ru/15111882
ПАРОЛЬ: 1





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

Создано: 23 ноября 2009 17:32
· Личное сообщение · #2

004C38B9 CALL 0047A83C <- преобразование кода в hex строку
0047AC88 /$ 83C4 F8 ADD ESP,-8 <- начало процедуры проверки кода



Ранг: 116.5 (ветеран), 3thx
Активность: 0.070
Статус: Участник

Создано: 24 ноября 2009 02:49
· Личное сообщение · #3

И сюда не забудь глянуть
Code:
  1. 0047AC9B   CALL 0047AB6C
  2. 0047ACA0   CMP WORD PTR SS:[ESP],3C69
  3. 0047ACA6   JNZ SHORT 0047ACAF




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

Создано: 29 ноября 2009 11:14 · Поправил: Модератор
· Личное сообщение · #4

Для начала Большое Спасибо откликнувшимся за помощь! А теперь собственно к делу.
Гм....покопался я в этих функциях, но ситуация ещё сильнее усложнилась=( (для мозга). Да там есть процедура генерации ключа по адресу
# 0047AC9B CALL 0047AB6C
Но изменение значения ESP чтобы # 0047ACA6 JNZ SHORT 0047ACAF
сработал ничего не давало...так же как собственно и вообще отключение это функции...конечно наверно многие сейчас посоветуют написать кейген, но на это у меня крайне маловато опыта....
Если я правильно понял то это и есть та функция генерации ключа которую нужно как то оформить....???

Code:
  1. 0047AB9F  |> 8B5424 0C      /MOV EDX,DWORD PTR SS:[ESP+C]
  2. 0047ABA3  |. 33C0           |XOR EAX,EAX
  3. 0047ABA5  |. 8A4424 08      |MOV AL,BYTE PTR SS:[ESP+8]
  4. 0047ABA9  |. 8BD8           |MOV EBX,EAX
  5. 0047ABAB  |. 03DB           |ADD EBX,EBX
  6. 0047ABAD  |. 8D1C5B         |LEA EBX,DWORD PTR DS:[EBX+EBX*2]
  7. 0047ABB0  |. 8B04DE         |MOV EAX,DWORD PTR DS:[ESI+EBX*8]
  8. 0047ABB3  |. 8B0C24         |MOV ECX,DWORD PTR SS:[ESP]
  9. 0047ABB6  |. 8B0C81         |MOV ECX,DWORD PTR DS:[ECX+EAX*4]
  10. 0047ABB9  |. 8B44DE 04      |MOV EAX,DWORD PTR DS:[ESI+EBX*8+4]
  11. 0047ABBD  |. 8B3C24         |MOV EDI,DWORD PTR SS:[ESP]
  12. 0047ABC0  |. 8B0487         |MOV EAX,DWORD PTR DS:[EDI+EAX*4]
  13. 0047ABC3  |. 8B5CDE 08      |MOV EBX,DWORD PTR DS:[ESI+EBX*8+8]
  14. 0047ABC7  |. 8B3C24         |MOV EDI,DWORD PTR SS:[ESP]
  15. 0047ABCA  |. 8B1C9F         |MOV EBX,DWORD PTR DS:[EDI+EBX*4]
  16. 0047ABCD  |. 03D3           |ADD EDX,EBX
  17. 0047ABCF  |. 03DA           |ADD EBX,EDX
  18. 0047ABD1  |. 8BFA           |MOV EDI,EDX
  19. 0047ABD3  |. C1EF 07        |SHR EDI,7
  20. 0047ABD6  |. 33D7           |XOR EDX,EDI
  21. 0047ABD8  |. 03CA           |ADD ECX,EDX
  22. 0047ABDA  |. 03D1           |ADD EDX,ECX
  23. 0047ABDC  |. 8BF9           |MOV EDI,ECX
  24. 0047ABDE  |. C1E7 0D        |SHL EDI,0D
  25. 0047ABE1  |. 33CF           |XOR ECX,EDI
  26. 0047ABE3  |. 03C1           |ADD EAX,ECX
  27. 0047ABE5  |. 03C8           |ADD ECX,EAX
  28. 0047ABE7  |. 8BF8           |MOV EDI,EAX
  29. 0047ABE9  |. C1EF 11        |SHR EDI,11
  30. 0047ABEC  |. 33C7           |XOR EAX,EDI
  31. 0047ABEE  |. 03D8           |ADD EBX,EAX
  32. 0047ABF0  |. 03C3           |ADD EAX,EBX
  33. 0047ABF2  |. 8BFB           |MOV EDI,EBX
  34. 0047ABF4  |. C1E7 09        |SHL EDI,9
  35. 0047ABF7  |. 33DF           |XOR EBX,EDI
  36. 0047ABF9  |. 03D3           |ADD EDX,EBX
  37. 0047ABFB  |. 03DA           |ADD EBX,EDX
  38. 0047ABFD  |. 8BFA           |MOV EDI,EDX
  39. 0047ABFF  |. C1EF 03        |SHR EDI,3
  40. 0047AC02  |. 33D7           |XOR EDX,EDI
  41. 0047AC04  |. 03CA           |ADD ECX,EDX
  42. 0047AC06  |. 8BD1           |MOV EDX,ECX
  43. 0047AC08  |. C1E2 07        |SHL EDX,7
  44. 0047AC0B  |. 33CA           |XOR ECX,EDX
  45. 0047AC0D  |. 03C1           |ADD EAX,ECX
  46. 0047AC0F  |. 8BD3           |MOV EDX,EBX
  47. 0047AC11  |. C1EA 0F        |SHR EDX,0F
  48. 0047AC14  |. 33C2           |XOR EAX,EDX
  49. 0047AC16  |. 03D8           |ADD EBX,EAX
  50. 0047AC18  |. 8BC3           |MOV EAX,EBX
  51. 0047AC1A  |. C1E0 0B        |SHL EAX,0B
  52. 0047AC1D  |. 33D8           |XOR EBX,EAX
  53. 0047AC1F  |. 8B4424 10      |MOV EAX,DWORD PTR SS:[ESP+10]
  54. 0047AC23  |. 33C3           |XOR EAX,EBX
  55. 0047AC25  |. 8B5424 0C      |MOV EDX,DWORD PTR SS:[ESP+C]
  56. 0047AC29  |. 895424 10      |MOV DWORD PTR SS:[ESP+10],EDX
  57. 0047AC2D  |. 894424 0C      |MOV DWORD PTR SS:[ESP+C],EAX
  58. 0047AC31  |. 83C6 0C        |ADD ESI,0C
  59. 0047AC34  |. FF4C24 14      |DEC DWORD PTR SS:[ESP+14]
  60. 0047AC38  |.^0F85 61FFFFFF  \JNZ NormaF.0047AB9F




Но вряд-ли всё так просто....проверка не заканчивается только проверкой ключа.....где-то там ещё сидит проверка железа на котором запускается программка


004C36F4 |. FF13 CALL DWORD PTR DS:[EBX] по этому адресу за первым прогоном при запуске запускается функция

00479584 /. 55 PUSH EBP которая обслуживает

004795C3 |. 50 PUSH EAX ; |Section
004795C4 |. E8 FFD5F8FF CALL <JMP.&kernel32.GetPrivateProfileStr>; \GetPrivateProfileStringA

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

Был замечен некий ключ Otl

004C3708 |. B9 883A4C00 MOV ECX,NormaF.004C3A88 ; ASCII "Otl"
004C370D |. BA 783A4C00 MOV EDX,NormaF.004C3A78 ; ASCII "SETUP"

Именно этому значению предшествует вытаскивание из Normakey.ini ключа а затем идёт получение информации о носителе

004C3747 |. 50 PUSH EAX ; |RootPathName
004C3748 |. E8 C334F4FF CALL <JMP.&kernel32.GetVolumeInformation>; \GetVolumeInformationA

В стеке можно увидеть

Code:
  1. 0012FCE4   009D1B84  |RootPathName = "C:"
  2. 0012FCE8   0012FE40  |VolumeNameBuffer = 0012FE40
  3. 0012FCEC   00000100  |MaxVolumeNameSize = 100 (256.)
  4. 0012FCF0   0012FF40  |pVolumeSerialNumber = 0012FF40
  5. 0012FCF4   0012FF48  |pMaxFilenameLength = 0012FF48
  6. 0012FCF8   0012FF44  |pFileSystemFlags = 0012FF44
  7. 0012FCFC   00000000  |pFileSystemNameBuffer = NULL
  8. 0012FD00   00000000  \pFileSystemNameSize = NULL



Не помню точно по какому адресу но IDA выдавала мне структуру в которой велось сравнения этих значений и затем редирект на функцию содержащей

004A93F4 /$ 55 PUSH EBP ( функция выдающая ASCII "noNNRegister" и тд )

А да... так же вызвала подозрения функция по этому адресу.....При трейсинге Otl выходил сюда....

00402BAC /$ 53 PUSH EBX

P.S. кстати версия что это версия программы которую я тут выложил для flash носителя оказалась верной! Мне попалась в руки версия для ПК, так там только NormaKey.ini генерируется на диск C:\ и оставляется в
C:\Norma\Norma\NormaKey.ini


Есть у кого соображения куда двигаться дальше?



Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 01 декабря 2009 11:48
· Личное сообщение · #5

ImpulsEG пишет:
Есть у кого соображения куда двигаться дальше?

ImpulsEG пишет:
Но изменение значения ESP чтобы # 0047ACA6 JNZ SHORT 0047ACAF сработал ничего не давало.

Судя по последней фразе стоит сначала изучить матчасть для новичков. Изменение ESP может привести к нарушению функционирования. Нужно научится или пачить проги правильно, либо делать "JUMP" в отладчике в "правильное" место. Про кейген ты на 150% прав, а вот алгоритм генерации за тебя вряд ли кто будет разбирать, а сам ты еще "мало обучен".
Как говорил Никулин : "тренируйтесь на кошечках".



Ранг: 116.5 (ветеран), 3thx
Активность: 0.070
Статус: Участник

Создано: 01 декабря 2009 12:31 · Поправил: Valemox
· Личное сообщение · #6

ImpulsEG пишет:
Есть у кого соображения куда двигаться дальше?

Судя по тому, чо - если нет перехода по 0047ACA6 JNZ 0047ACAF то надпись "Ключ не соответствует коду"
боле не появляетЦа - то ты на правильном пути.
Vovan666 же уже подсказал все
Vovan666 пишет:
83C4F8 ADD ESP,-8 <- начало процедуры проверки кода


Code:
  1. 0047AC88  ADD ESP,-8
  2. 0047AC8B  MOV ECX,DWORD PTR DS:[EDX]
  3. 0047AC8D  MOV DWORD PTR SS:[ESP],ECX    ;в стек 1-я половина считанного RN
  4. 0047AC90  MOV ECX,DWORD PTR DS:[EDX+4]
  5. 0047AC93  MOV DWORD PTR SS:[ESP+4],ECX  ;в стек 2-я половина считанного RN

Ну а дальше копай сам ибо
tundra37 пишет:
а вот алгоритм генерации за тебя вряд ли кто будет разбирать

+адын



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

Создано: 04 декабря 2009 00:21 · Поправил: ImpulsEG
· Личное сообщение · #7

Ну в том то и загвоздка собственно что эта процедура проверки кода ничего не даёт! Там не надпись должна пропасть, а открываться документы должны.
Даже если это процедура проверки кода...то код генерируется по Pin-коду и Ключу и должна как то опираться на информацию о железе. И лишь потом ещё где-то проверятся. Т.к. программа перестает работать при копировании её с исходного носителя. Но даже если её удалить с исходного носителя(Флешка) и записать обратно то всё будет работать.
Пока мне ни разу не удалось добиться "нормальной" (зарегистрированной) работы программы.



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

Создано: 04 декабря 2009 09:53
· Личное сообщение · #8

ImpulsEG пишет:
попытка поменять JNZ на JNE ничего не дала.

эт ты так кашу не сваришь ты попробуй JNZ на JE



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

Создано: 04 декабря 2009 14:33
· Личное сообщение · #9

))) Блин, только заметил )))) Бывает....



Ранг: 310.8 (мудрец), 29thx
Активность: 0.430
Статус: Участник

Создано: 04 декабря 2009 16:15
· Личное сообщение · #10

ImpulsEG пишет:
Ну в том то и загвоздка собственно что эта процедура проверки кода ничего не даёт! Там не надпись должна пропасть, а открываться документы должны.

Так тебе про это и говорят. Замена jump или ESP дает только удаление надписи, а для "прохождения проверки" надо разбирать алгоритм проверки и "подсовывать" правильные данные или правильный ключ...




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

Создано: 04 декабря 2009 18:09
· Личное сообщение · #11

Раз уж подфорум новичков, позволю себе такой пост. Руки бы отрывал за смену перехода на противоположный. Калёным железом выжгите и повесьте в сортире: либо на менять на jmp, либо на nop.


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


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