Код программы из exe

Для Java и .NET, если разработчиками не было предпринято специальных мер, восстановить можно практически полностью.

#2
12:45, 6 апр 2010

ТЕМАФЕЙ
> Возможно ли из Какой нибудь программы вытащить весь исходной код(знаешь на
> каком языке написана прога)?

Сильно зависит от того, на чём написано и чем получен exe. Для C#/VB.NET в некоторых случаях возможно из exe (не exe там вообще-то, а сборка) получить все исходники, чуть ли не с комментариями. А если речь про C/C++/Delphi, которые компилируют в машинный код, — автоматически преобразовать обратно к исходным кодам практически невозможно. Нет даже гарантии, что дизассемблируемый код (в asm) можно будет потом собрать обратно в работоспособный выполняемый модуль.

#3
13:32, 6 апр 2010

Для с++ даже были попытки писать декомпиляторы, которые на базе дизассемблируемого кода пытались строить с++-код. Пока результаты не очень.

#4
14:11, 6 апр 2010

oistalker
> Delphi

Реверсинг python программы, почему python не безопасен


И для дельфи можно если не вырезано все под чистую, восстановить формы все и обработчики, прога DeDe называется.

#5
14:15, 6 апр 2010

KpeHDeJIb
> И для дельфи можно если не вырезано все под чистую, восстановить формы все и
> обработчики, прога DeDe называется.

Формы там в ресурсах хранятся *.dfm файлы, — из восстановить проблем нет. Насчет кода обработчиков — не уверен.

#6
14:22, 6 апр 2010

Есть плагин для IDA. Декомпилирует в C вполне сносно. При переводе в C++ возникает ряд сложностей с реверсом наследования: факаные vtable, скалярные и векторные деструкторы и т.п.

#7
14:53, 6 апр 2010

oistalker
> Насчет кода обработчиков — не уверен.
Ну он просто раскидывает обработчики по формам, сам код обработчиков в ассемблере, что впрочем не критично
когда все уже разбросано, найти нужный кусок не составляет труда.

#8
21:24, 6 апр 2010

#include stdio.h> char *text[] = < «#include «, «char *text[] = , » NULL>;», «/* Программа, печатающая свой собственный текст */», «main()< int i;», » puts(text[0]); puts(text[1]);», » for(i=0; text[i]; i++) putq(text[i]);», » for(i=2; text[i]; i++) puts(text[i]);», «>», «putq(s) char *s; , » printf(«\t\»»);», » while(*s), » if(*s == ‘»‘) printf(«\\\»»);», » else if(*s == ‘\\’) printf(«\\\\»);», » else putchar(*s);», » s++;», » >», » printf(«\»,\n»);», «>», NULL>; /* Программа, печатающая свой собственный текст */ main( )< int i; puts( text[0]); puts( text[1]); for( i=0; text[i]; i++) putq( text[i]); for( i=2; text[i]; i++) puts( text[i]); > putq( s) char *s; < printf( «t»»); while( *s)< if( *s == ‘»‘) printf( «\»»); else if( *s == ‘\’) printf(«\\»); else putchar(*s); s++; > printf(«»,n»); >
#9

Читайте также:
Какие программы коды можно назвать вредоносными

КАК ДЕКОМПИЛИРОВАТЬ EXE DLL C# | КАК УЗНАТЬ ИСХОДНЫЙ КОД ПРОГРАММЫ | ДЕКОМПИЛЯЦИЯ | C# ПЛЮШКИ


23:09, 6 апр 2010

Я видел статью в журнале то-ли Чип, то-ли Хакер, там декомпилятор C++ ковыряли. Фишка в том, что тот исходник, который в итоге получился, не компилировался, а чисто визуально было приятнее смотреть на ассемблерные команды.

#10
10:39, 7 апр 2010

В любом случае, с учетом всех оптимизаций компилятора, в итоге получится совершенно другой код.

Источник: gamedev.ru

Справка

SASM (SimpleASM) — простая среда разработки для языков ассемблера NASM, MASM, GAS, FASM с подсветкой синтаксиса и отладчиком.

В SASM Вы можете легко разрабатывать и выполнять программы, написанные на языках ассемблера NASM, MASM, GAS, FASM. Вводите код в форму и запускайте приложение. В Windows также возможен запуск приложения в отдельном окне. Входные данные указывайте в поле «Ввод». В поле «Вывод» Вы сможете увидеть результат работы программы. При этом все сообщения и ошибки компиляции будут выводиться в форму снизу.

Вы можете сохранять исходный или скомпилированный (exe) код программы в файл, а также загружать свои программы из файла. Если Вы хотите прервать выполнение программы (например, при зацикливании), нажмите кнопку «Остановить».

Программа поддерживает работу с несколькими проектами – новые файлы открываются и создаются в новых вкладках. При выходе из программы текущий набор открытых файлов сохраняется. При следующем запуске Вы сможете восстановить предыдущую сессию, нажав на кнопку «Продолжить предыдущую сессию» на стартовом окне.

В параметрах можно выбрать автоматическое продолжение предыдущей сессии. Также в параметрах настраивается шрифт, положение поля «Код» и текст, отображающийся при создании нового файла. Интерфейс программы доступен на двух языках (русский и английский).

Стандартное меню «Правка» дополнено возможностью комментирования/раскомментирования выделенного куска кода и создания/удаления отступа в 4 пробела (Tab/Shift+Tab).

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

Начиная с версии 2.2 добавлена возможность переназначать горячие клавиши. Файл с ними находится по пути «Linux/share/sasm/keys.ini» («/usr/share/sasm/keys.ini» при установке) в Linux и по пути «Windows/keys.ini» («/keys.ini») в Windows.

С версии 2.3 SASM поддерживает работу в двух режимах — x64 и x86, переключаться между которыми можно в настройках на вкладке «Построение». Библиотека макросов «io.inc» работает одинаково для каждого из режимов. Там же можно изменить опции ассемблера и компоновщика.

В версиях программы, начиная с 3.0, Вы можете выбрать один из четырех ассемблеров NASM, MASM, GAS, FASM в настройках на вкладке «Построение». Там же выбирается ассемблер и компоновщик (путь до них Вы можете указать в соответствующих полях). Таким образом SASM можно настроить на работу с любым ассемблером, задав пути к ассемблеру и, если нужно, компоновщику и указав необходимые опции ассемблирования и компоновки. Однако отладка и подсветка синтаксиса при таком подходе могут работать не совсем правильно. Чтобы полностью реализовать поддержку нового ассемблера, нужно написать реализацию абстрактного класса Assembler по аналогии с уже реализованными ассемблерами.

Все ассемблеры (кроме MASM) включены в SASM (на Linux они должны быть установлены) и ими можно пользоваться сразу после их выбора. Ассемблер MASM невозможно включить в сборку из-за его лицензии. Чтобы им воспользоваться, Вы должны установить MASM на Ваш компьютер с сайта http://www.masm32.com/ и указать пути до ассемблера (ml.exe, путь обычно «C:/masm32/bin/ml.exe») и до компоновщика (link.exe, путь обычно «C:/masm32/bin/link.exe») в соответствующих полях на вкладке «Построение».

В SASM добавлена папка для include файлов — «Linux/share/sasm/include/» («/usr/share/sasm/include/» при установке) в Linux и «Windows/include» («/include/») в Windows. Однако для MASM эта возможность не работает — там следует указывать до include файлов абсолютные пути.

Работоспособные примеры кода для разных ассемблеров, включая примеры работы с фунциями ввода-вывода и макросами «io.inc», содержатся в папке Projects по пути, где установлен SASM (обычно C:Program Files (x86)SASM на Windows, /usr/share/sasm на Linux).

Библиотека макросов «io.inc» для NASM

В SASM включена библиотека кроссплатформенных макросов ввода-вывода «io.inc». Для её использования в начале программы нужно добавить директиву %include «io.inc» (%include «io64.inc» для 64-битного ассемблера). Подробнее о ее командах Вы можете узнать здесь: http://asmcourse.cs.msu.ru/?page_id=169 , на сайте проекта или в справке в программе.

Читайте также:
Программа очистки оперативной памяти руководство программиста лист утверждения

Функции ввода-вывода для NASM (x86)

Наряду с макросами, другим простым вариантом ввода-вывода в NASM являются соответствующие макросам вспомогательные функции ввода-вывода, доступные в SASM (работают только для x86 NASM проектов). Для их использования необходимо объявить нужные функции с помощью директивы extern , а затем размещать аргументы в соответствующих регистрах и вызывать функции с помощью инструкции call. Подробнее о функциях ввода-вывода Вы можете узнать здесь: http://asmcourse.cs.msu.ru/?page_id=2611 , на сайте проекта или в справке в программе.

Немного об отладчике:

В качестве отладчика в SASM используется gdb. В дистрибутиве под Windows он включен в сборку. В Linux Вы должны установить этот пакет.

Код программы из exe

До этого момента мы с Вами получали код в машинных кодах из текста на ассемблере. Но есть целый класс программ, которые умеют делать наоборот. То есть брать программу в машинных кодах и получать из нее ASM код. Точно так же как это делает Turbo Debugger только записывая результат в файл. Одна из таких программ некогда очень популярных называется Sourcer.

Вы можете взять ее из сопроводительного проекта. Давайте попробуем перевести программу, которую мы создали в прошлом шаге. Итак, запускаем sc.exe. Здесь нужно указать входное имя программы. Нажимаем I и пишем.

Для начала процесса нужно нажать G. После нескольких проходов Вы получите сообщение:

И файл LST в текущем каталоге:

Но эта программа будет хорошо работать только с ПО созданным для процессора 286. Вот что она сделала для прошлого шага:

33 proc far 3AEF:0000 start: 3AEF:0000 B8 3AF1 mov ax,seg_b 3AEF:0003 8E D8 mov ds,ax 3AEF:0005 8E C0 mov es,ax 3AEF:0007 B8 0014 mov ax,14h 3AEF:000A B9 001E mov cx,1Eh 3AEF:000D 91 xchg ax,cx 3AEF:000E B4 4C mov ah,4Ch ; ‘L’ 3AEF:0010 B0 00 mov al,0 3AEF:0012 CD 21 int 21h ; DOS Services ah=function 4Ch ; terminate with al=return code

Вполне прилично, а точнее один к одному за исключением сегментов и данных.

Источник: firststeps.ru

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