Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   forum.boolean.name > Программирование игр для мобильных телефонов > MidletPascal > Основной форум

Основной форум Сюда все проблемы связанные с программированием.

Ответ
 
Опции темы
Старый 16.12.2008, 22:27   #1
abcdef
Знающий
 
Регистрация: 16.09.2008
Сообщений: 299
Написано 71 полезных сообщений
(для 123 пользователей)
создание MIDletPascal obfuscator

Обусификаторы - программы для запутывания кода путем изменения названий переменных и подпрогамм, применяются в основном в java, т.к. байт-код можно перевести в исходный код. Другое назначение обусификаторов - уменьшение размеров программы, т.к. имена локальных переменных в константном пуле класса не имеют значение для выполнения программы.

Особенность настоящих обусификаторов - отслеживание переменных и методов из других классов и их неприкосновенность.

Расскажу как собрать простой обусификатор который разбирает только файл исходного кода, и измененяет все имена кроме указанных в списке неприкосновенных.

Алгоритм таков: сканируя текстовый файл с исходным кодом, получаем все слова состоящие из букв, сравниваем со списком статических имен (зарезервированные слова языка программирования/стандартные подпрограммы/добавленные имена) и если полученное слово отсутствует, то ищем его в массиве имен, (если нет, то добавить в массив) и возвращаем числовую позицию в массиве.
в выходной файл выводим исходный текст с замененными словами..

___
программа готова, вот список неизменяемых слов, предлагайте свои варианты..
Вложения
Тип файла: zip 1.zip (967 байт, 442 просмотров)
(Offline)
 
Ответить с цитированием
Старый 17.12.2008, 01:20   #2
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 2,252
Написано 597 полезных сообщений
(для 817 пользователей)
Ответ: создание MIDletPascal obfuscator

То есть имеется ввиду обфускация на уровне исходного кода, а не байт-кода?
(Offline)
 
Ответить с цитированием
Старый 17.12.2008, 01:54   #3
satan
Нуждающийся
 
Регистрация: 10.02.2007
Сообщений: 99
Написано 18 полезных сообщений
(для 28 пользователей)
Re: создание MIDletPascal obfuscator

Ваще, на скок я знаю (по некоторым обфускаторам) там идет простое приведение имен функций и переменных к однотипным названиям, вроде
l1ll1, ll1ll, l111l и т д, а после этого сжатия и криптования с встраиванием в конец кода функции раскриптовки и распаковки...
(Offline)
 
Ответить с цитированием
Старый 17.12.2008, 10:37   #4
abcdef
Знающий
 
Регистрация: 16.09.2008
Сообщений: 299
Написано 71 полезных сообщений
(для 123 пользователей)
Ответ: создание MIDletPascal obfuscator

да, на уровне исходного кода, причем данный алгоритм будет применим к любому языку, только создавать таблицы неизменных слов. можно конечно делать разбор исходного кода, выявлять имена переменных и подпрограмм, но тогда обусификатор будет соизмерим с компилятором. А так мы просто меняем имя на индекс в таблице и в начале добавляем букву.
Можно сделать еще лучше: брать названия из другой таблицы, с осмысленными именами из фильмов и т.п., но это уже издевательство
(Offline)
 
Ответить с цитированием
Старый 22.12.2008, 00:21   #5
abcdef
Знающий
 
Регистрация: 16.09.2008
Сообщений: 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.
(Offline)
 
Ответить с цитированием
Старый 22.12.2008, 18:37   #6
Tadeus
Троллота
 
Регистрация: 09.07.2007
Сообщений: 1,829
Написано 554 полезных сообщений
(для 1,772 пользователей)
Ответ: создание MIDletPascal obfuscator

Попахивает черезжопным мазохизмом...
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
IDOL 1234 (25.05.2010)
Старый 22.12.2008, 20:25   #7
ViNT
Модератор
 
Регистрация: 03.04.2007
Сообщений: 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')
Ужас, кто это придумал?
Не проще ли забить слова в файл, потом загрузить в массив/список и просто сравнивать слова с лементами списка в цикле?
(Offline)
 
Ответить с цитированием
Старый 22.12.2008, 23:27   #8
abcdef
Знающий
 
Регистрация: 16.09.2008
Сообщений: 299
Написано 71 полезных сообщений
(для 123 пользователей)
Ответ: создание MIDletPascal obfuscator

именно так у сделана рабочая версия данной программы, а здесь как говорил - упрощенная чтоб передать суть. Tadeus-ты прав в отношении тех, кому попадутся модифицированные исходники,.. пишем их в нормальном виде, а перед публикацией или компиляцией путаем
(Offline)
 
Ответить с цитированием
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Скачать MidletPascal smesh Прочие вопросы 14 30.06.2011 15:57
создание MIDletPascal compiler'a abcdef Основной форум 196 15.06.2010 12:38
Русификатор MIDletPascal Тренсфер Прочие вопросы 14 26.07.2008 04:00
MidletPascal. Что это. Данил MidletPascal 12 23.10.2007 05:27


Часовой пояс GMT +4, время: 22:20.


vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com