Патч с поиском заменяемых байтов по маске/паттернам/шаблонам

Тема в разделе "WASM.BEGINNERS", создана пользователем abandoned, 11 июл 2009.

  1. abandoned

    abandoned New Member

    Публикаций:
    0
    Регистрация:
    10 июл 2009
    Сообщения:
    1
    Добрый вечер!

    Нужна ваша помощь в реализации патча (желательно на высок. ур. языке), который бы находил определенную последовательность байт и заменял на другую. Поиском пользовался в течении нескольких дней, но нигде ничего кроме четкого оффсета SetFileOffset/fseek не нашел.

    Обрисую на реальном примере. Есть бинарник онлайн игры 5 мБ, найдены все необходимые переходы и вычислены байты, которые требуется заменить. Но бинарник "не постоянен" и апдейтиться с появлением каких-то изменений на сервере игры, поэтому та часть, которую необходимо заменить может смещаться.

    Есть похожий патч, но на более старую версию игры (написан он на Дельфях). Выковырял из нее цикл-сверку байтов

    Код (Text):
    1. 004F045C  /$  53            PUSH EBX
    2. 004F045D  |.  56            PUSH ESI
    3. 004F045E  |.  57            PUSH EDI
    4. 004F045F  |.  8BF8          MOV EDI,EAX
    5. 004F0461  |.  83EF 64       SUB EDI,64
    6. 004F0464  |.  85FF          TEST EDI,EDI
    7. 004F0466  |.  0F8C 22010000 JL patch.004F058E
    8. 004F046C  |.  47            INC EDI
    9. 004F046D  |.  33F6          XOR ESI,ESI
    10. 004F046F  |.  BB 44E04F00   MOV EBX,patch.004FE044
    11. 004F0474  |>  803B FF       /CMP BYTE PTR DS:[EBX],0FF
    12. 004F0477  |.  75 5A         |JNZ SHORT patch.004F04D3
    13. 004F0479  |.  807B 01 FF    |CMP BYTE PTR DS:[EBX+1],0FF
    14. 004F047D  |.  75 54         |JNZ SHORT patch.004F04D3
    15. 004F047F  |.  807B 02 85    |CMP BYTE PTR DS:[EBX+2],85
    16. 004F0483  |.  75 4E         |JNZ SHORT patch.004F04D3
    17. 004F0485  |.  807B 03 C0    |CMP BYTE PTR DS:[EBX+3],0C0
    18. 004F0489  |.  75 48         |JNZ SHORT patch.004F04D3
    19. 004F048B  |.  807B 05 35    |CMP BYTE PTR DS:[EBX+5],35
    20. 004F048F  |.  75 42         |JNZ SHORT patch.004F04D3
    21. 004F0491  |.  807B 06 6A    |CMP BYTE PTR DS:[EBX+6],6A
    22. 004F0495  |.  75 3C         |JNZ SHORT patch.004F04D3
    23. 004F0497  |.  807B 07 00    |CMP BYTE PTR DS:[EBX+7],0
    24. 004F049B  |.  75 36         |JNZ SHORT patch.004F04D3
    25. 004F049D  |.  807B 08 68    |CMP BYTE PTR DS:[EBX+8],68
    26. 004F04A1  |.  75 30         |JNZ SHORT patch.004F04D3
    27. 004F04A3  |.  807B 09 F6    |CMP BYTE PTR DS:[EBX+9],0F6
    28. 004F04A7  |.  75 2A         |JNZ SHORT patch.004F04D3
    29. 004F04A9  |.  8935 34E04F00 |MOV DWORD PTR DS:[4FE034],ESI
    30. 004F04AF  |.  0FB643 04     |MOVZX EAX,BYTE PTR DS:[EBX+4]
    31. 004F04B3  |.  A2 40E04F00   |MOV BYTE PTR DS:[4FE040],AL
    32. 004F04B8  |.  A1 20E04F00   |MOV EAX,DWORD PTR DS:[4FE020]
    33. 004F04BD  |.  8B80 6C030000 |MOV EAX,DWORD PTR DS:[EAX+36C]
    34. 004F04C3  |.  8B80 70020000 |MOV EAX,DWORD PTR DS:[EAX+270]
    35. 004F04C9  |.  BA 9C054F00   |MOV EDX,patch.004F059C               ;  ASCII "Pattern #1 found..."
    36. 004F04CE  |.  8B08          |MOV ECX,DWORD PTR DS:[EAX]
    37. 004F04D0  |.  FF51 38       |CALL DWORD PTR DS:[ECX+38]
    38. 004F04D3  |>  803B 00       |CMP BYTE PTR DS:[EBX],0
    39. 004F04D6  |.  75 5A         |JNZ SHORT patch.004F0532
    40. 004F04D8  |.  807B 01 83    |CMP BYTE PTR DS:[EBX+1],83
    41. 004F04DC  |.  75 54         |JNZ SHORT patch.004F0532
    42. 004F04DE  |.  807B 02 BD    |CMP BYTE PTR DS:[EBX+2],0BD
    43. 004F04E2  |.  75 4E         |JNZ SHORT patch.004F0532
    44. 004F04E4  |.  807B 03 C8    |CMP BYTE PTR DS:[EBX+3],0C8
    45. 004F04E8  |.  75 48         |JNZ SHORT patch.004F0532
    46. 004F04EA  |.  807B 04 FE    |CMP BYTE PTR DS:[EBX+4],0FE
    47. 004F04EE  |.  75 42         |JNZ SHORT patch.004F0532
    48. 004F04F0  |.  807B 05 FF    |CMP BYTE PTR DS:[EBX+5],0FF
    49. 004F04F4  |.  75 3C         |JNZ SHORT patch.004F0532
    50. 004F04F6  |.  807B 06 FF    |CMP BYTE PTR DS:[EBX+6],0FF
    51. 004F04FA  |.  75 36         |JNZ SHORT patch.004F0532
    52. 004F04FC  |.  807B 07 01    |CMP BYTE PTR DS:[EBX+7],1
    53. 004F0500  |.  75 30         |JNZ SHORT patch.004F0532
    54. 004F0502  |.  807B 09 4A    |CMP BYTE PTR DS:[EBX+9],4A
    55. 004F0506  |.  75 2A         |JNZ SHORT patch.004F0532
    56. 004F0508  |.  8935 38E04F00 |MOV DWORD PTR DS:[4FE038],ESI
    57. 004F050E  |.  0FB643 08     |MOVZX EAX,BYTE PTR DS:[EBX+8]
    58. 004F0512  |.  A2 41E04F00   |MOV BYTE PTR DS:[4FE041],AL
    59. 004F0517  |.  A1 20E04F00   |MOV EAX,DWORD PTR DS:[4FE020]
    60. 004F051C  |.  8B80 6C030000 |MOV EAX,DWORD PTR DS:[EAX+36C]
    61. 004F0522  |.  8B80 70020000 |MOV EAX,DWORD PTR DS:[EAX+270]
    62. 004F0528  |.  BA B8054F00   |MOV EDX,patch.004F05B8               ;  ASCII "Pattern #2 found..."
    63. 004F052D  |.  8B08          |MOV ECX,DWORD PTR DS:[EAX]
    64. 004F052F  |.  FF51 38       |CALL DWORD PTR DS:[ECX+38]
    65. 004F0532  |>  803B 00       |CMP BYTE PTR DS:[EBX],0
    66. 004F0535  |.  75 4E         |JNZ SHORT patch.004F0585
    67. 004F0537  |.  807B 02 50    |CMP BYTE PTR DS:[EBX+2],50
    68. 004F053B  |.  75 48         |JNZ SHORT patch.004F0585
    69. 004F053D  |.  807B 03 68    |CMP BYTE PTR DS:[EBX+3],68
    70. 004F0541  |.  75 42         |JNZ SHORT patch.004F0585
    71. 004F0543  |.  807B 04 F8    |CMP BYTE PTR DS:[EBX+4],0F8
    72. 004F0547  |.  75 3C         |JNZ SHORT patch.004F0585
    73. 004F0549  |.  807B 05 0B    |CMP BYTE PTR DS:[EBX+5],0B
    74. 004F054D  |.  75 36         |JNZ SHORT patch.004F0585
    75. 004F054F  |.  807B 06 00    |CMP BYTE PTR DS:[EBX+6],0
    76. 004F0553  |.  75 30         |JNZ SHORT patch.004F0585
    77. 004F0555  |.  807B 07 00    |CMP BYTE PTR DS:[EBX+7],0
    78. 004F0559  |.  75 2A         |JNZ SHORT patch.004F0585
    79. 004F055B  |.  8935 3CE04F00 |MOV DWORD PTR DS:[4FE03C],ESI
    80. 004F0561  |.  0FB643 01     |MOVZX EAX,BYTE PTR DS:[EBX+1]
    81. 004F0565  |.  A2 42E04F00   |MOV BYTE PTR DS:[4FE042],AL
    82. 004F056A  |.  A1 20E04F00   |MOV EAX,DWORD PTR DS:[4FE020]
    83. 004F056F  |.  8B80 6C030000 |MOV EAX,DWORD PTR DS:[EAX+36C]
    84. 004F0575  |.  8B80 70020000 |MOV EAX,DWORD PTR DS:[EAX+270]
    85. 004F057B  |.  BA D4054F00   |MOV EDX,patch.004F05D4               ;  ASCII "Pattern #3 found..."
    86. 004F0580  |.  8B08          |MOV ECX,DWORD PTR DS:[EAX]
    87. 004F0582  |.  FF51 38       |CALL DWORD PTR DS:[ECX+38]
    88. 004F0585  |>  46            |INC ESI
    89. 004F0586  |.  43            |INC EBX
    90. 004F0587  |.  4F            |DEC EDI
    91. 004F0588  |.^ 0F85 E6FEFFFF \JNZ patch.004F0474
    92. 004F058E  |>  5F            POP EDI
    93. 004F058F  |.  5E            POP ESI
    94. 004F0590  |.  5B            POP EBX
    95. 004F0591  \.  C3            RETN
    Ищутся три паттерна

    Код (Text):
    1. 0FF 0FF 85 0C0 35 [i](пропускает байт)[/i] 6A 0 68 0F6
    Код (Text):
    1. 0 83 0BD 0C8 0FE 0FF 0FF 0FF 1 [i](пропускает байт)[/i] 4A
    Код (Text):
    1. 0 [i](пропускает байт)[/i] 50 68 0F8 0B 0 0
    Итоговый вопрос - какими функциями С/С++/Делфи можно реализовать вещь выше или что-либо для выполнения задачи ?

    Заранее благодарен )
     
  2. max7C4

    max7C4 New Member

    Публикаций:
    0
    Регистрация:
    17 мар 2008
    Сообщения:
    1.203
    а что сложного в нахождение в файле строки по шаблону. http://algolist.manual.ru/
     
  3. sometime

    sometime Odessa

    Публикаций:
    0
    Регистрация:
    22 апр 2009
    Сообщения:
    227
    Адрес:
    sunday
    спасиб!!!полезные вещички там почитать мона!!!
     
  4. Jupiter

    Jupiter Jupiter

    Публикаций:
    0
    Регистрация:
    12 авг 2004
    Сообщения:
    532
    Адрес:
    Russia