Сейчас на форуме: asfa, _MBK_, Adler, bartolomeo (+8 невидимых) |
![]() |
eXeL@B —› Вопросы новичков —› как сохранить изменения в другом потоке |
Посл.ответ | Сообщение |
|
Создано: 01 сентября 2012 20:28 · Личное сообщение · #1 Добрый день, прошу помощи разобраться. Есть программа, в которой в другом потоке (thread) создается алерт-диалог повторной проверки лицензии. Через Olly все нашел, занупил и все заработало, но вот как сохранить изменения не особо понятно. Или это требуется делать лоадер, если да, как тогда найти нужный поток при запуске через лоадер? ![]() |
|
Создано: 01 сентября 2012 21:15 · Поправил: BoOMBoX · Личное сообщение · #2 |
|
Создано: 02 сентября 2012 10:31 · Личное сообщение · #3 |
|
Создано: 02 сентября 2012 11:26 · Личное сообщение · #4 |
|
Создано: 02 сентября 2012 14:20 · Личное сообщение · #5 xa3apg пишет: Или это требуется делать лоадер, если да, как тогда найти нужный поток при запуске через лоадер? Лоадер - самый безнапряжный способ решения такой проблемы. Но тут есть несколько ньюансов. Во-первых, в лоадере никакой поток искать не надо, все потоки разделяют адресное пространство одного и того же процесса, а это значит, что если вы пропатчили несколько байт по адресу 0x2A2E9A78, это повлияет на все потоки, даже на создаваемые в будущем, и наг будет нейтрализован. Во-вторых, виртуальная память выделяется, видимо, динамически, т.е. посредством вызова VirtualAlloc с первых параметром NULL, а значит на системах с ASLR этот адрес может быть каждый раз разным. Тогда его придётся искать. И тут - масса вариантов, либо по сигнатуре, либо перехватывать какую-то API, тот же CreateThread, например, и топать по некоему смещению от LPTHREAD_START_ROUTINE. В общем, тут уже годится всё, что придумаете. А если хотите пропатчить, то смотрите, где создаётся поток, который выводит наг, и в простейшем случае, если этот поток больше ничего не делает, вам нужно занопить вызов CreateThread, или поискать переход на этот вызов, разобраться почему он выполняется, и исправить ситуацию. ----- Stuck to the plan, always think that we would stand up, never ran. ![]() |
|
Создано: 02 сентября 2012 14:46 · Поправил: schokk_m4ks1k · Личное сообщение · #6 |
|
Создано: 02 сентября 2012 15:26 · Поправил: Vovan666 · Личное сообщение · #7 Если CreateThread находится в теле exe. а не м выделенной памяти, то делается примерно следующее: Call CreateThread меняется на jmp пустое_место_в_конце_файла а там пишется следующее Code:
![]() |
|
Создано: 02 сентября 2012 19:26 · Личное сообщение · #8 Promix_17 пишет: Выходит, что эта область памяти автоматически выделяется программой и пропатчить её в бинарнике не получиться. Ну может быть случай не такой серьезный, код трэда скорее всего лежит в теле проги, и может даже в открытом виде, поэтому можно попробовать найти по сигнатуре "B80100000083EC0C50+то что было заноплено" и пропатчить. ![]() |
|
Создано: 03 сентября 2012 10:55 · Поправил: xa3apg · Личное сообщение · #9 |
![]() |
eXeL@B —› Вопросы новичков —› как сохранить изменения в другом потоке |