Как узнать код программы?

nata965

Есть программа, exe-файл под DOS.Как узнать на чем она написана и можно ли посмотреть ее код?

Ivan8209

> Есть программа, exe-файл под DOS.
> Как узнать на чем она написана
Иногда это невозможно.
> и можно ли посмотреть ее код?
Нет.
---
Ибо нефиг.

nata965

по гуглил
сказали что нужен PEid.
Сначала надо узнать чем прога упакована ---> юзаеш PEid(КАК ИМ ПОЛЬЗОВАТЬСЯ?)
Потом ищешь соответствующий распаковщик и юзаеш его

Ivan8209

Лучше скажи зачем это.
---
"Истина всегда конкретна."

nata965

прога по физике.мне нужно узнать как расчитывается одна формула...так как с моей теорией не сходиться(

uncle17

лучше сначала Розенталя проштудируй - рано тебе еще в физику соваться

nata965

не любил эту книгу

uncle17

заметно

Ivan8209

> прога по физике.
> мне нужно узнать как расчитывается одна формула
Наиболее разумный подход --- подумать, как оно могло быть посчитано,
выдвинуть несколько лучших гипотез, проверить их. Если ни одна не
подходит, перепроверить свой результат.
Можно попробовать восстановить алгоритм по результатам
дизассемблирования или трассировки, но это для сильных
духом. Кроме того, оно требует некоторых знаний.
---
"Человек полетит, опираясь не на силу своих мышц,
а на силу своего разума."

Dasar

Как узнать на чем она написана и можно ли посмотреть ее код?
код посмотреть можно, но ассемблерный.
для анализа ассемблерного кода удобнее всего IDA.

Ivan8209

Федя, а там, в Розентале, разве не было ничего по пунктуации?
---
"Не надо читать много книг."

Ivan8209

> для анализа ассемблерного кода удобнее всего IDA.
Совсем не факт.
---
...Я работаю антинаучным аферистом...

nata965

что значит анализ "ассемблерного кода"?
значит можно восстановить текст программы?

Ivan8209

> что значит анализ "ассемблерного кода"?
Машинного, но в чуть более человеческой нотации, чем ряды цифр.
> значит можно восстановить текст программы?
Нет.
---
...Я работаю антинаучным аферистом...

uncle17

а я хз - я не читал

nata965

всем спасибо

Marusetta

PEid - это для PE, вроде? а PE - вроде как виндовый?
я бы воспользовался программкой un-pack, последняя версия 2.3, кажется
выдает порядочное количество инфы о файлах вообще, а особенно об исполняемых

geja_03

Ну PE это и досовский формат, кроме того не уверен, что автор отличает дос программу и консольное приложение и вообще с чего вы взяли что там что-то запаковано?

yolki

PE это не досовский формат. разве что можно утверждать, что экзешники под win3.1 имели такой формат.
Вопрос ко всем: вдруг, автор треда собрался ревёрсить нечто типа матлаба?
к автору: выложи чтоли экзешник, народ глянет - может что и подскажет

okis

Эта программа, скорее всего, из тех, которые написаны n лет назад в каком-нибудь институте для конкретной задачи, никакой защиты на ней быть не должно.
Для DOS я помню отладчик TDD (есть в комплекте borland с/pascal но есть и более модные отладчики.
2 :
Не пойму, к чему такая категоричность. Для некоторых компиляторов C сейчас есть годные декомпиляторы. Хотя это не тот самый код, да.

geja_03

Ну в общем то да, но вначале PE может жить досовкая программа =)

yolki

я тут слышал, в одном файле с PE и MZ может и эльф поселиться.

geja_03

А как волшебные числа проверяются?

vall

хуже если там тролль поселится

Ivan8209

> Не пойму, к чему такая категоричность.
Чтобы вопрошающий не пудрил себе мозг, а искал более
продуктивные подходы. Или ты считаешь восстановление
алгоритма простой задачей?
> Для некоторых компиляторов C сейчас есть годные декомпиляторы.
> Хотя это не тот самый код, да.
Кому он нужен? Мы какую задачу решаем?
---
"Vyroba umelych lidi, slecno, je tovarni tajemstvi."

okis

> Чтобы вопрошающий не пудрил себе мозг
согласен.
> Или ты считаешь восстановление
> алгоритма простой задачей?
Нет.
> Кому он нужен? Мы какую задачу решаем?
Я имел ввиду, что для досовских прог, наверное, можно найти похожие инструменты, но с такими вопросами обращаться лучше к тем, кто более знаком с предметной областью.

elenangel

если прога под DOS то турбо дебаггер в помощь и еще WinHex-HiEW. но в комплект понадобится кто-то знающий ассемблер, потому как если возникают такие вопросы то очевидно что автор треда сам код посмотреть-поправить не сможет.

elenangel

чтобы посмотреть как реализована какая-то формула в конкретной старинной программе под DOS без всяких защит совершенно не обязательно реверсить файл целиком или трассировать до того места где формула реализована. гораздо эффективнее посмотреть разные хитрые константы (из формулы, примерный вид которой вероятно должен быть известен автору треда) типа float-double и по ним как по сигнатурам найти интересующую часть, TD для этого достаточно. задача на вечер имхо.

geja_03

Да тут и ida справится, там хоть красиво в виде графа все будет. Если глаз наметан, так и положение формулы мгновенно вычисляется )

