Как изменить код программы, если потерян исходник
Бывают ситуации, когда под рукой нет исходника, а Вам срочно требуется внести изменения в коде, написанной ранее Вами программы. Например, дано приложение «TextEdit.exe» — текстовый редактор, написанный на языке c#, который имеет простой пользовательский интерфейс, состоящий из двух кнопок и текстового поля.
При нажатии на кнопку “Чтение” из файла 1.txt считываются и выводятся все строки в окно элемента управления textBox, а при нажатии на кнопку “Запись” данные из текстового поля сохраняются в файле 2.txt
Для хранения путей в программе используются две текстовых переменных: filePathIn и filePathOut
Прошёл год, как программа была написана и отдана заказчику, но вдруг ему потребовалось изменить имя папки, в которой должны храниться оба файла, c 123 на Text. Задача простая, но прошло уже много времени, и исходник был потерян, что делать в такой ситуации?
Для начала вспомним, как образуется .NET сборка
Полученный в результате компиляции файл (сборка) содержит внутри себя метаданные, манифест, код на языке IL (MSIL).
Метаданные — описывают типы данных и их члены
Манифест описывают саму сборку
MSIL код, полученный в результате компиляции файла исходного кода
То есть перед вами тот же исходник, только в другом формате. И для того, чтобы поработать с ним, Вам понадобиться специальный инструмент, который позволяет просматривать и редактировать данные внутри сборки.
Дизассемблер ILDASM
Данный инструмент входит состав пакета .Net Framework SDK, который является бесплатным и устанавливается вместе с Visual Studio (включая Express версию). С помощью него вы можете, как просматривать внутреннее содержимое сборки, так и изменять его.
Для удобства работы создадим отдельную папку, например: ”c:newasm” и поместим в неё файл TextEdit.exe
Затем в меню “Пуск” открываем папку: «Visual Studio Tools»
Запускаем командную строку разработчика
Откроется консоль, вводим первую команду: ildasm. Для выполнения команды нажмите клавишу Enter.
Появиться главное окно программы.
Переместим файл сборку TextEdit.exe в окно дизассемблера ILASM, в результате отобразиться её внутреннее содержимое.
Убедимся, что в ней содержатся нужные нам данные (пути к файлам).
Два поля на месте, теперь взглянем на метаданные.
Для доступа к метаданным Вы так же можно использовать сочетание горячих клавиш: Ctrl+M. Затем с помощью кнопки Find, найдём имя одного из файлов.
Как видно присутствуют оба. Пути найдены, и теперь их нужно изменить, но все данные, в текущий момент, доступны только для просмотра, и изменить их в самой дизассемблере нельзя, поэтому воспользуемся второй возможностью данной программы и выгрузим содержимое сборки в файл.
Выгрузка данных
Выберите пункт меню File -> Dump
Появится меню. В данном примере, все пункты меню оставим без изменений и просто нажмём кнопку OK.
Появится диалоговое окно
Выберем ранее созданную папку “newasm”, затем укажем имя и тип файла и нажмём на кнопку “Сохранить”
В результате в папке “newasm” должно появиться несколько новых файлов
Закрываем окно ildasm, а так же удаляем файл Textedit.exe, больше он нам не понадобиться. Теперь нас интересует полученный файл texted.il и для начала откроем его любым текстовым редактором, например блокнотом.
Снова воспользуемся поиском (Ctrl+F)
Так же видим найденные строки, которые содержат пути к файлам.
Изменим текущее имя папки 123 на новое название Text, для обоих файлов
Сохраняем внесённые изменения и закрываем блокнот.
Ассемблер ILASM
Изменения внесены и теперь нужно преобразовать файл txted.il обратно в исполняемый файл (.exe) Для этого нам понабиться второй инструмент ILASM, ассемблер, который так же входит в состав пакета SDK и не требует отдельной установки.
Код:
файл (.il) -> компилятор ilasm = сборка (.exe и .dll)
Возвращаемся в консоль
Вводим вторую команду:
Код:
ilasm /exe c:newasmtxted.il /output=c:newasmtextEdit.exe
Первый параметр: /exe — указывает компилятору, что на выходе мы хотим получить файл с расширением .exe. Затем указываем файл, который содержит MSIL-код. С помощью второго параметра /output — указываем имя и расширение нового файла.
Если компиляции прошла успешно, то в окне консоли вы должны увидеть сообщение, которое выделено на картинке, а внутри папке “newasm” должен появиться новый файл TextEdit.exe, который теперь уже содержит новые пути к файлам.
Вот таким не сложным способом можно выйти из данной ситуации, при этом не имея исходника под рукой.
Читайте также:
- Cоздание файла dll
- Программное выравнивание текста по ширине
- Как удалить параметр реестра Windows
Иногда случаются такие ситуации, когда нужно внести изменения в программу, но исходный код отсутствует. Как тогда изменить код программы?
Решение воздействовать на код программы в отсутствие ее исходного кода случается довольно часто и в основном этому предшествуют 2 основные причины:
- вы потеряли исходный код;
- его у вас никогда и не было, но хотите доработать какую-то программу.
Итак, есть скомпилированный файл, но нет исходного кода, как тогда изменить код программы? На помощь может прийти процесс декомпиляции. Почему «может»? Потому что в некоторых случаях и этот процесс бессилен. Плюс, возможно, вы хотите изменить исходный код программы, который специально защищен. В таком случае программы-декомпиляторы могут оказаться бессильными. Помимо этого, многое зависит от конкретного декомпилятора и языка программирования, на котором написана ваша программа. В некоторых случаях декомпилятор выдает исходный код, в котором вы не сможете найти нужный участок кода для его изменения.
В общем, «в таком положении» — без отсутствия исходного кода — вероятность, что что-то получится, невысокая, но она есть. А раз есть вероятность, значит, можно пробовать.
Как изменить код программы без исходников?
Первым в этом случае вам может помочь процесс декомпиляции. Декомпиляция — это способ создания исходного кода программного обеспечения на том языке, на котором оно было разработано. То есть компиляция — это когда исходный код программного обеспечения преобразуется в машинный код, а декомпиляция — это обратный процесс.
Декомпиляция в некоторых случаях позволяет изменить код программы без исходников, однако нужно понимать, что полностью восстановить исходный код программы может не получиться. Декомпилятор вообще может вам выдать непонятный результат, и вы просто не будете знать, что с этим результатом делать. На практике получается, что чем «меньше» программа, тем качественней проходит процесс декомпиляции, и наоборот — высоконагруженные программы тяжело декомпилируются.
Декомпиляцию возможно осуществить при помощи специализированных программ:
- VB Decompiler;
- ReFox;
- DeDe;
- EMS Source Rescuer;
- PEID;
- и др.
Если вам известно, на каком языке была разработана программа, то нужно искать декомпилятор именно под этот язык программирования. Если же вам неизвестно, на каком языке был разработан исходный код программы, тогда вам потребуется попробовать несколько декомпиляторов, чтобы найти нужный.
Суть декомпиляции сводится к следующему: вы из машинного кода программы пытаетесь восстановить ее исходный код, в котором будете вносить необходимые изменения. Это самый простой метод, но он работает не всегда. Есть еще один альтернативный метод, как изменить исходный код программы без исходника, но он требует специальной подготовки.
Как изменить код программы без декомпиляции?
В качестве альтернативного метода, как изменить код программы без исходника, выступает изучение ассемблера, в частности раздела «реверс-инженерия», чтобы уметь воздействовать на машинный код. Да, это сложно, так как потребует долгого и упорного изучения, но это будет самым верным подходом. Ведь в этом случае вы будете знать, на какой байт вам нужно воздействовать, чтобы произвести изменения в машинном коде программе. На сайте SpyLife вы сможете найти топ-3 программных обеспечений, позволяющее получать всю необходимую информацию со стороннего устройства.
В качестве вспомогательного инструмента в этом случае будут программы OllyDbg и Ida PRO.
Заключение
Изменить код программы без исходника возможно только одним из описанных выше способов:
- используя декомпилятор;
- изучая ассемблер.
Кстати, декомпилятор может помочь узнать, на каком языке написан исходный код. Принцип распознавания прост: к какому языку программирования относится декомпилятор, который сможет обработать загружаемый код, к тому языку и будет относиться исходный код программы.
Здравствуйте! Только что задался вопросом: можно ли изменить код уже скомпилированной программы(так чтобы она работала)? То есть, имея исполняемый файл, можно ли его открыть как текстовый документ и изменять(ну всё-таки исходные коды линковщиков и компиляторов есть же). Я понимаю, что после работы компилятора, си там уже не пахнет, но всё же, изучив структуру ехе
файла — это можно сделать, или это полный бред?
задан 28 апр 2017 в 20:26
1
Полностью исходный код программы конечно получить не возможно, но есть декомпиляторы которые его стараются восстановить, но получается из этого вырви-глаз и разбирать там не чего, а тем более редактировать. Насчёт редактирования ПО, это вам нужно изучить ассемблер (советую гуглить по запросу «реверс инжиниринг») и научиться таким программам как OllyDbg либо IdaPRO (платная и достаточно дороговатая) и потом уже делать патчи на те программы которые вы хотите, точнее редактировать. Но есть проблема в вашем вопросе, как вы хотите её редактировать, если просто дизайн, то вам достаточно и редактора ресурсов, которых OVER 9999+ в интернете как бесплатных(Resource Hacker), так и платных(Resource Tuner).
ответ дан 28 апр 2017 в 20:31
alex-rudenkiyalex-rudenkiy
4,0122 золотых знака17 серебряных знаков34 бронзовых знака
13
Через конкретно блокнот (или там Word) — нет, запорет он вам некоторые символы…
А вот hex-редактором — в принципе можно. А как, по-вашему, всякие ломалки работают? Именно так — меняя в нужных местах код/данные.
Только тут — как в том апокрифе со старшим Капицей, которому якобы обещали за границей 10000 марок за ремонт какой-то там установки. Он приехал, посмотрел, сказал ассистенту ударить молотком в таком-то месте — все заработало. За такую работу принимающей стороне сумма показалась слишком большой, попросили счет. Он выглядел так:
Удар молотком — 1 марка.
За то что знал, где ударить — 9999 марок.
Словом, чтоб знать, куда ударить и какие байты и как поменять — надо долго и упорно учиться
Поменять какие-то данные типа, чтоб не Hello world выводила, а типа Coolhacker — это попроще…
ответ дан 29 апр 2017 в 5:09
HarryHarry
210k15 золотых знаков115 серебряных знаков224 бронзовых знака
Реверс-инжиниринг позволяет не только разобраться в существующих приложениях, но и модифицировать их. В этом смысле приложения на Андроид — клад для начинающего реверсера. Сегодня мы разберем несколько приложений, чтобы потренироваться в реверс-инжиниринге и узнать о подлинных возможностях вашего смартфона.
Какое приложение мы будем реверсить? Я выбрал для этой статьи VK Admin — приложение для управления сообществами «ВКонтакте» со смартфона. В нем к сожалению не предусмотрен ночной режим, поэтому мы с вами путем реверса попробуем это дело исправить.
Вся информация предоставлена исключительно в ознакомительных целях. Ни редакция сайта tech-geek.ru, ни автор не несут ответственности за любой возможный вред, причиненный изложенным материалом.
Содержание
- Собираем и разбираем
- Меняем цветовые схемы
- colors.xml
- styles.xml
- Layout
- Smali
- setBackgroundColor
- setTextColor
- Меняем функциональность приложения
Собираем и разбираем
Сначала извлечем все ресурсы приложения, используя утилиту apktool — она распаковывает и запаковывает файлы пакетов APK, которые хранятся в сжатом, бинарном виде, и дизассемблирует программный код, заключенный в них.
Чтобы получить установочный пакет, можно воспользоваться Android Debugging Bridge — системой для отладки программ на устройстве. В *nix-подобных системах ADB ставится стандартно, с помощью пакетного менеджера, а в Windows — идет в составе Android Studio или Android SDK Platform Tools.
В первую очередь установим приложение из Google Play Store на смартфон, подключим его к компьютеру с помощью USB, затем воспользуемся ADB для переноса пакета приложения на компьютер и извлечем его содержимое.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
$ adb shell pm path com.vk.admin package:/data/app/com.vk.admin—Ka5KVtTbnGgxoRqnObb—pQ==/base.apk $ adb pull /data/app/com.vk.admin—Ka5KVtTbnGgxoRqnObb—pQ==/base.apk com.vk.admin.apk 3881 KB/s (13414132 bytes in 3.374s) $ apktool d com.vk.admin.apk I: Using Apktool 2.4.0 on base.apk I: Loading resource table… I: Decoding AndroidManifest.xml with resources… I: Regular manifest package… I: Decoding file—resources… I: Decoding values / XMLs… I: Baksmaling classes.dex… I: Copying assets and libs… I: Copying unknown files… I: Copying original files… |
После этого мы получим папку
com.vk.admin/, внутри которой хранится все содержимое исходного .apk, только в декодированном виде. Чтобы применить изменения, необходимо будет снова воспользоваться рядом утилит.
- Сначала соберите приложение обратно в пакет
.apk.
$ apktool b com.vk.admin/ I: Using Apktool 2.4.0 I: Checking whether resources has changed… I: Checking whether sources has changed… I: Smaling classes folder into classes.dex… I: Building apk file… I: Copying unknown files/dir… I: Built apk… |
- Затем необходимо подписать приложение. Это нужно, чтобы и Google Play Store, и устройство не обновляли приложение, если подписи не совпадают. Поэтому не забудьте удалить приложение с телефона, прежде чем установить свое, подписанное своим ключом.
Для создания подписи в первый раз нужно воспользоваться утилитой keytool (входит в Java Development Kit):
$ keytool —genkey —keyalg RSA —alias xakep —keystore ks.keystore —validity 10000 —keysize 2048 Enter keystore password: Re—enter new password: What is your first and last name? [Unknown]: Xakep User What is the two—letter country code for this unit? [Unknown]: RU Is CN=Xakep User, C=RU correct? [no]: yes Enter key password for (RETURN if same as keystore password): Re—enter new password: |
- Когда вы уже создали ключ, подпишите приложение.
$ jarsigner —sigalg SHA1withRSA —digestalg SHA1 —keystore ks.keystore com.vk.admin.apk xakep Enter Passphrase for keystore: jar signed. |
- После этого установите приложение на смартфон.
$ adb install com.vk.admin.apk 3881 KB/s (13414132 bytes in 3.374s) Success |
РЕКОМЕНДУЕМ:
Взлом приложений для Андроид с помощью отладчика
Меняем цветовые схемы
Цвета в приложении можно настроить несколькими способами:
- использовать встроенные цвета, к примеру
@android:color/white; - создать палитру собственных цветов в файле
colors.xml, которые затем используются в виде
@color/text_primary; - задать цвет шестнадцатеричным кодом, главное — не забудьте, что цвета в приложении записаны в формате
#AARRGGBB — прозрачность на первом месте; - воспользоваться параметрами
setTextColor,
setBackgroundColor внутри кода Java или Kotlin.
Все эти способы жизнеспособны и постоянно используются.
colors.xml
Цветовая палитра приложения содержится в файле
com.vk.admin/res/values/colors.xml. Структура файла выглядит так:
<?xml version=«1.0» encoding=«utf-8»?> <resources> <color name=«abc_input_method_navigation_guard»>@android:color/black</color> <color name=«background_chat»>#ffebf0f4</color> <color name=«background_material_light»>@android:color/white</color> ... <color name=«material_grey_100»>#fff5f5f5</color> <color name=«white»>#ffffffff</color> </resources> |
Каждый цвет, который в дальнейшем используется в статичных экранах приложения, записан здесь. Наша цель — изменить цвета, самый простой способ это сделать — инвертировать. Для записи цвета в формате hex можно отнять из 255 каждый компонент:
R,
Gи
B, то есть
255 — R,
255 — G,
255 — B. Параметры
@android:color/white и
@android:color/black можно изменить вручную.
styles.xml
В файле
com.vk.admin/res/values/styles.xml заданы цвета, но только некоторые. Этот файл используется самими разработчиками, когда они хотят сделать несколько цветовых схем приложения. Если же этих схем нет, работать приходится нам с вами.
Некоторые цвета текста и фона заданы именно здесь, поэтому их нужно изменить аналогично с
colors.xml.
Layout
В папке
com.vk.admin/res/ находятся описания экранов приложения.
- com.vk.admin/res/layout/ — универсальное хранилище экранов для всех смартфонов. Если нет каких-то специальных указаний, то будут использованы эти ресурсы;
-
com.vk.admin/res/layout—v``XX (где
XX — версия SDK смартфона, зависит от версии Android на устройстве) используются для работы с самыми передовыми элементами UI; - остальные
com.vk.admin/res/layout—... задают специфичные экраны приложения для ориентации устройства, разрешения и так далее.
Некоторые цвета приложения, чаще всего задний фон, можно найти здесь и изменить.
Но закончить мы пока не можем — есть некоторые экраны, цвет фона и текста которых задан не в файлах .xml, а прямо в исполняемом коде приложения. Туда нам и дорога.
Smali
Внутри приложений на Android используется собственный формат файлов —
.dex, или Dalvik EXecutable, и собственная виртуальная машина, чтобы эти файлы исполнять, — Dalvik.
Как и с любым компилируемым языком, для
.dex есть байт-код — smali — человекочитаемый и понятный с первого взгляда.
Машина Dalvik, в отличие от JVM, — регистровая, а не стековая. Регистры не имеют типов и могут хранить всё: числа, строки, экземпляры классов. При этом язык smali строго типизирован.
Вот небольшая последовательность инструкций, чтобы вывести содержимое регистра
v0 в лог.
-
const—string v1, «MyTag» — записать в регистр
v1 строку
«MyTag». -
invoke—static {v0}, Ljava/lang/String;—>valueOf(I)Ljava/lang/String; — вызвать функцию
String.valueOf(v0). Здесь
static означает, что функция встроена в виртуальную машину;
{v0} — список аргументов;
L показывает, что сразу за ним идет название объекта, класса и так далее;
java,
lang,
String; — тип строки;
I — тип числа, Integer; а все вместе (
—>valueOf(I)Ljava/lang/String;) говорит нам о том, что вызывается функция
valueOf от одного аргумента и возвращает она строку. -
move—result—object v2 — записать результат предыдущей операции в
v2. -
invoke—static {v1, v2}, Landroid/util/Log;—>d(Ljava/lang/String;Ljava/lang/String;)I — залогировать содержимое
v2 под тегом из
v1.
Если не удается понять, что значит тот или иной регистр или что делает та или иная функция, используйте декомпилятор smali в Java — Jadx.
Использовать Jadx просто — нужно лишь выбрать файл и открыть его, код будет автоматически декомпилирован и показан.
Рекомендую ознакомиться с документацией по байт-коду Dalvik VM.
setBackgroundColor
Для некоторых экранов приложения используется параметр
setBackgroundColor(I)V, который устанавливает цвет фона. Часто это не статичные экраны, а динамические: с поддержкой скролла, различные списки и карточки.
invoke—virtual {v1, v0}, Landroid/webkit/WebView;—>setBackgroundColor(I)V |
Эта строка занимается изменением. Чтобы изменить цвет, нужно его записать в регистр, а затем передать в функцию вместо настоящего.
const v12, —0x1000000 #### Эквивалент 0xFF000000 — черного invoke—virtual {v1, v12}, Landroid/webkit/WebView;—>setBackgroundColor(I)V |
Теперь пройдитесь по всем файлам и замените цвет.
Бывают случаи на порядок проще.
const v2, —0x1 #### Здесь -0x1 == 0xFFFFFFFF — белый цвет invoke—virtual {v1, v2}, Landroid/support/v7/widget/CardView;—>setBackgroundColor(I)V |
Нужно просто изменить
—0x1 на
—0x1000000, и приложение погрузится во тьму.
Стоит быть внимательным и пытаться разобраться в коде: иногда оптимизатор кода будет перемещать инструкции
const вверх, и вы можете их не заметить.
setTextColor
Иногда текст, который меняется в ходе работы с приложением, может менять свой цвет. За это отвечает параметр
setTextColor(I)V, второй аргумент которого можно подменить на нужный, в нашем случае — белый.
#### Меняем цвет const p1, —0x1 #### на белый invoke—virtual {v0, p1}, Landroid/widget/TextView;—>setTextColor(I)V |
На этом борьбу со светлым фоном и ярким экраном можно закончить. Большинство элементов экрана поменяли свой цвет на противоположный. Так вы можете изменить любое приложение, особенно если вы любите использовать телефон поздно ночью.
Меняем функциональность приложения
Чтобы ощутить всю мощь smali, давайте попробуем изменить какую-то часть приложения. Например, обойдем проверку на внутренние покупки.
Возьмем другое приложение — ISS Detector. Оно показывает положение МКС над Землей. В нем можно купить расширения: показ комет, планет, Луны, телескопа «Хаббл».
При копировании приложения на компьютер может возникнуть проблема: в составе приложения не один и не два, а целых три файла
apk!
$ adb shell pm path com.runar.issdetector package:/data/app/com.runar.issdetector—dtgy8_hlf1y—cekrg1_W—A==/base.apk package:/data/app/com.runar.issdetector—dtgy8_hlf1y—cekrg1_W—A==/split_config.en.apk package:/data/app/com.runar.issdetector—dtgy8_hlf1y—cekrg1_W—A==/split_config.xxhdpi.apk |
Копируем все. При переустановке приложения файлы
split_config.en.apk и
split_config.xxhdpi.apk потеряются, а без них приложение будет вылетать. Поэтому их нужно будет переподписать: зайти в них как в архивы ZIP, удалить папку
META_INF и прогнать через стандартную процедуру утилиты jarsigner. Основной же файл мы будем препарировать с помощью apktool.
РЕКОМНДУЕМ:
Инструменты Android-разработчика
Покупками в приложении занимается интерфейс
IInAppBillingService. Для него прописана обертка
com.runar.issdetector.util: IabHelper, IabResult, Purchase, Security, Inventory.
В этом приложении можно не идти напролом, обманывая сервис покупок. Проще заставить приложение думать, что все уже куплено. В этом нам поможет
Inventory.smali.
В особо сложных случаях такой трюк провернуть не удается, и тогда приходится подменять данные, заставляя сервис ложно сообщать о совершенных покупках. Подробнее об этом можно почитать в материале компании Securing Apps (PDF).
Открыв файл, вы увидите поле
mPurchaseMap<String; Purchase>, которое содержит в себе все покупки: номер товара, сопоставленный с покупкой, которую совершил пользователь.
.field mPurchaseMap:Ljava/util/Map; .annotation system Ldalvik/annotation/Signature; value = { «Ljava/util/Map<«, «Ljava/lang/String;», «Lcom/runar/issdetector/util/Purchase;», «>;» } .end annotation .end field |
Далее в коде мы видим строку
hasPurchase(String sku) —> boolean, которая проверяет, совершал ли пользователь покупку. Для этого делается проверка на существование ключа
sku в
mPurchaseMap.
.method public hasPurchase(Ljava/lang/String;)Z .locals 1 .line 45 iget—object v0, p0, Lcom/runar/issdetector/util/Inventory;—>mPurchaseMap:Ljava/util/Map; invoke—interface {v0, p1}, Ljava/util/Map;—>containsKey(Ljava/lang/Object;)Z move—result p1 return p1 .end method |
А что будет, если в любом случае отдавать
true?
.method public hasPurchase(Ljava/lang/String;)Z .locals 1 const p1, 0x1 return p1 .end method |
Собираем приложение и устанавливаем его.
$ adb install—multiplie com.runar.issdetector.apk split_config.xxhdpi.apk split_config.en.apk Success |
С этого можно начать свой путь в реверс-инжиниринг. Я рассказал вам основы реверса Андроид приложений, с которых начинал сам. Небольшие изменения могут улучшить вашу жизнь — надеюсь, я смог вам это показать.
(10 оценок, среднее: 5,00 из 5)
Загрузка…
Гайд. Как редактировать исходный код игры.
Сегодня мы наконец-то расскажем вам, как-же редактировать исходный код игры на ПК.
Необходимый софт
Немного теории
И так, что же мы будем делать?
Мы сначала дизассемблируем AoC2, проверим результат, внесем некоторые изменения и заново соберем АоС2.
Что же такое дизассемблирование?
Для начала, разберемся с Java Virtual Machine (JVM).
Что такое JVM? JVM — это программное обеспечение, которое эмулирует компьютер. JVM используется для запуска приложений, написанных на java. Однако JVM читает не просто java код, а скомпилированный байт-код Java, предварительно созданный из исходного кода Java-программой-компилятором Java (javac).
Использование байт-кода и JVM позволяет запустить скомпилированную программу на любом другом устройстве, на котором установлена JVM.
Вот мы и подошли к дизассемблированию. Дизассемблирование — это трансляция машинного кода в изменяемый байт-код.
(Если кто-то еще не понял, то АоС2 написана на Java)
Итак, мы разобрались как работает JVM, и можем приступать к работе.
Дизассемблирование
Заходим в скачанную нами программу (muxv.exe) и выбираем раздел «Дизассемблирование».
Указываем путь к файлу «disassemble.pу», который лежит в папке, в которую установлена Krakatau, потом указываем все остальные папки и файлы.
Если вы все сделали правильно, то у вас должно появиться такое окно командной строки:
После окончания дизассемблирования, откройте папку, которую вы указали, как «Директория, куда отправятся дизассемблированные файлы» и найдите там файл Menu_About.j (без цифр). Откройте его любым текстовым редактором.
Перед вами должна появиться примерно такая картина:
Это — байт-код java, с ним мы и будем дальше работать.
Для начала определимся, что мы будем изменять. Допустим, вы решили заменить автора музыки в разделе «Подробнее».
Это читерство! Учимся взламывать игры и писать читы на простом примере
Существуют разные виды читов. Можно разделить их на несколько групп.
External — внешние читы, которые работают в отдельном процессе. Если же мы скроем наш external-чит, загрузив его в память другого процесса, он превратится в hidden external.
Internal — внутренние читы, которые встраиваются в процесс самой игры при помощи инжектора. После загрузки в память игры в отдельном потоке вызывается точка входа чита.
Pixelscan — вид читов, который использует картинку с экрана и паттерны расположения пикселей, чтобы получить необходимую информацию от игры.
Network proxy — читы, которые используют сетевые прокси, те, в свою очередь, перехватывают трафик клиента и сервера, получая или изменяя необходимую информацию.
Есть три основные тактики модификации поведения игры.
- Изменение памяти игры. API операционной системы используется для поиска и изменения участков памяти, содержащих нужную нам информацию (например, жизни, патроны).
- Симуляция действий игрока: приложение повторяет действия игрока, нажимая мышкой в заранее указанных местах.
- Перехват трафика игры. Между игрой и сервером встает чит. Он перехватывает данные, собирая или изменяя информацию, чтобы обмануть клиент или сервер.
Большинство современных игр написаны для Windows, поэтому и примеры мы будем делать для нее же.
Пишем игру на C
Про читы лучше всего рассказывать на практике. Мы напишем свою небольшую игру, на которой сможем потренироваться. Я буду писать игру на C#, но постараюсь максимально приблизить структуру данных к игре на C++. По моему опыту читерить в играх на C# очень просто.
Принцип игры прост: нажимаешь Enter и проигрываешь. Не особо честные правила, да? Попробуем их изменить.
Приступим к реверс-инжинирингу
Исполняемый файл игры
У нас есть файл игры. Но вместо исходного кода мы будем изучать память и поведение приложения.
Начнем с поведения игры
При каждом нажатии Enter жизни игрока уменьшаются на 15. Начальное количество жизней — 100.
Изучать память мы будем при помощи Cheat Engine. Это приложение для поиска переменных внутри памяти приложения, а еще хороший дебаггер. Перезапустим игру и подключим к ней Cheat Engine.
Подключение CE к игре
Первым делом мы получаем список всех значений 85 в памяти.
Все значения, которые нашел CE
Нажмем Enter, и показатель жизней будет равен 70 . Отсеем все значения.
Значение найдено
Вот и нужное значение! Изменим его и нажмем Enter для проверки результата.
Значение изменено
Скрин игры, после того как мы нажали Enter
Проблема в том, что после перезапуска игры значение будет уже по другому адресу. Каждый раз отсеивать его нет никакого смысла. Необходимо прибегнуть к сканированию AOB (Array Of Bytes — массив байтов).
При каждом новом открытии приложения из-за рандомизации адресного пространства (ASLR) структура, описывающая игрока, будет находиться на новом месте. Чтобы найти ее, необходимо сначала обнаружить сигнатуру. Сигнатура — это набор не меняющихся в структуре байтов, по которым можно искать в памяти приложения.
После нескольких нажатий на Enter количество жизней изменилось на 55 . Снова найдем нужное значение в памяти и откроем регион, в котором оно находится.
Регион памяти
Выделенный байт и есть начало нашего int32 -числа. 37 00 00 00 — число 55 в десятичной форме.
Я скопирую небольшой регион памяти и вставлю в блокнот для дальнейшего изучения. Теперь перезапустим приложение и снова найдем значение в памяти. Снова скопируем такой же регион памяти и вставим в блокнот. Начнем сравнение. Цель — найти байты рядом с этой сигнатурой, которые не будут меняться.
Начинаем сравнивать байты
Проверим байты перед структурой.
Бинго!
Как видишь, выделенные байты не изменились, значит, можно попробовать использовать их как сигнатуру. Чем меньше сигнатура, тем быстрее пройдет сканирование. Сигнатура 01 00 00 00 явно будет слишком часто встречаться в памяти. Лучше взять 03 00 00 01 00 00 00 . Для начала найдем ее в памяти.
Сигнатура не уникальна
Сигнатура найдена, но она повторяется. Необходима более уникальная последовательность. Попробуем ED 03 00 00 01 00 00 00 .
В подтверждение уникальности получим такой результат:
Сигнатура уникальна
Нам необходимо найти отступ от сигнатуры, чтобы получить ее стартовый адрес, а не адрес жизней. Пока сохраним найденную сигнатуру и отложим на некоторое время. Не беспокойся, мы к ней еще вернемся.
Жизненный цикл external
Используя функцию OpenProcess , внешние читы получают дескриптор для нужного процесса и вносят необходимые изменения в код (патчинг) или считывают и изменяют переменные внутри памяти игры. Для модификации памяти используются функции ReadProcessMemory и WriteProcessMemory .
Так как динамическое размещение данных в памяти мешает записать нужные адреса и постоянно к ним обращаться, можно использовать технику поиска AOB. Жизненный цикл external-чита выглядит так:
- Найти ID процесса.
- Получить дескриптор к этому процессу с нужными правами.
- Найти адреса в памяти.
- Пропатчить что-то, если нужно.
- Отрисовать GUI, если он имеется.
- Считывать или изменять память по мере надобности.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Как изменить код?
Такой вопрос, у меня есть своя браузерная игра, и я бы хотел узнать : в разных играх можно с помощью разных IDE редакторов ((или как-то так, можно локально изменить работу игры, например указываешь путь и скажем, можно изменить скорость передвижения персонажа )) и вот я хотел спросить, как можно провернуть такую же фигню в браузерной игре? ((скрин это пример))
Restorator
— это редактор ресурсов для многих типов файлов, например, файлов exe, dll, ocx (Active X), scr (заставки) и других, что позволяет самоcтоятельно делать и редактировать стандартные файлы ресурсов.res. Проще говоря, эта программа позволит, к примеру, самостоятельно изменять интерфейс (в том числе и язык меню) любой программы. Кроме этого, с ее помощью можно рассматривать, извлекать и изменять текст, изображения, значки, меню, диалоги, звуки, мультипликацию и т.п. Хотите — измените язык интерфейса, есть желание заменить скин — и это очень просто сделать…
Особенности:
Главный файл упакован UPX
Новое оформление и хорошая русификация, в том числе справка
Подправлена заставка
Авто-регистрация
Новые значки программы
Контекстное меню по умолчанию
Удалены лишние файлы, ненужные программе.
Информация о программе:
Название: Restorator
Версия: 3.70.1747
ОС: Windows® 2000/XP/Vista/7
Год выхода: 2011
Язык интерфейса: русский
Лекарство: не требуется (portable)
Размер: 5 Мб
Формат файла: Rar
Информация для воссстановления: 2%
архив не запаролен
| 0 |
html-cсылка (Ссылка на Ваш сайт, дневник или блог):
Прямая ссылка (Ссылка для ICQ, QIP, Skype, MSN и других):
Предупреждение:
Все ссылки представлены исключительно для ознакомления и расположены не на нашем сервере. Обычно это файлообменные системы такие как: letitbit.net, depositfiles.com, turbobit.net, ifolder.ru, rapidshare.com, narod.ru и т.п. с которых Restorator 2007 v3.70.1747 Portable — редактор файлов exe, dll, ocx можно скачать бесплатно и к которым сайт сайт не имеет никакого отношения. Раздел portable
(портативных программ для usb ключа) является лишь блоком, на котором пользователи выкладывают портативный софт
и ссылки к ним, которые доступны публично. После просмотра вы обязаны удалить и приобрести легальную копию. Если вы с этим не согласны, просьба покинуть сайт.
Онлайн сервисы для проверки на вирусы:
DrWeb: http://www.drweb.ru/scan
Касперский: http://www.kaspersky.ru/scanforvirus
ESET Online Scanner: http://www.eset.com/onlinescan/index.php
VirusTotal (комплексная проверка): http://www.virustotal.com
VirSCAN.org (комплексная проверка): http://virscan.org
Anubis (онлайновый поведенческий анализатор): http://anubis.iseclab.org
Найдя вирус, напишите в каком файле найден вирус, его название и каким антивирусом проверяли.
Если у вас возникли вопросы касаемые этой новости, обращайтесь к автору публикации
Динамическая библиотека служит базой для создания небольших программ в среде Windows. Это внешние источники данных, которые нужны для полноценной работы ПО. Второй вариант расширения — динамические веб-страницы, которые создаются сервером, при обращении пользователей к ним.
Рассмотрим, как работать с обоими типами в различных ОС.
Чем открыть файл dll для редактирования
Вне зависимости от того, является понятие частью прикладной программы или входит в состав систем МС, распространённый вопрос — чем открыть файл dll для редактирования.
Стоит знать, что он реализует ряд программных функций. От соединения с внешними устройствами и работы с жестким диском до применения в кросс платформенных приложениях. Поэтому какие-либо изменения в его структуре могут привести к ошибкам операционной системы.
Но, если вы хотите познакомиться с исходным кодом, вам потребуется специальный редактор для системных ресурсов Resource Hacker (ResHacker). Он позволяет извлекать и изменять код на ваше усмотрение.
Пошаговая инструкция
Итак, как открыть dll файл для изменения?
Запустите ResHacker.
Для чтения в исходном формате выберите в верхней панели File>Open.
Слева будут показаны директивы с содержащимися в них открываемыми объектами.
В центре утилиты содержатся коды, подлежащие изменениям и сохранению.
Для компиляции воспользуйтесь кнопкой Compile Script.
Для сохранения используйте команду File>Save.
Открыть dll файл онлайн
Если вы имеете дело с веб-страницей, то вам понадобится открыть этот dll файл онлайн. Он содержит в себе скрипты сервера, отвечающие за генерирование HTML. К примеру, VB или Perl.
Страницы помещаются на серверах Microsoft IIS. Для их обработки требуется корректная настройка. Они читаются в любом из используемых вами браузеров — , или .
Как открыть dll файл windows 10
Если это элементы библиотеки, которые расположены в системной папке, то они предназначены для запуска приложений, созданных при помощи Visual C++.
Поэтому, чтобы их открыть на том же windows10 понадобится соответствующее ПО от МС — Visual Studio или VisualFoxPro.
Также «длл» должен открываться программой, использующей его библиотеку.
Как открыть файл dll на windows 8
Windows 8 уже является специализированным программным обеспечением для этого формата, поэтому задача с его открытием имеет очень простое решение. Если трудности и возникают — необходимо изменить ассоциацию файлов, установив и назначив одну из указанных ниже программ приложением по умолчанию.
Microsoft Windows 8;
Resource Hacker;
Microsoft Windows NT 4.0;
DLL-Files Fixer.
Как открыть файл dll в windows 7
Вы можете встретить распространённый тип документа mfc42u.dll, который относится к Microsoft Foundation Class (MFC). Он отвечает за запуск рабочих дополнений на вашем ПК.
Открыть этот файл dll и подобные ему в windows 7 можно теми же утилитами, что используются для 8 версии, или воспользоваться небольшим редактором исполняемых элементов — Resource Tuner.
Он позволяет изменять различные детали пользовательского интерфейса — строки меню и диалоговых окон, внешний вид курсора, иконок и так далее. В нём ресурсы библиотеки отделены от кода, который остаётся неизменным. Для его редактирования есть используемые в программировании профессиональные редакторы PE Explorer и FlexHex, (в зависимости от вносимых правок).
Resource Tuner предусматривает несколько способов открытия объекта.
Для просмотра и изменения кликните Open File на панели инструментов.
Для выполнения действия в меню — введите команду File>Open.
Или используйте комбинацию клавиш CTRL+O.
Всплывающее окно возле кнопки тулбара предоставит вам список последних открывавшихся элементов. Его можно получить командой File>Recent Files из меню программы, которая пользуется динамически подключаемой библиотекой. Настройка количества данных в списке осуществляется в окне диалога Customize.
Открыть dll файл на MacOS
На MacOs тоже встречаются данные этого формата. Их можно просмотреть в окне любого веб-браузера, если они представлены в виде интернет страницы.
На системные файлы dll в большинстве случаев ссылаются кросс платформенные приложения и по факту, открывать и редактировать их в среде Macintosh нет никакой необходимости.
Открытие dll файл на linux
Чтобы получить доступ к ним на Linux, понадобится эмулятор Windows — Wine. Он подражает поведению различных версий этой операционной системы.
Утилита поддерживает её исполняемые данные, поэтому проблем с открытием имеющихся файлов ни в одном из дистрибутивов быть не должно. Она эмулирует библиотеки Windows, создавая их альтернативные варианты, которые не требуют лицензии Microsoft, обеспечивая тем самым независимость вашего ПО.
Настроить работу Wine можно при помощи вкладки Default Settings — установок по умолчанию. Так он будет автоматически запускать приложения в выбранной вами ОС.
Программа для открытия dll файлов
Для отображения в родной среде можно использовать обычный блокнот. Но в таком случае возникнет трудность с не читаемыми символами. Чтобы её не было, необходима специальная программа для открытия dll файлов. К примеру, бесплатный декомпилятор dotPeek.
Бывают ситуации, когда под рукой нет исходника, а Вам срочно требуется внести изменения в коде, написанной ранее Вами программы. Например, дано приложение «TextEdit.exe» — текстовый редактор, написанный на языке c#
, который имеет простой пользовательский интерфейс, состоящий из двух кнопок и текстового поля.
При нажатии на кнопку “Чтение” из файла 1.txt считываются и выводятся все строки в окно элемента управления textBox, а при нажатии на кнопку “Запись” данные из текстового поля сохраняются в файле 2.txt
Для хранения путей в программе используются две текстовых переменных: filePathIn и filePathOut
Прошёл год, как программа была написана и отдана заказчику, но вдруг ему потребовалось изменить имя папки , в которой должны храниться оба файла, c 123 на Text. Задача простая, но прошло уже много времени, и исходник был потерян, что делать в такой ситуации?
Для начала вспомним, как образуется
Полученный в результате компиляции файл (сборка) содержит внутри себя метаданные, манифест, код на языке IL (MSIL).
Метаданные — описывают типы данных и их члены
Манифест описывают саму сборку
MSIL код, полученный в результате компиляции файла исходного кода
То есть перед вами тот же исходник
, только в другом формате. И для того, чтобы поработать с ним, Вам понадобиться специальный инструмент, который позволяет просматривать и редактировать данные внутри сборки.
Дизассемблер ILDASM
Данный инструмент входит состав пакета .Net Framework SDK
, который является бесплатным и устанавливается вместе с Visual Studio (включая Express версию). С помощью него вы можете, как просматривать внутреннее содержимое сборки, так и изменять его.
Для удобства работы создадим отдельную папку, например: ”c:newasm” и поместим в неё файл TextEdit.exe
Затем в меню “Пуск” открываем папку: «Visual Studio Tools»
Запускаем командную строку разработчика
Откроется консоль, вводим первую команду: ildasm. Для выполнения команды нажмите клавишу Enter.
Появиться главное окно программы.
Переместим файл сборку TextEdit.exe в окно дизассемблера ILASM
, в результате отобразиться её внутреннее содержимое.
Убедимся, что в ней содержатся нужные нам данные (пути к файлам).
Два поля на месте, теперь взглянем на метаданные.
Для доступа к метаданным Вы так же можно использовать сочетание горячих клавиш: Ctrl+M. Затем с помощью кнопки Find, найдём имя одного из файлов.
Как видно присутствуют оба. Пути найдены, и теперь их нужно изменить, но все данные, в текущий момент, доступны только для просмотра, и изменить их в самой дизассемблере нельзя, поэтому воспользуемся второй возможностью данной программы и выгрузим содержимое сборки в файл.
Выгрузка данных
Выберите пункт меню File -> Dump
Появиться меню. В данном примере, все пункты меню оставим без изменений и просто нажмём кнопку OK.
Появиться диалоговое окно
Выберем ранее созданную папку “newasm”, затем укажем имя и тип файла и нажмём на кнопку “Сохранить”
В результате в папке “newasm” должно появиться несколько новых файлов
Закрываем окно ildasm, а так же удаляем файл Textedit.exe, больше он нам не понадобиться. Теперь нас интересует полученный файл texted.il и для начала откроем его любым текстовым редактором, например блокнотом.
Снова воспользуемся поиском (Ctrl+F)
Так же видим найденные строки, которые содержат пути к файлам.
Изменим текущее имя папки 123 на новое название Text, для обоих файлов
Сохраняем внесённые изменения и закрываем блокнот.
Ассемблер ILASM
Изменения внесены и теперь нужно преобразовать файл txted.il обратно в исполняемый файл (.exe) Для этого нам понабиться второй инструмент ILASM
, ассемблер, который так же входит в состав пакета SDK и не требует отдельной установки.
файл (.il) -> компилятор ilasm = сборка (.exe и.dll)
Возвращаемся в консоль
Вводим вторую команду.
Строки в ресурсах хранятся в виде StringTable и MessageTable и используются главным образом для отображения текста в окнах сообщений, в списках, подсказках или в строках состояния. Кроме текста, в строковых таблицах так же могут находится управляющие символы и плейсхолдеры (например, %d или %s).
Строковые таблицы состоят из групп, в каждой из которой находятся одна или несколько нуль-терминированных строк с уникальным идентификатором (ID строки). Максимальная длина строки — 4097 символов.
ID строки изменить нельзя. Это значение жёстко закодировано в исходном коде файла. Его изменение повлечёт за собой ошибки в работе редактируемого файла.
Редактирование строк в.EXE файле при помощи Resource Tuner
1
. Раскройте папку String
в Дереве ресурсов и выберите строковую таблицу из списка. В правой панели вы увидите список строк в виде скрипта STRINGTABLE.
Подсказка: Воспользуйтесь кнопкой поиска в дереве ресурсов (Ctrl+F
), если ищете какую-то определённую строчку.
2
. Выберите строку из таблицы и внесите необходимые изменения. Окно редактирования поддерживает вставку текста из файла (Ctrl+O
) или из буфера обмена (Ctrl+V
).
Особое внимание обращайте на наличие в строках управляющих символов и заполнителей (placeholders), например, %d
или %s
. Случайно изменённый или удалённый управляющий символ может послужить причиной ошибки при выполнении программы вплоть до аварийного завершения.
3
. Выберите в меню «Файл» -> «Сохранить файл»
для сохранения произведённых изменений в файл.
Изменения в файле вступят в силу только после того, как вы сохраните файл на диск.
Замена строк из командной строки при помощи Resource Tuner Console
Если вам требуется регулярно заменять строки или добавлять новые строки в десятках файлов, эту операцию целесообразно производить с помощью программы для пакетной замены строк —
Исполняемый файл
формата exe представляет собой скомпилированный программный код. Обычными редакторами просмотреть и изменить его содержимое не получится. Для редактирования exe-файл
ов воспользуйтесь редактором двоичных файл
ов, например — программой Hex Edit.
Вам понадобится
- — программа Hex Edit.
Инструкция
Найдите в интернете и загрузите на компьютер программу Hex Edit. Найти можно на сайте soft.ru. Вы можете воспользоваться другим редактором, найдя его через поисковые системы в интернете. Логика работы с подобными редакторами практически не отличается.
Основное окно программы такое же, как и у любых редакторов: главное меню, панель с кнопками управления, область редактирования и прочее. Откройте exe-файл
через пункт «Открыть» главного меню. Не стоит вносить изменения в оригинал — скопируйте exe-файл
и работайте над копией. Как правило, содержимое оригинального файл
а не должно меняться, так как при неправильном редактировании все содержимое будет работать некорректно, или вообще перестанет работать на персональном компьютере.
Отображение exe-файл
а происходит в интерпретации двоичного содержимого. Это будет выглядеть как строки с цифрами и латинскими буквами, обозначающими участки файл
а. Измените режим отображения документа, чтобы увидеть куски программного кода или важные части файл
а. Вы можете редактировать различные части документа. Не стоит забывать о том, что для работы с подобными файл
ами, у вас должны быть некоторые навыки работы.
Сохраните изменения с помощью соответствующего пункта меню. Проверьте файл
на работоспособность, так как при редактировании exe-файл
а редактором его работоспособность может не сохраниться. Сравните файл
ы между собой. Ознакомьтесь с литературой по редактированию двоичного кода. Есть определенные правила размещения информации в двоичном виде, а также определенная структура построения exe-файл
а. Данную информацию можно найти в интернете, а также на тематических ресурсах, воспользуйтесь поисковиком.
Внимание, только СЕГОДНЯ!
Все интересное
XML является текстовым документом, который выполнен в соответствии с требованиями одноименного языка разметки. Такие файлы применяются в структуре некоторых веб-сайтов, при составлении элементов интерфейса компьютерных программ или при создании…
PDF – популярный формат электронных документов. Он служит в качестве инструмента хранения полиграфической продукции и изображений для дальнейшего редактирования или просмотра. При помощи специальных программ можно сконвертировать несколько файлов…
DLL – файл библиотеки Windows, который содержит в своем составе набор функций, необходимых для запуска приложений в системе. Для просмотра содержимого этого документа и изменения его параметров вы можете воспользоваться специальными программами для…
Бинарный файл — это любой файл на вашем компьютере. Вся информация на компьютере и связанных с ним носителях записана в битах (отсюда и название). Однако, для сравнения, текстовый файл можно прочитать в соответствующих расширению ридерах (простейшие…
Уменьшение размеров файлов особенно актуально, если файл необходимо переслать по электронной почте или опубликовать в интернете. Ужать можно практически любой файл, однако от типа файла также зависят особенности изменения его размеров. Инструкция…
Кому хоть раз в жизни не хотелось поставить какое-нибудь оригинальное приветствие при загрузке операционной системы или дополнить домашнее видео репликами героев популярного мультфильма? Для этого нужно всего лишь воспользоваться звуковым редактором…
Бинарный файл представляет собой закодированный текстовый документ с расширением *.BIN. Этот тип файлов используется в прикладных программах и содержит информацию о программном обеспечении. Вы можете сохранять любые типы данных: строки, целые или…
В сервисных файлах с расширением res обычно содержится внутренняя информация программ и игр — элементы интерфейса, различные ресурсы, такие как звуки и анимация. Файлы res сформированы средой разработки определенного языка программирования и…
В видеофайлах могут произойти сбои, в результате которых возникает увеличивающаяся разбежка аудиодорожки и изображения. Такой дефект называют прогрессирующей рассинхронизацией звука. Инструкция 1Исправить такой видеофайл можно с помощью программы…
Случается так, что скачанный из интернета флеш шаблон не удовлетворяет всем вашим требованиям. Вы можете его подкорректировать с помощью специальных приложений, таких как Dreamweaver. Как это сделать, читайте далее. Инструкция 1Скачайте из…
HTML (Hypertext Markup Language) – язык гипертекстовой разметки. Именно он предоставляет возможность видеть страницы различных сайтов так, как мы их видим. Все картинки, текст, цвета, ссылки, различные кнопочки описываются языком html. Файлы с…
Основное предназначение любого компьютера — хранение и обработка информации. Но если информации слишком много, то возникает проблема поиска необходимой именно сейчас папки или файла. Так где и как искать? Инструкция 1Нажмите кнопку…