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

 eXeL@B —› Вопросы новичков —› Пытаюсь поломать програмку "посложнее" CTPro и зашёл в тупик.
Посл.ответ Сообщение

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

Создано: 31 июля 2009 16:06
· Личное сообщение · #1

Всем привет.
Мелкие програмки с простой защитой у меня ломать уже полусается. Вот решил совместить приятное с полезным и поломать прогу посложнее. А программа эта CTPro (какая-то диагностическая хрень) работает эта программа с адаптером. На номер которого она и завязана. Адаптер ничто иное как USB-COM с небольшим дополнением в протоколе - а именно серийным номером. Выдернул я адаптер из компа и запускаю программу. Последняя ругается, что мол нет нужного адаптера или его номер неверен. Тут оказалось всё бонально, прога проверяла список USB устрйоств и сравнивала PID/VID, отломано по адресу 0072B1FE. Теперь программа явно ругается что номер не соотвествет действительности. Сообщение выводит из подпрограммы начинающейся по адресу 0072E934 предварительно поместив в edx адрес 00729C24 - текст сообщения. Как оно вызывает это я так и не нашёл и найти не могу. Ткните носом если не сложно? А лучше на место где она проверяет валидность серийника.
Могу дать свой ctp.idb (10 метров в раре). Программа написана на Delphi и сжата UPXом с "изменениями". IDA сама не поняла, что это чадо Delphi и пришлось подгружать сигнатуры. В результате разгребать код стало приятнее.

Заранее огромное спасибо. Не пинайте больно, я только учусь.



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

Создано: 31 июля 2009 16:09
· Личное сообщение · #2

Забыл самое главное
rapidshare.com/files/262128980/setup_ctpro.exe.html



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

Создано: 04 августа 2009 14:13
· Личное сообщение · #3

Чё никто ничего не скажет? Ну хоть чем-нитть помогите.
Как можно выснить от куда вызвана "функция"? Подозреваю что вызывается она не явно, а например указателем на неё. Как в АСМе выглядить вызов по указателю из переменной?




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 04 августа 2009 14:43 · Поправил: Модератор
· Личное сообщение · #4

глянул я мельком прогу. там часть кода выполняется только при наличии ключа:
Code:
  1. 0074BE14      55            PUSH EBP
  2. 0074BE15    .  8BEC          MOV EBP,ESP
  3. 0074BE17    .  33C9          XOR ECX,ECX
  4. 0074BE19    .  51            PUSH ECX
  5. 0074BE1A    .  51            PUSH ECX
  6. 0074BE1B    .  51            PUSH ECX
  7. 0074BE1C    .  51            PUSH ECX
  8. 0074BE1D    .  51            PUSH ECX
  9. 0074BE1E    .  51            PUSH ECX
  10. 0074BE1F    .  53            PUSH EBX
  11. 0074BE20    .  56            PUSH ESI
  12. 0074BE21    .  57            PUSH EDI
  13. 0074BE22    .  8BF2          MOV ESI,EDX
  14. 0074BE24    .  8BD8          MOV EBX,EAX
  15. 0074BE26    .  33C0          XOR EAX,EAX
  16. 0074BE28    .  55            PUSH EBP
  17. 0074BE29    .  68 07C07400   PUSH ctp.0074C007
  18. 0074BE2E    .  64:FF30       PUSH DWORD PTR FS:[EAX]
  19. 0074BE31    .  64:8920       MOV DWORD PTR FS:[EAX],ESP
  20. 0074BE34    .  31C0          XOR EAX,EAX
  21. 0074BE36    .  74 08         JE SHORT ctp.0074BE40
  22. 0074BE38    .  26:5E         POP ESI
  23. 0074BE3A    .  6A 3A         PUSH 3A
  24. 0074BE3C    .  3E:3939       CMP DWORD PTR DS:[ECX],EDI
  25. 0074BE3F    .  51            PUSH ECX
  26. 0074BE40    >  0000          ADD BYTE PTR DS:[EAX],AL
  27. 0074BE42       00            DB 00
  28. 0074BE43       00            DB 00

