~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ | В даной статье я покажу, как можно получить исходный програмный код из TCL Byte Code (TBC) | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Конечно весь исходник мы не получим, но часть зашифрованого кода всётаки можно декодировать И так поехали: 1. Создаём файлик tbc2tcl.tcl со следущим содержанием: Code: set write_sources [open "tcl_sources_code.txt" a+] puts $write_sources "___replace___" 2. Комплимим tbc2tcl.tcl при помощью ActiveState Tcl Dev Kit 3.2 и в результате создастся откомпилиный tbc2tcl.tbc следущего содержания: Code: if {[catch {package require tbcload 1.4} err] == 1} { return -code error "[info script]: The TclPro ByteCode Loader is not available or does not support the correct version -- $err" } tbcload::bceval { TclPro ByteCode 2 0 1.4 8.4 3 0 22 6 0 0 12 0 4 3 3 -1 -1 22 w0E<!(H&s!@btt!'3*!!9#Gpvw!! 3 -c&v 3 >or! 6 x 13 >c5DFs8|fD'bfRA?v x 4 *dmID x 20 o4jY?A;lcEgdTZ?h^oRAxmhEF x 2 XNv x 4 DP)*F x 13 y0NaEomK;@SAIX?+v 0 0 } 3. Находим в этом файле код: Code: 13 y0NaEomK;@SAIX?+v Это является закоденое значение "___replace___", которое должно записываться в tcl_sources_code.txt. 4. Далее ищем в закоденом файле куски закоденого кода следущего вида: Code: [COLOR=Navy]X[/COLOR] [COLOR=Green]число[/COLOR] [COLOR=MediumTurquoise]код[/COLOR] [COLOR=Navy]X[/COLOR] 5. Далее копируем (число) и (код), тоесть от X до X в файл tbc2tcl.tbc за место: 13 y0NaEomK;@SAIX?+v 6. Далее запускаем tbc2tcl.tbc и после завершения должен создаться файл tcl_sources_code.txt с декодированым кодом куска которого мы заменили Вот такой вот простой метод декодирования TCL Byte Code ----------------- C Уважением TwEaKeR
Артём, огромное спасибо, как раз искал Очень полезно для редактирования демона в чате Бородина) А не мог бы ты дать ссылочку на НЕ Trial версию ActiveState Tcl Dev Kit v3.2? Спасибо.
ммм... Ловко =)) но есть один минус... При попытке изменить хоть один символ в прочитанном таким образом и вкомпилированном обратно коде - бородинский демон не стартует, доходит только до определения кодировки (видно по выводимым в консоли сообщениям) и встаёт. Похоже, где-то в коде проверяется контрольная сумма или что-то в этом роде. Не подскажете, как это побороть ? =))
Upd: конечно, подразумевается "смена хоть одного символа" в чисто текстовых значениях-константах, например в выводимых во фрейм сообщений проверочных скриптах или при смене даты/версии демона.