elenangel

у меня IDA отказалась DOS-прогу отлаживать помнится когда я что-то такое делал, я в TD ушел =)

pitrik2

а ida он халявный?

elenangel

там вроде есть вариант бесплатного использования ограниченной версии типа не больше часа или двух работы и без возможности сохранения результата.

Ivan8209

> гораздо эффективнее посмотреть разные хитрые константы
> (из формулы, примерный вид которой вероятно должен быть
> известен автору треда) типа float-double и по ним как по
> сигнатурам найти интересующую часть, TD для этого достаточно.
> задача на вечер имхо.
Не знаю, на чём основано твоё "имхо," но оно неверно.
Некоторые функции могут быть приближены многочленами или прочей ерундой,
константы тут не помогут. Они могут немного отличаться от того, что ты видел,
нужно модель знать.
---
"Математик может говорить, что ему хочется,
но физик должен, хотя бы в какой-то мере, быть в здравом рассудке."

Ivan8209

Ключевое место здесь --- "если глаз намётан."
Вот если глаз не намётан, а так оно и есть, то "мгновенно" даже
в самом грубом приближении не получится.
---
"Математик может говорить, что ему хочется,
но физик должен, хотя бы в какой-то мере, быть в здравом рассудке."

elenangel

чем бы там они не были приближены, множество плавающих констант там будет с вероятностью 99%. даже если это будут константы вида 1.0, 2.0, 0.5 их все равно можно будет увидеть легко и при этом не спутать с целочисленными. если это приближение многочленами то тем более там будет дофига и больше небольших целых или полуцелых констант

alfadred

если это приближение многочленами то тем более там будет дофига и больше небольших целых или полуцелых констант
В физике?

elenangel

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

Ivan8209

И что это даст?
Ну. увидишь ты, что они где-то используются,
Это поможет тебе опознать операции с плавающей запятой?
Так ты и так их можешь опознать.
А теперь вопрос на засыпку.
Допустим, что программа была написана на фортране.
Что делать собираешься?
---
...Я работаю антинаучным аферистом...

elenangel

естественно поможет, и конечно искать константы нужно не блокнотом, а шестнадцатеричным редакотором, и потом результаты поиска в дизассемблере или отладчике использовать чтобы найти ссылки на эти данные. что тут еще непонятного?
не забывай, что у нас древняя досовская прога, которая весит отсилы 500 кб и в ней не так все и страшно будет. а начем она писалась вообще пофиг. это исполняемый файл в машинном коде. единственно если это язык с интерпретатором встроенным в экзешник, тогда да, ппц. но такой случай - все же экзотика.

Ivan8209

> естественно поможет, и конечно искать константы нужно не
> блокнотом, а шестнадцатеричным редакотором, и потом результаты
> поиска в дизассемблере или отладчике использовать чтобы найти
> ссылки на эти данные. что тут еще непонятного?
Вот и объясни, как ты собираешься искать эти постоянные, если
они получаются с помощью операций "fld1" или "fild".
> не забывай, что у нас древняя досовская прога, которая весит
> отсилы 500 кб и в ней не так все и страшно будет.
На чём основана твоя уверенность? На незнании действительности?
Вот это, например, наглая ложь:
> а начем она писалась вообще пофиг.
Не пофиг. Ты не ответил на вопрос про фортран.
---
"Narrowness of experience leads to narrowness of imagination."

Dasar

Не пофиг. Ты не ответил на вопрос про фортран.
а че там такого страшного в фортране?
он в какой-то другой ассемблер компилируется?

elenangel

он наверно про форт хотел сказать) а фортран действительно компилится как миленький

Ivan8209

> а че там такого страшного в фортране?
> он в какой-то другой ассемблер компилируется?
Представь себе, да. Но приплюснутым насильникам этого неизвестно.
---
"Narrowness of experience leads to narrowness of imagination."

Ivan8209

> фортран действительно компилится как миленький
Сходи, что ли, прочитай про реализацию чисел с плавающей запятой.
---
"Narrowness of experience leads to narrowness of imagination."

elenangel

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

Ivan8209

> я примерно представляю как они реализованы.
Ну-ну. И как?
> благо нормальный хекс-редактор сам проинтерпретирует в файле с
> любой позиции все известные ему форматы целых, плавающих чисел
"Известные ему." Назови мне такой редактор, который умеет
интерпретировать фортрановские числа с плавающей запятой.
> если ты намекаешь на что-то конкретное, уж поделись своим
> тайным знанием
Никакого тайного знания здесь нет. Всякий инженер или физик
должен знать, что существует фортран. Если бы ты работал с
фортраном хоть раз, ты бы знал, что его числа с плавающей
запятой отличаются от изобретённых IEEE.
---
"Narrowness of experience leads to narrowness of imagination."

elenangel

ты имеешь в виду 6-битные вещественные числа что ли, real, которые поддерживаются только программно?

Ivan8209

Вот-вот, 6-битные.
От -1e+16 до +1е+16.
---
...Я работаю антинаучным аферистом...

elenangel

и чего в них такого страшного? их и паскаль использует, который турбо. и WinHex их прекрасно понимает. и IDA в комментариях умеет генерить соответстующие названия функций к прерыванию, обрабатывающему эти числа. я-то думал, там мегаКОНТРАвские секретные числа из 91.73 бита каждое, разработанные в лаборатории 3 рейха для расчетов нацисткой атомной бомбы, а там боянище всем известное.

Ivan8209

> и чего в них такого страшного?
Да ничего, они просто не укладываются в твой подход к восстановлению алгоритма.
---
"Narrowness of experience leads to narrowness of imagination."

elenangel

очень даже укладываются. константы винхексом искать буду, поочередно расставляя галочку в доступные 4 положения для float, real, double, extended соответственно.

Ivan8209

Ладно, я устал объяснять, почему твой подход не сработает.
Есть несколько причин, и фортрановское представление чисел
не является ни единственной, ни главной.
Если тебе хочется попробовать силы, я могу откопать какой-нибудь
старый проект, который работал под MS DOS, и прислать тебе бинарник.
---
"Мы диалектику учили не по Гегелю.
Бряцанием боёв она врывалась в стих..."

Ivan8209

Сколь-либо реальные шансы есть у людей, предложивших отладчик или IDA.
---
"Мы диалектику учили не по Гегелю.
Бряцанием боёв она врывалась в стих..."

elenangel

я ж не сказал использовать ТОЛЬКО хекс-редактор. турбо дебаггер тоже отладчик. а подобные вещи я делал, правда там числа были аппаратные и константы точно в доках были прописаны, так что не переживай, я не с потолка это утверждаю - про один вечер. естественно, что универсального способа нет, но вероятность стечения всех неблагоприятных факторов исчезающе мала.

margadon

забавные споры ведёте
даже exe-шника не видели, а уже всё решили
это примерно то же самое, что планировать абстрактную драку :)
— ща выйду на ринг, помашу кулаками :o
— не получится ничего - представь что там Майк Тайсон!
— а у меня BFG где-то валялся :smirk:
— а вдруг у него неуязвимость!
...
ну итд
конечно, занятно услышать все ужасы того, что может иногда произойти в реальной жизни, но часто ведь просто везёт!

elenangel

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

Ivan8209

Любому человеку с ненулевым опытом видно, что ты не общался
с фортрановскими компиляторами. Например, от Watcom.
---
"Narrowness of experience leads to narrowness of imagination."

Dasar

Любому человеку с ненулевым опытом видно, что ты не общался
с фортрановскими компиляторами. Например, от Watcom.
и чем полученный код будет отличаться от какого-нибудь borland pascal-я?
больше оптимизаций?
или чего?

nata965

Вот. Файл IMPSOLG.rar выложил по просьбе трудящихся.Обычный DOS файл.
http://www.filehoster.ru/files/cr2503
59 килобайт

yolki

ну первое что можно сказать - прога упакована PKLite-ом.

karkar

И написана на бэйсике. И содержит байткод, который можно восстановить почти до исходника.

yolki

согласен
MS QuickBasic 4.x

otets-mihail

А я еще и фотографию голой жены автора там нашел.

yolki

у тебя нет доказательств, а у меня - есть :p

karkar

А я еще и фотографию голой жены автора там нашел.
Жаль только 16 цветов и 640х350. :)

yolki

да, есть такое.

nata965

что такое байткод?
просто в таких делах совсем не понимаю.Буду благодарен, если поясните как код восстановить.

Marusetta


Байт-код или байтко́д (англ. byte-code иногда также используется термин псевдоко́д — машинно-независимый код низкого уровня, генерируемый транслятором и исполняемый интерпретатором. Большинство инструкций байт-кода эквивалентны одной или нескольким командам ассемблера. Трансляция в байт-код занимает промежуточное положение между компиляцией в машинный код и интерпретацией.
Байт-код называется так, потому что длина каждого кода операции — один байт, но длина кода команды различна. Каждая инструкция представляет собой однобайтовый код операции от 0 до 255, за которым следуют такие параметры, как регистры или адреса памяти. Это в типичном случае, но спецификация байт-кода значительно различается в языке.
Программа на байт-коде обычно выполняется интерпретатором байт-кода (обычно он называется виртуальной машиной, поскольку подобен компьютеру). Преимущество — в портируемости, т. е. один и тот же байт-код может исполняться на разных платформах и архитектурах. То же самое преимущество дают интерпретируемые языки. Однако, поскольку байт-код обычно менее абстрактный, более компактный и более «компьютерный» чем исходный код, эффективность байт-кода обычно выше чем чистая интерпретация исходного кода, предназначенного для правки человеком. По этой причине многие современные интерпретируемые языки на самом деле транслируют в байт-код и запускают интерпретатор байт-кода. К таким языкам относятся Perl, PHP и Python. Программы на Java обычно передаются на целевую машину в виде байт-кода, который перед исполнением транслируется в машинный код «на лету» — с помощью JIT-компиляции. В стандарте открытых загрузчиков Open Firmware фирмы Sun Microsystems байт код представляет операторы языка Forth.
В то же время возможно создание процессоров, для которых данный байт-код является непосредственно машинным кодом (такие процессоры существуют, например, для Java и Forth).
Также некоторый интерес представляет p-код (p-code который похож на байт-код, но физически может быть менее лаконичным и сильно варьироваться по длине инструкции. Он работает на очень высоком уровне, например «напечатать строку» или «очистить экран». P-код повсеместно используется в СУБД и некоторых реализациях BASIC и Паскаля.
в данном случае не совсем байт-код, но вполне достаточная информация для восстановления по нему исходника. Только имена переменных потеряются, ну так а чего ты хотел после пропуска через exepack/pklite? Пытайся по внешнему виду смысл восстановить, чо.

yolki

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

fufa58

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

Dasar

распакованный вариант залейте, плиз

Marusetta

у тебя только pklite снят
- это со снятым exepack'ом
больше там вроде ничего нет, по крайней мере не детектится

Helga87

а как вы распаковывали? какими тулзами?

Marusetta

UN-PACK v2.3, EXEPACK Unpacker
\ws>Un-pack.exe impsolg.exe
-─┼-─ UN-PACK Loader v.1.0 (C) 2002-2003 by Snow Panther [UG2003] -─┼-─
-─┼-─ UN-PACK (File Analyzer and Unpacker) v.2.3 freeware (C) 1998-2003 -─┼-─
-─┼-─ Authors: Snow Panther [UG2003] and many others (see unpack-a.com) -─┼-─
* IMPSOLG.EXE is DOS executable file (MZ EXE)
* Created 06.10.2008 at 18:42:34. Attribute Archive
* File size 62907 bytes
* Identificator...........: MZ
* Bytes on last page......: $01BB (443)
* All pages in file.......: $007B (123)
* Relocations.............: $0001 (1)
* Paragraphs in header....: $0008 (8)
* Minimum memory..........: $0A48 (2632)
* Maximum memory..........: $FFFF (65535)
* SS:SP...................: $0F5C:$0200
* Checksum................: $0000 (0)
* CS:IP...................: $FFF0:$0100
* Relocation table adress.: $0052 (82)
* Overlay number..........: 0
* Entry point.............: $00000080 (128)
* PKLITE v.1.20 by PKWARE Inc.
* Please wait...unpacked!
* PKLite archive file
* Executable file extension
* Trust me, I know what I'm doing...
\ws>Un-pack.exe UNPACKED.exe
-─┼-─ UN-PACK Loader v.1.0 (C) 2002-2003 by Snow Panther [UG2003] -─┼-─
-─┼-─ UN-PACK (File Analyzer and Unpacker) v.2.3 freeware (C) 1998-2003 -─┼-─
-─┼-─ Authors: Snow Panther [UG2003] and many others (see unpack-a.com) -─┼-─
* UNPACKED.EXE is DOS executable file (MZ EXE)
* Created 05.05.2009 at 17:14:24. Attribute Archive
* File size 100346 bytes
* Identificator...........: MZ
* Bytes on last page......: $01FA (506)
* All pages in file.......: $00C4 (196)
* Relocations.............: $0000 (0)
* Paragraphs in header....: $0020 (32)
* Minimum memory..........: $0141 (321)
* Maximum memory..........: $FFFF (65535)
* SS:SP...................: $192C:$0080
* Checksum................: $0000 (0)
* CS:IP...................: $1763:$0010
* Relocation table adress.: $001E (30)
* Overlay number..........: 0
* Entry point.............: $00017840 (96320)
* EXEPACK v.3.69
* Executable file extension
* Trust me, I know what I'm doing...
L:\ws>exeunpak.exe unpacked.exe stage3.exe
UnPack v1.10a (c) Copyright Tenth Planet Software Intl., C Turvey 1992-1996.
All rights reserved. Non-Commercial use only.
unpacked.exe (hex) (dec)
.EXE size (bytes) 187FA 100346
Minimum load size (bytes) 19A0A 104970
Overlay number 0 0
Initial CS:IP 1763:0010
Initial SS:SP 192C:0080
Minimum allocation (para) 141 321
Maximum allocation (para) FFFF 65535
Header size (para) 20 32
Relocation table offset 1E 30
Relocation entries 0 0
* Uses second generation decompression software.
Packed EXE file.
Unpacking .EXE file ...
Unpacked to Length (bytes) 182F0 99056
stage4.exe (hex) (dec)
.EXE size (bytes) 1A0F0 106736
Minimum load size (bytes) 19A10 104976
Overlay number 0 0
Initial CS:IP 124B:0D2E
Initial SS:SP 182F:0800
Minimum allocation (para) 172 370
Maximum allocation (para) FFFF 65535
Header size (para) 1E0 480
Relocation table offset 1E 30
Relocation entries 73C 1852
Writing .EXE file ...
дальше un-pack ничего не говорит о компрессорах, еще три доверенных сканнера - тоже; логично предположить что ничего там больше и нету
единственно, в этом случае он ничего не выдал о компиляторе - обычно выдает - но там как бы и так понятно

valodyr

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

karkar

:confused:
Ваша команда два года делала декомпилятор 4-го кубасика? :) А зачем?

valodyr

У нас более общее решение. Нам пофиг, какой там байткод.

Helga87

Насколько пофиг? Если я ща придумаю свой, покатит?

valodyr

Если в итоге получается работающий бинарник, то да.
Оставить комментарий
Имя или ник:
Комментарий: