Сейчас на форуме: -Sanchez- (+8 невидимых)

 eXeL@B —› Основной форум —› Как программистом задается адрес хранения данных потока (Thread)
Посл.ответ Сообщение

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

Создано: 06 марта 2017 19:06
· Личное сообщение · #1

Вопрос к специалистам в области программирования... Столкнулся с одной проблемой. Суть ее такова. Программа упакована протектором Obsidium. При ее загрузке в отладчик (OllyDbg) создается поток, который хранит свои данные по определенному адресу. После распаковки программы, и загрузке распакованной программы в отладчик, создается поток, который хранит свои данные уже по другому адресу (смещение в 800 байтов). Все это было бы ничего, но, при запуске распакованной программы, она записывает данные в область хранения данных потока, и, естественно, их повреждает. В результате чего программа заваливается. Причем адреса хранения данных потока в упакованной и распакованной программах - постоянные, и не меняются от многократной перезагрузки программы. Отсюда вопрос - как можно указать нужный адрес хранения данных потока в распакованной программе, который должен совпадать с адресом хранения данных потока в упакованной программе?

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


Ранг: 312.0 (мудрец), 349thx
Активность: 0.460.65
Статус: Участник
Advisor

Создано: 06 марта 2017 20:02
· Личное сообщение · #2

vnekrilov пишет:
она записывает данные в область хранения данных потока, и, естественно, их повреждает.

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

-----
Чтобы юзер в нэте не делал,его всё равно жалко..


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


Ранг: 605.2 (!), 341thx
Активность: 0.470.25
Статус: Модератор
Research & Development

Создано: 06 марта 2017 20:04
· Личное сообщение · #3

Программа использует функции TlsAlloc, TlsFree, TlsGetValue, TlsSetValue?

Вот схема работы TLS (Thread Local Storage):


Проверь директорию TLS и указатели на данные.

-----
EnJoy!


| Сообщение посчитали полезным: parfetka, vnekrilov, hlmadip, baduba, xekuf


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

Создано: 07 марта 2017 10:57
· Личное сообщение · #4

vnekrilov

Нужно знать как реализуется тлс. Изначально локальная область памяти есть всегда, это структуры, связанные с потоком, я например использую вершину стека для адресации тлс.

> Причем адреса хранения данных потока в упакованной и распакованной программах - постоянные

Не могут они быть постоянные, если только это не смещение(RVA) в модуле. Сам же модуль может релоцироваться, если конечно имеет релоки и не откючен ASLR.

-----
vx



 eXeL@B —› Основной форум —› Как программистом задается адрес хранения данных потока (Thread)
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати