Disassemblierung / Decompile von BMH

      Disassemblierung / Decompile von BMH

      Hallo zusammen!

      Offtopic:
      Ich war Mitglied im alten Forum, habe aber sowohl meinen Usernamen, als auch mein Passwort vergessen. Seitdem das Forum down war, habe ich so 2-3 mal im Jahr vorbeigeschaut und mich gestern total gefreut, dass es wieder da ist.

      Zum Thema:
      Ich habe noch in Erinnerung, dass einige User daran gearbeitet haben den Sourcecode zu bekommen. Leider verlief damals wohl eine Anfrage an die Entwickler Werner Krahe und Jens Onnen nicht erfolgreich. Kontakt konnte wohl hergestellt werden, doch den Source-Code hatte wohl niemand mehr.

      Ich habe in der BMH.exe (Hexeditor) mal reingeschaut und ein paar (mögliche) Hinweise zur Programmiersprache und Compiler gefunden:

      Quellcode

      1. WATCOM C/C++16 Run-Time system. (c) Copyright by WATCOM International Corp. 1988-1994. All rights reserved.


      Ich habe herausgefunden, dass es mittlerweile einen Open-Source Compiler von WATCOM gibt: openwatcom.org/download.php
      (Quelle: de.wikipedia.org/wiki/Watcom)

      Der Compiler bietet einen Funktion, um sich Debug Informationen ausgeben zulassen (Stichwort: wdump).

      Quellcode

      1. C:\>wdump BMH.exe
      2. Open Watcom Executable Image Dump Utility Version 1.9
      3. Portions Copyright (c) 1984-2002 Sybase, Inc. All Rights Reserved.
      4. Source code is available under the Sybase Open Watcom Public License.
      5. See http://www.openwatcom.org/ for details.
      6. DOS EXE Header
      7. ==============================================================================
      8. length of load module mod 200H = 007CH
      9. number of 200H pages in load module = 0017H
      10. number of relocation items = 0006H
      11. size of header in paragraphs = 0006H
      12. minimum number of paragraphs required above load mod = 0087H
      13. maximum number of paragraphs required above load mod = FFFFH
      14. offset of stack segment in load module = 02C8H
      15. initial value of SP = 0800H
      16. checksum = 0000H
      17. initial value of IP = 038CH
      18. offset of code segment within load module (segment) = 0000H
      19. file offset of first relocation item = 0040H
      20. overlay number = 0000H
      21. load module length = 00002C7CH
      22. Linear EXE Header (OS/2 V2.x) - LE
      23. ==============================================================================
      24. file offset = 00002C80H
      25. byte order (0==little endian, 1==big endian) = 00H
      26. word order " " = 00H
      27. linear EXE format level = 00000000H
      28. cpu type = 0002H
      29. os type (1==OS/2, 2==Windows, 3==DOS4, 4==Win386) = 0001H
      30. module version = 00000000H
      31. module flags = 00000200H
      32. # module pages = 00000079H
      33. object # for initial EIP = 00000001H
      34. initial EIP = 00060098H
      35. object # for initial ESP = 00000004H
      36. initial ESP = 00020740H
      37. page size = 00001000H
      38. last page size (LE)/page shift (LX) = 0000059FH
      39. fixup section size = 00017A98H
      40. fixup section checksum = 00000000H
      41. loader section size = 00017CE8H
      42. loader section checksum = 00000000H
      43. object table offset = 000000C4H
      44. # of objects in module = 00000004H
      45. object page map offset = 00000124H
      46. object iterated data map offset = 00000000H
      47. offset of resource table = 00000308H
      48. # of resource entries = 00000000H
      49. offset of resident name table = 00000308H
      50. offset of entry table = 00000313H
      51. offset of module directive table = 00000000H
      52. # of module directives = 00000000H
      53. offset of fixup page table = 00000314H
      54. offset of fixup record table = 000004FCH
      55. offset of import module name table = 00017DABH
      56. # of entries in import module name table = 00000000H
      57. offset of import procedure name table = 00017DABH
      58. offset of per-page checksum table = 00000000H
      59. offset of enumerated data pages = 0001AC00H
      60. # of pre-load pages = 00000000H
      61. offset of non-resident names table (rel file) = 00000000H
      62. size of non-resident names table = 00000000H
      63. non-resident names table checksum = 00000000H
      64. object # for automatic data object = 00000004H
      65. offset of the debugging information = 00000000H
      66. size of the debugging information = 00000000H
      67. # of instance pages in the preload section = 00000000H
      68. # of instance pages in the demand load section = 00000000H
      69. size of heap (for 16-bit apps) = 00000000H
      70. size of stack = 00000000H
      71. Module Flags = PROGRAM | WINDOWCOMPAT
      72. Object Table
      73. ==============================================================================
      74. object 1: virtual memory size = 0006A94BH
      75. relocation base address = 00010000H
      76. object flag bits = 00002045H
      77. object page table index = 00000001H
      78. # of object page table entries = 0000006BH
      79. reserved = 00000000H
      80. flags = READABLE|EXECUTABLE|PRELOAD|BIG
      81. object 2: virtual memory size = 00000082H
      82. relocation base address = 00080000H
      83. object flag bits = 00002045H
      84. object page table index = 0000006CH
      85. # of object page table entries = 00000001H
      86. reserved = 00000000H
      87. flags = READABLE|EXECUTABLE|PRELOAD|BIG
      88. object 3: virtual memory size = 00000031H
      89. relocation base address = 00090000H
      90. object flag bits = 00000045H
      91. object page table index = 0000006DH
      92. # of object page table entries = 00000001H
      93. reserved = 00000000H
      94. flags = READABLE|EXECUTABLE|PRELOAD
      95. object 4: virtual memory size = 00020740H
      96. relocation base address = 000A0000H
      97. object flag bits = 00002043H
      98. object page table index = 0000006EH
      99. # of object page table entries = 0000000CH
      100. reserved = 00000000H
      101. flags = READABLE|WRITABLE|PRELOAD|BIG
      102. Resident Names Table
      103. ==============================================================================
      104. ordinal 0000: DEUTSCH
      105. Fixup Page Table
      106. ==============================================================================
      107. 00:00000000 01:000002A3 02:00000720 03:00000B8A
      108. 04:00000FCC 05:0000127E 06:0000166C 07:0000180B
      109. 08:00001929 09:00001CC2 10:00001EBA 11:0000224D
      110. 12:000025C2 13:00002926 14:00002C22 15:00002ED2
      111. 16:0000319D 17:0000369E 18:00003AE1 19:00003CFB
      112. 20:0000407B 21:0000446D 22:00004881 23:00004B80
      113. 24:00004E62 25:000052E0 26:0000568C 27:00005A69
      114. 28:00005C83 29:00005FE4 30:0000641B 31:00006839
      115. 32:00006D0C 33:000070D5 34:000073EC 35:00007528
      116. 36:00007864 37:00007C55 38:000081B0 39:0000847D
      117. 40:0000885B 41:00008BCD 42:00008E8E 43:00009149
      118. 44:00009473 45:00009667 46:000098DB 47:00009CD1
      119. 48:0000A0E3 49:0000A448 50:0000A7B4 51:0000A9D8
      120. 52:0000AD8A 53:0000B051 54:0000B25A 55:0000B857
      121. 56:0000BBA1 57:0000BD54 58:0000C095 59:0000C2D3
      122. 60:0000C671 61:0000CAF4 62:0000CDAE 63:0000D01E
      123. 64:0000D439 65:0000D891 66:0000DC05 67:0000DEBE
      124. 68:0000E18D 69:0000E437 70:0000E5FF 71:0000E7E9
      125. 72:0000EC97 73:0000F0B8 74:0000F832 75:0000FA85
      126. 76:0000FDFD 77:0001010E 78:000104FF 79:0001072A
      127. 80:00010A32 81:00010C6C 82:0001100F 83:000112CD
      128. 84:0001161D 85:000119A9 86:00011E60 87:0001238B
      129. 88:000126CC 89:00012A9A 90:00013124 91:00013854
      130. 92:00013C0B 93:00013F80 94:000142DB 95:000144F4
      131. 96:0001488D 97:00014A64 98:00014DF9 99:00015497
      132. 100:00015906 101:00015CCE 102:00015D84 103:000164BD
      133. 104:000168E6 105:00016D27 106:00016DCA 107:000170A4
      134. 108:00017119 109:00017119 110:00017119 111:00017120
      135. 112:000176C2 113:00017755 114:0001775C 115:00017813
      136. 116:00017813 117:00017813 118:00017813 119:00017813
      137. 120:00017813 121:000178AF
      138. Nonresident Names Table
      139. ==============================================================================
      Außerdem gibt es einen Disassembler Befehl (Stichwort: wdis).
      Quelle: en.wikipedia.org/wiki/Open_Watcom_Assembler

      Quellcode

      1. C:\>wdis BMH.exe
      2. The object file is not in OMF, ELF or COFF format


      Wäre auch zu schön gewesen, wenn es so einfach wäre. Ich hatte gestern Abend leider nicht mehr so viel Zeit, mich in das Thema intensiv einzulesen, sondern habe die ersten Google-Treffer verfolgt.

      Falls noch jemand von der alten Crew hier unterwegs ist, die an diesem Thema gearbeitet haben, würde ich gerne alle Informationen die es zu diesem Thema gibt sammeln und mich gerne intensiver damit beschäftigen.
      Vielleicht gibt es auch noch Leute, die gerne daran arbeiten würden und die mit dem Output oben schon etwas anfangen können.

      Würde mich über jede Info freuen, um nicht komplett bei 0 starten zu müssen!