Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2017.01.15;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.55 MB
Время: 0.049 c
2-1425269230
Nickolay
2015-03-02 07:07
2017.01.15
Отображение содержимого папок


15-1457536558
DVM
2016-03-09 18:15
2017.01.15
Как думаете, это ошибка в TPointerStream в VCL?


15-1453983731
K-1000
2016-01-28 15:22
2017.01.15
Тернарный оператор в Delphi


15-1447936212
Kerk
2015-11-19 15:30
2017.01.15
Сохранение позиции и размера формы


15-1449523802
Юрий
2015-12-08 00:30
2017.01.15
С днем рождения ! 8 декабря 2015 вторник





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский