Исследование программы (написание кейгена)

Тема в разделе "WASM.RESEARCH", создана пользователем Searcher, 28 окт 2004.

  1. Searcher

    Searcher New Member

    Публикаций:
    0
    Регистрация:
    28 окт 2004
    Сообщения:
    24
    Господа специалисты!

    Исследую одну прогу - защита - ввод правильного ключа (5 полей). Задался целью написать кейген. Но так как я начинающий, то многие моменты не догоняю, может кто поможет.

    При попытке ввода любого ключа программа выдает сообщение о неправильности ключа. В общем в аттаче кусок кода, перед выводом сообщения об ошибке.

    Как я понял, в зависимости от результата строки

    :00407FD4 0F94C3 sete bl

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







    [​IMG] _423665383__code.txt
     
  2. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    И еще две недели биться будешь, если так будешь информацию давать. Вопрос.


    Код (Text):
    1.  
    2. :00408004 E837AE0300              call 00442E40
    3. :00408009 84DB                    test bl, bl
    4. :0040800B 7415                    je 00408022
    5.  




    Если ты этот переходик инвертируешь, то что скажет программа?
     
  3. Searcher

    Searcher New Member

    Публикаций:
    0
    Регистрация:
    28 окт 2004
    Сообщения:
    24
    Если пропатчить 7415 на EB15 или 7515, то все нормально, можно ввести любой серийник и программа его проглотит. Пока что думаю над генерацией дальше, буду благодарен, если кто-то сможет направить в нужное русло.
     
  4. snatch

    snatch New Member

    Публикаций:
    0
    Регистрация:
    27 июл 2003
    Сообщения:
    27
    Адрес:
    Belarus
    Блин, в инете полно статей на такие темы. И даже на русском. Кроме того, рекомендуется начинать с простейших кракмисов, а не реальных программ. А так просто будешь смотреть на дизасм код как баран на новые ворота. Нужно уловить основные принципы, хорошо знать асм (no asm - no cracking), иметь кучу разных необходимых софтин и т.д., и т.п. Иначе нихрена может не выйти.



    А там глядь и станешь мембером uCF или ORiON... ;)
     
  5. Searcher

    Searcher New Member

    Публикаций:
    0
    Регистрация:
    28 окт 2004
    Сообщения:
    24
    2snatch

    Asm знаю на начальном уровне, необходимых софтин хватает :) С простейших программ начинал уже в свое время, а тут вот понадобилось исследовать эту (жизненная необходимость, а не просто потому что решил попробовать свои силы на этой программе). Насчет статей, читаю, пытаюсь въехать.

    Пока что в этой проге понял, что серийник зависит от одного ключевого слова (в теле exe), состоящего из 10 букв, РН формируется в зависимости от него.

    Ключ формата xxxx-xxxxx-xxxxx-xxxxx-xxxxx.
     
  6. Searcher

    Searcher New Member

    Публикаций:
    0
    Регистрация:
    28 окт 2004
    Сообщения:
    24
    Вопрос к специалистам, кто нибудь может рассказать поподробнее про команду sete bl? Как я понял, она заносит в bl либо 00, либо 01. Но в зависимости от каких условий делается выбор что заносить?
     
  7. MoKC0DeR

    MoKC0DeR New Member

    Публикаций:
    0
    Регистрация:
    13 ноя 2003
    Сообщения:
    136
    Адрес:
    Russia
    Searcher

    в зависимости от флага Zero. bl=ZF
     
  8. bogrus

    bogrus Active Member

    Публикаций:
    0
    Регистрация:
    24 окт 2003
    Сообщения:
    1.338
    Адрес:
    ukraine




    Смотри в ф-цию ":00407FC4 call 00401492" , если она вернет 0, то после "test eax,eax" ZF будет установлен и после "sete bl" в bl будет 1. Если ф-ция вернет не ноль, то флаг будет сброшен и в bl будет 0.

    з.ы. но ф-ция конечно не обязана влиять на eax
     
  9. Searcher

    Searcher New Member

    Публикаций:
    0
    Регистрация:
    28 окт 2004
    Сообщения:
    24
    Спасибо, попробую исследовать дальше.
     
  10. Vovane

    Vovane New Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2004
    Сообщения:
    58
    Адрес:
    Afghanistan
    А если не [ругаться нехорошо!] мозги, то над кейгеном думать нет необходимости - нужно выдрать кусок кода(который проверяет серийник) из родной проги и заставить его перебирать варианты серийников в поиске правильного.

    Надо проверить какие части(из xxxx-xxxxx-xxxxx-xxxxx-xxxxx) серийника являются константами, а какие нужно менять. Константы практически есть всегда !!!
     
  11. Searcher

    Searcher New Member

    Публикаций:
    0
    Регистрация:
    28 окт 2004
    Сообщения:
    24
    Насколько я понял, в этой проге нет констант в составе серийника. Серийник каждый раз новый.
     
  12. Vovane

    Vovane New Member

    Публикаций:
    0
    Регистрация:
    6 ноя 2004
    Сообщения:
    58
    Адрес:
    Afghanistan
    Ну тогда нужно маленько думать:)
     
  13. LTrapper

    LTrapper New Member

    Публикаций:
    0
    Регистрация:
    8 ноя 2004
    Сообщения:
    6


    Брутфорс помогает, но очень редко, на самых примитивных защитах.
     
  14. Searcher

    Searcher New Member

    Публикаций:
    0
    Регистрация:
    28 окт 2004
    Сообщения:
    24
    Не, в том то и дело, что тут брутфорс не нужен, хочу кейген сделать. :dntknw:
     
  15. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    Господи, сколько шума из-за одной несчастной программы. Да вырипай ты этот долбаный алгоритм. Переведи его с асма в ЯВУ (на С, скажем, или что там тебе ближе) да оберни его. Всего делов. А-то сначала полгода выясняет процедуру, потом еще полгода думает, что с ней делать. Работы-то на день.
     
  16. LTrapper

    LTrapper New Member

    Публикаций:
    0
    Регистрация:
    8 ноя 2004
    Сообщения:
    6


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

    Если алгоритм можно восстановить без проблем - то ессно надо сделать как сказал volodya

    А вообще делать keygen'ы это уровень "продвинутый" в реверсинге. Если была незнакома инструкция sete для начала лучше сделать патч.
     
  17. Searcher

    Searcher New Member

    Публикаций:
    0
    Регистрация:
    28 окт 2004
    Сообщения:
    24
    Уважаемый volodya! Я понимаю, что для профессионалов здесь работы на день, но я им пока не являюсь, поэтому стараюсь понять все как могу.

    LTrapper

    Патч сделать ничего не стоит, но дело не в этом, просто действительно очень нужен кейген.

    А пока имею следующее. Вот что я пока понял.
    Код (Text):
    1.  
    2. :00407FC4 E8C994FFFF              [b]call 00401492[/b]
    3. :00407FC9 85C0                    test eax, eax
    4. :00407FCB 8D4C242C                lea ecx, dword ptr [esp+2C]
    5. :00407FCF C644242402              mov [esp+24], 02
    6. :00407FD4 0F94C3                  [b]sete bl[/b]
    7. ;....................вырезано................
    8. :00408009 84DB                    test bl, bl
    9. :0040800B 7415                    je 00408022
    10. :0040800D 6AFF                    push FFFFFFFF
    11. :0040800F 6A30                    push 00000030
    12.  
    13. * Possible Reference to String Resource ID=10012: "Incorrect key."
    14.                                   |
    15. :00408011 681C270000              push 0000271C
    16. :00408016 E87E9E0400              call 00451E99
    17. :0040801B 8BCE                    mov ecx, esi
    18. :0040801D E8CA9F0400              call 00451FEC
    19.  


    Если ключ правильный, функция :00407FC4 call 00401492 устанавливает в EAX 1,

    :00407FD4 sete bl в bl заносит 0 (иначе EAX - 0,bl - 1).

    Смотрим действие функции call 00401492:
    Код (Text):
    1.  
    2. * Referenced by a CALL at Address:
    3. |:00407FC4  
    4. |
    5. :00401492 E9293E0000              jmp 004052C0
    6.  
    7. Переходим на 004052C0:
    8.  
    9. * Referenced by a (U)nconditional or (C)onditional Jump at Address:
    10. |:00401492(U)
    11. |
    12. :004052C0 83EC10                  sub esp, 00000010
    13. :004052C3 56                      push esi
    14. :004052C4 8BF1                    mov esi, ecx
    15. :004052C6 8D4C2404                lea ecx, dword ptr [esp+04]
    16. :004052CA E8A7BFFFFF              [b]call 00401276[/b]
    17. :004052CF 8B442418                mov eax, dword ptr [esp+18]
    18. :004052D3 83C60C                  add esi, 0000000C
    19. :004052D6 8B08                    mov ecx, dword ptr [eax]
    20. :004052D8 51                      push ecx
    21. :004052D9 56                      push esi
    22. :004052DA 8D4C240C                lea ecx, dword ptr [esp+0C]
    23. :004052DE E86EC1FFFF              [b]call 00401451[/b]
    24. :004052E3 6894024700              push 00470294
    25. :004052E8 56                      push esi
    26. :004052E9 8D4C240C                lea ecx, dword ptr [esp+0C]
    27. :004052ED E8A6C0FFFF              [b]call 00401398[/b]
    28.  
    29. * Possible StringData Ref from Data Obj ->"Flashpoint"
    30.                                   |
    31. :004052F2 682C324800              push 0048322C
    32. :004052F7 6A05                    push 00000005
    33. :004052F9 8D4C240C                lea ecx, dword ptr [esp+0C]
    34. :004052FD E80CBEFFFF              [b]call 0040110E[/b]
    35. :00405302 25FF000000              and eax, 000000FF
    36. :00405307 5E                      pop esi
    37. :00405308 83C410                  add esp, 00000010
    38. :0040530B C20400                  ret 0004
    39.  


    Дошел до этого момента. Как я понял, тут идет проверка ключа, причем связанная с указанным стрингом. Возможно часть ключа генерируется в зависимости от первых четырех символов (кстати символами могут быть как цифры так и буквы), но это предположение.

    Если кто сможет подсказать куда смотреть дальше, буду благодарен.
     
  18. volodya

    volodya wasm.ru

    Публикаций:
    0
    Регистрация:
    22 апр 2003
    Сообщения:
    1.169
    Если кто сможет подсказать куда смотреть дальше, буду благодарен.



    ??? 8-()



    Разумеется, в





    call 00401276

    call 00401451

    call 00401398

    call 0040110E



    куда же еще???
     
  19. Searcher

    Searcher New Member

    Публикаций:
    0
    Регистрация:
    28 окт 2004
    Сообщения:
    24
    Логично :)
    Код (Text):
    1. [b]call 00401276[/b]:
    2. jump to
    3. |
    4. :00401A50 8BC1                    mov eax, ecx
    5. :00401A52 33C9                    xor ecx, ecx
    6. :00401A54 8BD0                    mov edx, eax
    7. :00401A56 890A                    mov dword ptr [edx], ecx
    8. :00401A58 894A04                  mov dword ptr [edx+04], ecx
    9. :00401A5B 894A08                  mov dword ptr [edx+08], ecx
    10. :00401A5E 66894A0C                mov word ptr [edx+0C], cx
    11. :00401A62 884A0E                  mov byte ptr [edx+0E], cl
    12. :00401A65 C3                      ret
    13.  
    14. [b]call 00401451[/b]:
    15. jump to
    16. |
    17. :00401A80 8B442408                mov eax, dword ptr [esp+08]
    18. :00401A84 8B4C2404                mov ecx, dword ptr [esp+04]
    19. :00401A88 50                      push eax
    20. :00401A89 51                      push ecx
    21. :00401A8A E821000000              call 00401AB0
    22. :00401A8F 83C408                  add esp, 00000008
    23. :00401A92 C20800                  ret 0008
    24.  
    25. [b]call 00401398[/b]:
    26. jump to
    27. |
    28. :00401BF0 83EC08                  sub esp, 00000008
    29. :00401BF3 53                      push ebx
    30. :00401BF4 56                      push esi
    31. :00401BF5 8B742418                mov esi, dword ptr [esp+18]
    32. :00401BF9 57                      push edi
    33. :00401BFA 6A04                    push 00000004
    34. :00401BFC 56                      push esi
    35. :00401BFD 8BD9                    mov ebx, ecx
    36. :00401BFF E8AC000000              call 00401CB0
    37. :00401C04 83C604                  add esi, 00000004
    38. :00401C07 6A0F                    push 0000000F
    39. :00401C09 56                      push esi
    40. :00401C0A 89442420                mov dword ptr [esp+20], eax
    41. :00401C0E E89D000000              call 00401CB0
    42. :00401C13 8944241C                mov dword ptr [esp+1C], eax
    43. :00401C17 8B442428                mov eax, dword ptr [esp+28]
    44. :00401C1B 6A0F                    push 0000000F
    45. :00401C1D 50                      push eax
    46. :00401C1E E88D000000              call 00401CB0
    47. :00401C23 8B4C2424                mov ecx, dword ptr [esp+24]
    48. :00401C27 8BF0                    mov esi, eax
    49. :00401C29 8B5104                  mov edx, dword ptr [ecx+04]
    50. :00401C2C 52                      push edx
    51. :00401C2D E80BF8FFFF              call 0040143D
    52. :00401C32 8BF8                    mov edi, eax
    53. :00401C34 8D442428                lea eax, dword ptr [esp+28]
    54. :00401C38 50                      push eax
    55. :00401C39 56                      push esi
    56. :00401C3A 57                      push edi
    57. :00401C3B 897C2444                mov dword ptr [esp+44], edi
    58. :00401C3F E828F6FFFF              call 0040126C
    59. :00401C44 6A0F                    push 0000000F
    60. :00401C46 8D4C2448                lea ecx, dword ptr [esp+48]
    61. :00401C4A 53                      push ebx
    62. :00401C4B 51                      push ecx
    63. :00401C4C E8D1F4FFFF              call 00401122
    64. :00401C51 56                      push esi
    65. :00401C52 E814F7FFFF              call 0040136B
    66. :00401C57 57                      push edi
    67. :00401C58 E80EF7FFFF              call 0040136B
    68. :00401C5D 8B54244C                mov edx, dword ptr [esp+4C]
    69. :00401C61 52                      push edx
    70. :00401C62 E804F7FFFF              call 0040136B
    71. :00401C67 8B44244C                mov eax, dword ptr [esp+4C]
    72. :00401C6B 83C440                  add esp, 00000040
    73. :00401C6E 50                      push eax
    74. :00401C6F E8F7F6FFFF              call 0040136B
    75. :00401C74 83C404                  add esp, 00000004
    76. :00401C77 5F                      pop edi
    77. :00401C78 5E                      pop esi
    78. :00401C79 5B                      pop ebx
    79. :00401C7A 83C408                  add esp, 00000008
    80. :00401C7D C20800                  ret 0008
    81.  
    82. [b]call 0040110E[/b]:
    83. jump to
    84. |
    85. :00401D70 56                      push esi
    86. :00401D71 8B74240C                mov esi, dword ptr [esp+0C]
    87. :00401D75 57                      push edi
    88. :00401D76 8BD1                    mov edx, ecx
    89. :00401D78 8BFE                    mov edi, esi
    90. :00401D7A 83C9FF                  or ecx, FFFFFFFF
    91. :00401D7D 33C0                    xor eax, eax
    92. :00401D7F F2                      repnz
    93. :00401D80 AE                      scasb
    94. :00401D81 8B44240C                mov eax, dword ptr [esp+0C]
    95. :00401D85 8BFE                    mov edi, esi
    96. :00401D87 F7D1                    not ecx
    97. :00401D89 49                      dec ecx
    98. :00401D8A 8D3410                  lea esi, dword ptr [eax+edx]
    99. :00401D8D 33D2                    xor edx, edx
    100. :00401D8F F3                      repz
    101. :00401D90 A6                      cmpsb
    102. :00401D91 8BC2                    mov eax, edx
    103. :00401D93 5F                      pop edi
    104. :00401D94 0F94C0                  sete al
    105. :00401D97 5E                      pop esi
    106. :00401D98 C20800                  ret 0008
    107.  


    Вот такая ситуевина:dntknw:
     
  20. Funbit

    Funbit Member

    Публикаций:
    0
    Регистрация:
    13 апр 2003
    Сообщения:
    92
    Адрес:
    Russia
    может быть все-таки пора ИДУ взять? :)

    и отладчик тоже не помешал бы,

    а то так глядишь до нового года будешь раскапывать по одному каллу. да и народ все равно никогда не догадается, что внутри оных ;) а разбирать простой текст, даже если ты выложишь весь код ф-ции (401492) вряд ли кому покажется интересным...