eXeL@B —› Софт, инструменты —› RABCDasm mod |
Посл.ответ | Сообщение |
|
Создано: 02 декабря 2013 18:44 · Поправил: JohnyDoe · Личное сообщение · #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 |
|
Создано: 02 декабря 2013 19:43 · Личное сообщение · #2 Спасибо, как раз недавно искал ранний прототип, что ты скидывал когда-то, но я его куда-то потёр =( Вот немножко фидбэка: 1. Не понятно зачем оно спрашивает ввести "value for startswith". Я так понимаю, это предложение ввести префикс для новых переменных после переименования? В итоге все равно используется var* =\ 2. Не все имена деобфусцируются, особенно касается имен классов для DefineBinaryData (те, что расширяют mx.core.ByteArrayAsset). Кстати, алго для деобфускации имён (для детекта обфусцированных) можно подсмотреть в опенсорсном ffdec, вдруг пригодится. 3. Было бы классно чистить от всякого мусора типа if (!_loc_2) { } Примеры для всего вышесказанного можно глянуть в этих флэшках: (main_0p - ороигинал) ----- Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску. |
|
Создано: 02 декабря 2013 23:15 · Поправил: JohnyDoe · Личное сообщение · #3 value for startswith это для переменных типа _-QQ. Т.е. это вполне нормальное имя переменной. Но оно мне не нравится и я обычно такие имена искореняю. Для этого ввожу _- на запрос value for startswith. Т.е. префикс var жестко прописан. Мне кажется что там без разницы какой префикс. Гляну твой примерчик. Только лучше куда-то на более дружелюбный обменник кидать. Мой браузер не переваривает мегу. Приходится тулзы юзать для скачивания. Конструкции с if'ами лишними должны убираться. И часть даже была убрана в твоем примере. Но не все. Надо глянуть почему не все были убраны. Порядок кода пока не восстанавливается. Не знаю будет ли такая опция. UPDATE: Твой файл выглядит странно на первый взгляд. Эти if'ы не убираются потому что эти локальные переменные не инициализируются как это обычно бывает. Внес небольшие коррективы. Ничего принципиального по функционалу. Убрал лишние логи. |
|
Создано: 02 декабря 2013 23:57 · Поправил: 4kusNick · Личное сообщение · #4 JohnyDoe пишет: value for startswith это для переменных типа _-QQ. Т.е. это вполне нормальное имя переменной. Но оно мне не нравится и я обычно такие имена искореняю. Для этого ввожу _- на запрос value for startswith Ага, я неверно понял этот запрос сначала, теперь ясно. Возможно стоит написать что-то вроде "Keep names starting from". JohnyDoe пишет: Т.е. префикс var жестко прописан. Мне кажется что там без разницы какой префикс. На самом деле да, в идеале вообще бы переименовывать в зависимости от сущности - если это было имя класса, то именовать в class1, class2, и т.д. Если метод - то func1 например, и т.д. Это реверс облегчит в дальнейшем. Спасибо, что глянул мой файлик. Вообще могу выслать пачку простых файлов (один и тот же файл по сути), защищённых разными протами для тестов, если это чем-то может помочь. ----- Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску. |
|
Создано: 03 декабря 2013 00:18 · Поправил: JohnyDoe · Личное сообщение · #5 Кидай. Я тестил на разных новых играх. Keep это же вроде как сохранять/оставлять? Наверное надо заменить на Replace names starting with. Эта опция для того чтобы убрать имена начинающиеся на введенное сочетание символов ведь. Мне лениво было разбираться где там имена классов, где там имена функций, где имена переменных. Потому я выбрал путь попроще . Гляну что там можно сделать. |
|
Создано: 03 декабря 2013 02:52 · Личное сообщение · #6 JohnyDoe пишет: Кидай. Ушло в личку =) JohnyDoe пишет: Keep это же вроде как сохранять/оставлять? Наверное надо заменить на Replace names starting with. Эта опция для того чтобы убрать имена начинающиеся на введенное сочетание символов ведь. Лол, я опять не так понял эту опцию, да, видимо надо что-то вроде "Force deobfuscation of names starting with:". JohnyDoe пишет: Мне лениво было разбираться где там имена классов, где там имена функций, где имена переменных. Потому я выбрал путь попроще . Гляну что там можно сделать. Оно и понятно, я бы тоже сперва не заморачивался с различием имён, но будет очень здорово, если все-таки что-то придумаешь! ----- Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску. |
|
Создано: 03 декабря 2013 11:49 · Поправил: JohnyDoe · Личное сообщение · #7 Я вспомнил почему не стал разные префиксы делать. Там переименование идет в тот момент когда неизвестно именем чего является строка. Т.е. известно что это имя переменной, класса или функции, но неизвестно чего конкретно. Потому и не смог разделить. Но гляну еще. Может что и выйдет. Файлы посмотрю. Изучил файлики. Нашел небольшой недочет в алгоритме. В очень редких случаях может случиться выход за пределы при чтении памяти. Уже поправил. Пока не выкладываю. На нормальных флэшках такого никогда не произойдет. В secureSWF и swfEncrypt новые фишки появились. Надо подумать и пофиксить. После прохода моим алгоритмом защищенных флэшек, они открываются, например в софинке, без проблем, но код выглядит не очень красиво. Разобраться в коде конечно просто, но для облегчения жизни надо бы добавить новых плюшек в алгоритм чистки. | Сообщение посчитали полезным: 4kusNick |
|
Создано: 08 декабря 2013 20:52 · Личное сообщение · #8 |
|
Создано: 08 декабря 2013 21:45 · Личное сообщение · #9 А что не понятно? Сначала запускаем декомпиляцию. Code:
Переименовываем оригинальную флэшку. Code:
Проходимся swfdump'ом по флэшке. На выходе будет out.swf. Code:
Даем out.swf оригинальное название файла. Code:
Собираем file.swf. Code:
Все оптимизировано под пакетную обработку. Можно конечно что-то свое придумать в рамках возможностей swfdump и rabcdasm. Можно через командную строку запустить bat-файл с параметром. Тогда rabcdasm и swfdump должны быть либо в директории рядом с bat, либо в одной из директорий прописанных в переменной path. |
|
Создано: 09 декабря 2013 01:59 · Личное сообщение · #10 |
|
Создано: 09 декабря 2013 02:03 · Личное сообщение · #11 |
|
Создано: 09 декабря 2013 02:04 · Личное сообщение · #12 |
|
Создано: 09 декабря 2013 02:06 · Личное сообщение · #13 |
|
Создано: 09 декабря 2013 02:42 · Личное сообщение · #14 |
|
Создано: 09 декабря 2013 03:25 · Личное сообщение · #15 |
|
Создано: 09 декабря 2013 20:59 · Поправил: JohnyDoe · Личное сообщение · #16 Обновил алгоритм чистки кода от мусора в соответствии с новыми веяниями. Вроде стабильно работает. Попробовал на паре крупных флэшек. Теперь все логи и вспомогательные файлы пишутся в отдельную директорию logs. Эти изменения учтены в новом bat'нике. http://www67.zippyshare.com/v/77891681/file.html Особо не тестил. Надеюсь на ваши отзывы. Если у вас возникают ошибки при обработке флэшки, кидайте файлик в эту тему или в ПМ. Обработанное swfshield'ом просьба не кидать. С ним отдельная засада. | Сообщение посчитали полезным: 4kusNick, Gideon Vi, t0ShA, nick8606 |
|
Создано: 04 ноября 2014 23:55 · Личное сообщение · #17 |
|
Создано: 05 ноября 2014 01:46 · Поправил: JohnyDoe · Личное сообщение · #18 Можешь просто Enter. Можешь ввести строку и все переменные с именами, начинающимися на эту строку, будут переименованы по шаблону varXXX. | Сообщение посчитали полезным: Isaev |
|
Создано: 25 июня 2015 01:45 · Личное сообщение · #19 |
|
Создано: 27 февраля 2016 12:57 · Поправил: JohnyDoe · Личное сообщение · #20 По просьбам телезрителей обновил ссылку в первом посте. Так и не довел до состояния полной законченности. Сам пользуюсь без проблем, а предложений особо не поступало. Некоторые из предложений просто сложно было воплотить в жизнь. Тем кто сам не знает зачем ему этот мод rabcdasm, предлагаю для начала обратить внимание на ffdec. | Сообщение посчитали полезным: 4kusNick |
|
Создано: 27 февраля 2016 16:55 · Личное сообщение · #21 |
|
Создано: 01 сентября 2016 11:07 · Личное сообщение · #22 |
|
Создано: 16 февраля 2017 18:55 · Личное сообщение · #23 |
|
Создано: 17 февраля 2017 18:49 · Личное сообщение · #24 Я вообще-то думал, что никто уже давно не пользуется. Есть же ffdec. Положу на мегу. Не знаю сколько проживет. https://mega.nz/#!H1FVnAqQ!nPYDKGvqTXdUsl_WjUtZCGpxxkZaWU923B62p5unAN4 | Сообщение посчитали полезным: Isaev |
|
Создано: 17 февраля 2017 19:15 · Поправил: Isaev · Личное сообщение · #25 JohnyDoe пишет: Есть же ffdec. я в поисках 4kusNick пишет: с автоматической деобфускацией имён и некоторой чисткой от мусора. ffdec разве чистит от мусора? хотя что под этим подразумевается тоже вопрос)) я ищу что-нибудь что потрёт кучу пустых проверок после SecureSWF, типа того: Code:
этот бред очень мешает анализу, это деобфусцируют вроде более-менее новые версии asv, но их на паблике нет ----- z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh |
|
Создано: 17 февраля 2017 19:32 · Личное сообщение · #26 |
|
Создано: 17 февраля 2017 19:47 · Поправил: Isaev · Личное сообщение · #27 JohnyDoe пишет: мой мод с этим справляется. я очень на это надеялся, потому и искал где его скачать) JohnyDoe пишет: Тебе только придется указать _e_ для переименования всех переменных ну это то само собой... буду пробовать, спасибо! Добавлено спустя -3 минут Декларацию свёрнутых переменных только оставляет и по мелочам, инициализацию закошенную под циклы, циклы с преждевременным выходом не обрезает но код становится приятнее! FFDec глянул, он справляется тоже, даже лучше чистит а деобфускации строковых констант нет ни тут ни там, придётся написать самому ----- z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh |
|
Создано: 18 февраля 2017 17:02 · Личное сообщение · #28 Я изначально вообще использовал TextPipe с конвеером из регулярных выражений. Потом мне пришла мысль посмотреть исходники rabcdasm. За пару недель наваял мод. Потом его по необходимости правил под свои нужды. К законченному решению так и не пришел. Оно и не особо надо стало. И флэш уже не тот и ffdec появился. Хотя последний я так ни разу на практике и не применил. Но он, судя по всему, все это время развивался и продолжает развиваться. Поэтому и предлагал всегда с него начинать. |
eXeL@B —› Софт, инструменты —› RABCDasm mod |