Сейчас на форуме: zombi-vadim, tyns777 (+5 невидимых) |
![]() |
eXeL@B —› Программирование —› TLS. Обработка в своем загрузчике |
Посл.ответ | Сообщение |
|
Создано: 23 ноября 2007 13:21 · Личное сообщение · #1 |
|
Создано: 23 ноября 2007 13:35 · Личное сообщение · #2 |
|
Создано: 23 ноября 2007 13:40 · Личное сообщение · #3 Пишу свой пакер. Точнее написал уже. Простенький, безо всяких наворотов. Работает. Распаковывает образ ехе в памяти, разносит секции на нужные смещения, биндит импорт и пр. Но не дружит с ехе, в которых присутствует тлс - При попытке запуска происходит ошибка. ТЛС я в своем загрузчике никак не обрабатываю, вот, хочу побольше инфы собрать или может у кого уже готовый код есть. ![]() |
|
Создано: 23 ноября 2007 14:40 · Личное сообщение · #4 |
|
Создано: 23 ноября 2007 14:50 · Личное сообщение · #5 |
|
Создано: 23 ноября 2007 15:02 · Личное сообщение · #6 LexxCracker пишет: А описание есть тлс? Лучше описание Нетю( LexxCracker пишет: ты ведь не с головы писал Я потрошил файлы, содержащие тлс и смотрел, как оно работает и что пишет. ![]() LexxCracker пишет: На васме порылся - там одна статейка только. И то.. Для самых элементарных случаев Я тоже искал статьи, только ничего подходящего не нашел. В основном попадались описания ПЕХидера) LexxCracker пишет: На сях + асм вставки + активно ммх заюзал Мой сорс на дельфях ![]() Я ламо((( ----- iNTERNATiONAL CoDE CReW ![]() |
|
Создано: 23 ноября 2007 15:26 · Личное сообщение · #7 1. Создать структуру где-нить в коде\секции загрузчика или в хидере и заполнить её следующим образом
2. Прописать у новаго (упакованного) файла IMAGE_OPTIONAL_HEADER.DataDirectoryTls.VirtualAddress == VirtualAddress of MyNewTlsTable и Size = 18h ![]() |
|
Создано: 23 ноября 2007 16:30 · Личное сообщение · #8 |
|
Создано: 23 ноября 2007 21:36 · Личное сообщение · #9 Ппц, и чем же статья на васме для элементарных случаев??? Эта статья ТЫЦ http://wasm.ru/print.php?article=tls очень хорошая. Вкурив - поймёшь, что тело стаба легче в ТЛС втиснуть через callback и потом ненадо о некоторых моментах задумываться (как делает "какой-то" прот). ----- Само плывет в pуки только то, что не тонет. ![]() |
|
Создано: 24 ноября 2007 12:33 · Личное сообщение · #10 LexxCracker пишет: Там указатель на массив указателей обработчиков. Как их вызывать и обрабатывать - я хз Ты вообще где нашел чисто скомпилированный файл с не нулевым массивом TLS Callback? Я ни разу не видел такого, если только после упаковки Execryptor'ом появляются. LexxCracker пишет: и обрабатывать А так не вижу никакой проблемы с этим, в своем пакере можешь перед выполнением оригинальной точки входа выполнить все Callback'и, когда уже все секции распакованы и импорт инициализирован...??? Для пакованного файла надо только обработать талицу TLS и убрать все callback'и что бы винда не попыталась их запустить когда код еще не распакован. LexxCracker пишет: Как их вызывать Наверняка, перед выполнением callback'а надо что нибудь положить ему в стек как параметры, эту инфу можно у того же execyptor подсмотреть. ![]() |
|
Создано: 24 ноября 2007 13:49 · Личное сообщение · #11 |
|
Создано: 24 ноября 2007 15:00 · Личное сообщение · #12 |
|
Создано: 24 ноября 2007 15:44 · Личное сообщение · #13 |
|
Создано: 24 ноября 2007 20:48 · Личное сообщение · #14 |
|
Создано: 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! ![]() |
|
Создано: 05 декабря 2007 01:11 · Личное сообщение · #16 LexxCracker Ну написал обработчик, можешь поделиться кодом? Собственно таже проблема. В файле есть TLS директория нужно от неё избавиться, т.е. вручную произвести те модификации, которые делает системный загрузчик. Подскажите примерный наиболее точных ход действий. // wasm.ru/print.php?article=tls - уже читал ![]() ![]() |
|
Создано: 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 ![]() |
|
Создано: 05 декабря 2007 08:20 · Личное сообщение · #18 Hellspawn пишет: в каком случае? нет, это не правильно, сначала отработаю все калбеки, а потом уже управление попадёт на ЕП Можно передать управление на ep прямо из callback'а - безусловным переходом или вызовом процедуры - управление перейдет на EP до окончания callback'а, другой вопрос - будет ли это работать ![]() ----- "Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels ![]() |
|
Создано: 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'ов. ![]() |
|
Создано: 05 декабря 2007 13:08 · Личное сообщение · #20 GlOFF пишет: Вот, значит нужно обнулить от Start address of raw data и до end address of raw data. Это вовсе необязательно. GlOFF пишет: А потом что делать, если допустим нет callback'ов. После этого управление передаётся на EP, естественно с коррекцией стека. ----- "Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels ![]() |
|
Создано: 05 декабря 2007 21:14 · Личное сообщение · #21 Smon Если допустим нет callback'ов. Smon пишет: После этого управление передаётся на EP, естественно с коррекцией стека. Ок. Но затерев описание директории (IMAGE_DIRECTORY_ENTRY_TLS), файл перестает работать. Если callback'и не выполняются, то чтоже сделать с файлом? Или если есть директория IMAGE_DIRECTORY_ENTRY_TLS, то уже нельзя избавиться от неё. ![]() ![]() |
|
Создано: 05 декабря 2007 22:05 · Личное сообщение · #22 GlOFF Ты прот чтоль свой пишешь ? Jupiter пишет: лучше определять по наличию/отсутствию в импорте оригинальной проги функций по работе с TLS: TlsAlloc, TlsFree, TlsGetValue, TlsSetValue GlOFF Смотри в сторону этих апи, полностью убрать тлс из делфи\билдера можно. Скачай ntkrnl protector, и посмотри как он это делает ![]() ----- "Пусть видят, что мы не шутим. Стволы для понта, ножи для дела" Lock, Stock & Two Smoking Barrels ![]() |
|
Создано: 06 декабря 2007 17:14 · Личное сообщение · #23 |
![]() |
eXeL@B —› Программирование —› TLS. Обработка в своем загрузчике |