Сейчас на форуме: zombi-vadim, tyns777 (+5 невидимых)

 eXeL@B —› Программирование —› TLS. Обработка в своем загрузчике
Посл.ответ Сообщение

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

Создано: 23 ноября 2007 13:21
· Личное сообщение · #1

САБЖ
У кого-то есть код или хотя бы подробное описание ТЛС?

Заранее благодарен.
Нужно вручную загрузить ехе. Проблемы пока только с ТЛС, т.к. я не знаю как его обрабаттывать. За любую инфу или демо-код буду благодарен.




Ранг: 271.6 (наставник), 2thx
Активность: 0.30
Статус: Участник

Создано: 23 ноября 2007 13:35
· Личное сообщение · #2

LexxCracker пишет:
Нужно вручную загрузить ехе

Чет я не понял, как загрузить, куда, откуда?
Поясни по подробней.

-----
iNTERNATiONAL CoDE CReW




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

Создано: 23 ноября 2007 13:40
· Личное сообщение · #3

Пишу свой пакер. Точнее написал уже. Простенький, безо всяких наворотов. Работает.

Распаковывает образ ехе в памяти, разносит секции на нужные смещения, биндит импорт и пр.

Но не дружит с ехе, в которых присутствует тлс - При попытке запуска происходит ошибка.

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




Ранг: 271.6 (наставник), 2thx
Активность: 0.30
Статус: Участник

Создано: 23 ноября 2007 14:40
· Личное сообщение · #4

Я писал свой протектор у меня там была тлс защита.
Могу дать посмотреть, как ее воткнуть. А вот как ее выткнуть яхз, но думаю если приложить мозХ, то все получиццо.
Кстате на каком языке ты пишешь?

-----
iNTERNATiONAL CoDE CReW




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

Создано: 23 ноября 2007 14:50
· Личное сообщение · #5

А описание есть тлс? Лучше описание ) ты ведь не с головы писал =)
На васме порылся - там одна статейка только. И то.. Для самых элементарных случаев. ))

ЗЫ: На сях + асм вставки + активно ммх заюзал




Ранг: 271.6 (наставник), 2thx
Активность: 0.30
Статус: Участник

Создано: 23 ноября 2007 15:02
· Личное сообщение · #6

LexxCracker пишет:
А описание есть тлс? Лучше описание

Нетю(
LexxCracker пишет:
ты ведь не с головы писал

Я потрошил файлы, содержащие тлс и смотрел, как оно работает и что пишет.
LexxCracker пишет:
На васме порылся - там одна статейка только. И то.. Для самых элементарных случаев

Я тоже искал статьи, только ничего подходящего не нашел. В основном попадались описания ПЕХидера)
LexxCracker пишет:
На сях + асм вставки + активно ммх заюзал