начиная с адреса 0074BE42 идут нули, поставь суда 0074BE14 бряк в OllyDbg и при наличии ключа посмотри что за код там будит.
ещё один кусок
Code:
  1. 0072DEDC     55              PUSH EBP
  2. 0072DEDD     8BEC            MOV EBP,ESP
  3. 0072DEDF     81C4 E0FAFFFF   ADD ESP,-520
  4. 0072DEE5     53              PUSH EBX
  5. 0072DEE6     33DB            XOR EBX,EBX
  6. 0072DEE8     899D E0FAFFFF   MOV DWORD PTR SS:[EBP-520],EBX
  7. 0072DEEE     899D E4FAFFFF   MOV DWORD PTR SS:[EBP-51C],EBX
  8. 0072DEF4     899D E8FAFFFF   MOV DWORD PTR SS:[EBP-518],EBX
  9. 0072DEFA     8945 F8         MOV DWORD PTR SS:[EBP-8],EAX
  10. 0072DEFD     33C0            XOR EAX,EAX
  11. 0072DEFF     55              PUSH EBP
  12. 0072DF00     68 23E27200     PUSH ctp.0072E223
  13. 0072DF05     64:FF30         PUSH DWORD PTR FS:[EAX]
  14. 0072DF08     64:8920         MOV DWORD PTR FS:[EAX],ESP
  15. 0072DF0B     31C0            XOR EAX,EAX
  16. 0072DF0D     74 08           JE SHORT ctp.0072DF17
  17. 0072DF0F     26:5E           POP ESI
  18. 0072DF11     6A 3A           PUSH 3A
  19. 0072DF13     3E:37           AAA
  20. 0072DF15     36:42           INC EDX
  21. 0072DF17     35 3DD5E714     XOR EAX,14E7D53D
  22. 0072DF1C     C025 3AD518CB E>SHL BYTE PTR DS:[CB18D53A],0E8                 

а вот собственно процедура заполнения кусков кода
Code:
  1. 0072BA00     52              PUSH EDX
  2. 0072BA01     50              PUSH EAX
  3. 0072BA02     8B85 E0FEFFFF   MOV EAX,DWORD PTR SS:[EBP-120]
  4. 0072BA08     C1E0 04         SHL EAX,4
  5. 0072BA0B     99              CDQ
  6. 0072BA0C     030424          ADD EAX,DWORD PTR SS:[ESP]
  7. 0072BA0F     135424 04       ADC EDX,DWORD PTR SS:[ESP+4]
  8. 0072BA13     83C4 08         ADD ESP,8
  9. 0072BA16     52              PUSH EDX
  10. 0072BA17     50              PUSH EAX
  11. 0072BA18     8BC3            MOV EAX,EBX
  12. 0072BA1A     99              CDQ
  13. 0072BA1B     030424          ADD EAX,DWORD PTR SS:[ESP]
  14. 0072BA1E     135424 04       ADC EDX,DWORD PTR SS:[ESP+4]
  15. 0072BA22     83C4 08         ADD ESP,8
  16. 0072BA25     0FB611          MOVZX EDX,BYTE PTR DS:[ECX]
  17. 0072BA28     8810            MOV BYTE PTR DS:[EAX],DL
  18. 0072BA2A     43              INC EBX
  19. 0072BA2B     41              INC ECX
  20. 0072BA2C     83FB 10         CMP EBX,10
  21. 0072BA2F   ^ 75 C7           JNZ SHORT ctp.0072B9F8
  22. 0072BA31     FF85 E0FEFFFF   INC DWORD PTR SS:[EBP-120]
  23. 0072BA37     FF8D B8FEFFFF   DEC DWORD PTR SS:[EBP-148]
  24. 0072BA3D   ^ 0F85 CFFEFFFF   JNZ ctp.0072B912


-----
[nice coder and reverser]




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

Создано: 04 августа 2009 16:31
· Личное сообщение · #5

Если не секрет, а как вы пришли к этому выводу? Методику бы... Хотябы в паре слов.




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 04 августа 2009 16:41 · Поправил: Модератор
· Личное сообщение · #6

ну я обошёл в отладчике все проверки, после чего прога упала на странном адресе, т.е. там нули одни)) после чего прошёл в отладчике вручную до того адреса ну и наткнулся на код восстанавливающий те процедуры.

з.ы. при наличии ключа отодрать ехе будет не сложно.

-----
[nice coder and reverser]




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

Создано: 04 августа 2009 16:55
· Личное сообщение · #7

К сожалению у меня ключ с другим серийным номером. т.е. программа привязывается к номеру ключа. номер к которому привязана данная программа 57544203.
Ключ определяется в системе как COM порт. Драйвер к нему обычный CDC протокол usbser.sys
Да и по коду видно, что делают они CreateFile/WriteFile/ReadFile. смотрел я отладчиком что они там шлют - ничего вразумительного. Завтра попробую выложить диалог с тем ключом что у меня есть.

