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

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

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

Создано: 01 мая 2011 22:47 · Поправил: kostay_scr
· Личное сообщение · #1

Вообщем стоит на проге стоит защита памяти дллок.
Защита похоже зашита в netc.dll и\или core.dll - сколькол не мучался результата не достиг.
Пробовал обходить перехватом api - не получилось.
Нопил всё что можно по HBP on acces на интересуещем байте - тоже ничего, хотя доступ к байту прекращался - всё равно.
Пожка ope-source, но сурсов netc нет
Сурсы можно посмотреть здесь.
Там в папке shared лежат решения для msvc.
Надеюсь на любую помощь - я уже совсем в тупике)
Выкладываю отдельно core.dll и netc.dll:
--> Link <--
Поменять нужно процедурку проверки чек сумм в client.dll - чтобы один файлик всегда проходил проверку)
Вот что я нашел:
По адресу этих команд(search for->sequence of commands в ольке) в netc идёт какая то проверка вызываемаяя из разных мест:
push ecx
xor eax,eax
push esi
inc ecx
ANY 3
mov edx,eax
shr edx, 8
P.S. Возможно части dll криптованные.



Ранг: 58.1 (постоянный), 42thx
Активность: 0.060.01
Статус: Участник

Создано: 01 мая 2011 23:29 · Поправил: hlmadip
· Личное сообщение · #2

что пишет при неправильной чексумме?
нормальная такая dll
CheckCompatibility
GetNetRel
GetNetRev
InitNetInterface
ReleaseNetInterface
может тебе поснифить что она на сервак отправляет, и от этого плясать?



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

Создано: 02 мая 2011 00:56 · Поправил: kostay_scr
· Личное сообщение · #3

Просто отсоединяет от сервера или если запускать с патченой dll - connection timed out.
Да нет в том то и дело что не отправляет, а скорее всего просто перестаёт обрабатывать входящие пакеты - они идут, а длл события не вызывает.
DLL может и кажется нормальной, но с какого перепуга она каким то непонятным циклом лезет в память(код) других DLL?



Ранг: 58.1 (постоянный), 42thx
Активность: 0.060.01
Статус: Участник

Создано: 02 мая 2011 13:36
· Личное сообщение · #4

загрузи свою длл в иду и дебаж её, в ходе смотри на параметры которые функам передаються



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

Создано: 02 мая 2011 16:18
· Личное сообщение · #5

Не получилось ничего у меня.



Ранг: 60.6 (постоянный), 87thx
Активность: 0.060
Статус: Участник

Создано: 02 мая 2011 16:49
· Личное сообщение · #6

kostay_scr пишет:
Пробовал обходить перехватом api - не получилось.

А что именно ты пытался сделать с помощью перехвата и какие функции перехватывал?



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

Создано: 02 мая 2011 17:03 · Поправил: kostay_scr
· Личное сообщение · #7

Вот код того цикла если поможет (он лезет в .code других модулей - нашёл с помощью HBP on access):
Code:
  1. 044095A0  /$  51             PUSH ECX
  2. 044095A1  |.  33C0           XOR EAX,EAX
  3. 044095A3  |.  56             PUSH ESI
  4. 044095A4  |.  41             INC ECX
  5. 044095A5  |.  8D70 40        LEA ESI,DWORD PTR DS:[EAX+40]
  6. 044095A8  |.  EB 06          JMP SHORT netc.044095B0
  7. 044095AA  |   8D9B 00000000  LEA EBX,DWORD PTR DS:[EBX]
  8. 044095B0  |>  8BD0           /MOV EDX,EAX
  9. 044095B2  |.  C1EA 08        |SHR EDX,8
  10. 044095B5  |.  66:0FB6D2      |MOVZX DX,DL
  11. 044095B9  |.  C1E0 08        |SHL EAX,8
  12. 044095BC  |.  66:0BD0        |OR DX,AX
  13. 044095BF  |.  0FB641 FF      |MOVZX EAX,BYTE PTR DS:[ECX-1]
  14. 044095C3  |.  66:33D0        |XOR DX,AX
  15. 044095C6  |.  0FB7D2         |MOVZX EDX,DX
  16. 044095C9  |.  0FB6C2         |MOVZX EAX,DL
  17. 044095CC  |.  895424 04      |MOV DWORD PTR SS:[ESP+4],EDX
  18. 044095D0  |.  C0E8 04        |SHR AL,4
  19. 044095D3  |.  66:0FB6D0      |MOVZX DX,AL
  20. 044095D7  |.  66:315424 04   |XOR WORD PTR SS:[ESP+4],DX
  21. 044095DC  |.  8B4424 04      |MOV EAX,DWORD PTR SS:[ESP+4]
  22. 044095E0  |.  8BD0           |MOV EDX,EAX
  23. 044095E2  |.  C1E2 0C        |SHL EDX,0C
  24. 044095E5  |.  33C2           |XOR EAX,EDX
  25. 044095E7  |.  0FB6D0         |MOVZX EDX,AL
  26. 044095EA  |.  C1E2 05        |SHL EDX,5
  27. 044095ED  |.  894424 04      |MOV DWORD PTR SS:[ESP+4],EAX
  28. 044095F1  |.  33C2           |XOR EAX,EDX
  29. 044095F3  |.  8BD0           |MOV EDX,EAX
  30. 044095F5  |.  C1EA 08        |SHR EDX,8
  31. 044095F8  |.  66:0FB6D2      |MOVZX DX,DL
  32. 044095FC  |.  C1E0 08        |SHL EAX,8
  33. 044095FF  |.  66:0BD0        |OR DX,AX
  34. 04409602  |.  0FB601         |MOVZX EAX,BYTE PTR DS:[ECX]
  35. 04409605  |.  66:33D0        |XOR DX,AX
  36. 04409608  |.  0FB7D2         |MOVZX EDX,DX
  37. 0440960B  |.  0FB6C2         |MOVZX EAX,DL
  38. 0440960E  |.  895424 04      |MOV DWORD PTR SS:[ESP+4],EDX
  39. 04409612  |.  C0E8 04        |SHR AL,4
  40. 04409615  |.  66:0FB6D0      |MOVZX DX,AL
  41. 04409619  |.  66:315424 04   |XOR WORD PTR SS:[ESP+4],DX
  42. 0440961E  |.  8B4424 04      |MOV EAX,DWORD PTR SS:[ESP+4]
  43. 04409622  |.  8BD0           |MOV EDX,EAX
  44. 04409624  |.  C1E2 0C        |SHL EDX,0C
  45. 04409627  |.  33C2           |XOR EAX,EDX
  46. 04409629  |.  0FB6D0         |MOVZX EDX,AL
  47. 0440962C  |.  C1E2 05        |SHL EDX,5
  48. 0440962F  |.  894424 04      |MOV DWORD PTR SS:[ESP+4],EAX
  49. 04409633  |.  33C2           |XOR EAX,EDX
  50. 04409635  |.  8BD0           |MOV EDX,EAX
  51. 04409637  |.  C1EA 08        |SHR EDX,8
  52. 0440963A  |.  66:0FB6D2      |MOVZX DX,DL
  53. 0440963E  |.  C1E0 08        |SHL EAX,8
  54. 04409641  |.  66:0BD0        |OR DX,AX
  55. 04409644  |.  0FB641 01      |MOVZX EAX,BYTE PTR DS:[ECX+1]
  56. 04409648  |.  66:33D0        |XOR DX,AX
  57. 0440964B  |.  0FB7D2         |MOVZX EDX,DX
  58. 0440964E  |.  0FB6C2         |MOVZX EAX,DL
  59. 04409651  |.  895424 04      |MOV DWORD PTR SS:[ESP+4],EDX
  60. 04409655  |.  C0E8 04        |SHR AL,4
  61. 04409658  |.  66:0FB6D0      |MOVZX DX,AL
  62. 0440965C  |.  66:315424 04   |XOR WORD PTR SS:[ESP+4],DX
  63. 04409661  |.  8B4424 04      |MOV EAX,DWORD PTR SS:[ESP+4]
  64. 04409665  |.  8BD0           |MOV EDX,EAX
  65. 04409667  |.  C1E2 0C        |SHL EDX,0C
  66. 0440966A  |.  33C2           |XOR EAX,EDX
  67. 0440966C  |.  0FB6D0         |MOVZX EDX,AL
  68. 0440966F  |.  C1E2 05        |SHL EDX,5
  69. 04409672  |.  894424 04      |MOV DWORD PTR SS:[ESP+4],EAX
  70. 04409676  |.  33C2           |XOR EAX,EDX
  71. 04409678  |.  8BD0           |MOV EDX,EAX
  72. 0440967A  |.  C1EA 08        |SHR EDX,8
  73. 0440967D  |.  66:0FB6D2      |MOVZX DX,DL
  74. 04409681  |.  C1E0 08        |SHL EAX,8
  75. 04409684  |.  66:0BD0        |OR DX,AX
  76. 04409687  |.  0FB641 02      |MOVZX EAX,BYTE PTR DS:[ECX+2]
  77. 0440968B  |.  66:33D0        |XOR DX,AX
  78. 0440968E  |.  0FB7D2         |MOVZX EDX,DX
  79. 04409691  |.  0FB6C2         |MOVZX EAX,DL
  80. 04409694  |.  895424 04      |MOV DWORD PTR SS:[ESP+4],EDX
  81. 04409698  |.  C0E8 04        |SHR AL,4
  82. 0440969B  |.  66:0FB6D0      |MOVZX DX,AL
  83. 0440969F  |.  66:315424 04   |XOR WORD PTR SS:[ESP+4],DX
  84. 044096A4  |.  8B4424 04      |MOV EAX,DWORD PTR SS:[ESP+4]
  85. 044096A8  |.  8BD0           |MOV EDX,EAX
  86. 044096AA  |.  C1E2 0C        |SHL EDX,0C
  87. 044096AD  |.  33C2           |XOR EAX,EDX
  88. 044096AF  |.  894424 04      |MOV DWORD PTR SS:[ESP+4],EAX
  89. 044096B3  |.  0FB6D0         |MOVZX EDX,AL
  90. 044096B6  |.  C1E2 05        |SHL EDX,5
  91. 044096B9  |.  33C2           |XOR EAX,EDX
  92. 044096BB  |.  83C1 04        |ADD ECX,4
  93. 044096BE  |.  83EE 01        |SUB ESI,1
  94. 044096C1  |.  894424 04      |MOV DWORD PTR SS:[ESP+4],EAX
  95. 044096C5  |.0F85 E5FEFFFF  \JNZ netc.044095B0
  96. 044096CB  |.  5E             POP ESI
  97. 044096CC  |.  59             POP ECX
  98. 044096CD  \.  C3             RETN

Что делает этот цикл мозгов у меня понять не хватило

И вот код одной из вызывающих процедур:
Code:
  1. 044022E0  /$  83EC 08        SUB ESP,8
  2. 044022E3  |.  53             PUSH EBX
  3. 044022E4  |.  55             PUSH EBP
  4. 044022E5  |.  8B6C24 14      MOV EBP,DWORD PTR SS:[ESP+14]
  5. 044022E9  |.  83BD 8C000000 >CMP DWORD PTR SS:[EBP+8C],0
  6. 044022F0  |.  56             PUSH ESI
  7. 044022F1  |.  57             PUSH EDI
  8. 044022F2  |.  0F84 D2000000  JE netc.044023CA
  9. 044022F8  |.  8B85 88000000  MOV EAX,DWORD PTR SS:[EBP+88]
  10. 044022FE  |.  8B08           MOV ECX,DWORD PTR DS:[EAX]
  11. 04402300  |.  8B75 70        MOV ESI,DWORD PTR SS:[EBP+70]
  12. 04402303  |.  8D7D 70        LEA EDI,DWORD PTR SS:[EBP+70]
  13. 04402306  |.  894C24 14      MOV DWORD PTR SS:[ESP+14],ECX
  14. 0440230A  |.  897424 10      MOV DWORD PTR SS:[ESP+10],ESI
  15. 0440230E  |.  8BFF           MOV EDI,EDI
  16. 04402310  |>  8B5F 18        MOV EBX,DWORD PTR DS:[EDI+18]
  17. 04402313  |.  8B07           MOV EAX,DWORD PTR DS:[EDI]
  18. 04402315  |.  85F6           TEST ESI,ESI
  19. 04402317  |.  74 04          JE SHORT netc.0440231D
  20. 04402319  |.  3BF0           CMP ESI,EAX
  21. 0440231B  |.  74 06          JE SHORT netc.04402323
  22. 0440231D  |>  FF15 4CE24404  CALL DWORD PTR DS:[<&MSVCR90._invalid_pa>; MSVCR90._invalid_parameter_noinfo
  23. 04402323  |>  395C24 14      CMP DWORD PTR SS:[ESP+14],EBX
  24. 04402327  |.  74 5D          JE SHORT netc.04402386
  25. 04402329  |.  85F6           TEST ESI,ESI
  26. 0440232B  |.  75 55          JNZ SHORT netc.04402382
  27. 0440232D  |.  FF15 4CE24404  CALL DWORD PTR DS:[<&MSVCR90._invalid_pa>; MSVCR90._invalid_parameter_noinfo
  28. 04402333  |>  8B5424 14      MOV EDX,DWORD PTR SS:[ESP+14]
  29. 04402337  |.  3B56 18        CMP EDX,DWORD PTR DS:[ESI+18]
  30. 0440233A  |.  75 06          JNZ SHORT netc.04402342
  31. 0440233C  |.  FF15 4CE24404  CALL DWORD PTR DS:[<&MSVCR90._invalid_pa>; MSVCR90._invalid_parameter_noinfo
  32. 04402342  |>  8B4424 14      MOV EAX,DWORD PTR SS:[ESP+14]
  33. 04402346  |.  8B70 0C        MOV ESI,DWORD PTR DS:[EAX+C]
  34. 04402349  |.  8D8E 10400000  LEA ECX,DWORD PTR DS:[ESI+4010]
  35. 0440234F  |.  C1E1 08        SHL ECX,8
  36. 04402352  |.  E8 49720000    CALL netc.044095A0
  37. 04402357  |.  8B4D 18        MOV ECX,DWORD PTR SS:[EBP+18]
  38. 0440235A  |.  2B4D 14        SUB ECX,DWORD PTR SS:[EBP+14]
  39. 0440235D  |.  0FB7D8         MOVZX EBX,AX
  40. 04402360  |.  D1F9           SAR ECX,1
  41. 04402362  |.  3BF1           CMP ESI,ECX
  42. 04402364  |.  72 06          JB SHORT netc.0440236C
  43. 04402366  |.  FF15 4CE24404  CALL DWORD PTR DS:[<&MSVCR90._invalid_pa>; MSVCR90._invalid_parameter_noinfo
  44. 0440236C  |>  8B55 14        MOV EDX,DWORD PTR SS:[EBP+14]
  45. 0440236F  |.  66:891C72      MOV WORD PTR DS:[EDX+ESI*2],BX
  46. 04402373  |.  8D7424 10      LEA ESI,DWORD PTR SS:[ESP+10]
  47. 04402377  |.  E8 34B7FFFF    CALL netc.043FDAB0
  48. 0440237C  |.  8B7424 10      MOV ESI,DWORD PTR SS:[ESP+10]
  49. 04402380  |.^ EB 8E          JMP SHORT netc.04402310
  50. 04402382  |>  8B36           MOV ESI,DWORD PTR DS:[ESI]
  51. 04402384  |.^ EB AD          JMP SHORT netc.04402333
  52. 04402386  |>  8B47 18        MOV EAX,DWORD PTR DS:[EDI+18]
  53. 04402389  |.  8B58 04        MOV EBX,DWORD PTR DS:[EAX+4]
  54. 0440238C  |.  807B 15 00     CMP BYTE PTR DS:[EBX+15],0
  55. 04402390  |.  8BF3           MOV ESI,EBX
  56. 04402392  |.  75 1E          JNZ SHORT netc.044023B2
  57. 04402394  |>  8B4E 08        /MOV ECX,DWORD PTR DS:[ESI+8]
  58. 04402397  |.  51             |PUSH ECX
  59. 04402398  |.  8BCF           |MOV ECX,EDI
  60. 0440239A  |.  E8 51090200    |CALL netc.04422CF0
  61. 0440239F  |.  8B36           |MOV ESI,DWORD PTR DS:[ESI]
  62. 044023A1  |.  53             |PUSH EBX
  63. 044023A2  |.  E8 B7280400    |CALL <JMP.&MSVCR90.??3@YAXPAX@Z>
  64. 044023A7  |.  83C4 04        |ADD ESP,4
  65. 044023AA  |.  807E 15 00     |CMP BYTE PTR DS:[ESI+15],0
  66. 044023AE  |.  8BDE           |MOV EBX,ESI
  67. 044023B0  |.74 E2          \JE SHORT netc.04402394
  68. 044023B2  |>  8B47 18        MOV EAX,DWORD PTR DS:[EDI+18]
  69. 044023B5  |.  8940 04        MOV DWORD PTR DS:[EAX+4],EAX
  70. 044023B8  |.  8B47 18        MOV EAX,DWORD PTR DS:[EDI+18]
  71. 044023BB  |.  C747 1C 000000>MOV DWORD PTR DS:[EDI+1C],0
  72. 044023C2  |.  8900           MOV DWORD PTR DS:[EAX],EAX
  73. 044023C4  |.  8B7F 18        MOV EDI,DWORD PTR DS:[EDI+18]
  74. 044023C7  |.  897F 08        MOV DWORD PTR DS:[EDI+8],EDI
  75. 044023CA  |>  5F             POP EDI
  76. 044023CB  |.  5E             POP ESI
  77. 044023CC  |.  5D             POP EBP
  78. 044023CD  |.  5B             POP EBX
  79. 044023CE  |.  83C4 08        ADD ESP,8
  80. 044023D1  \.  C2 0400        RETN 4

Всего цикл вызывают 5 процедур

2Kaimi
Перехватывал fopen() в msvcrt90.dll - перехват сам то сработал, но оказался бесполезным потому что интересующий файл после открытия загружался в буфер и проверялась чексумма, и потом из того же буфера использовался - сработало только если бы для проверки чек суммы и загрузки использовались два fopen'a.
Спасибо всем за внимание.
P.S. У вас тут просто отличный тег для кода



Ранг: 237.0 (наставник), 20thx
Активность: 0.130
Статус: Участник
sysenter

Создано: 03 мая 2011 04:01
· Личное сообщение · #8

не понятно защита памяти тут при чем?

-----
продавец резиновых утёнков




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

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

При попытке изменения памяти проги сразу кидает...
А вышеприведённый код по видиому проверяет пямять - я могу быть не прав, если это так - поправьте. Покажите хоть в какую сторону копать.



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

Создано: 03 мая 2011 13:16 · Поправил: VodoleY
· Личное сообщение · #10

kostay_scr я б сказал что твоя процедура 44095A0 расшифровывает DWORD
с резултатом в [esp+4]

-----
Наша работа во тьме, Мы делаем, что умеем. Мы отдаем, что имеем, Наша работа во тьме....




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

Создано: 03 мая 2011 14:29 · Поправил: kostay_scr
· Личное сообщение · #11

Спасибо, но что это нам говорит?
Чего это она лезет в пространство других длл?
Люди ну скачайте, посмотрите - помогите обойти долбанную защиту



Ранг: 58.1 (постоянный), 42thx
Активность: 0.060.01
Статус: Участник

Создано: 03 мая 2011 20:54
· Личное сообщение · #12

Для запуска игра нужна?



Ранг: 237.0 (наставник), 20thx
Активность: 0.130
Статус: Участник
sysenter

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

посмотрите флаги доступа страниц памяти.
kostay_scr пишет:
Люди ну скачайте, посмотрите - помогите обойти долбанную защиту

- в запросах на взлом обычно тут такое постят. если что пишите мне в ЛС,
много я "защит" в свое время с игр снимал...

-----
продавец резиновых утёнков




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

Создано: 04 мая 2011 00:35 · Поправил: kostay_scr
· Личное сообщение · #14

hlmadip
Да нужна
HiEndsoft
Да если бы я сам ничего не делал
Просто уже идеи закончились - просто не представляю что еще можно попробовать:
И нопил, и возвращаемое значение подменял, и функции перехватывал - толку ноль.
Спасибо за совет - обязательно посмотрю, только не подскажите где?
А если защита построена на исключениях - тогда просто поменять права доступа к памяти?
Как я сам не додумался - ведь у меня постоянно выскакивало исключение E06D7363 - Пришлось в настройках исключить, а потом я про него и забыл.
P.S. Были бы деньги запостил бы в запрос на взлом , да и учиться к тому же тоже надо.



Ранг: 237.0 (наставник), 20thx
Активность: 0.130
Статус: Участник
sysenter

Создано: 04 мая 2011 07:35
· Личное сообщение · #15

Еще можно тем же RkU глянуть на предмет установленных самой прогой перехватов.

-----
продавец резиновых утёнков




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

Создано: 04 мая 2011 11:15 · Поправил: kostay_scr
· Личное сообщение · #16

Так я посмотрел страницы памяти - на коде доступ R, а не RE - или должно быть R?
Доступ почему то установить не удалось, буду разбираться дальше..
HiEndSoft спасибо за идею!
Добавлено:
Странно почему то в cmd.exe тоже нигде нет доступа на исполнение, чтобы это значило?
Добавлено2:
Как я и предполагал в 2 ольке всё отображается нормально - к сожалению доступ к памяти нормальный - RE для кода.




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

Создано: 05 мая 2011 21:43
· Личное сообщение · #17

VodoleY пишет:
kostay_scr я б сказал что твоя процедура 44095A0 расшифровывает DWORDс резултатом в [esp+4]

Как раз таки нет Функция подсчитывает чексумму блока 0x40 * 4 = 0x100 байт! На входе ecx - указатель на блок памяти, результат в eax, в том же ecx дублируется. Причем используется только 16 бит.

Интересно место
Code:
  1. 04402349  |.  8D8E 10400000  LEA ECX,DWORD PTR DS:[ESI+4010]
  2. 0440234F  |.  C1E1 08        SHL ECX,8


Напрашивается вывод, что указатели на блоки хранятся в виде таблицы их дескрипторов вида ((Address >> 8) - 0x4010) и могут быть перемешаны в любом порядке. То есть, при si = 0, адрес блока 0x00401000, что совпадает с началом секции кода в большинстве exe-модулей. Но si может быть и 0xC000, адрес будет тогда соответсвовать началу секции кода, например, блокнота (0x01001000). Предельный адрес блока получается 0x01400F00 (при si = 0xFFFF). Таким образом для подсчёта контрольных сумм областей памяти из dll-модулей этот алго не подходит без копирования оттуда в область 0x00401000..0x01400F00.

Далее, код
Code:
  1. 0440236C  |>  8B55 14        MOV EDX,DWORD PTR SS:[EBP+14]
  2. 0440236F  |.  66:891C72      MOV WORD PTR DS:[EDX+ESI*2],BX

укладывает полученные ворды в таблицу с базой [EBP + 0x14]. Причем esi и есть те самые 2-байтовые дескрипторы...

Уже расписался вовсю Выходит, что либо это не тот код и должен быть аналогичный этому для адресов, в диапазоне 0x10000000...0x7F000000, либо нужно поискать функцию копирования в область 0x00401000..0x01400F00, тогда предварительно скорее всего вызывается либо VirtualProtect с флагом PAGE_EXECUTE_READWRITE, либо менее вероятно VirtualAlloc с адресами страниц из этой области... База dll может находиться в этой области, но надеяться на постоянство нельзя - загрузиться может куда угодно...

Не исключено, что аналогичный в каждой защищаемой dll. Также может быть, что перед вызовом
044022E0 в
Code:
  1. 04402349  |.  8D8E 10400000  LEA ECX,DWORD PTR DS:[ESI+4010]

меняется константа 0x4010 на соответствующую для dll.

-----
IZ.RU




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

Создано: 05 мая 2011 23:19 · Поправил: kostay_scr
· Личное сообщение · #18

DenCoder
Спасибо, спасибо, спасибо!
Буду искать VirtualProtect и VirtualAlloc - по моему точно были такие функции в импорте.
Проверю с другими адресами - может есть и другой код.
Код этот нашёл по HBP на доступ к изменяемым данным.
Я уж думал никто ничего не напишет, а тут бац - всё расписали!
Кстати - какая чек сумма?Стандартная вроде CRC?
P.S. Код этот лез в память другой dll - и очевидно всех важных dll в этом процессе, но например msvcrt90 не проверяет.
Попробую "полечить" проверку чексуммы)))
Правда процедурка данная вызывается аж из пяти мест - так что придёться надеть халат, взять скальпель в руки и за работу))
Теперь, благодаря вам, хотя бы знаю что искать!




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

