Найти исходный код программы

Исходный код — Путь от модера к кодеру

Приятного времени суток всем на этом сайте, сегодня я затрону тему связанную напрямую с восстановлением исходного кода мобильных приложений написанных на java.
Итак, приступим.

ps Вы из будущего, когда увидите свой код

Необходимые программы.
Всего, для получения исходного кода нам требуется три программы.
1. ProGuard Deobfuscator
2. JD Decompiler
3. fernflower.jar
А теперь по подробнее о каждой, и, к слову, все имена кликабельны

Что такое обфускация-деобфускация?
Не секрет, что большинство разработчиков не хотят раскрывать тайны своего исходного кода для других, что-бы не допустить «дополнительной сторонней отладки» и использования на свое усмотрение, так сказать. Все то же большинство разработчиков используют для защиты своих приложений один действенный способ. Разумеется не в 100% случаев, но в 90 точно =)

Декомпиляция Андройд приложений (подробно)


Свои приложения они подвергают обфускации, и код становится абсолютно непонятным. Методы,переменные и классы теряют все свои уникальные имена, и, понять как приложение работает просто нереально. Более того, обычные декомпиляторы даже такой код восстановить не в состоянии.
Добрые люди из отдела поддержки пиратства создали программку ProGuard Deobfuscator, она работает в точности до наоборот. Присваивая всем переменным и методам уникальные (но все еще непонятные имена) и, делая код возможным к запуску в принципе.

Зачем нужен JD Decompiler?
Просто так, если захочется только посмотреть код. Ибо полная декомпиляция занимает некоторое время. А вот за просмотром отдельных классов, прошу использовать эту программу. Хотя код на 100% она не восстанавливает, но, явно лучше чем DJ Java Decompiler, который лишь представлял набор команд для виртуальной машины java.

fernflower.jar — Какого черта?
А это и есть то, ради чего мы все здесь сегодня собрались. Маленький декомпилятор без интерфейса который делает чудеса. Найти его очень трудно, если не сказать больше. Но, он возвращает исходный код. Самый натуральный.

Среда разработки или как там её черт возьми.
Совсем забыл, что для редактирования (удобного, а не через блокнот) и компиляции кода, нужен компилятор. Сам лично пользуюсь NetBeans. Премудростями его установки сейчас делиться не стану, ибо есть и другие среды разработки, вы вольны в своем выборе) Но, код придется «вставлять» в одну из таких программ-компиляторов. Так что, не забудьте что-нибудь установить

Порядок действий.
Вы готовы стать кодерами?)
И перенять на себя всю ту головную боль от рефакторинга приложений?
Тогда вот с чего мы начнем:
1. Найдем какую нибудь небольшую игрушку. Пускай это будут танчики про.
2. Теперь берем Jar файл этой замечательной игры, и кидаем его со всей дури на deobfuscate.bat
3. А теперь самое интересное — консоль. Открываем её через комбинацию Win+R, вписываем cmd, затем Enter =)

Как посмотреть исходный код android приложения? Декомпиляция .apk файла (реверс инжиниринг)


4. Чем дальше тем лучше. Для начала установим адрес до папки с нашим jar-файлом. Командой «cd» устанавливаем каталог с fernflower-ом и нашей игрушкой после деобфускации.
ps

Читайте также:
В какой программе можно соединить 2 фотографии

Не поняли как? Увы это сугубо консольное приложение. И других способов его использования нет. Но, пример того, как выглядел адрес у меня, я все же скину:
cd A:UsersБезпалевныйDesktopГайдытанчики

5. Как же там было. Ах да, сначала пишем активацию нашего цветочка, затем путь до приложения, а затем папку в которую нужно будет поместить исходный код.
Получилось что-то вроде:
java -jar fernflower.jar A:UsersБеспалевныйDesktopГайдытанчикиtanchiki_pro.jar
A:UsersБеспалевныйDesktopГайдытанчикиout
ps Естественно без переноса строк.
6. Вот и все. Заходим в папку куда был загружен jar с декомпилированными файлами. Распаковываем его 7zip-ом или чем-то подобным. Выдираем из рук разработчиков файлы с расширением java и спокойно уносим их в закат под героическую музыку.

Что делать дальше? Заносить содержимое jar в среду разработки, настраивать проект под особенности приложения и компилировать. Затем искать критические ошибки (если есть) и исправлять их. А потом приступать к рефакторингу.

На этом желаю всем удачи в расчленении своих любимых, и не обязательно, игр.
ps Программы нужные для декомпиляции уже залиты, ссылки в начале страницы кликабельны

Категория: Уроки по модификации java | Добавил: ALDECOTAN
Просмотров: 5488 | Комментарии: 18 | Рейтинг: 5.0 / 5

Источник: ae-mods.ru

Найти исходный код программы

GDB может выводить части исходных текстов вашей программы, так как отладочная информация, записанная в ней, сообщает GDB, какие исходные файлы использовались при создании программы. Когда ваша программа останавливается, GDB сам выводит строку, на которой она остановилась. Аналогично, когда вы выбираете кадр стека (see section Выбор кадра), GDB выводит строку, на которой остановилось выполнение в этом кадре. Вы можете выводить другие части исходных файлов с помощью явных команд.

Если вы используете GDB через интерфейс к GNU Emacs, вы можете предпочесть воспользоваться средствами Emacs для просмотра исходных текстов; смотрите section Использование GDB под управлением GNU Emacs.

Чтобы вывести строки файла с исходным текстом, используйте команду list (сокращенно l ). По умолчанию выводятся десять строк. Существует несколько способов определения того, какую часть файла вы хотите вывести.

Здесь представлены наиболее употребительные формы команды list : list номер-строки Вывести строки, расположенные вокруг строки с номером номер-строки в текущем исходном файле. list функция Вывести строки, расположенные вокруг начала функции функция . list Вывести еще определенное количество строк. Если последние выведенные строки выводились с помощью команды list , то выводятся строки, следующие за последними выведенными; если, однако, последней выведенной строкой была одиночная строка, выведенная как часть отображения кадра стека (see section Исследование стека), то выводятся строки, расположенные вокруг нее. list — Вывести строки, расположенные непосредственно перед последними выведенными.

По умолчанию, для любой из этих форм команды list GDB выводит десять строк исходного текста. Вы можете изменить это командой set listsize : set listsize число Установить количество выводимых командой list строк в число (если аргумент команды list не задает явно какое-нибудь другое число). show listsize Отобразить количество строк, выводимых по команде list .

Читайте также:
Как обмануть программу st mobile

Повторение команды list нажатием RET отбрасывает аргумент, так что это эквивалентно вводу просто list . Это полезнее, чем вывод тех же самых строк снова. Исключение сделано для параметра `-‘ ; этот параметр сохраняется при повторе команды, так что каждое повторение приводит к перемещению вверх по исходному файлу.

Обычно команда list ожидает от вас ноль, один или два указателя строк . Указатели строк определяют строки исходного текста; существует несколько способов их задания, но результат всегда заключается в задании строки исходного текста. Вот полное описание возможных параметров команды list : list указ-стр Вывести строки, расположенные вокруг строки, определяемой указ-стр . list перв , посл Вывести строки с перв до посл . Оба параметра являются указателями строк. list , посл Вывести строки, расположенные перед посл . list перв , Вывести строки, начиная с перв . list + Вывести строки, расположенные сразу за последними выведенными. list — Вывести строки, расположенные непосредственно перед последними выведенными. list Описано в предыдущей таблице.

Ниже перечислены способы указания одиночной строки исходного текста—все виды указателей строк. номер Определяет строку с номером номер из текущего исходного файла. Если в качестве параметров к команде list задано два указателя строк, это относится к тому же исходному файлу, что и первый указатель строки. + смещение Указывает на строку, смещенную вперед на смещение строк относительно последней выведенной строки. Когда используется в качестве второго указателя строки для команды list , имеющей два указателя, задает строку, смещенную на смещение строк вниз относительно строки, определенной первым указателем. — смещение Указывает на строку, расположенную на смещение строк раньше последней выведенной строки. имя-файла : номер Задает строку номер из исходного файла имя-файла . функция Определяет строку, с которой начинается тело функции функция . Например, в Си это строка с открывающейся фигурной скобкой. имя-файла : функция Определяет строку с открывающейся фигурной скобкой, с которой начинается тело функции функция в файле имя-файла . Имя файла необходимо лишь для того, чтобы избежать неоднозначности, когда в различных исходных файлах есть одинаково названные функции. * адрес Определяет строку, соответствующую адресу адрес программы. адрес может быть любым выражением.

Существуют две команды для поиска по регулярному выражению в текущем исходном файле. forward-search рег-выраж search рег-выраж Команда `forward-search рег-выраж ‘ проверяет на соответствие регулярному выражению рег-выраж каждую строку, начиная со строки, следующей за последней выведенной. Найденная строка выводится. Вы можете использовать синоним `search рег-выраж ‘ или сокращать имя команды как fo . reverse-search рег-выраж Команда `reverse-search рег-выраж ‘ , двигаясь назад, проверяет на соответствие регулярному выражению рег-выраж каждую строку, начиная с предшествующей последней выведенной. Найденная строка выводится. Вы можете сокращать эту команду как rev .