Хотел спросить, как вы так быстро обошли все проверки? Я целый день ходил по ним пока запустил прогу, но она так же у меня падает в том адресе, а в эбауте у неё ужас
И что же проверяется по адресу 0072B1FE? Почему первую проверку ключа она не проходит уже тут даже с имеющимся у меня ключом?




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 04 августа 2009 17:05 · Поправил: Модератор
· Личное сообщение · #8

Spider84 пишет:
Хотел спросить, как вы так быстро обошли все проверки?

да там же всё как на ладони.

Spider84 пишет:
И что же проверяется по адресу 0072B1FE?

там махинации какие-то с устройством:
Code:
  1. 0072B1F7     80BD DAFEFFFF 0>CMP BYTE PTR SS:[EBP-126],0
  2. 0072B1FE     75 1F           JNZ SHORT ctp.0072B21F
  3. ... смотрим выше по коду
  4. 0072B0FA     E8 0556E0FF     CALL ctp.00530704 // зависит от результата этой функции
  5. 0072B0FF     85C0            TEST EAX,EAX
  6. 0072B101     0F85 DA000000   JNZ ctp.0072B1E1
  7. 0072B107     C685 DAFEFFFF 0>MOV BYTE PTR SS:[EBP-126],1 // вот важное место
  8. ...
  9. 00530704: 
  10. ...
  11. 00530730     6A 00           PUSH 0
  12. 00530732     68 800000A0     PUSH A0000080
  13. 00530737     6A 03           PUSH 3
  14. 00530739     6A 00           PUSH 0
  15. 0053073B     6A 00           PUSH 0
  16. 0053073D     68 000000C0     PUSH C0000000
  17. 00530742     8B45 FC         MOV EAX,DWORD PTR SS:[EBP-4]
  18. 00530745     E8 3655EDFF     CALL <ctp.@System@@LStrToPChar$qqrx17System@AnsiString>
  19. 0053074A     50              PUSH EAX
  20. 0053074B     E8 347BEDFF     CALL <JMP.&KERNEL32.CreateFileA> // попытка открыть
  21. ...
  22. 00F0E1C4  01A3BBD8  |FileName = "\?\usb#vid_058f&pid_6362#058f312d81b#{a5dcbf10-6530-11d2-9>
  23. 00F0E1C8  C0000000  |Access = GENERIC_READ|GENERIC_WRITE
  24. 00F0E1CC  00000000  |ShareMode = 0
  25. 00F0E1D0  00000000  |pSecurity = NULL
  26. 00F0E1D4  00000003  |Mode = OPEN_EXISTING
  27. 00F0E1D8  A0000080  |Attributes = NORMAL|WRITE_THROUGH|NO_BUFFERING
  28. 00F0E1DC  00000000  \hTemplateFile = NULL

Spider84 пишет:
К сожалению у меня ключ с другим серийным номером. т.е. программа привязывается к номеру ключа. номер к которому привязана данная программа 57544203.


несовсем понял эту фразу... там же инсталятор? или он привязан к конкретному ключу? серийник можно и подменить, после чего посмотреть, как восстановится код.

-----
[nice coder and reverser]




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

Создано: 05 августа 2009 10:30 · Поправил: Spider84
· Личное сообщение · #9

Spider84 пишет:
К сожалению у меня ключ с другим серийным номером. т.е. программа привязывается к номеру ключа. номер к которому привязана данная программа 57544203.
Hellspawn пишет:
несовсем понял эту фразу... там же инсталятор? или он привязан к конкретному ключу? серийник можно и подменить, после чего посмотреть, как восстановится код.

Инсталятор уже с привязанной программой. Вот о подмене сирийника и думаю но пока не пойму как. Как тока припру адаптьер так сразу этим займусь.
Спасибо за наводки. Думаю не раньше выходных будет.

ЗЫ. А где бы почитать каким образом передаются параметры в дельфёвые функи типа LStrToPChar?




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 05 августа 2009 12:13
· Личное сообщение · #10

Spider84 пишет:
ЗЫ. А где бы почитать каким образом передаются параметры в дельфёвые функи типа LStrToPChar?


через регистры в основном

-----
[nice coder and reverser]



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


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