Создано: 05 мая 2011 23:27 · Поправил: DenCoder
· Личное сообщение · #19

kostay_scr пишет:
Кстати - какая чек сумма?Стандартная вроде CRC?

Хз, какая. Надо смотреть алгоритмы, сравнивать...
DenCoder пишет:
Далее, код
Code:
  1. 0440236C  |>  8B55 14        MOV EDX,DWORD PTR SS:[EBP+14]
  2. 0440236F  |.  66:891C72      MOV WORD PTR DS:[EDX+ESI*2],BX

укладывает полученные ворды в таблицу с базой [EBP + 0x14]. Причем esi и есть те самые 2-байтовые дескрипторы...


Кстати, в моём анализе ошибка - у esi нет ограничений. Меня сконфузило MOV WORD PTR DS:[EDX+ESI*2],BX. Это просто может означать, что защищаемые dll хранят две таблицы по фиксированным смещениям с относительно друг друга по произвольным смещениям. Первая - дескрипторы защищённых областей, вторая - ворды-чексуммы. Может быть и что вторая затем используется для дальнейшего подсчёта общей чексуммы...

Также, может быть одно из двух:
1) Таблица дескрипторов имеет фиксированный размер;
2) Размер таблицы где-то прописан.

-----
IZ.RU




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

Создано: 05 мая 2011 23:31 · Поправил: kostay_scr
· Личное сообщение · #20

Значит этот код может с успехом проверять всё что ему заблагоразумиться и можно не искать VirtualProtect?




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

Создано: 05 мая 2011 23:39 · Поправил: DenCoder
· Личное сообщение · #21

kostay_scr пишет:
Значит этот код может с успехом проверять всё что ему заблагоразумиться и можно не искать VirtualProtect?

Варианты выше 3-мя постами остаются в силе, если на адресе 04402349 не найдёте адресов из защищаемых dll.
kostay_scr пишет:
P.S. Код этот лез в память другой dll - и очевидно всех важных dll в этом процессе, но например msvcrt90 не проверяет.

Тогда не нужен VirtualProtect . msvcrt90.dll - стандартная dll, входит в состав Visual Studio, видимо автор не меняю опцию компилятора для своего релиза (/MD по умолчанию стоит, если в следующей версии автор поставит /MT, то используемые из неё функции скомпилятся в модуль). Не проверяется потому, что в ней видимо нет признаков защищаемых областей.

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

-----
IZ.RU




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

Создано: 05 мая 2011 23:50
· Личное сообщение · #22

DenCoder
Есть только VirtualQueyEx - очевидно код проверяет всё сам.
Буду смотреть куда указывает 04402349 - посмотрим что там...




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

Создано: 06 мая 2011 00:01
· Личное сообщение · #23

kostay_scr пишет:
Буду смотреть куда указывает 04402349 - посмотрим что там...

Я имел в виду условный бряк туда поставить, чтоб останов был, если esi указывает на интересующие диапазоны. В ольке 2, кстати, глюки с условными бряками - не всегда срабатывают. Только что проверил - первый раз после xor ebx, ebx бряк с условием ebx == 0 не сработал. Но сработоло сразу, когда убрал и поставил новый не через Conditional, а через Conditional log...

-----
IZ.RU




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

Создано: 06 мая 2011 00:05 · Поправил: kostay_scr
· Личное сообщение · #24

А я сделаю вид что я сделал что то другое=)
Ну не такой уже я дурак что буду смотреть на команду LEA и думать что же мне с ней делать?
Спасибо вам еще раз - теперь хоть знаю куда копать, а значит буду копать.
Думаю что завтра уже разбираться буду



Ранг: 5.2 (гость)
Активность: 0.010
Статус: Участник

Создано: 10 мая 2011 08:40 · Поправил: Siarogka1
· Личное сообщение · #25

чтобы тем не плодить напишу здесь, распаковал и пропатчил exe(был запакован Аrmadillo), чтобы при запуске в памяти менял пару байтов в загруженной dll , но при попытке сделать это прога вылетает, в олли показана, что на ту секцию куда хочу писать стоит доступ R. подскажите или функцию или команду, чтобы разрешить запись в тот участок памяти?




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

Создано: 10 мая 2011 09:16
· Личное сообщение · #26

VirtualProtect. В мсдн заглянуть не судьба?



Ранг: 5.2 (гость)
Активность: 0.010
Статус: Участник

Создано: 10 мая 2011 21:05 · Поправил: Siarogka1
· Личное сообщение · #27

спс все нашел) пропатчил и все заработало)


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


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