[C++] Внутреннее время процесса

Тема в разделе "LANGS.C", создана пользователем MuForum, 28 дек 2008.

  1. MuForum

    MuForum Member

    Публикаций:
    0
    Регистрация:
    11 мар 2007
    Сообщения:
    109
    Доброе время суток!
    - Столкнулся с такой проблемой: Есть программа 1.exe, она изменяет '1 байт' в процессе программы 2.exe, что приводит к ускорению внутреннего времени в процессе 2.exe. (То есть, все действиям в этом процессе происходят быстрее, чем должны)
    - Сканирование по средствам всяких программ по выявлению хуков (RootKit_Unhooker и т.д.) не выявил хуков.
    - Воспользовался программой 'HookShark', которая обнаружила изменения в процессе 2.exe:
    Код (Text):
    1. Hooked Object || Hook Redirection/Info || Type Of Hook
    2. //---------------------------------------------------------------------------
    3. [3324] 2.exe -> 2+0x2621B2 || 0x6621B2 || Inline - Custom Patch [1 bytes] [SUB [ECX+0x77ECE815],CX -> AND [ECX+0x77ECE815],CX]
    - На сколько мне позволяет логика, я понимаю, что этот байт влияет на ход внутреннего времени в процессе 2.exe;
    - Изменяет задержку проигрывания анимации или что-то в этом духе.
    - Но, как это отследить?


    P.S. -> Программа запакована упаковщиком 'Themida', так что возможности поработать через дебагер нету =(
    - Если есть какие-то идеи, прошу высказывать, так как зашел в тупик =(
     
  2. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    MuForum
    Что ты понимаешь под "внутренним временем процесса" ?
    Собственно время в процессе, которое измеряется от начала запуска оси - это несколько слов в UsSharedData, которые изменяются ядром периодически(тики). Процессорное время, или что это ?
    0x2621B2 - странный адрес, обычно модуля грузятся выше.
    Отладчик для того и создан, чтобы динамически код отлаживать, не следует путать с дизассемблерами.
     
  3. MuForum

    MuForum Member

    Публикаций:
    0
    Регистрация:
    11 мар 2007
    Сообщения:
    109
    Clerk - Программа 1.exe ускоряет все действия в процессе 2.exe
    - То есть, все анимационные действия происходят быстрее. Все 3D анимации быстрее выполняют свои действия.
     
  4. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    MuForum
    Может просто приоритет потоков выше ?
     
  5. MuForum

    MuForum Member

    Публикаций:
    0
    Регистрация:
    11 мар 2007
    Сообщения:
    109
    - Как-то не подумал об это, сейчас проверю и отвечу.

    P.S. -> Программа 1.exe изменяет значение в памяти процесса 2.exe:
    Код (Text):
    1. sub edx, 28
    28 - Меняется вот это значение.


    # Добавлено:
    - У программы 1.exe есть 6 режимов:
    Код (Text):
    1. 0 - normal
    2. 1 - Level1
    3. 2 - Level2
    4. ...
    5. 5 - Level5
    - Если считать значение этого байта в этих режимах, то получится следующая табличка:
    Код (Text):
    1. 0 - 40 (Это когда нормальный режим)
    2. 1 - 32 (Немного быстрее)
    3. 2 - 23 (Ещё быстрее)
    4. 3 - 16 (Достаточно быстро)
    5. 4 - 6 (Быстро)
    6. 5 - 2 (Очень быстро)
    - Если я правильно понимаю, то скорее всего это значение задержки потока в мСек?
    - Это обратнопропорциональная схема приоритетов потока?
     
  6. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    MuForum
    В принципе вполне логично предположить что в этом регистре содержится число миллисекунд(например) для задержки, что если увеличить это значение ?
     
  7. MuForum

    MuForum Member

    Публикаций:
    0
    Регистрация:
    11 мар 2007
    Сообщения:
    109
    - Ты прав, если увеличить это значение, то все действия происходящие в этом процессе(или потоке) замедляются.
    - То есть, обратная пропорциональность.
    - Видимо это значение задержки в мСек, как было сказано выше.

    # Добавлено:
    - Такс, когда мы точно узнали, что это значение задержки процесса(или потока) в мСек, возникает другой вопрос: Как программно узнать адрес этого байта отвечающего за задержку процесса(или потока), чтобы в дальнейшем сверять.
    ?
     
  8. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
  9. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    MuForum
    Смотри какой код до и после этой инструкции. Нужно знать что с этим значением происходит.
    ЗЫ: Лучше новый пост создавай, не дописывай - я уже совсем запутолся..
     
  10. MuForum

    MuForum Member

    Публикаций:
    0
    Регистрация:
    11 мар 2007
    Сообщения:
    109
    Clerk, я в ASM плаваю...
    - Вот кусок кода до и после инструкции: SUB EDX, 28
    Код (Text):
    1. 00662167  |.  8B0D 44E95A07 |MOV ECX, [DWORD DS:75AE944]
    2. 0066216D  |.  83E9 01       |SUB ECX, 1
    3. 00662170  |.  890D 44E95A07 |MOV [DWORD DS:75AE944], ECX
    4. 00662176  |>  8B15 C047AF07 |MOV EDX, [DWORD DS:7AF47C0]
    5. 0066217C  |.  83C2 01       |ADD EDX, 1
    6. 0066217F  |.  8915 C047AF07 |MOV [DWORD DS:7AF47C0], EDX
    7. 00662185  |.  A1 C047AF07   |MOV EAX, [DWORD DS:7AF47C0]
    8. 0066218A  |.  25 1F000080   |AND EAX, 8000001F
    9. 0066218F  |.  79 05         |JNS SHORT ==Main.00662196
    10. 00662191  |.  48            |DEC EAX
    11. 00662192  |.  83C8 E0       |OR EAX, FFFFFFE0
    12. 00662195  |.  40            |INC EAX
    13. 00662196  |>  A3 C047AF07   |MOV [DWORD DS:7AF47C0], EAX
    14. 0066219B  |.  8B0D 3827B007 |MOV ECX, [DWORD DS:7B02738]
    15. 006621A1  |.  83C1 01       |ADD ECX, 1
    16. 006621A4  |.  890D 3827B007 |MOV [DWORD DS:7B02738], ECX
    17. 006621AA  |.  8B15 E8EC7700 |MOV EDX, [DWORD DS:77ECE8]
    18. 006621B0  |.  83EA 28       |SUB EDX, 28
    19. 006621B3  |.  8915 E8EC7700 |MOV [DWORD DS:77ECE8], EDX
    20. 006621B9  |.  A1 8C27B007   |MOV EAX, [DWORD DS:7B0278C]
    21. 006621BE  |.  8985 A0FCFFFF |MOV [DWORD SS:EBP-360], EAX
    22. 006621C4  |.  8B8D A0FCFFFF |MOV ECX, [DWORD SS:EBP-360]
    23. 006621CA  |.  51            |PUSH ECX
    24. 006621CB  |.  68 1CF47700   |PUSH ==Main.0077F41C                    ;  ASCII "%d"
    25. 006621D0  |.  8D95 30FEFFFF |LEA EDX, [DWORD SS:EBP-1D0]
    26. 006621D6  |.  52            |PUSH EDX
    27. 006621D7  |.  A1 8C27B007   |MOV EAX, [DWORD DS:7B0278C]
    28. 006621DC  |.  83C0 01       |ADD EAX, 1
    29. 006621DF  |.  A3 8C27B007   |MOV [DWORD DS:7B0278C], EAX
    30. 006621E4  |.  E8 3F730D00   |CALL ==Main.00739528
    31. 006621E9  |.  83C4 0C       |ADD ESP, 0C
    32. 006621EC  |.^ E9 BCF8FFFF   \JMP ==Main.00661AAD
    33. 006621F1  |>  33C9          XOR ECX, ECX
    34. 006621F3  |.  8A0D A8EEAF07 MOV CL, [BYTE DS:7AFEEA8]
    35. 006621F9  |.  85C9          TEST ECX, ECX
    36. 006621FB  |.  74 05         JE SHORT ==Main.00662202
    37. 006621FD  |.  E9 A6150000   JMP ==Main.006637A8
    38. 00662202  |>  8B55 BC       MOV EDX, [DWORD SS:EBP-44]
    39. 00662205  |.  52            PUSH EDX
    40. 00662206  |.  8B45 B8       MOV EAX, [DWORD SS:EBP-48]
    41. 00662209  |.  50            PUSH EAX
    42. 0066220A  |.  E8 6310E0FF   CALL ==Main.00463272
    43. 0066220F  |.  8BC8          MOV ECX, EAX                             ; |
    44. 00662211  |.  E8 D825E0FF   CALL ==Main.004647EE                     ; \==Main.004647EE
    45. 00662216  |.  E8 6F300400   CALL ==Main.006A528A
    46. 0066221B  |.  8D8D A4FEFFFF LEA ECX, [DWORD SS:EBP-15C]
    47. 00662221  |.  51            PUSH ECX                                 ; /pLocaltime
    48. 00662222  |.  FF15 B8617500 CALL [DWORD DS:<&KERNEL32.GetLocalTime>] ; \GetLocalTime
    49. 00662228  |.  8B15 D0E9AF07 MOV EDX, [DWORD DS:7AFE9D0]
    50. 0066222E  |.  52            PUSH EDX
    51. 0066222F  |.  8B85 AEFEFFFF MOV EAX, [DWORD SS:EBP-152]
    52. 00662235  |.  25 FFFF0000   AND EAX, 0FFFF
    53. 0066223A  |.  50            PUSH EAX
    54. 0066223B  |.  8B8D ACFEFFFF MOV ECX, [DWORD SS:EBP-154]
    55. 00662241  |.  81E1 FFFF0000 AND ECX, 0FFFF
    56. 00662247  |.  51            PUSH ECX
    57. 00662248  |.  8B95 AAFEFFFF MOV EDX, [DWORD SS:EBP-156]
    58. 0066224E  |.  81E2 FFFF0000 AND EDX, 0FFFF
    59. 00662254  |.  52            PUSH EDX
    60. 00662255  |.  8B85 A6FEFFFF MOV EAX, [DWORD SS:EBP-15A]
    61. 0066225B  |.  25 FFFF0000   AND EAX, 0FFFF
    62. 00662260  |.  50            PUSH EAX
    63. 00662261  |.  68 20F47700   PUSH ==Main.0077F420                     ;  ASCII "Screen(%02d_%02d-%02d_%02d)-%04d.jpg"
    64. 00662266  |.  68 48E8AF07   PUSH ==Main.07AFE848
    65. 0066226B  |.  E8 B8720D00   CALL ==Main.00739528
    66. 00662270  |.  83C4 1C       ADD ESP, 1C
     
  11. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    0x77ECE8 - там эта константа, посмотри адрес загрузки модуля, в катором находится эта переменная(модуль ли это) ?
    Интересно узнать если это модуль, то имя секции, где эта переменная.
    Попробуй её изменить там.
     
  12. MuForum

    MuForum Member

    Публикаций:
    0
    Регистрация:
    11 мар 2007
    Сообщения:
    109
    Clerk - Почисть свою почту пожалуйста, так как я не могу тебе отправить сообщение.
    P.S. -> Может всё таки зайдёшь в ICQ?
     
  13. Clerk

    Clerk Забанен

    Публикаций:
    0
    Регистрация:
    4 янв 2008
    Сообщения:
    6.689
    Адрес:
    РБ, Могилёв
    MuForum
    Почистил. Так что там с изменением этой переменной вышло ?