Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2017.01.15;
Скачать: CL | DM;

Вниз

Нужна вычитка статьи   Найти похожие ветки 

 
Rouse_ ©   (2016-02-26 16:45) [0]

http://rouse-debug.blogspot.ru/2016/02/delphi-tls-callback.html

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


 
Омлет ©   (2016-02-26 21:01) [1]

> "Как?": - ну это вам решать, способов масса.

Знаков препинания многовато )


 
Омлет ©   (2016-02-26 21:05) [2]

<tfuncdata></tfuncdata></tsectiondata>

Это какой-то артефакт?


 
Rouse_ ©   (2016-02-26 21:42) [3]

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


 
NoUser ©   (2016-02-26 22:04) [4]

> Итак TLS Callback и что это за зверь.
Спасибо!, не знал о таком.

> Их можно задавать в динамике перед резюмом нити через модификацию
резюмом? (вкусный намек на изюминку статьи ) )

Соответственно подумалось что они (TLS Callback) отработают уже только в завершении потока.

Поэтому и вопросы:
1. Когда еще (кроме начального старта, как в статьи)  отработает TLS Callback в exe:
- создание/завершение потока?
- загрузка/выгрузка длл?
2. И для длл-ки?

> подразбавить немного обьяснениями технических деталей,
да, но не из-за того, что суховато, а потому что интересно ;)

ЗЫ.
И что там с подлым хромом - люблю жанр "технический детектив".


 
Rouse_ ©   (2016-02-26 22:20) [5]

Ага понял, хорошая идейка для развития темы статьи. Добавлю что да как


 
Nouser ©   (2016-02-26 23:23) [6]

// дабы процедура tls_callback появилась в MAP файле
// нужно ее вызвать, но вызывать ее мы будем с некоректными параметрами
// дабы она лишний раз почем зря не отработала
tls_callback(nil, 100, nil);                                            // const ptls_callback : Pointer = @tls_callback; ?

//...
F.Position := TlsTable;
F.ReadBuffer(OldCallbackTableAddr, 4);
Inc(OldCallbackTableAddr, 8);                                          
F.Position := TlsTable;
F.WriteBuffer(OldCallbackTableAddr, 4);                                 // CallbackTableAddr "передвинули" на два Pointer-а, \
Writeln("Назначен новый адрес цепочки обработчиков, оффсет: ", IntToHex(TlsTable, 8), ",
 новое значение: ", IntToHex(OldCallbackTableAddr, 8));
F.Position := TlsTable + HardcodeTLS32Offset;                           // \а заносим CallbackAddr куда?
F.WriteBuffer(CallbackAddr, 4);                                         // \или мы знаем, что OldCallbackTableAddr указывал на (TlsTable + HardcodeTLS32Offset - 8) ?
Writeln("Адрес каллбэка выставлен, оффсет: ", IntToHex(TlsTable + HardcodeTLS32Offset, 8));
OldCallbackTableAddr := 0;
TlsTable := F.Position;
for I := 0 to 15 do                                                     // а почему именно 16, вроде хватило бы и одного ?
 F.WriteBuffer(OldCallbackTableAddr, 4);
Writeln("Цепочка калбэков очищена, оффсет: ", IntToHex(TlsTable, 8), ", размер: ", 16 * 4);

//...
Writeln("Правлю время создания МАР файла");                             // как бы понятно, но зачем?


 
Nouser ©   (2016-02-26 23:37) [7]

> 3 каллбэка, которые выполняются до загрузки ее в АП процесса.

То есть на эти каллбэки накладываются ограничения более строгие чем на DllEntry?
А когда в еxe, то тоже так?


 
Rouse_ ©   (2016-02-26 23:38) [8]

Ну это ошметки от тестового кода, где я эксперентировал. Там есть небольшой нюансик если собирать под ХЕ10

В финалке все причешу и код будет ровный, постараюсь сразу и под 64 бита реализовать (изменения в принципе минорные)


 
Rouse_ ©   (2016-02-26 23:43) [9]

Есть небольшие ограничения, но только в специфичных случаях, а так по факту считай что это такой-же dllmain,  причем не важно где он расположен что в библиотеке что в приложении (логика работы одинаковая)


 
Rouse_ ©   (2016-02-26 23:46) [10]

Опс, я там написал "до загрузки"?!!!
Это, конечно ошибка. До передачи на ЕР процесса и ЕР библиотеки - подправлю


 
Омлет ©   (2016-02-26 23:46) [11]

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


Кто не поймет, тому и не надо оно..
В попытках объяснить технические детали можно "Windows Internals" переписать в десяти томах )


 
Rouse_ ©   (2016-02-26 23:49) [12]

Ну я как раз и пытаюсь простыми словами о сложном, иначе зачем писать?


 
Омлет ©   (2016-02-26 23:55) [13]

Тогда надо начинать с "На кого рассчитана статья".


 
Rouse_ ©   (2016-02-27 00:41) [14]

На работающих с защитой, есесно. Я только про нее и пишу :)


 
Inovet ©   (2016-02-27 01:07) [15]

Полную вычитку делать долго. Пробежал глазами минут за 10, не вникая в детали, - хоршо, в твоём стиле, всё так нормально, это не вникая в уже в технические детали.

Одну деталь только убери
"Ну, во первых: он работает как диод - бесшумно."
Диоды работают шумно, как и все приборы.


 
Германн ©   (2016-02-27 01:22) [16]

Ну да. Аналогия с диодом совсем не в дугу.
Лучше  - "Ну во-первых, он работает бесшумно как квалифицированный агент спецслужб." Это ближе по аналогии.
Да и к сути статьи это ближе. Кто из работающих с защитой ПО знает о диодах вообще и о том что они из себя представляют в частности?


 
Германн ©   (2016-02-27 01:23) [17]

Опять забыл поставить смайлик. :(


 
Inovet ©   (2016-02-27 03:22) [18]

> [16] Германн ©   (27.02.16 01:22)
> Лучше  - "Ну во-первых, он работает бесшумно как квалифицированный агент спецслужб." Это ближе по аналогии.

Агенты тоже бывают шумными, а иные проводят в обе стороны. Не годится. Может обойтись без аналогий, а прямо так текстом рубануть правду, чуть подсластив? Уж не знаю как, но придерживаясь стилистики... Нет, авторская должна быть.


 
Dimka Maslov ©   (2016-02-27 08:06) [19]


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


и действительно. стоит немного добавить, что такое tls callback и для чего они нужны.


 
DayGaykin ©   (2016-02-27 09:56) [20]

Если есть возможность выполнить что-то перед запуском потока, зачем тогда эти заморочки с BeginThread?


 
NoUser ©   (2016-02-27 15:55) [21]

Ты о делфийской обертке или о чем?


 
Rouse_ ©   (2016-02-27 16:05) [22]

BeginThread это сугубо VCL.


 
Rouse_ ©   (2016-02-27 17:58) [23]


> Nouser ©   (26.02.16 23:23) [6]

const
 ptls_callback: Pointer = @tls_callback;

Действительно - век живи, век учись, все равно дураком помрешь :)
Чет как-то не знал про такой нюанс :)


 
Rouse_ ©   (2016-02-27 19:52) [24]

Подготовил примерчик по антидампу с использованием TLS - щас добавлю через часок, а по антиотладке думаю будет избыточно - все и так у меня в статьях есть.
К сожалению момент с динамическим добавлением TLS Callback придется выпилить - посеял я примерчик, там простое что-то было (банально TlsSetValue + немного хитростей с инициализацией структуры), но... почти полдня искал - не найшел :(


 
Rouse_ ©   (2016-02-27 20:10) [25]

Исходники: http://rouse.drkb.ru/blog/early_execution.zip
В папке bin лежит экзешник, демонстрирующий методу антидампа, поэтому хром может сругнуться - мол экзехи в архиве


 
Rouse_ ©   (2016-02-27 22:03) [26]

Все, финалка готова: http://rouse-debug.blogspot.ru/2016/02/delphi-tls-callback.html
Вроде все моменты учел.


 
Игорь Шевченко ©   (2016-02-27 22:09) [27]

https://ru.wikipedia.org/wiki/Callback_(%D1%82%D0%B5%D0%BB%D0%B5%D1%84%D0%BE%D0%BD%D0%B8%D1%8F)

калл настолько глаз режет, что нечитабельно ни разу.


 
Rouse_ ©   (2016-02-27 22:15) [28]

Эмм, так вроде везде правильно написал "callback" или "калбэк" - гдето очепятался чтоль?


 
Игорь Шевченко ©   (2016-02-27 22:21) [29]

Rouse_ ©   (27.02.16 22:15) [28]

По ссылке пишут "коллбэк".


 
Rouse_ ©   (2016-02-27 22:28) [30]

Принято - поправил


 
Rouse_ ©   (2016-02-27 22:29) [31]

Блин, еще и текст исходников же еще править - ладно, это завтра :)


 
Германн ©   (2016-02-28 00:38) [32]


> Игорь Шевченко ©   (27.02.16 22:09) [27]
>
> https://ru.wikipedia.org/wiki/Callback_(%D1%82%D0%B5%D0%BB%D0%B5%D1%84%D0%BE%D0%BD%D0%B8%D1%8F)

В дополнение.
колл тоже режет, но слух. Сдвоенные согласные в аглицком редко используются для "продления" звука, как в русском.
Более-менее правильная русская транскрипция этого слова - колбэк.


 
Rouse_ ©   (2016-02-28 00:42) [33]

Мне вот проще калбэк писать, привык, но раз низя - пусть будет через о и с двумя л :)


 
Германн ©   (2016-02-28 00:49) [34]


> Rouse_ ©   (28.02.16 00:42) [33]
>
> Мне вот проще калбэк писать, привык, но раз низя - пусть
> будет через о и с двумя л :)

Лучше через О. Тут ИШ абсолютно прав. Ты же не говоришь "звоните/звоню в калцентр" :)


 
Kilkennycat ©   (2016-02-28 00:54) [35]


> Ты же не говоришь "звоните/звоню в калцентр" :)

часто складывается впечатление, что именно туда.


 
Eraser ©   (2016-02-28 00:55) [36]

болл, волл, колл )


 
Rouse_ ©   (2016-02-28 00:55) [37]

Да в принципе... Как скажете, так и будет, главное чтоб техническая часть статьи была без ошибок :)


 
Германн ©   (2016-02-28 00:58) [38]

2 Eraser ©   (28.02.16 00:55) [36]
Футбол, файервол, и уже упомянутый колцентр. Нигде нет сдвоенных согласных. Хотя в оригинале они есть.


 
Германн ©   (2016-02-28 01:01) [39]


> Rouse_ ©   (28.02.16 00:55) [37]
>
> Да в принципе... Как скажете, так и будет, главное чтоб
> техническая часть статьи была без ошибок :)

Извини за оффтоп.


 
Rouse_ ©   (2016-02-28 01:13) [40]

Да нормально, как мне статью то править, если я все мнения со стороны не услышу? Не для себя ж пишу :)



Страницы: 1 2 вся ветка

Текущий архив: 2017.01.15;
Скачать: CL | DM;

Наверх




Память: 0.57 MB
Время: 0.023 c
15-1447853173
Юрий Зотов
2015-11-18 16:26
2017.01.15
Назад, в прошлое!


2-1421840818
i2e
2015-01-21 14:46
2017.01.15
Изображения на SpeedButton


2-1425123097
SergP
2015-02-28 14:31
2017.01.15
Наследники абстрактных классов


1-1343890489
rioko
2012-08-02 10:54
2017.01.15
Stream.Seek Stream.Position возвращает ноль.


15-1452881433
xayam
2016-01-15 21:10
2017.01.15
Приглашаю на шахматный турнир Delphi Masters 4 (2016)