Исполняемые программы иногда не сохраняют имена каталогов, в которых находились исходные файлы, из которых они скомпилированы, а хранят лишь имена файлов. Даже если они их сохранили, каталоги могли быть перемещены в период между компиляцией и сеансом отладки. У GDB есть список каталогов для поиска исходных файлов; он называется путь для исходных файлов . Каждый раз, когда GDB требуется исходный файл, он перебирает по порядку все каталоги из этого списка, пока не находит файл с требуемым именем. Заметьте, что пути поиска исполняемых файлов для этой цели не используются, как не используется и текущий рабочий каталог, если только он не присутствует в пути для исходных файлов.

Читайте также:
Программа для настройки назад

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

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

Когда вы вызываете GDB, путь для исходных файлов содержит только `cdir’ и `cwd’ , в этом порядке. Для добавления других каталогов, используйте команду directory . directory имя-каталога . dir имя-каталога . Добавить каталог имя-каталога в начало пути для исходных файлов.

Этой команде могут быть заданы несколько имен, разделенные `:’ ( `;’ в MS-DOS и MS-Windows, где `:’ обычно является частью абсолютного имени файла) или пробелом. Вы можете указать каталог, который уже содержится в пути для исходных файлов; это переместит его в начало, так что GDB будет просматривать его раньше. Вы можете использовать строку `$cdir’ для ссылки на каталог компиляции (если информация о нем сохранена), и `$cwd’ для ссылки на текущий рабочий каталог. `$cwd’ не есть то же самое, что `.’ . Первая отслеживает текущий рабочий каталог, который может меняться во время вашего сеанса работы с GDB, тогда как вторая сразу преобразовывается в текущий каталог в момент его добавления в путь для исходных файлов. directory Очистить путь для файлов с исходными текстами. Эта команда требует подтверждения. show directories Вывести путь поиска исходных файлов: показать, какие каталоги он содержит.

  1. Использовать directory без параметров, чтобы очистить путь поиска исходных файлов.
  2. Использовать directory с подходящими аргументами, чтобы переустановить каталоги, которые вы хотите видеть в пути для исходных файлов. Вы можете добавить все каталоги одной командой.

Вы можете использовать команду info line , чтобы отобразить cтроки исходного текста в программные адреса (и наоборот), и команду disassemble , чтобы вывести диапазон адресов в виде машинных инструкций. При запуске в режиме GNU Emacs, команда info line выводит стрелку, указывающую на заданную строку. Также info line выводит адреса как в символьной форме, так и в шестнадцатеричной. info line указ-стр Выводит начальный и конечный адреса скомпилированного кода, соответствующего строке исходного текста указ-стр . Вы можете определить строки исходного текста любым способом, воспринимаемым командой list (see section Вывод строк исходного текста).

Например, мы можем использовать info line для определения положения объектного кода первой строки функции m4_changequote :

(gdb) info line m4_changequote Line 895 of «builtin.c» starts at pc 0x634c and ends at 0x6350.

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru