Форум: "Прочее";
Текущий архив: 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