Главная страница
    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]

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


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

Ну тогда извини, что техническую часть я даже не читал. :(


 
NoUser ©   (2016-02-28 23:59) [42]

DWORD-ы в примерах (при работе с адресами) было бы поучительно (дженерики то внедрил) заменить на Pointer и/или IntPtr/UIntPtr.

Тогда вместо, возможно ошибочного,
"(плюс 2 дворда что в 32 битном, что в 64 битном варианте)"
два слова сказать про отличия указателей в x64 и заменить "4" на
const cbPtr = SizeOf(Pointer/IntPtr) ;)

PS.
В тексте многовато "но" - можно попробовать заменить на "а", "и", "а вот"  или просто убрать,
но )) это так, - косметика.

<< Но_ это в Visual Studio, а вот в Дельфи такого сделать так сходу нельзя - не умеет она, но!!!
Но_ есть небольшой трюк, связанный с тем что разработчики компилера_ Дельфи, уж не знаю по каким причинам, но_ немного нам помогли, создав неинициализированную TLS секцию в исполняемом файле. С какого времени это началось - я не знаю, но_ начиная … >>

<< то мы инициализирует_ ее >>
<< убиваем_ ее значение  >>

PPS.
http://pritchi.castle.by/ras-013-402.html (http://static2.ozone.ru/multimedia/books_covers/1007045216.jpg)


 
Rouse_ ©   (2016-02-29 13:38) [43]


> Тогда вместо, возможно ошибочного,
> "(плюс 2 дворда что в 32 битном, что в 64 битном варианте)"
> два слова сказать про отличия указателей в x64 и заменить
> "4" на
> const cbPtr = SizeOf(Pointer/IntPtr) ;)

Нет тут код не ошибочный (2 дворда в структуре идет последними в обоих вариантах)

 _IMAGE_TLS_DIRECTORY64 = record
   StartAddressOfRawData: ULONGLONG;
   EndAddressOfRawData: ULONGLONG;
   AddressOfIndex: ULONGLONG;         // PDWORD
   AddressOfCallBacks: ULONGLONG;     // PIMAGE_TLS_CALLBACK *;
   SizeOfZeroFill: DWORD;
   Characteristics: DWORD;
 end;

 _IMAGE_TLS_DIRECTORY32 = record
   StartAddressOfRawData: DWORD;
   EndAddressOfRawData: DWORD;
   AddressOfIndex: DWORD;         // PDWORD
   AddressOfCallBacks: DWORD;     // PIMAGE_TLS_CALLBACK *;
   SizeOfZeroFill: DWORD;
   Characteristics: DWORD;
 end;


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


 
Rouse_ ©   (2016-02-29 14:57) [44]

Ну вроде как причесал - если за вечер никто ничего не найдет, завтра тогда на паблик выложу


 
Тимохов Дима ©   (2016-02-29 15:06) [45]

Прочитал. Идейно понятно.

Чисто философский вопрос.

Реверсер же сразу поймет при следующем запуске, что его пытаются обхитрить.
Неужели он не найдет управу? Да хоть дампы в Parallels Desktop сделать с уже запущенной программой.

Суть вопроса стоит ли делать подобную защиту (у реверсера же наверняка рука набита на противодействии таким трюкам)?


 
Rouse_ ©   (2016-02-29 16:06) [46]


> Тимохов Дима ©   (29.02.16 15:06) [45]
> Реверсер же сразу поймет при следующем запуске, что его
> пытаются обхитрить.

Конечно поймет.


> Неужели он не найдет управу? Да хоть дампы в Parallels Desktop
> сделать с уже запущенной программой.
>
> Суть вопроса стоит ли делать подобную защиту (у реверсера
> же наверняка рука набита на противодействии таким трюкам)?
>

Если код защиты под виртуальной машиной - очень долго искать придется.

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


 
Тимохов Дима ©   (2016-02-29 16:29) [47]


> А так вообще - тут же только сам принцип, на практике антидамп
> в разы сложнее делается :)


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

Я не в части критики, просто интересно.
Я то в свое время поставил на виртуальную машину (чужую), которую натравил на некую свою виртуальную машину. Расчет на то - задолбаются 100мб мусора фильтровать.
Может, обновляться придется. Вот, думаю - надо ли мне это.

ЗЫ Саш, извиняй плз за оффтоп))


 
Rouse_ ©   (2016-02-29 16:47) [48]


> Тимохов Дима ©   (29.02.16 16:29) [47]
> Не, ну все же чем Parallels тебе не нравится?
> Запустил, снял дамп, потом сколько хочешь восстанавливай.

Понятно - статью ты не читал, там описано почему нужно делать дамп :)


 
Тимохов Дима ©   (2016-02-29 17:03) [49]


> Понятно - статью ты не читал, там описано почему нужно делать
> дамп :)

Читал. Я все понял)) Правда.
Я ж тебе говорю - запускаешь программу под виртуалкой, она распаковывется, делаешь дамп при ЗАПУЩЕННОЙ программе. с уже правильными "секретным числом".
Потом из дампа сколько хочешь раз восстанавливай и работай - программа то уже запущена.


 
Rouse_ ©   (2016-02-29 17:27) [50]


> Тимохов Дима ©   (29.02.16 17:03) [49]
> Читал. Я все понял)) Правда.
> Я ж тебе говорю - запускаешь программу под виртуалкой, она
> распаковывется, делаешь дамп при ЗАПУЩЕННОЙ программе. с
> уже правильными "секретным числом".
> Потом из дампа сколько хочешь раз восстанавливай и работай
> - программа то уже запущена.

Значит читал но не понял - там в BIN лежит экзешник - сдампь и запусти :)


 
Rouse_ ©   (2016-02-29 17:31) [51]

Можешь просто последнюю гифку посмотреть в статье - там показанно что будет и как работает "секретное число" :) (Напомню - при старте оно должно быть равно нулю, иначе никакого фокуса не получится :)


 
virex(home) ©   (2016-03-01 07:59) [52]

// сам колбэк
VOID NTAPI tls_callback(HMODULE hModule,
DWORD  ul_reason_for_call,LPVOID lpReserved)
{
MessageBox(0, L"TLS Callback Message", L"", 0);
}
на скрине MyTLS Callback Message


 
virex(home) ©   (2016-03-01 08:14) [53]

Writeln("Какая-то бяда в GetSectionDataList.");

з.ы. "мясной рулет с черносливом" атмосферней будет


 
Rouse_ ©   (2016-03-01 18:34) [54]


> virex(home) ©

Угу, код поправлял - картинка старая осталась. А с исключениями - ну ща ченить нормальное напишу, они там вообще по факту не сильно и нужны.


 
Rouse_ ©   (2016-03-01 19:18) [55]

Ну вроде все - всем спасибо, резная версия тут (правленные исходники там-же)

http://alexander-bagel.blogspot.ru/2016/03/early-execution.html


 
Rouse_ ©   (2016-03-01 19:30) [56]

Блин, ребята с http://delphifeeds.ru/ меня убьют :)))
Забыл CAT поставить и к ним в новостную ленту статья целиком залилась, вместо шапки - бггг, ппц :)
Тот еще натюрморт :)))


 
Rouse_ ©   (2016-03-01 19:33) [57]

А, не - все поправили, оперативно работают - респект :)


 
Тимохов Дима ©   (2016-03-02 10:59) [58]


> Rouse_ ©   (29.02.16 17:31) [51]
> Можешь просто последнюю гифку посмотреть в статье - там
> показанно что будет и как работает "секретное число" :)
> (Напомню - при старте оно должно быть равно нулю, иначе
> никакого фокуса не получится :)


Невнимательное чтение чужого кода-текста - болезнь многих программистов (личное наблюдение).

Еще раз.

Чего ты добиваешься?

Ты хочешь, чтобы реверсер сказал неприличное слово(а) и убился об стену в следующем сценарии:
1. Реверсер запустил твою программу. Допустим, это офигеть как сложно - три дня сидел, не ел, не пил. Но получил в памяти чистый код!
2. Программа при старте заменила 0 на правильное число, без которого работать не может. Число лежит в глоб. переменной.
3. Реверсер снял дамп памяти (с правильным для работы числом - в той самой глоб. переменной).
4. Реверсер запустил дамп. В глоб. переменной лежит правильное для работы число, но не 0. Поэтому после запуска в глоб. перменной не окажется правильного для работы числа (см. п. 2).
5. В итоге программа не работает.
6. Реверсер матерясь убивает себя об стену.

Но реверес мог читать твою статью и не делать шаг 3.
Вместо него - сделать snapshot виртуальной машины - с запущенной и работоспобной твоей программой.
После чего он может восстанавливать ситуацию из snapshot"а сколько угодно раз - пока не вырежет твой стартовый TLS-callback.

Ну как-то так)))

И где я не прав?


 
Тимохов Дима ©   (2016-03-02 10:59) [59]


> Rouse_ ©   (29.02.16 17:31) [51]
> Можешь просто последнюю гифку посмотреть в статье - там
> показанно что будет и как работает "секретное число" :)
> (Напомню - при старте оно должно быть равно нулю, иначе
> никакого фокуса не получится :)


Невнимательное чтение чужого кода-текста - болезнь многих программистов (личное наблюдение).

Еще раз.

Чего ты добиваешься?

Ты хочешь, чтобы реверсер сказал неприличное слово(а) и убился об стену в следующем сценарии:
1. Реверсер запустил твою программу. Допустим, это офигеть как сложно - три дня сидел, не ел, не пил. Но получил в памяти чистый код!
2. Программа при старте заменила 0 на правильное число, без которого работать не может. Число лежит в глоб. переменной.
3. Реверсер снял дамп памяти (с правильным для работы числом - в той самой глоб. переменной).
4. Реверсер запустил дамп. В глоб. переменной лежит правильное для работы число, но не 0. Поэтому после запуска в глоб. перменной не окажется правильного для работы числа (см. п. 2).
5. В итоге программа не работает.
6. Реверсер матерясь убивает себя об стену.

Но реверес мог читать твою статью и не делать шаг 3.
Вместо него - сделать snapshot виртуальной машины - с запущенной и работоспобной твоей программой.
После чего он может восстанавливать ситуацию из snapshot"а сколько угодно раз - пока не вырежет твой стартовый TLS-callback.

Ну как-то так)))

И где я не прав?


 
han_malign ©   (2016-03-02 11:54) [60]


> Невнимательное чтение чужого кода-текста - болезнь многих программистов (личное наблюдение).

- поиск в ознакомительной статье законченного полнофункционального ноу-хау - болезнь ...


 
Тимохов Дима ©   (2016-03-02 12:42) [61]


> han_malign ©   (02.03.16 11:54) [60]
>
> > Невнимательное чтение чужого кода-текста - болезнь многих
> программистов (личное наблюдение).
>
> - поиск в ознакомительной статье законченного полнофункционального
> ноу-хау - болезнь ...


Не, ты не прав.
Нет поиска ноу-хау.
Есть попытка разобраться в философии защиты.
Я в свое время у Саши многому научился. Чему и благодарен безмерно. Будь я реверсером, я бы люто ненавидел этого Розыча!
Любая защита строится на соотношении времени на взлом и ценности.
Вот и интересно, насколько указанный прием увеличивает знаменатель указанного отношения.

Собсно сложность взлома - отделить защитный код, от полезного.
Если пораскинуть мозгами, то можно, видимо, в этот коллбек засунуть код, который и секрет инициализирует и делает реально что-то полезное, без чего программа работать не будет. Т.е. нельзя будет просто пропустить этот TLS-callback. Видимо, на это расчет идет.


 
Тимохов Дима ©   (2016-03-02 12:42) [62]


> han_malign ©   (02.03.16 11:54) [60]
>
> > Невнимательное чтение чужого кода-текста - болезнь многих
> программистов (личное наблюдение).
>
> - поиск в ознакомительной статье законченного полнофункционального
> ноу-хау - болезнь ...


Не, ты не прав.
Нет поиска ноу-хау.
Есть попытка разобраться в философии защиты.
Я в свое время у Саши многому научился. Чему и благодарен безмерно. Будь я реверсером, я бы люто ненавидел этого Розыча!
Любая защита строится на соотношении времени на взлом и ценности.
Вот и интересно, насколько указанный прием увеличивает знаменатель указанного отношения.

Собсно сложность взлома - отделить защитный код, от полезного.
Если пораскинуть мозгами, то можно, видимо, в этот коллбек засунуть код, который и секрет инициализирует и делает реально что-то полезное, без чего программа работать не будет. Т.е. нельзя будет просто пропустить этот TLS-callback. Видимо, на это расчет идет.


 
Rouse_ ©   (2016-03-02 13:24) [63]


> Ну как-то так)))
>
> И где я не прав?

В том что в боевом коде естественно должно быть по другому, я же просто идею показал, а на практике все делается в разы сложнее :)


 
KSergey ©   (2016-03-04 10:43) [64]

Скажите, я верно понял, что всё написанное можно применить на практике лишь для защиты ПО?
Или есть другие полезные применения?


 
Rouse_ ©   (2016-03-04 11:18) [65]

Ну по мимо того что в TLS Callback-е ты можешь отслеживать старт новых потоков + подгрузку библиотек (через CreateRemoteThread или хуком - там тоже отдельная нить стартует зачем-то) других применений в принципе нет.


 
Тимохов Дима ©   (2016-03-09 09:54) [66]


> Rouse_ ©   (02.03.16 13:24) [63]
>
> > Ну как-то так)))
> >
> > И где я не прав?
>
> В том что в боевом коде естественно должно быть по другому,
>  я же просто идею показал, а на практике все делается в
> разы сложнее :)


Спасибо, Саша! Полезная, безусловно, статья!

Имхо, самое полезная идея - подход с "правильным" числом.
А как это будет сделано (через TLS-колбек или через либу) - не важно. Опять же имхо.
В любом случае сложность взлома будет обусловлена разбором кода, выполняющегося при старте - а тут все средства хороши для защиты: и виртуализация кода, и прочее запутывание кода.


 
Тимохов Дима ©   (2016-03-09 09:54) [67]


> Rouse_ ©   (02.03.16 13:24) [63]
>
> > Ну как-то так)))
> >
> > И где я не прав?
>
> В том что в боевом коде естественно должно быть по другому,
>  я же просто идею показал, а на практике все делается в
> разы сложнее :)


Спасибо, Саша! Полезная, безусловно, статья!

Имхо, самое полезная идея - подход с "правильным" числом.
А как это будет сделано (через TLS-колбек или через либу) - не важно. Опять же имхо.
В любом случае сложность взлома будет обусловлена разбором кода, выполняющегося при старте - а тут все средства хороши для защиты: и виртуализация кода, и прочее запутывание кода.



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

Форум: "Прочее";
Текущий архив: 2017.01.15;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.65 MB
Время: 0.048 c
1-1340607264
viosvi
2012-06-25 10:54
2017.01.15
ориентация листа OpenOffice


3-1310534275
bestonix
2011-07-13 09:17
2017.01.15
TUniTable


15-1451770205
Юрий
2016-01-03 00:30
2017.01.15
С днем рождения ! 3 января 2016 воскресенье


2-1427929641
Drowsy
2015-04-02 02:07
2017.01.15
Как определить, установлены ли обновления RTL2, RTL3 на Дельфи 6?


3-1310463935
walm
2011-07-12 13:45
2017.01.15
Распределенный запрос





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский