eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 12 ноября!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: dixen18 (+3 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Софт, инструменты —› RABCDasm mod
Посл.ответ Сообщение

Ранг: 105.6 (ветеран)
Статус: Участник

Создано: 2 декабря 2013 18:44 · Поправил: 27 февраля 2016 12:49 JohnyDoe New!
Цитата · Личное сообщение · #1

Я подумал что не совсем правильно будет каждый раз постить новые ссылки в теме про flash. Потому решил здесь тему создать.

Программка представляет собой ассемблер/дизассемблер action script кода.

За основу взят rabcdasm https://github.com/CyberShadow/RABCDAsm
Также используется swfdump из пакета swftools http://www.swftools.org/

Добавил автоматическое переименование переменных. Переименование происходит в два этапа. Сначала rabcdasm переименовывает в коде, затем swfdump переименовывает все переменные сопоставленные с элементами в тэгах placeobject. Также происходит автоматическое удаление лишнего кода добавленного обфускаторами. После всей этой обработки обычно swf можно открыть в Sothink'е к примеру.

В последней сборке поправлено поведение алгоритма. Он не всегда отрабатывал адекватно. Никто не сообщал о результатах использования утилиты, потому правки вносил только на основе собственного опыта работы с утилитой. Благо обфусцированные фреймворки давали почву для размышлений.

Предыдущие сборки лучше удалить. Они небезопасны для кода. Заодно в swfdump'е пофиксил переполнение буфера.

Самые последние будут в этой теме. В архиве приложен bat-файл, который даст представление о том как все запустить. Я не особо силен в написании мануалов, потому никаких описаний в архиве нет.

https://www.sendspace.com/file/b3fs04

P.S. приветствуются любые мысли по поводу работы утилиты.

| Сообщение посчитали полезным: nick8606, SaNX, 4kusNick, Gideon Vi, verdizela, LIZARD, t0ShA, Isaev, zagruzkaaa, denis765600, HandMill, zNob



Ранг: 747.9 (! !)
Статус: Участник
bytecode!

Создано: 2 декабря 2013 19:43 New!
Цитата · Личное сообщение · #2

Спасибо, как раз недавно искал ранний прототип, что ты скидывал когда-то, но я его куда-то потёр =(
Вот немножко фидбэка:
1. Не понятно зачем оно спрашивает ввести "value for startswith". Я так понимаю, это предложение ввести префикс для новых переменных после переименования? В итоге все равно используется var* =\
2. Не все имена деобфусцируются, особенно касается имен классов для DefineBinaryData (те, что расширяют mx.core.ByteArrayAsset). Кстати, алго для деобфускации имён (для детекта обфусцированных) можно подсмотреть в опенсорсном ffdec, вдруг пригодится.
3. Было бы классно чистить от всякого мусора типа
if (!_loc_2)
{
}

Примеры для всего вышесказанного можно глянуть в этих флэшках:
--> Link <--
(main_0p - ороигинал)

Ранг: 105.6 (ветеран)
Статус: Участник

Создано: 2 декабря 2013 23:15 · Поправил: JohnyDoe New!
Цитата · Личное сообщение · #3

value for startswith это для переменных типа _-QQ. Т.е. это вполне нормальное имя переменной. Но оно мне не нравится и я обычно такие имена искореняю. Для этого ввожу _- на запрос value for startswith. Т.е. префикс var жестко прописан. Мне кажется что там без разницы какой префикс.

Гляну твой примерчик. Только лучше куда-то на более дружелюбный обменник кидать. Мой браузер не переваривает мегу. Приходится тулзы юзать для скачивания.

Конструкции с if'ами лишними должны убираться. И часть даже была убрана в твоем примере. Но не все. Надо глянуть почему не все были убраны.

Порядок кода пока не восстанавливается. Не знаю будет ли такая опция.

UPDATE: Твой файл выглядит странно на первый взгляд. Эти if'ы не убираются потому что эти локальные переменные не инициализируются как это обычно бывает.

Внес небольшие коррективы. Ничего принципиального по функционалу. Убрал лишние логи.


Ранг: 747.9 (! !)
Статус: Участник
bytecode!

Создано: 2 декабря 2013 23:57 · Поправил: 4kusNick New!
Цитата · Личное сообщение · #4

JohnyDoe пишет:
value for startswith это для переменных типа _-QQ. Т.е. это вполне нормальное имя переменной. Но оно мне не нравится и я обычно такие имена искореняю. Для этого ввожу _- на запрос value for startswith

Ага, я неверно понял этот запрос сначала, теперь ясно.
Возможно стоит написать что-то вроде "Keep names starting from".

JohnyDoe пишет:
Т.е. префикс var жестко прописан. Мне кажется что там без разницы какой префикс.

На самом деле да, в идеале вообще бы переименовывать в зависимости от сущности - если это было имя класса, то именовать в class1, class2, и т.д. Если метод - то func1 например, и т.д. Это реверс облегчит в дальнейшем.

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

Ранг: 105.6 (ветеран)
Статус: Участник

Создано: 3 декабря 2013 00:18 · Поправил: JohnyDoe New!
Цитата · Личное сообщение · #5

Кидай.

Я тестил на разных новых играх.

Keep это же вроде как сохранять/оставлять? Наверное надо заменить на Replace names starting with. Эта опция для того чтобы убрать имена начинающиеся на введенное сочетание символов ведь.

Мне лениво было разбираться где там имена классов, где там имена функций, где имена переменных. Потому я выбрал путь попроще . Гляну что там можно сделать.


Ранг: 747.9 (! !)
Статус: Участник
bytecode!

Создано: 3 декабря 2013 02:52 New!
Цитата · Личное сообщение · #6

JohnyDoe пишет:
Кидай.

Ушло в личку =)

JohnyDoe пишет:
Keep это же вроде как сохранять/оставлять? Наверное надо заменить на Replace names starting with. Эта опция для того чтобы убрать имена начинающиеся на введенное сочетание символов ведь.

Лол, я опять не так понял эту опцию, да, видимо надо что-то вроде "Force deobfuscation of names starting with:".

JohnyDoe пишет:
Мне лениво было разбираться где там имена классов, где там имена функций, где имена переменных. Потому я выбрал путь попроще . Гляну что там можно сделать.

Оно и понятно, я бы тоже сперва не заморачивался с различием имён, но будет очень здорово, если все-таки что-то придумаешь!

Ранг: 105.6 (ветеран)
Статус: Участник

Создано: 3 декабря 2013 11:49 · Поправил: JohnyDoe New!
Цитата · Личное сообщение · #7

Я вспомнил почему не стал разные префиксы делать. Там переименование идет в тот момент когда неизвестно именем чего является строка. Т.е. известно что это имя переменной, класса или функции, но неизвестно чего конкретно. Потому и не смог разделить. Но гляну еще. Может что и выйдет.

Файлы посмотрю.

Изучил файлики. Нашел небольшой недочет в алгоритме. В очень редких случаях может случиться выход за пределы при чтении памяти. Уже поправил. Пока не выкладываю. На нормальных флэшках такого никогда не произойдет.

В secureSWF и swfEncrypt новые фишки появились. Надо подумать и пофиксить. После прохода моим алгоритмом защищенных флэшек, они открываются, например в софинке, без проблем, но код выглядит не очень красиво. Разобраться в коде конечно просто, но для облегчения жизни надо бы добавить новых плюшек в алгоритм чистки.

| Сообщение посчитали полезным: 4kusNick


Ранг: -0.4 (нарушитель)
Статус: Участник

Создано: 8 декабря 2013 20:52 New!
Цитата · Личное сообщение · #8

' В архиве приложен bat-файл, который даст представление о том как все запустить'


Можна по подробнее , Спасибо

Ранг: 105.6 (ветеран)
Статус: Участник

Создано: 8 декабря 2013 21:45 New!
Цитата · Личное сообщение · #9

А что не понятно?

Сначала запускаем декомпиляцию.
Code:
  1. rabcdasm_ext.exe "file.swf"

Переименовываем оригинальную флэшку.
Code:
  1. ren "file.swf" "file_0p.swf"

Проходимся swfdump'ом по флэшке. На выходе будет out.swf.
Code:
  1. swfdump.exe -"file_0p.swf"

Даем out.swf оригинальное название файла.
Code:
  1. ren "out.swf" "file.swf"

Собираем file.swf.
Code:
  1. rabcdasm_ext.exe "file.swf"


Все оптимизировано под пакетную обработку. Можно конечно что-то свое придумать в рамках возможностей swfdump и rabcdasm.

Можно через командную строку запустить bat-файл с параметром. Тогда rabcdasm и swfdump должны быть либо в директории рядом с bat, либо в одной из директорий прописанных в переменной path.

Ранг: -0.4 (нарушитель)
Статус: Участник

Создано: 9 декабря 2013 01:59 New!
Цитата · Личное сообщение · #10


Ранг: -0.4 (нарушитель)
Статус: Участник

Создано: 9 декабря 2013 02:03 New!
Цитата · Личное сообщение · #11


Ранг: -0.4 (нарушитель)
Статус: Участник

Создано: 9 декабря 2013 02:04 New!
Цитата · Личное сообщение · #12

как мне его декомпилить чтоб он ошибки не выдавал при компиляции


Ранг: 747.9 (! !)
Статус: Участник
bytecode!

Создано: 9 декабря 2013 02:06 New!
Цитата · Личное сообщение · #13

Shumaherxxx
У вас там AS2. RABCDasm только с as3 работает. Пользуйте FFDec.

Ранг: -0.4 (нарушитель)
Статус: Участник

Создано: 9 декабря 2013 02:42 New!
Цитата · Личное сообщение · #14

FFDec зависает и не хочет его декомпилить другие пробовал норм но там без зашиты , походу изо зашиты ,
Sothink SWF Decompiler декомпилит но потом при компиляции ничего не изменяя в нем выдает кучу ошибок и флэха не роботает


Ранг: 747.9 (! !)
Статус: Участник
bytecode!

Создано: 9 декабря 2013 03:25 New!
Цитата · Личное сообщение · #15

Не плодите сообщения пожалуйста, пользуйтесь кнопкой "Правка" у поста.
Можете скинуть мне файл в ЛС, я посмотрю.

Ранг: 105.6 (ветеран)
Статус: Участник

Создано: 9 декабря 2013 20:59 · Поправил: JohnyDoe New!
Цитата · Личное сообщение · #16

Обновил алгоритм чистки кода от мусора в соответствии с новыми веяниями. Вроде стабильно работает. Попробовал на паре крупных флэшек.

Теперь все логи и вспомогательные файлы пишутся в отдельную директорию logs. Эти изменения учтены в новом bat'нике.

http://www67.zippyshare.com/v/77891681/file.html

Особо не тестил. Надеюсь на ваши отзывы. Если у вас возникают ошибки при обработке флэшки, кидайте файлик в эту тему или в ПМ. Обработанное swfshield'ом просьба не кидать. С ним отдельная засада.

| Сообщение посчитали полезным: 4kusNick, Gideon Vi, t0ShA, nick8606



Ранг: 752.7 (! !)
Статус: Участник
Student

Создано: 4 ноября 2014 23:55 New!
Цитата · Личное сообщение · #17

На вопрос "Enter value for startswith" что отвечать?

Ранг: 105.6 (ветеран)
Статус: Участник

Создано: 5 ноября 2014 01:46 · Поправил: JohnyDoe New!
Цитата · Личное сообщение · #18

Можешь просто Enter. Можешь ввести строку и все переменные с именами, начинающимися на эту строку, будут переименованы по шаблону varXXX.

| Сообщение посчитали полезным: Isaev


Ранг: 0.3 (гость)
Статус: Участник

Создано: 25 июня 2015 01:45 New!
Цитата · Личное сообщение · #19

JohnyDoe Привет! Где можно скачать программу?

Ранг: 105.6 (ветеран)
Статус: Участник

Создано: 27 февраля 2016 12:57 · Поправил: 27 февраля 2016 16:21 JohnyDoe New!
Цитата · Личное сообщение · #20

По просьбам телезрителей обновил ссылку в первом посте.

Так и не довел до состояния полной законченности. Сам пользуюсь без проблем, а предложений особо не поступало. Некоторые из предложений просто сложно было воплотить в жизнь.

Тем кто сам не знает зачем ему этот мод rabcdasm, предлагаю для начала обратить внимание на ffdec.

| Сообщение посчитали полезным: 4kusNick


Ранг: 5.8 (гость)
Статус: Участник

Создано: 27 февраля 2016 16:55 New!
Цитата · Личное сообщение · #21

Хотелось бы увидеть в новой версии собственно сам номер версии.
Так как то что нашел в нете, размер и даты файлов различались (у ЕХЕшника). Может клеенные были, не стал их юзать, поэтому и попросил автора дать ссылку.
Спасибо большое автору программы за труды.

Ранг: 4.0 (гость)
Статус: Участник

Создано: 1 сентября 2016 11:07 New!
Цитата · Личное сообщение · #22

Обновите ссылку плиз.


Ранг: 752.7 (! !)
Статус: Участник
Student

Создано: 16 февраля 2017 18:55 New!
Цитата · Личное сообщение · #23

Положите на какое-нибудь облако чтоли, что же она мрёт постоянно)

