1 Востаннє редагувалося andrii_m (29.09.2015 20:52:40)

Тема: Як переробити програму

в мене є програма з якою я працюю по роботі. Написана вона кимось дуже давно і працює лише на 32-бітній системі. Хочу якось переробити під 64-бітну систему і перевести на українську мову. Але я від цього дуже далекий. як можна дізнатися якою програмою створювали мою? можливо так я б зміг залісти в налаштування і там якось розбирусь? знаю лише що вона проста, невелика, написана років 15-18 тому

2

Re: Як переробити програму

а шо та прога робе? може можна її самому знуля написати, якщо вона проста і невелика? і навіщо вам переводити її на 64бітну систему, адже якщо вона проста, то й пам'яти жере небагато, а 32бітні проги роблять на 64бітних системах же, то який в тому всьому сенс?

тут спілкуються українці, про політику, і інше (серед них є програмісти, але дуже мало, тому не заходьте туди лише з питаннями про програмування)
https://discord.gg/Zk29v4P

3

Re: Як переробити програму

я на 64бітній системі запустити її не можу. а компів з 32 бітною стає все менше. можу вислати її на електронку

4

Re: Як переробити програму

скиньте її тут (долучіть до повідомлення), попередньо запакуйте в ZIP, щоби всі могли подивитися.

Говорила баба діду: «Я поїду к Білодіду, Ізучу двомовну мову І вернусь обратно знову». А дід бабі: «Не *изди, К Білодіду нєт їзди, — Туди не ходять поїзди»

5 Востаннє редагувалося andrii_m (29.09.2015 21:33:10)

Re: Як переробити програму

Ось

Post's attachments

Dad.zip 29.89 kb, 84 downloads since 2015-09-29 

6

Re: Як переробити програму

Буду вдячний за будь яку допомогу

7

Re: Як переробити програму

Цей застосунок не для Windows, а для DOS. Дійсно 32-розрядні Windows системи можуть запускати таке "зі скриньки", на відміну від 64-розрядних, але це не велика проблема, бо для таких випадків існує DOSBox - емулятор MS DOS. Якщо самотужки не вийде розібратися з ним, відпишіться, допоможу.

Говорила баба діду: «Я поїду к Білодіду, Ізучу двомовну мову І вернусь обратно знову». А дід бабі: «Не *изди, К Білодіду нєт їзди, — Туди не ходять поїзди»
Подякували: koala1

8

Re: Як переробити програму

Але моя програма колись писалась якоюсь мовою програмування. То чи не можна відкрити її, скопіювати всю інформацію (те як вона працює, всі формули і т д ) дещо переклавши на українську мову і створити зовсім нову програму яка вже злегкістю б працювала на 64 бітних системах.

9

Re: Як переробити програму

ні, для цього потрібні джерельні коди програми, в вашому випадку мовою TurboBasic.

Говорила баба діду: «Я поїду к Білодіду, Ізучу двомовну мову І вернусь обратно знову». А дід бабі: «Не *изди, К Білодіду нєт їзди, — Туди не ходять поїзди»

10

Re: Як переробити програму

andrii_m написав:

Але моя програма колись писалась якоюсь мовою програмування. То чи не можна відкрити її, скопіювати всю інформацію (те як вона працює, всі формули і т д ) дещо переклавши на українську мову і створити зовсім нову програму яка вже злегкістю б працювала на 64 бітних системах.

Ні. По-перше, дезасемблювання схоже на відновлення інгредієнтів з салату. По-друге, ця програма, принаймні на перший погляд, оброблена якимось стискачем (чи обфускатором, але розмір підказує, що ні), що в нашій аналогії відповідає термічній обробці. Родзинки з кексу ще якось витягнути можна, а от борошно вже проблематично.

Подякували: 0xDADA11C7, DOP2

11

Re: Як переробити програму

Тобто нічого з неї зробити не можна? Треба писати нову програму? проблема в тому що вона статистично обробляє дані, тобто в ній забито кучу різних формул. І якщо писати нову то я ці формули вже не знайту. Чи є можливість побачити вихідний код програми

12

Re: Як переробити програму

andrii_m написав:

Тобто нічого з неї зробити не можна? Треба писати нову програму? проблема в тому що вона статистично обробляє дані, тобто в ній забито кучу різних формул. І якщо писати нову то я ці формули вже не знайту. Чи є можливість побачити вихідний код програми

Тільки в автора попросити.

13

Re: Як переробити програму

оброблена якимось стискачем (чи обфускатором, але розмір підказує, що ні)

Підказувати має лише ентропія файлу, а розмір не має жадного значення.

Говорила баба діду: «Я поїду к Білодіду, Ізучу двомовну мову І вернусь обратно знову». А дід бабі: «Не *изди, К Білодіду нєт їзди, — Туди не ходять поїзди»

14

Re: Як переробити програму

0xDADA11C7 написав:

оброблена якимось стискачем (чи обфускатором, але розмір підказує, що ні)

Підказувати має лише ентропія файлу, а розмір не має жадного значення.

Якби обфускатори тільки "плутали" код - тоді так. Але вони часто додають купу непотрібних дій для маскування реальної програми. А тут 30кб програми всього.

15

Re: Як переробити програму

...що за функцiонал програми? Вiртуалки поруч нема, а всяку каку запускати нема бажання.

Білоруський журнал «Радиолюбитель»
Lead Radar systems engineer & Software developer of industrial automation
Мої розробки та відеоблог

16

Re: Як переробити програму

Ви що в Blood у DOSBox'і не граєте? Яка ще віртуалка.

Говорила баба діду: «Я поїду к Білодіду, Ізучу двомовну мову І вернусь обратно знову». А дід бабі: «Не *изди, К Білодіду нєт їзди, — Туди не ходять поїзди»

17

Re: Як переробити програму

тут
http://reverseengineering.stackexchange … ng-radare2
і тут http://reverseengineering.stackexchange … pplication
згадуються якісь декомпілятори. можна було б їх спробувати для початку, чи вони щось дадуть

18

Re: Як переробити програму

стоп, це навіть не екзешка, а ком-файл,
тут треба якийсь інший декомпілятор шукати http://reverseengineering.stackexchange … -com-files

19

Re: Як переробити програму

Спроба декомпілювати реком закінчилася неуспішно.

C:\Tools\jklSoft\Reko>decompile --default-to ms-dos-com Dad.com
: warning: Type transformer has looped 51 times, quitting prematurely.
rewriting: void MsDosCom_Start(Register (ptr Eq_2) ds)
Dad.com: error: An internal error occurred while decompiling.
    Unable to cast object of type 'Reko.Core.Types.EquivalenceClass' to type 'Re
ko.Core.Types.StructureType'.
       at Reko.Core.Output.GlobalDataWriter.WriteGlobals(Formatter formatter)
   at Reko.DecompilerDriver.WriteGlobals(Program program, TextWriter w)
   at Reko.CmdLine.CmdLineHost.WriteGlobals(Program program, Action`1 writer)
   at Reko.DecompilerDriver.WriteDecompilerProducts()
   at Reko.DecompilerDriver.StructureProgram()
   at Reko.DecompilerDriver.Decompile(String filename)

Проте, якийсь код таки вдалось витягнути

// Dad.h
// Generated on 10/14/2015 3:48:26 PM by decompiling Dad.com
// using Decompiler version 0.5.3.0.

/*
// Equivalence classes ////////////
Eq_1: (struct "Globals")
    globals_t (in globals : (ptr (struct "Globals")))
Eq_2: (segment "Eq_2" (2 cups16 w0002) (1A5 (arr byte) a01A5) (1CC word16 w01CC) (1CE word16 w01CE) (1D0 word16 w01D0) (1D6 word16 w01D6) (1D8 word16 w01D8) (1DE word16 w01DE) (1E0 uint16 w01E0) (1E6 word16 w01E6) (1E8 word16 w01E8))
    T_2 (in ds : (ptr Eq_2))
Eq_14: (segment "Eq_14" (EF (arr byte) a00EF))
    T_14 (in cs : selector)
Eq_35: (struct "Eq_35" 0004 (0 (memptr word16 word16) ptr0000))
    T_35 (in bx_103 : (memptr (ptr Eq_2) Eq_35))
    T_41 (in ds->w01E8 + 0x01D0 + 0x0002 : word16)
    T_72 (in bx_103 + 0x0004 : word16)
Eq_82: (segment "Eq_82")
    T_82 (in ss : selector)
Eq_83: (union "Eq_83" (ptr16 u0) ((memptr (ptr Eq_82) Eq_103) u1))
    T_83 (in fp : ptr16)
Eq_103: (struct "Eq_103" (FFFFFFFE word16 wFFFFFFFE))
    T_103
// Type Variables ////////////
globals_t: (in globals : (ptr (struct "Globals")))
  Class: Eq_1
  DataType: (ptr Eq_1)
  OrigDataType: (ptr (struct "Globals"))
T_2: (in ds : (ptr Eq_2))
  Class: Eq_2
  DataType: (ptr Eq_2)
  OrigDataType: (ptr (segment (2 T_20 t0002) (1A5 (arr T_101) a01A5) (1CC T_11 t01CC) (1CE T_16 t01CE) (1D0 T_4 t01D0) (1D6 T_44 t01D6) (1D8 T_10 t01D8) (1DE T_29 t01DE) (1E0 T_22 t01E0) (1E6 T_80 t01E6) (1E8 T_37 t01E8)))
T_3: (in 0x01D0 : word16)
  Class: Eq_3
  DataType: (memptr (ptr Eq_2) word16)
  OrigDataType: (memptr T_2 (struct (0 T_4 t0000)))
T_4: (in Mem0[ds:0x01D0:word16] : word16)
  Class: Eq_4
  DataType: word16
  OrigDataType: word16
T_5: (in 0x5A4D : word16)
  Class: Eq_4
  DataType: word16
  OrigDataType: word16
T_6: (in ds->w01D0 == 0x5A4D : bool)
  Class: Eq_6
  DataType: bool
  OrigDataType: bool
T_7: (in 0x001D : cui16)
  Class: Eq_7
  DataType: cui16
  OrigDataType: cui16
T_8: (in ds + 0x001D : word16)
  Class: Eq_8
  DataType: word16
  OrigDataType: word16
T_9: (in 0x01D8 : word16)
  Class: Eq_9
  DataType: (memptr (ptr Eq_2) word16)
  OrigDataType: (memptr T_2 (struct (0 T_10 t0000)))
T_10: (in Mem0[ds:0x01D8:word16] : word16)
  Class: Eq_10
  DataType: word16
  OrigDataType: word16
T_11: (in &ds->w0002 + ds->w01D8 : word16)
  Class: Eq_11
  DataType: word16
  OrigDataType: word16
T_12: (in 0x01CC : word16)
  Class: Eq_12
  DataType: (memptr (ptr Eq_2) word16)
  OrigDataType: (memptr T_2 (struct (0 T_13 t0000)))
T_13: (in Mem22[ds:0x01CC:word16] : word16)
  Class: Eq_11
  DataType: word16
  OrigDataType: word16
T_14: (in cs : selector)
  Class: Eq_14
  DataType: (ptr Eq_14)
  OrigDataType: (ptr (segment (EF (arr T_102) a00EF)))
T_15: (in 0x0010 : word16)
  Class: Eq_15
  DataType: word16
  OrigDataType: word16
T_16: (in cs + 0x0010 : word16)
  Class: Eq_16
  DataType: word16
  OrigDataType: word16
T_17: (in 0x01CE : word16)
  Class: Eq_17
  DataType: (memptr (ptr Eq_2) word16)
  OrigDataType: (memptr T_2 (struct (0 T_18 t0000)))
T_18: (in Mem26[ds:0x01CE:word16] : word16)
  Class: Eq_16
  DataType: word16
  OrigDataType: word16
T_19: (in 0x0002 : word16)
  Class: Eq_19
  DataType: (memptr (ptr Eq_2) cups16)
  OrigDataType: (memptr T_2 (struct (0 T_20 t0000)))
T_20: (in Mem26[ds:0x0002:word16] : word16)
  Class: Eq_20
  DataType: cups16
  OrigDataType: cups16
T_21: (in 0x01E0 : word16)
  Class: Eq_21
  DataType: (memptr (ptr Eq_2) uint16)
  OrigDataType: (memptr T_2 (struct (0 T_22 t0000)))
T_22: (in Mem26[ds:0x01E0:word16] : word16)
  Class: Eq_22
  DataType: uint16
  OrigDataType: uint16
T_23: (in 0x04 : byte)
  Class: Eq_23
  DataType: uint8
  OrigDataType: uint8
T_24: (in ds->w01E0 >>u 0x04 : word16)
  Class: Eq_24
  DataType: uint16
  OrigDataType: uint16
T_25: (in 0x01CE : word16)
  Class: Eq_25
  DataType: (memptr (ptr Eq_2) word16)
  OrigDataType: (memptr T_2 (struct (0 T_26 t0000)))
T_26: (in Mem26[ds:0x01CE:word16] : word16)
  Class: Eq_16
  DataType: word16
  OrigDataType: word16
T_27: (in (ds->w01E0 >>u 0x04) + ds->w01CE : word16)
  Class: Eq_27
  DataType: word16
  OrigDataType: word16
T_28: (in 0x01DE : word16)
  Class: Eq_28
  DataType: (memptr (ptr Eq_2) word16)
  OrigDataType: (memptr T_2 (struct (0 T_29 t0000)))
T_29: (in Mem26[ds:0x01DE:word16] : word16)
  Class: Eq_29
  DataType: word16
  OrigDataType: word16
T_30: (in (ds->w01E0 >>u 0x04) + ds->w01CE + ds->w01DE : word16)
  Class: Eq_20
  DataType: cups16
  OrigDataType: cups16
T_31: (in ds->w0002 >=u ((ds->w01E0 >>u 0x04) + ds->w01CE) + ds->w01DE : bool)
  Class: Eq_31
  DataType: bool
  OrigDataType: bool
T_32: (in ax_36 : word16)
  Class: Eq_16
  DataType: word16
  OrigDataType: word16
T_33: (in 0x01CE : word16)
  Class: Eq_33
  DataType: (memptr (ptr Eq_2) word16)
  OrigDataType: (memptr T_2 (struct (0 T_34 t0000)))
T_34: (in Mem26[ds:0x01CE:word16] : word16)
  Class: Eq_16
  DataType: word16
  OrigDataType: word16
T_35: (in bx_103 : (memptr (ptr Eq_2) Eq_35))
  Class: Eq_35
  DataType: (memptr (ptr Eq_2) Eq_35)
  OrigDataType: (memptr T_2 (struct 0004 (0 T_56 t0000)))
T_36: (in 0x01E8 : word16)
  Class: Eq_36
  DataType: (memptr (ptr Eq_2) word16)
  OrigDataType: (memptr T_2 (struct (0 T_37 t0000)))
T_37: (in Mem26[ds:0x01E8:word16] : word16)
  Class: Eq_37
  DataType: word16
  OrigDataType: word16
T_38: (in 0x01D0 : word16)
  Class: Eq_38
  DataType: word16
  OrigDataType: word16
T_39: (in ds->w01E8 + 0x01D0 : word16)
  Class: Eq_39
  DataType: word16
  OrigDataType: word16
T_40: (in 0x0002 : word16)
  Class: Eq_40
  DataType: word16
  OrigDataType: word16
T_41: (in ds->w01E8 + 0x01D0 + 0x0002 : word16)
  Class: Eq_35
  DataType: (memptr (ptr Eq_2) Eq_35)
  OrigDataType: word16
T_42: (in cx_104 : word16)
  Class: Eq_42
  DataType: word16
  OrigDataType: word16
T_43: (in 0x01D6 : word16)
  Class: Eq_43
  DataType: (memptr (ptr Eq_2) word16)
  OrigDataType: (memptr T_2 (struct (0 T_44 t0000)))
T_44: (in Mem26[ds:0x01D6:word16] : word16)
  Class: Eq_42
  DataType: word16
  OrigDataType: word16
T_45: (in 0x0000 : word16)
  Class: Eq_42
  DataType: word16
  OrigDataType: word16
T_46: (in cx_104 == 0x0000 : bool)
  Class: Eq_46
  DataType: bool
  OrigDataType: bool
T_47: (in di_52 : (memptr (ptr Eq_14) byte))
  Class: Eq_47
  DataType: (memptr (ptr Eq_14) byte)
  OrigDataType: (memptr T_14 (struct 0001 (0 T_92 t0000)))
T_48: (in 0x00EF : word16)
  Class: Eq_47
  DataType: (memptr (ptr Eq_14) byte)
  OrigDataType: word16
T_49: (in si_53 : (memptr (ptr Eq_2) byte))
  Class: Eq_49
  DataType: (memptr (ptr Eq_2) byte)
  OrigDataType: (memptr T_2 (struct 0001 (0 T_89 t0000)))
T_50: (in 0x01A5 : word16)
  Class: Eq_49
  DataType: (memptr (ptr Eq_2) byte)
  OrigDataType: word16
T_51: (in cx_54 : word16)
  Class: Eq_51
  DataType: word16
  OrigDataType: word16
T_52: (in 0x0011 : word16)
  Class: Eq_51
  DataType: word16
  OrigDataType: word16
T_53: (in dx_106 : word16)
  Class: Eq_53
  DataType: word16
  OrigDataType: word16
T_54: (in 0x0000 : word16)
  Class: Eq_54
  DataType: word16
  OrigDataType: word16
T_55: (in bx_103 + 0x0000 : word16)
  Class: Eq_55
  DataType: word16
  OrigDataType: word16
T_56: (in Mem26[ds:bx_103 + 0x0000:word16] : word16)
  Class: Eq_56
  DataType: (memptr word16 word16)
  OrigDataType: word16
T_57: (in 0x01CC : word16)
  Class: Eq_57
  DataType: (memptr (ptr Eq_2) word16)
  OrigDataType: (memptr T_2 (struct (0 T_58 t0000)))
T_58: (in Mem26[ds:0x01CC:word16] : word16)
  Class: Eq_11
  DataType: word16
  OrigDataType: word16
T_59: (in Mem26[ds:bx_103 + 0x0000:word16] + Mem26[ds:0x01CC:word16] : word16)
  Class: Eq_53
  DataType: word16
  OrigDataType: word16
T_60: (in di_108 : (memptr word16 word16))
  Class: Eq_56
  DataType: (memptr word16 word16)
  OrigDataType: (memptr T_53 (struct (0 T_66 t0000)))
T_61: (in 0x0000 : word16)
  Class: Eq_61
  DataType: word16
  OrigDataType: word16
T_62: (in bx_103 + 0x0000 : word16)
  Class: Eq_62
  DataType: word16
  OrigDataType: word16
T_63: (in Mem26[ds:bx_103 + 0x0000:word16] : word16)
  Class: Eq_56
  DataType: (memptr word16 word16)
  OrigDataType: word16
T_64: (in 0x0000 : word16)
  Class: Eq_64
  DataType: word16
  OrigDataType: word16
T_65: (in di_108 + 0x0000 : word16)
  Class: Eq_65
  DataType: word16
  OrigDataType: word16
T_66: (in Mem26[dx_106:di_108 + 0x0000:word16] : word16)
  Class: Eq_66
  DataType: word16
  OrigDataType: word16
T_67: (in dx_106->*di_108 + ax_36 : word16)
  Class: Eq_66
  DataType: word16
  OrigDataType: word16
T_68: (in 0x0000 : word16)
  Class: Eq_68
  DataType: word16
  OrigDataType: word16
T_69: (in di_108 + 0x0000 : word16)
  Class: Eq_69
  DataType: word16
  OrigDataType: word16
T_70: (in Mem110[dx_106:di_108 + 0x0000:word16] : word16)
  Class: Eq_66
  DataType: word16
  OrigDataType: word16
T_71: (in 0x0004 : word16)
  Class: Eq_71
  DataType: word16
  OrigDataType: word16
T_72: (in bx_103 + 0x0004 : word16)
  Class: Eq_35
  DataType: (memptr (ptr Eq_2) Eq_35)
  OrigDataType: word16
T_73: (in 0x0001 : word16)
  Class: Eq_73
  DataType: word16
  OrigDataType: word16
T_74: (in cx_104 - 0x0001 : word16)
  Class: Eq_42
  DataType: word16
  OrigDataType: word16
T_75: (in 0x0000 : word16)
  Class: Eq_42
  DataType: word16
  OrigDataType: word16
T_76: (in cx_104 != 0x0000 : bool)
  Class: Eq_76
  DataType: bool
  OrigDataType: bool
T_77: (in 0x01CE : word16)
  Class: Eq_77
  DataType: (memptr (ptr Eq_2) word16)
  OrigDataType: (memptr T_2 (struct (0 T_78 t0000)))
T_78: (in Mem26[ds:0x01CE:word16] : word16)
  Class: Eq_16
  DataType: word16
  OrigDataType: word16
T_79: (in 0x01E6 : word16)
  Class: Eq_79
  DataType: (memptr (ptr Eq_2) word16)
  OrigDataType: (memptr T_2 (struct (0 T_80 t0000)))
T_80: (in Mem26[ds:0x01E6:word16] : word16)
  Class: Eq_80
  DataType: word16
  OrigDataType: word16
T_81: (in ds->w01CE + ds->w01E6 : word16)
  Class: Eq_81
  DataType: word16
  OrigDataType: word16
T_82: (in ss : selector)
  Class: Eq_82
  DataType: (ptr Eq_82)
  OrigDataType: (ptr (segment))
T_83: (in fp : ptr16)
  Class: Eq_83
  DataType: Eq_83
  OrigDataType: (union (ptr16 u0) ((memptr T_82 (struct (FFFFFFFE T_86 tFFFFFFFE))) u1))
T_84: (in 0x0002 : word16)
  Class: Eq_84
  DataType: word16
  OrigDataType: word16
T_85: (in fp - 0x0002 : word16)
  Class: Eq_85
  DataType: word16
  OrigDataType: word16
T_86: (in Mem71[ss:fp - 0x0002:word16] : word16)
  Class: Eq_81
  DataType: word16
  OrigDataType: word16
T_87: (in 0x0000 : word16)
  Class: Eq_87
  DataType: word16
  OrigDataType: word16
T_88: (in si_53 + 0x0000 : word16)
  Class: Eq_88
  DataType: word16
  OrigDataType: word16
T_89: (in Mem26[ds:si_53 + 0x0000:byte] : byte)
  Class: Eq_89
  DataType: byte
  OrigDataType: byte
T_90: (in 0x0000 : word16)
  Class: Eq_90
  DataType: word16
  OrigDataType: word16
T_91: (in di_52 + 0x0000 : word16)
  Class: Eq_91
  DataType: word16
  OrigDataType: word16
T_92: (in Mem61[cs:di_52 + 0x0000:byte] : byte)
  Class: Eq_89
  DataType: byte
  OrigDataType: byte
T_93: (in 0x0001 : word16)
  Class: Eq_93
  DataType: word16
  OrigDataType: word16
T_94: (in si_53 + 0x0001 : word16)
  Class: Eq_49
  DataType: (memptr (ptr Eq_2) byte)
  OrigDataType: word16
T_95: (in 0x0001 : word16)
  Class: Eq_95
  DataType: word16
  OrigDataType: word16
T_96: (in di_52 + 0x0001 : word16)
  Class: Eq_47
  DataType: (memptr (ptr Eq_14) byte)
  OrigDataType: word16
T_97: (in 0x0001 : word16)
  Class: Eq_97
  DataType: word16
  OrigDataType: word16
T_98: (in cx_54 - 0x0001 : word16)
  Class: Eq_51
  DataType: word16
  OrigDataType: word16
T_99: (in 0x0000 : word16)
  Class: Eq_51
  DataType: word16
  OrigDataType: word16
T_100: (in cx_54 == 0x0000 : bool)
  Class: Eq_100
  DataType: bool
  OrigDataType: bool
T_101:
  Class: Eq_101
  DataType: byte
  OrigDataType: (struct 0001 (0 T_89 t0000))
T_102:
  Class: Eq_102
  DataType: byte
  OrigDataType: (struct 0001 (0 T_92 t0000))
T_103:
  Class: Eq_103
  DataType: Eq_103
  OrigDataType: 
*/
typedef struct Globals {
} Eq_1;

typedef  Eq_2[]struct Eq_2 {
    cups16 w0002;    // 2
    byte a01A5[];    // 1A5
    word16 w01CC;    // 1CC
    word16 w01CE;    // 1CE
    word16 w01D0;    // 1D0
    word16 w01D6;    // 1D6
    word16 w01D8;    // 1D8
    word16 w01DE;    // 1DE
    uint16 w01E0;    // 1E0
    word16 w01E6;    // 1E6
    word16 w01E8;    // 1E8
} Eq_2;

typedef  Eq_14[]struct Eq_14 {
    byte a00EF[];    // EF
} Eq_14;

typedef struct Eq_35 {    // size: 4 4
    word16 word16::*ptr0000;    // 0
} Eq_35;

typedef struct Eq_82 {
} Eq_82;

typedef union Eq_83 {
    ptr16 u0;
    Eq_103 Eq_82::* u1;
} Eq_83;

typedef struct Eq_103 {
    word16 wFFFFFFFE;    // FFFFFFFE
} Eq_103;
// Dad.c
// Generated on 10/14/2015 3:48:26 PM by decompiling Dad.com
// using Decompiler version 0.5.3.0.

#include "Dad.h"

void MsDosCom_Start(Eq_2 * ds)
{
    if (ds->w01D0 == 23117)
    {
        ds->w01CC = &ds->w0002 + ds->w01D8;
        Mem26[ds:0x01CE:word16] = cs + 0x10;
        if (ds->w0002 >=u ((ds->w01E0 >>u 0x04) + ds->w01CE) + ds->w01DE)
        {
            word16 ax_36 = ds->w01CE;
            Eq_35 Eq_2::*bx_103 = ds->w01E8 + 464 + 0x02;
            word16 cx_104 = ds->w01D6;
            if (cx_104 != 0x00)
                do
                {
                    word16 dx_106 = Mem26[ds:bx_103 + 0x00:word16] + Mem26[ds:0x01CC:word16];
                    word16 word16::*di_108 = (ds->*bx_103).ptr0000;
                    dx_106->*di_108 = dx_106->*di_108 + ax_36;
                    bx_103 = bx_103 + 0x01;
                    cx_104 = cx_104 - 0x01;
                } while (cx_104 != 0x00);
            byte Eq_14::*di_52 = Eq_14::a00EF;
            byte Eq_2::*si_53 = Eq_2::a01A5;
            word16 cx_54 = 0x11;
            while (cx_54 != 0x00)
            {
                cs->*di_52 = ds->*si_53;
                si_53 = si_53 + 0x01;
                di_52 = di_52 + 0x01;
                cx_54 = cx_54 - 0x01;
            }
            Mem71[ss:fp - 0x02:word16] = Mem26[ds:0x01CE:word16] + Mem26[ds:0x01E6:word16];
        }
    }
    return;
}

може, спробувати якусь іншу тулзу

20

Re: Як переробити програму

А можна поколупати асемблер

;;; Segment Image base (0C00:0100)

fn0C00_0100()
    mov    si,01D0
    mov    ax,[si]
    cmp    ax,5A4D
    jz    010B

l0C00_010A:
    retf    

l0C00_010B:
    mov    ax,si
    mov    cl,04
    shr    ax,cl
    mov    bx,ds
    add    ax,bx
    add    ax,[si+08]
    mov    [01CC],ax
    mov    ax,cs
    add    ax,0010
    mov    [01CE],ax
    mov    ax,[si+10]
    mov    cl,04
    shr    ax,cl
    add    ax,[01CE]
    add    ax,[si+0E]
    mov    bx,0002
    mov    bx,[bx]
    cmp    bx,ax
    jnc    013C

l0C00_013A:
    jmp    010A

l0C00_013C:
    mov    ax,[01CE]
    mov    bx,si
    add    bx,[si+18]
    mov    cx,[si+06]
    jcxz    015C

l0C00_0149:
    mov    dx,[bx+02]
    add    dx,[01CC]
    mov    es,dx
    mov    di,[bx]
    add    es:[di],ax
    add    bx,04
    loop    0149

l0C00_015C:
    push    si
    push    cs
    pop    es
    mov    di,00EF
    mov    si,01A5
    mov    cx,0011

l0C00_0168:
    rep    
    movsb    

l0C00_016A:
    pop    si
    mov    ax,[01CE]
    add    ax,[si+16]
    push    ax
    mov    ax,[si+14]
    push    ax
    push    ds
    push    ds
    mov    ax,[01CE]
    mov    es,ax
    xor    di,di
    add    ax,[si+0E]
    push    ax
    mov    ax,[si+10]
    push    ax
    mov    bx,[si+04]
    mov    ax,[si+08]
    mov    cl,05
    shr    ax,cl
    sub    bx,ax
    mov    cl,08
    shl    bx,cl
    mov    cx,bx
    mov    ax,[01CC]
    mov    ds,ax
    xor    si,si
    mov    bx,00EF
    jmp    bx
0C00:01A5                F3 A5 58 5B 07 1F 59 5A FA 8E D3      ..X[..YZ...
0C00:01B0 8B E0 FB 52 51 CB 28 43 29 20 43 6F 70 79 72 69 ...RQ.(C) Copyri
0C00:01C0 67 68 74 20 45 6C 69 73 6F 66 74 2E 00 00 00 00 ght Elisoft.....
0C00:01D0 4D 5A AA 00 3E 00 00 00 07 00 2C 08 FF FF AB 07 MZ..>.....,.....
0C00:01E0 00 04 00 00 00 01 F0 FF 50 00 00 00 03 21 50 4B ........P....!PK
0C00:01F0 4C 49 54 45 20 43 6F 70 72 2E 20 31 39 39 30 20 LITE Copr. 1990 
0C00:0200 50 4B 57 41 52 45 20 49 6E 63 2E 20 41 6C 6C 20 PKWARE Inc. All 
0C00:0210 52 69 67 68 74 73 20 52 65 73 65 72 76 65 64 00 Rights Reserved.
0C00:0220 17 01 77 00 00 00 02 00 00 00 FF FF 00 00 80 00