Что нового

Как изменить сигнатуру A3X?

Статус
Закрыто для дальнейших ответов.

Ledgous

Новичок
Сообщения
5
Репутация
0
Здраствуйте, не знаю куда влепить данную тему, вот написал сюда...
Всем известно, что скрипт хранится в EXE файле с сигнатурой AU3! EA06, а существую ли такие способы, которые смогли бы поменять данную сигнатуру на произвольную. Очень нужно для защиты от всяких там декомпиляторов. Протекторы и пакеры тоже не помогают - с дампа файла возможно вытащить нужный скрипт. Заранее извиняюсь, если эта тема поднималась.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
Ledgous [?]
Всем известно, что скрипт хранится в EXE файле с сигнатурой AU3! EA06, а существую ли такие способы, которые смогли бы поменять данную сигнатуру на произвольную
В Hex-редакторе это можно заменить.

нужно для защиты от всяких там декомпиляторов
А кто сказал что это защитит от них? :smile:
 
Автор
L

Ledgous

Новичок
Сообщения
5
Репутация
0
В Hex-редакторе это можно заменить.
Любое изменение в HEX-редакторе приводят к неработаспособности скрипта.


А кто сказал что это защитит от них?
Защитит еще как! Давече встречал программу, у которой сигнатура вместо вышеописанной была '!*U#AUCN' . Создать у себя на скрипте подобное не получилось. Может есть подобные программы, о которых я не знал, где вручную можно сменить сигнатуру? Или может я не те значение изменяю в HEX редакторе?
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
До изменений



Не работает



Работает



Только толку от этого ноль... точно не знаю как интерпретатор ищет исходник в exe, но полагаю что именно по этой сигнатуре, если сигнатуру изменить, то интерпретатор выдаст ошибку, так как не смог найти данные которые нужно выполнить.


Добавлено:
Сообщение автоматически объединено:

Удалось сменить сигнатуру

До


После


Но от декомпилятора не спасает. :whistle:
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
В файле 2 сигнатуры - одну можно менять на что угодно, вторую нет.
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,671
Репутация
2,481
sngr [?]
В файле 2 сигнатуры - одну можно менять на что угодно, вторую нет.
EA06 встречается 3 раза, если это заменить на одно и то же (не трогая AU3!), то скрипт будет работать, но как я уже сказал, это никак не защитит скрипт от декомпиляции.
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
sngr [?]
В файле 2 сигнатуры - одну можно менять на что угодно, вторую нет.
Сменить можно обе с помощью отладчика. А ко всему прочему это еще и защитит от декомпиляции, которая действует в процессе.

До: AU3!EA06
После: DEADCODE
И при этом во всех местах, которые используются по умолчанию, стоит: AU3! и EA06

А еще пара трюков защитит и от декомпиляции в целом. В личных же интересах не буду это описывать. В двух словах - поправить обратно ручками сигнатуры в оверлее не поможет декомпилятору, который декомпилирует файл напрямую. Отпадают все автоматизированные методы.

3uQZJ.png
 

_Lexa98_

Осваивающий
Сообщения
551
Репутация
25
firex
OffTopic:
Хотелось бы в итоге увидеть готовую программу для защиты скриптов от декомпиляции :smile:
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
_Lexa98_

3uXid.png
- первое обращение, осуществляет поиск.
3uXjX.png
- второе обращение, обработка по типу (EA06).
Я вообще не понимаю как Viktor1703'у удалось сменить так просто через HEX редактор. Эта константа хранится в одном месте, и если ее сменить - поиск по новой будет работать, но скрипт не будет знать как обрабатывать оверлей. Ему ведь не известен тип отличный от EA06.

Самый надежный вариант - использовать компрессию не EA06, сменить обращения (записать для них данные в других местах). И кстати в секции импорта достаточно для этого места (порядка пары килобайт).

У себя я изменил подход к поиску скрипта в оверлее, тип, а также ... это уже знать не обязательно <3
Автоматизированную программу для этого писать не стану, так как почти все действия нужно делать вручную :C
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
firex

Очень просто, AU3!EA06 пишется вначале и в конце исходного кода (и как уже сказал Creator, EA06 встречается 3 раза тоже самое касается и AU3), если их заменить, то exe выдаст ошибку, по этому мотаем скрол вверх в hex редакторе и ищем AU3 и отдельно EA06, как я и полагал, интерпретатор принимает данные на запуск только в том случае если сигнатура равна паттерну, при декомпиляции такого exe, декомпилятор выдаёт сообщение типа сигнатура не найдена, далее спрашивает, уверены ли мы что это AutoIt'овский exe, далее декомпиль делает свою работу без всяких затруднений, на практике проверенно что если сменить сигнатуру и не только её, то от декомпиляции не спасёт, учите компилируемые языки либо оставьте вечные вопросы о защите.
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Viktor1703 [?]
на практике проверенно что если сменить сигнатуру и не только её, то от декомпиляции не спасёт, учите компилируемые языки либо оставьте вечные вопросы о защите.
Это я как раз таки понимаю. Лишние несколько дописанных строк - и данные в оверлее не примутся декомпилятором. Сделать можно все, начиная с банальной замены пары важных байт, которые исполняемый файл будет сам знать, либо переписать(хотя скорее поправить)(как это сделал я) чтение скрипта с оверлея.
Есть два варианта развития событий:
1)Оставить неизменными константы(AU3! и EA06), которые читает интерпретатор и декомпилятор, и использовать свои, которые записаны совершенно в другом месте. Банальным HEX редатором тут конечно же не обойтись, ну а чего вы хотели. И на финал пошутить с оверлеем, влить в конец левый или просто написать бреда.

2) Действовать принципу 1, только переписать(дописать) функцию 4152A0.

учите компилируемые языки либо оставьте вечные вопросы о защите.
Те вещи, что я делаю на AutoIt, писать к примеру на дельфи или того хуже на Visual c++ - в сотню раз дольше.


Добавлено:
Сообщение автоматически объединено:

Сделал для вас пример на скорую руку. Ничего сверхъестественного делать не стал, банальное сохранение констант и только.

http://autoit-script.ru/index.php?action=downloads;sa=view;down=350
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
firex [?]
Те вещи, что я делаю на AutoIt, писать к примеру на дельфи или того хуже на Visual c++ - в сотню раз дольше.

Для примера PureBasic - не сложнее AutoIt'a.


Оставить неизменными константы(AU3! и EA06), которые читает интерпретатор и декомпилятор, и использовать свои, которые записаны совершенно в другом месте.

Для чего?

И на финал пошутить с оверлеем, влить в конец левый или просто написать бреда.

И ещё раз, для чего?

Вообще выходной exe файл который получается при компиляции, построен не правильно, если взять любой другой exe, его спокойно можно открыть в том же 7-Zip, а вот AutoIt'овские exe не получится, я бы сделал иначе, я бы не дописывал исходник в конец exe, а создавал бы новую секцию в интерпретаторе например '.au3' и записывал в неё код, AutoIt'овским exe даже релокации не нужны, он не ищет исходник по адресу, для теста я удалил 22 нуливых байта из exe (мне даже не пришлось делать релокацию), а он остался рабочим и вес его уменьшился ровно на столько - сколько я удалил, а пустого места (нулевых байт) там много...


Добавлено:
Сообщение автоматически объединено:

firex [?]
Сделал для вас пример на скорую руку. Ничего сверхъестественного делать не стал, банальное сохранение констант и только.

Ваш код?

Код:
MSGBOX(64, 1 * 1, "Original code")
 

firex

AutoIT Гуру
Сообщения
943
Репутация
208
Viktor1703 [?]
Если честно порядком удивлен. Имею при себе вроде как все рабочие декомпиляторы - ни один не справляется и с этим.

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

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Ledgous
Это - бесполезно.
Достаточно в отладчике глянуть - и все.
Все равно на каком ЯП. Не так ли?
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
firex

При декомпиляции ни чего не поможет, хотите чтоб ваш exe не смогли декомпилировать, переписывайте сам интерпретатор (если конечно найдёте его исходные коды), ещё вот такая проблема есть, AutoIt'овские exe не способны запустится из памяти, писал на PureBasic типа Builder'a для упаковки AutoIt'овских exe, работает он так, при создании исполняющего файла, Builder добавляет в Stub новую секцию типа '.pack', и записывает в него исполняющий AutoIt файл, пр запуске такого исполняющего файла, он считывает из секции '.pack' данные, расшифровывает и запускает из памяти, на практике показало что декомпилятор не способен был выдрать из него исходник, но и сам AutoIt интерпретатор из памяти работал не корректно, не мог найти исходник и выдавал ошибку, хотя со всеми остальными exe работало нормально, после провала просто переделал код под Joiner.
 

Yuri

AutoIT Гуру
Сообщения
737
Репутация
282
Ledgous
Раз уж речь идет о том, чтобы ваш исходный код не смогли просто так глянуть, тогда имеет смысл закинуть его в динамическую библиотеку (DLL). PureBasic - отлично подойдет для этих целей, уж поверьте.
 

sims

Осваивающий
Сообщения
184
Репутация
24
Viktor1703 [?]
на практике показало что декомпилятор не способен был выдрать из него исходник, но и сам AutoIt интерпретатор из памяти работал не корректно, не мог найти исходник и выдавал ошибку
Не знаю.
У меня этот код запустил из памяти скомпилированную AutoIt-прогу и ошибок не было. Правда, антивирусам это не понравилось.
Код:
PurePROCS_Execute(ProgramFilename(), ?EXE)
End

DataSection
  EXE:
  IncludeBinary "Proga.exe"
EndDataSection
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
sims [?]
У меня этот код запустил из памяти скомпилированную AutoIt-прогу и ошибок не было. Правда, антивирусам это не понравилось.

Да, так работать будет, но и исходник будет извлекаться декомпилятором, а попробуй зашифровать и при запуске расшифровывать.
 
Автор
L

Ledgous

Новичок
Сообщения
5
Репутация
0
firex
Ваш оверлей легко ломается - "Fake code" и "Original code" видны как на ладони :smile:.

Скорей всего для защиты нужно модифицировать интерпретатор в самом Екзешнике, но здесь нужны знания низкоуровнего программирования. Да и то не панацея - в отладчике легко отловить запрос на доступ к блоку сигнатур скрипта, а там уже операции криптования\шифрования или еще чего-нибудь, трескается это за раз-два. А так как интерпретатор написан на MC++, то код его сильно оптимизирован, хакеру бегать по нему много не надо, все как на ладони.
Но все же вот некоторый пример защиты оверлея в программе, даже если его вытащить и вернуть на место стандартную сигнатуру, то скрипт откажется работать.
http://rghost.ru/private/47127150/1c2a20516575b1259c252b38ff3f2cac
Там 3 файла: версия 2.0 имеет обычный незакодированный оверлей, последующие версии уже модифицированы, раскомпилировать с ходу у вас никак не получится.
 

Viktor1703

AutoIT Гуру
Сообщения
1,535
Репутация
413
Ledgous

Не удалось декомпилировать только SkyIAR_v2.55_chinese.exe и то наверное из - за того что декомпилятор у меня старенький, думаю найдутся те кто это сможет и что можно было запихать в исполняющие файлы что они такие огромные, я даже не уверен, работают ли они, не стал запускать, так как кода много и не знаю что он делает.


Добавлено:
Сообщение автоматически объединено:

а нет, ошибочка, сменил язык с КНР на кириллицу и он тоже декомпилировался и деобфусцировался (частично), вообщем получил чистый исходник на руки и REG52.exe, REG61.exe, devcon_x86.exe, lng.ini, SetUrlX.exe, bk.bmp, файлы расширения *.INFO, IAR.Core.x86.*.... :whistle:
 
Статус
Закрыто для дальнейших ответов.
Верх