Ранг: 105.6 (ветеран)
Статус: Участник

Создано: 17 февраля 2017 18:49 New!
Цитата · Личное сообщение · #24

Я вообще-то думал, что никто уже давно не пользуется. Есть же ffdec.

Положу на мегу. Не знаю сколько проживет.

https://mega.nz/#!H1FVnAqQ!nPYDKGvqTXdUsl_WjUtZCGpxxkZaWU923B62p5unAN4

| Сообщение посчитали полезным: Isaev



Ранг: 752.7 (! !)
Статус: Участник
Student

Создано: 17 февраля 2017 19:15 · Поправил: Isaev New!
Цитата · Личное сообщение · #25

JohnyDoe пишет:
Есть же ffdec.

я в поисках
4kusNick пишет:
с автоматической деобфускацией имён и некоторой чисткой от мусора.

ffdec разве чистит от мусора? хотя что под этим подразумевается тоже вопрос))
я ищу что-нибудь что потрёт кучу пустых проверок после SecureSWF, типа того:
Code:
  1.         var _local1:Boolean;
  2.         var _local2:Boolean;
  3.         if (!_local2){
  4.             _e_-_---- = _e_--_-;
  5.             if (_local1){
  6.                 //unresolved if
  7.                 var _temp1 = _local2;
  8.                 var _temp2 = _local2;
  9.                 _local2 = _temp2;
  10.                 _local2 = _temp1;
  11.                 _e_--- = _e_-_-_--;
  12.                 if (!(_local2)){
  13.                     //unresolved if
  14.                     var _temp3 = _e_-----_;
  15.                     var _temp4 = _e_-----_;
  16.                     _local0 = _e_-----_;
  17.                     _local0 = _temp4;
  18.                     _local0 = _temp3;
  19.                     _e_--__- = false;
  20.                     //unresolved if
  21.                 };
  22.                 //unresolved if
  23.                 var _temp5 = _local1;
  24.                 _local1 = _temp5;
  25.                 _e_----_- = new Array();
  26.                 if (!!(_local1)){
  27.                     //unresolved if
  28.                     if (!_local1){
  29.                         var _temp6 = _local1;
  30.                         _local1 = _temp6;
  31.                     };
  32.                     _e_-____ = new Array();
  33.                 };
  34.             };
  35.             //unresolved if
  36.             var _temp7 = _e_-----_;
  37.             _local0 = _e_-----_;
  38.             _local0 = _temp7;
  39.             _e_---_-- = _e_-----;
  40.         };
  41.         //unresolved if

этот бред очень мешает анализу, это деобфусцируют вроде более-менее новые версии asv, но их на паблике нет

Ранг: 105.6 (ветеран)
Статус: Участник

Создано: 17 февраля 2017 19:32 New!
Цитата · Личное сообщение · #26

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


Ранг: 752.7 (! !)
Статус: Участник
Student

Создано: 17 февраля 2017 19:47 · Поправил: Isaev New!
Цитата · Личное сообщение · #27

JohnyDoe пишет:
мой мод с этим справляется.

я очень на это надеялся, потому и искал где его скачать)

JohnyDoe пишет:
Тебе только придется указать _e_ для переименования всех переменных

ну это то само собой...
буду пробовать, спасибо!

Добавлено спустя -3 минут
Декларацию свёрнутых переменных только оставляет
и по мелочам, инициализацию закошенную под циклы, циклы с преждевременным выходом не обрезает
но код становится приятнее!

FFDec глянул, он справляется тоже, даже лучше чистит
а деобфускации строковых констант нет ни тут ни там, придётся написать самому

Ранг: 105.6 (ветеран)
Статус: Участник

Создано: 18 февраля 2017 17:02 New!
Цитата · Личное сообщение · #28

Я изначально вообще использовал TextPipe с конвеером из регулярных выражений. Потом мне пришла мысль посмотреть исходники rabcdasm. За пару недель наваял мод. Потом его по необходимости правил под свои нужды. К законченному решению так и не пришел. Оно и не особо надо стало. И флэш уже не тот и ffdec появился. Хотя последний я так ни разу на практике и не применил. Но он, судя по всему, все это время развивался и продолжает развиваться. Поэтому и предлагал всегда с него начинать.
 eXeL@B —› Софт, инструменты —› RABCDasm mod

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS