Сейчас на форуме: Alf, Adler, Rio, vsv1, site-pro (+8 невидимых)

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

Ранг: 105.6 (ветеран), 69thx
Активность: 0.060
Статус: Участник

Создано: 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


Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

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

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

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

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.




Ранг: 105.6 (ветеран), 69thx
Активность: 0.060
Статус: Участник

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

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

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

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

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

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

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




Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

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

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

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

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

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

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

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.




Ранг: 105.6 (ветеран), 69thx
Активность: 0.060
Статус: Участник

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

Кидай.

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

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

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




Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 03 декабря 2013 02:52
· Личное сообщение · #6

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

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

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

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

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

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

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.




Ранг: 105.6 (ветеран), 69thx
Активность: 0.060
Статус: Участник

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

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

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

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

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

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

Ранг: -0.4 (гость)
Активность: 0=0
Статус: Участник

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

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


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



Ранг: 105.6 (ветеран), 69thx
Активность: 0.060
Статус: Участник

Создано: 08 декабря 2013 21:45
· Личное сообщение · #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 (гость)
Активность: 0=0
Статус: Участник

Создано: 09 декабря 2013 01:59
· Личное сообщение · #10





Ранг: -0.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 09 декабря 2013 02:03
· Личное сообщение · #11





Ранг: -0.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 09 декабря 2013 02:04
· Личное сообщение · #12

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




Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 09 декабря 2013 02:06
· Личное сообщение · #13

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

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.




Ранг: -0.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 09 декабря 2013 02:42
· Личное сообщение · #14

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




Ранг: 748.2 (! !), 390thx
Активность: 0.370
Статус: Участник
bytecode!

Создано: 09 декабря 2013 03:25
· Личное сообщение · #15

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

-----
Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.




Ранг: 105.6 (ветеран), 69thx
Активность: 0.060
Статус: Участник

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

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

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

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

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

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


Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 04 ноября 2014 23:55
· Личное сообщение · #17

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

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 105.6 (ветеран), 69thx
Активность: 0.060
Статус: Участник

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

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

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

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

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

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



Ранг: 105.6 (ветеран), 69thx
Активность: 0.060
Статус: Участник

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

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

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

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

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

Ранг: 5.8 (гость), 4thx
Активность: 0.010
Статус: Участник

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

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



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

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

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




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

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

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

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 105.6 (ветеран), 69thx
Активность: 0.060
Статус: Участник

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

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

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

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

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


Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

Создано: 17 февраля 2017 19:15 · Поправил: Isaev
· Личное сообщение · #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, но их на паблике нет

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 105.6 (ветеран), 69thx
Активность: 0.060
Статус: Участник

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

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




Ранг: 756.3 (! !), 113thx
Активность: 0.610.05
Статус: Участник
Student

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

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

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

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

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

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

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

-----
z+Dw7uLu5+jqLCDq7vLu8PvpIPHs7uMh




Ранг: 105.6 (ветеран), 69thx
Активность: 0.060
Статус: Участник

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

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


 eXeL@B —› Софт, инструменты —› RABCDasm mod
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати