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

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

Ранг: 1.5 (гость)
Активность: 0=0
Статус: Участник

Создано: 01 сентября 2012 20:28
· Личное сообщение · #1

Добрый день, прошу помощи разобраться. Есть программа, в которой в другом потоке (thread) создается алерт-диалог повторной проверки лицензии.
Через Olly все нашел, занупил и все заработало, но вот как сохранить изменения не особо понятно. Или это требуется делать лоадер, если да, как тогда найти нужный поток при запуске через лоадер?



Ранг: 116.1 (ветеран), 5thx
Активность: 0.060
Статус: Участник

Создано: 01 сентября 2012 21:15 · Поправил: BoOMBoX
· Личное сообщение · #2

в ольке выделяешь исправленные байты->кликаешь правой кнокой мыши->выбираешь меню Copy to executable->Selection
Далее опять кликаешь правой кнокой мыши->выбираешь меню Save file и сохраняешь



Ранг: 1.5 (гость)
Активность: 0=0
Статус: Участник

Создано: 02 сентября 2012 10:31
· Личное сообщение · #3

в том то и дело, что в другом потоке этого пункта нет




Ранг: 37.1 (посетитель), 11thx
Активность: 0.030
Статус: Участник

Создано: 02 сентября 2012 11:26
· Личное сообщение · #4

Выходит, что эта область памяти автоматически выделяется программой и пропатчить её в бинарнике не получиться. Попробуй найти вызов CreateThread и занопить его.




Ранг: 681.5 (! !), 405thx
Активность: 0.420.21
Статус: Участник
ALIEN Hack Team

Создано: 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.


| Сообщение посчитали полезным: xa3apg

Ранг: 31.0 (посетитель), 70thx
Активность: 0.140
Статус: Участник

Создано: 02 сентября 2012 14:46 · Поправил: schokk_m4ks1k
· Личное сообщение · #6

может ты б выложил ссылку на файл, люди б посмотрели и сказали как тебе убрать наг) потому что гадать на кофейной гуще не очень удобно) советов изложили достаточно, включай мозг и вперед ручками ручками



Ранг: 617.3 (!), 677thx
Активность: 0.540
Статус: Участник

Создано: 02 сентября 2012 15:26 · Поправил: Vovan666
· Личное сообщение · #7

Если CreateThread находится в теле exe. а не м выделенной памяти, то делается примерно следующее:
Call CreateThread меняется на jmp пустое_место_в_конце_файла
а там пишется следующее

Code:
  1. pushad
  2. mov eax,[esp+28]
  3. cmp word[eax+1234],4d75 ;(1234 - смещение от начала нового потока до места патча, 4d75 - это к примеру там был короткий jnz)
  4. jne @1
  5. mov word[eax+1234],9090
  6. тут восстанавливаем измененный Call CreateThread
  7. popad
  8. jmp на Call CreateThread
  9. @1:
  10. popad
  11. call CreateThread
  12. jmp после_измененного_Call CreateThread


| Сообщение посчитали полезным: Hellspawn

Ранг: 116.1 (ветеран), 5thx
Активность: 0.060
Статус: Участник

Создано: 02 сентября 2012 19:26
· Личное сообщение · #8

Promix_17 пишет:
Выходит, что эта область памяти автоматически выделяется программой и пропатчить её в бинарнике не получиться.


Ну может быть случай не такой серьезный, код трэда скорее всего лежит в теле проги, и может даже в открытом виде, поэтому можно попробовать найти по сигнатуре "B80100000083EC0C50+то что было заноплено" и пропатчить.



Ранг: 1.5 (гость)
Активность: 0=0
Статус: Участник

Создано: 03 сентября 2012 10:55 · Поправил: xa3apg
· Личное сообщение · #9

всем спасибо,лоадер сделан.


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


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