Сообщений: 299
Написано 71 полезных сообщений (для 123 пользователей)
создание MIDletPascal obfuscator
Обусификаторы - программы для запутывания кода путем изменения названий переменных и подпрогамм, применяются в основном в java, т.к. байт-код можно перевести в исходный код. Другое назначение обусификаторов - уменьшение размеров программы, т.к. имена локальных переменных в константном пуле класса не имеют значение для выполнения программы.
Особенность настоящих обусификаторов - отслеживание переменных и методов из других классов и их неприкосновенность.
Расскажу как собрать простой обусификатор который разбирает только файл исходного кода, и измененяет все имена кроме указанных в списке неприкосновенных.
Алгоритм таков: сканируя текстовый файл с исходным кодом, получаем все слова состоящие из букв, сравниваем со списком статических имен (зарезервированные слова языка программирования/стандартные подпрограммы/добавленные имена) и если полученное слово отсутствует, то ищем его в массиве имен, (если нет, то добавить в массив) и возвращаем числовую позицию в массиве.
в выходной файл выводим исходный текст с замененными словами..
___
программа готова, вот список неизменяемых слов, предлагайте свои варианты..
Сообщений: 99
Написано 18 полезных сообщений (для 28 пользователей)
Re: создание MIDletPascal obfuscator
Ваще, на скок я знаю (по некоторым обфускаторам) там идет простое приведение имен функций и переменных к однотипным названиям, вроде
l1ll1, ll1ll, l111l и т д, а после этого сжатия и криптования с встраиванием в конец кода функции раскриптовки и распаковки...
Сообщений: 299
Написано 71 полезных сообщений (для 123 пользователей)
Ответ: создание MIDletPascal obfuscator
да, на уровне исходного кода, причем данный алгоритм будет применим к любому языку, только создавать таблицы неизменных слов. можно конечно делать разбор исходного кода, выявлять имена переменных и подпрограмм, но тогда обусификатор будет соизмерим с компилятором. А так мы просто меняем имя на индекс в таблице и в начале добавляем букву.
Можно сделать еще лучше: брать названия из другой таблицы, с осмысленными именами из фильмов и т.п., но это уже издевательство
Сообщений: 299
Написано 71 полезных сообщений (для 123 пользователей)
Ответ: создание MIDletPascal obfuscator
Вот максимально упрощенный алгоритм с малым числом зарезервированных слов для обычного pascal'я. Написан в TurboPascal7.1 / Delphi. (исходный текст пропущен через обусификатор)
{__obus.pas__ programming by arT (c). e-mail: [email protected]}
var
n1,n2 : text;
n3 : string;
n4,n5,n6 : char;
n7 : array[0..2000] of string[31];
n8 : integer;
function n9(n3:string) : string;
var {обусификатор для переменных и имен}
n10 : integer;
begin
n7[0]:=n3;
n10:=n8;
while n7[n10]<>n3 do dec(n10);
if (n10=0) then
begin
inc(n8);
n7[n8]:=n3;
n10:=n8;
end;
str(n10,n3);
n9:='l'+n3;
end;
begin
assign(n1,'obus.pas');
reset(n1);
assign(n2,'obus2.pas');
rewrite(n2);
n6:=#0;
while not eof(n1) do
begin
n5:=n4;
read(n1,n4);
if (n4 in ['_','$','0'..'9','a'..'z','A'..'Z']) and (n6=#0) then
begin
if n4 in [#65..#90] then inc(n4, (97-65));
n3:=n3+n4;
end
else
begin
if n3<>'' then {преобразовать}
begin
if not (n3[1] in ['$','0'..'9'])
and (n3<>'program')
and (n3<>'begin')
and (n3<>'end')
and (n3<>'for')
and (n3<>'to')
and (n3<>'downto')
and (n3<>'do')
and (n3<>'while')
and (n3<>'case')
and (n3<>'of')
and (n3<>'repeat')
and (n3<>'until')
and (n3<>'if')
and (n3<>'then')
and (n3<>'and')
and (n3<>'or')
and (n3<>'not')
and (n3<>'in')
and (n3<>'write')
and (n3<>'writeln')
and (n3<>'read')
and (n3<>'readln')
and (n3<>'paramcount')
and (n3<>'paramstr')
and (n3<>'ioresult')
and (n3<>'assign')
and (n3<>'rewrite')
and (n3<>'reset')
and (n3<>'close')
and (n3<>'halt')
and (n3<>'exit')
and (n3<>'break')
and (n3<>'byte')
and (n3<>'boolean')
and (n3<>'integer')
and (n3<>'longint')
and (n3<>'real')
and (n3<>'shortint')
and (n3<>'const')
and (n3<>'type')
and (n3<>'var')
and (n3<>'label')
and (n3<>'array')
and (n3<>'string')
and (n3<>'char')
and (n3<>'text')
and (n3<>'file')
and (n3<>'inc')
and (n3<>'dec')
and (n3<>'false')
and (n3<>'true')
and (n3<>'procedure')
and (n3<>'function')
and (n3<>'str')
and (n3<>'val')
and (n3<>'eof')
and (n3<>'eol')
and (n3<>'else')
and (n3<>'length')
and (n3<>'flush')
and (n3<>'getmem')
and (n3<>'fillchar')
and (n3<>'freemem')
and (n3<>'sizeof')
{} then n3:=n9(n3);
write(n2,n3);
n3:='';
end;
write(n2,n4);
if (n4=n6) then
begin
if (n4<>')') then n6:=#0
else if (n5='*') then n6:=#0;
end
else if n6=#0 then
begin
if (n4='{') then n6:='}'
else if (n4='''') then n6:=''''
else if (n4='/') and (n5='/') then n6:=#10
else if (n4='*') and (n5='(') then n6:=')';
end;
end;
end;
close(n2);
close(n1);
end.
Сообщений: 2,252
Написано 597 полезных сообщений (для 817 пользователей)
Ответ: создание MIDletPascal obfuscator
Сообщение от abcdef
Вот максимально упрощенный алгоритм с малым числом зарезервированных слов для обычного pascal'я. Написан в TurboPascal7.1 / Delphi. (исходный текст пропущен через обусификатор)
and (n3<>'program')
and (n3<>'begin')
and (n3<>'end')
and (n3<>'for')
and (n3<>'to')
and (n3<>'downto')
and (n3<>'do')
and (n3<>'while')
and (n3<>'case')
and (n3<>'of')
and (n3<>'repeat')
and (n3<>'until')
and (n3<>'if')
and (n3<>'then')
and (n3<>'and')
and (n3<>'or')
and (n3<>'not')
and (n3<>'in')
and (n3<>'write')
and (n3<>'writeln')
and (n3<>'read')
and (n3<>'readln')
and (n3<>'paramcount')
and (n3<>'paramstr')
and (n3<>'ioresult')
and (n3<>'assign')
and (n3<>'rewrite')
and (n3<>'reset')
and (n3<>'close')
and (n3<>'halt')
and (n3<>'exit')
and (n3<>'break')
and (n3<>'byte')
and (n3<>'boolean')
and (n3<>'integer')
and (n3<>'longint')
and (n3<>'real')
and (n3<>'shortint')
and (n3<>'const')
and (n3<>'type')
and (n3<>'var')
and (n3<>'label')
and (n3<>'array')
and (n3<>'string')
and (n3<>'char')
and (n3<>'text')
and (n3<>'file')
and (n3<>'inc')
and (n3<>'dec')
and (n3<>'false')
and (n3<>'true')
and (n3<>'procedure')
and (n3<>'function')
and (n3<>'str')
and (n3<>'val')
and (n3<>'eof')
and (n3<>'eol')
and (n3<>'else')
and (n3<>'length')
and (n3<>'flush')
and (n3<>'getmem')
and (n3<>'fillchar')
and (n3<>'freemem')
and (n3<>'sizeof')
Ужас, кто это придумал?
Не проще ли забить слова в файл, потом загрузить в массив/список и просто сравнивать слова с лементами списка в цикле?
Сообщений: 299
Написано 71 полезных сообщений (для 123 пользователей)
Ответ: создание MIDletPascal obfuscator
именно так у сделана рабочая версия данной программы, а здесь как говорил - упрощенная чтоб передать суть. Tadeus-ты прав в отношении тех, кому попадутся модифицированные исходники,.. пишем их в нормальном виде, а перед публикацией или компиляцией путаем