Мой сорс на дельфях
Я ламо(((

-----
iNTERNATiONAL CoDE CReW





Ранг: 61.7 (постоянный)
Активность: 0.050
Статус: Участник
я

Создано: 23 ноября 2007 15:26
· Личное сообщение · #7

1. Создать структуру где-нить в коде\секции загрузчика или в хидере
и заполнить её следующим образом


struct MyNewTlsTable
{
DataBlockStartVA = from an original file
DataBlockEndVA = from an original file
IndexVariableVA = from an original file
CallbackTableVA = 0 (поскольку обычно эта хрень ссылается на таблицу DWORD'ов содержащую всего одно значение NULL, то нафиг и копировать это поле из оригинального файла)
SizeOfZeroFill = 0
Characteristics = 0
}


2. Прописать у новаго (упакованного) файла IMAGE_OPTIONAL_HEADER.DataDirectoryTls.VirtualAddress == VirtualAddress of MyNewTlsTable и Size = 18h



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

Создано: 23 ноября 2007 16:30
· Личное сообщение · #8

CallbackTableVA = 0 (поскольку обычно эта хрень ссылается на таблицу DWORD'ов содержащую всего одно значение NULL, то нафиг и копировать это поле из оригинального файла)

Трабла как раз тут, посколку не ноль.
Там указатель на массив указателей обработчиков. Как их вызывать и обрабатывать - я хз



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

Создано: 23 ноября 2007 21:36
· Личное сообщение · #9

Ппц, и чем же статья на васме для элементарных случаев???
Эта статья ТЫЦ http://wasm.ru/print.php?article=tls очень хорошая. Вкурив - поймёшь, что тело стаба легче в ТЛС втиснуть через callback и потом ненадо о некоторых моментах задумываться (как делает "какой-то" прот).

-----
Само плывет в pуки только то, что не тонет.




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

Создано: 24 ноября 2007 12:33
· Личное сообщение · #10

LexxCracker пишет:
Там указатель на массив указателей обработчиков. Как их вызывать и обрабатывать - я хз


Ты вообще где нашел чисто скомпилированный файл с не нулевым массивом TLS Callback? Я ни разу не видел такого, если только после упаковки Execryptor'ом появляются.

LexxCracker пишет:
и обрабатывать

А так не вижу никакой проблемы с этим, в своем пакере можешь перед выполнением оригинальной точки входа выполнить все Callback'и, когда уже все секции распакованы и импорт инициализирован...??? Для пакованного файла надо только обработать талицу TLS и убрать все callback'и что бы винда не попыталась их запустить когда код еще не распакован.

LexxCracker пишет:
Как их вызывать

Наверняка, перед выполнением callback'а надо что нибудь положить ему в стек как параметры, эту инфу можно у того же execyptor подсмотреть.




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 24 ноября 2007 13:49
· Личное сообщение · #11

Через CreateThread вызвать все функции по очереди из TLS CallBack А потом уже идти на Original Entry Point

-----
Yann Tiersen best and do not fuck




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

Создано: 24 ноября 2007 15:00
· Личное сообщение · #12

PE_Kill пишет:
Через CreateThread вызвать все функции по очереди из TLS CallBack А потом уже идти на Original Entry Point


Это система так callback обрабатывает?

В этом случае может возникнуть ситуация, когда callback полностью не выполнен, а выполнение OEP уже началось, это правильно?




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 24 ноября 2007 15:44
· Личное сообщение · #13

Enigma пишет:
В этом случае может возникнуть ситуация, когда callback полностью не выполнен, а выполнение OEP уже началось, это правильно?


в каком случае? нет, это не правильно, сначала отработаю все калбеки, а потом уже управление
попадёт на ЕП

-----
[nice coder and reverser]




Ранг: 38.2 (посетитель)
Активность: 0.020
Статус: Участник

Создано: 24 ноября 2007 20:48
· Личное сообщение · #14

Я прогу потрошил запротанную Экзэкриптором, так там с колбэка начинается а на оригинальный ЕП прога не попадает ни разу. Но там только один колбэк был в таблице. Так что, как что понимаю, можно делать с выходом из колбэков, так и с последующем вызовом своего ЕП из колбэка.




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

Создано: 24 ноября 2007 21:27
· Личное сообщение · #15

по поводу TLS callback:
Корректный TLS Callback - это тот же DllMain Callback и выглядит так:
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved);
Соответственно, он получает 3 параметра на входе и чистит (должен) за собой стек. В принципе, винда перед вызовом колбэка сохраняет указатель на стек, так что в случае неподчистки стека прога продолжает работать ;)
При создании процесса колбэк получает управление с параметром DLL_PROCESS_ATTACH.

TLS Callback должен получить управление до основной точки входа.

PE_Kill пишет:
Через CreateThread вызвать все функции

виндовый лоадер зовёт их напрямую, не создавая нового потока.

-----
EnJoy!




Ранг: 51.7 (постоянный)
Активность: 0.020
Статус: Участник

Создано: 05 декабря 2007 01:11
· Личное сообщение · #16

LexxCracker Ну написал обработчик, можешь поделиться кодом?

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

// wasm.ru/print.php?article=tls - уже читал



Ранг: 500.5 (!), 8thx
Активность: 0.230
Статус: Участник

Создано: 05 декабря 2007 08:15
· Личное сообщение · #17

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

Какие такие модификации ? Системный загрузчик не производит никаких модификации TLS директории. (ну кроме пожалуй обнуления двордов по адресам Start address of raw data и end address of raw data). Если TLS директория на делфи или борланд си по дефолту, то трогать её не стоит, ибо она используется, если другие компилеры - то в большинстве случаев можно обнулить. Может ты имел в виду каллбек - если он есть, то надо смотреть что он делает и удалять его просто так нельзя - пример ExeCryptor, который выполняет немалую часть своего кода в нём.

-----
"Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels




Ранг: 500.5 (!), 8thx
Активность: 0.230
Статус: Участник

Создано: 05 декабря 2007 08:20
· Личное сообщение · #18

Hellspawn пишет:
в каком случае? нет, это не правильно, сначала отработаю все калбеки, а потом уже управление
попадёт на ЕП

Можно передать управление на ep прямо из callback'а - безусловным переходом или вызовом процедуры - управление перейдет на EP до окончания callback'а, другой вопрос - будет ли это работать

-----
"Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels




Ранг: 51.7 (постоянный)
Активность: 0.020
Статус: Участник

Создано: 05 декабря 2007 12:46
· Личное сообщение · #19

Smon Спс. За пояснения. Но мне нужно удалить описание TLS - директории PE в заголовке и проэмулировать работу загрузчика с этой директорией в файле. Я не хочу вообще избавить от неё, а только самостоятельно обработать.

Smon пишет:
Системный загрузчик не производит никаких модификации TLS директории. (ну кроме пожалуй обнуления двордов по адресам Start address of raw data и end address of raw data).


Вот, значит нужно обнулить от Start address of raw data и до end address of raw data. А потом что делать, если допустим нет callback'ов.



Ранг: 500.5 (!), 8thx
Активность: 0.230
Статус: Участник

Создано: 05 декабря 2007 13:08
· Личное сообщение · #20

GlOFF пишет:
Вот, значит нужно обнулить от Start address of raw data и до end address of raw data.

Это вовсе необязательно.

GlOFF пишет:
А потом что делать, если допустим нет callback'ов.

После этого управление передаётся на EP, естественно с коррекцией стека.

-----
"Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels




Ранг: 51.7 (постоянный)
Активность: 0.020
Статус: Участник

Создано: 05 декабря 2007 21:14
· Личное сообщение · #21

Smon Если допустим нет callback'ов.
Smon пишет:
После этого управление передаётся на EP, естественно с коррекцией стека.

Ок. Но затерев описание директории (IMAGE_DIRECTORY_ENTRY_TLS), файл перестает работать. Если callback'и не выполняются, то чтоже сделать с файлом?

Или если есть директория IMAGE_DIRECTORY_ENTRY_TLS, то уже нельзя избавиться от неё.



Ранг: 500.5 (!), 8thx
Активность: 0.230
Статус: Участник

Создано: 05 декабря 2007 22:05
· Личное сообщение · #22

GlOFF
Ты прот чтоль свой пишешь ?

Jupiter пишет:
лучше определять по наличию/отсутствию в импорте оригинальной проги функций по работе с TLS:
TlsAlloc, TlsFree, TlsGetValue, TlsSetValue


GlOFF
Смотри в сторону этих апи, полностью убрать тлс из делфи\билдера можно.
Скачай ntkrnl protector, и посмотри как он это делает

-----
"Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels




Ранг: 51.7 (постоянный)
Активность: 0.020
Статус: Участник

Создано: 06 декабря 2007 17:14
· Личное сообщение · #23

Smon Спасибо за подсказки, ушел разбираться.


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


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