ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ Û Û Û <*> EXEdumper version 1.2 <*> Û Û Û Û by ÜÄÜ Ü ÜÄÜ ÜÄÜ ÜÄÜ ÜÄÜ Ü ÜÄÜ ÜÄÜ Û Û Û Û ÛÄÜ ßÄÜ ÛÄ ßÄÜ ßÄÜ Ü Û Û Û Û Û Û Û Û Û Û Ü Û Û Ü Û Ü Û Û Û Û Û Û Û Û ßßß ßßß ßßß ßßß ßßß ßßß ß ßßß ß ß 1995 Û Û Û ÛÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÛ Û Handle Real name Age Profession Group activity Û ÛÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÛ Û Bugsy Benjamin Petersen 22 Programmer Coder, organizer Û Û Spawn Michael Skovslund 21 Programmer Coder, gfx Û Û UniSon Henrik Eiriksson 22 Study IFA Music, art Û Û Fading Nimbus Emil Hansen 20 Study HTX Music Û ÛÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÛ Û Û ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß INDEX History Introduction Disclaimer Keyboard layout Program dokumentation Soft-Ice user notice How to unpack a exefile Greetings þ History Version Notice 1.0 Never released to public, only for our beta-testers 1.1 First public release 1.2 Now with Soft-Ice debugger support. Activate with INT FCh þ Introduction This program is able to unpack ANY exe-file, however this can only be done if it's packed with a exe-packer. Of course it can't be done by inserting a coin into the cryptomate. You have to do something for it. This is where you and your debugger comes in. All you have to do is this : Load the program into your favourite debugger, debug the program until first original instruction, dump the code/data, terminate the program, allocate 4 Kb, reload the program, debug until first original instruc- tion, dump the code/data, terminate the program, deallocate 4 Kb and read MakeExe.Doc If this sounds easy, exit your doc reader, if not, keep on reading. 8+) þ Disclaimer This software has been tested and found to work properly. OBSESSiON have no responsability whatsoever for any damages caused by use, or misuse, of this software. If you, after a 24 hour test period, wish to continue using this program, you NEED to send me a postcard with your name and address. This is the only way I can see that someone is really using this software. If I don't receive any postcard, I won't update the program. This means : NO MORE UPDATE OR BUG FIXES, IF NO POSTCARD IS SEND TO ME! þ Keyboard layout Left shift + right shift : Activate the resident part of DumpExe TAB : Jump to next menu block Shift TAB : Jump to previous menu block Arrow up/down : Next/previous menu selection Arrow left/right : Next/previous number in input field ESC : Terminate DumpExe or return to previous state Enter : Confirm selection/input þ Program documentation Install DumpExe into memory, by starting the file DUMPEXE.EXE. The program will now be resident (TSR) in memory. To activate, press LEFT SHIFT and RIGHT SHIFT at the same time. A menu, the one shown here below, will appear. To return to what you were doing, press ESC. Notice : You cannot start DumpExe by pressing the hotkey while you are at the dos command line. This is because dos says it's busy, or not safe to interrupt, at the present time. If you try to start it anyhow, two beep can be heard from the PC-speaker. This beep sequence can also appear while an attempt have been made inside a debugger, ignore this and try again. ÉÍÍÍ Exe-dumper v1.2 CARDWARE 1995 by BUGSY of OBSESSiON [1]» ºÄÄÄÄÄÄÄÄÄ First file ÄÄÄÄÄÄÄÄÂÄÄÄÄÄÄÄÄÄ Second file ÄÄÄÄÄÄĺ º CS : 0000 [2] ³ CS : 0000 [3] º º IP : 0000 ³ IP : 0000 º º SS : 0000 ³ SS : 0000 º º SP : 0000 ³ SP : 0000 º º PSP : 0000 ³ PSP : 0000 º º Size : 00000 (0) ³ Size : 00000 (0) º º Name : #NoName#.1 ³ Name : #NoName#.2 º ºÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÅÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĺ º Dump exe-code [4] ³ Dump exe-code [5] º º Autodetect name ³ Autodetect name º º Autodetect size ³ Autodetect size º ºÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĺ º Allocate 4Kb [6] º º Auto-Config º º Reset menu º º Uninstall º ºÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄ Free 167 kb. Slack 0 kb Ä[7]ĺ º [8] º ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ Overview [1] Copyright text. [2] Data for first filedump, set by the user. [3] -do- for second file. [4] Menu concerning first filedump. [5] -do- for second file. [6] General purpose menu, concerning global use of DumpExe. [7] Information about current memory status. [8] Status message from DumpExe and input prompt from user. Explenation [1] Copyright text. Tells who made this brilliant program. [2] This sub window are used to enter information about the program you want to unpack. You have to fill out ALL fields, for a working copy of the unpacked file. CS : Current code segment IP : Current instruction pointer SS : Current stack segment SP : Current stack pointer PSP : Current program prefix segment Size : Size of program in bytes Name : Name of dump file To change a value, move selector to decided item and press enter. Enter the new value and press enter again. REMARK : All numbers are shown and entered in heximal values. [3] -do- for [2] [4] Menu for processing first unpacked data block. It is use for dumping the code/data block entered in [2] or [3]. Menuitems available are : Dump exe-code : Press this one to dump selected data block. Autodetect name : Make DumpExe autodetect the name of the program it are processing and use it for the dump name. Autodetect size : Used to make the program autodetect the size of the data block. There are too ways to autodetect the size of a program. It can be done by Stack or PSP. The most common way is 'By Stack', because this will give a smaller exefile. [5] -do- for [4] [6] This is a misc. menu, containing rutines for the global use of the exe-dumper. Menuitems available are : Allocate 4Kb : Used to allocate/deallocate a block of 0100h paragraphs or 4 kb. This should be done after first dump and termination, and before reload of the program. Please take a look at the tutorial at the bottom of this document. Auto-Config : Add 0101h to all segment registers in [2] and store them in [3]. It is usefull after preparing for second dump. This only works 9 out 10 packed files. Please notice that CS in [3] matches the one shown by the debugger. If not, you have to enter all values manuelly. Reset menu : Sets all items to there initial value. Uninstall : Use this one to remove DumpExe from memory. [7] Information about current memory status. Free : Amount of free memory. Slack : Amount of memory fragment after allocating 4 kb. [8] Status message from the program and prompt file for user. Here is some of the error messages that can appeare here : No size given. You have to enter how much memory the program shall dump. No memory allocated. You are trying to auto-config file 2, and you have'nt used 'allocate 4KB'. You must manuelly enter the data required to dump Can't auto-config file 2, sorry. You must manuelly enter the data required to dump a program. The PSP-segment is not valid. You are using a function that required a valid PSP segment, entered in [2] or [3]. The PSP-segment for file 1 is not valid. See the above. Can't find name. DumpEXE is not able to find the name of the program you want to dump. The program are using a standard name instead. Can't uninstall, vector hooked by another program. You have loaded another program after this DumpEXE. Unfortunately they have hooked the same interrupt. Unload the other program first and try again. Can't allocate necessary memory. Boot your machine with less drivers, and try again. If this does'nt help, you are f..... Out of stack. Your memory is fragmented to much. The DumpEXE has 4 kb of stack and in this case it does'nt seem to be enough. Contact me (BUGSY) and ask for a version with more stack :) (I'll send it to you!) Can't release memory. This error is most likely coursed by the program you are about to dump. It is the stack of this program that have been destroyed. Dump the code and boot your PC. (the dumpfile should be okay, I hope...) Can't make file. Ups, a disk error. Check your harddisk with 'chkdsk /f' Can't write file, disk full ?. Free some disk space, and try again. Can't deallocate memory. The MCB (memory control block) have been destroyed. Dump the code and boot your PC. (again the dumpfile should be okay, I hope...) Size is to big, please enter a new one. You have entered an invalid size of the program. Max size is 640 kb. :) Don't you just loooove dos ?... þ Soft-Ice user notice If you are using Soft-Ice, the hotkey is disabled. This is because Soft-Ice runs in protected mode and have it's own interrupt vector table. To activate the exe-dumper, do this at the Soft-Ice command line: BPX CS:IP : So we can return after Int 0FCh has terminated GENINT FC : Start the exe-dumper GENINT FC : Start the exe-dumper again (if you need it) BC 0 : Clear the breakpoint set by BPX. The number (here 0) is the name of breakpoint label. þ How to unpack a exefile The file named 'unpackme.exe' is a packed exe-file. It is used to illustrate how to use this tool, and nothing more. BTW : The file is packed with pklite using normal compression. I will use Turbo Debugger for this example. The reason I do that is : If you know how to use the ultimate debugger Soft-Ice, you really don't need this introduction, in how to unpack a program with a debugger, or do you ? If you don't know anything about using a debugger, I advice you to consult your debugger's manual. Try to start the tutorial program UNPACKME.EXE and look at the text. The program tells if it's packed or not. REMEMBER : Start DUMPEXE.EXE before proceeding with next step. Start debuging unpackme.exe by writing : TD.EXE UNPACKME.EXE The picture shown to you, by TD (Turbo Debugger) should look something like this : ÉÍ[þ]ÍCPU 80486ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍ1Í[][]Í» º cs:0100B89A05 mov ax,059A  ax 0000 ³c=0º º cs:0103 BA4001 mov dx,0140 þ bx 0000 ³z=0º º cs:0106 05EE68 add ax,68EE ± cx 0000 ³s=0º º cs:0109 3B060200 cmp ax,[0002] ± dx 0000 ³o=0º º cs:010D 731A jnb 0129 ± si 0000 ³p=0º º cs:010F 2D2000 sub ax,0020 ± di 0000 ³a=0º º cs:0112 FA cli ± bp 0000 ³i=1º º cs:0113 8ED0 mov ss,ax ± sp 0200 ³d=0º º cs:0115 FB sti ± ds 68DE ³ º º cs:0116 2D1900 sub ax,0019 ± es 68DE ³ º º cs:0119 8EC0 mov es,ax ± ss 6A35 ³ º º cs:011B 50 push ax ± cs 68DE ³ º º cs:011C B9C300 mov cx,00C3  ip 0100 ³ º Çþ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±´ ³ º º ds:0000 CD 20 FF 9F 00 9A F0 FE Í ÿŸ šðþ ³ ³ º º ds:0008 1D F0 E0 01 7F 36 AA 01 ðà6ª ÃÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄĶ º ds:0010 7F 36 7C 02 8C 30 5D 22 6|Œ0]" ³ ss:0202 0779 º º ds:0018 01 01 01 00 02 FF FF FF  ÿÿÿ ³ ss:0200F60B º ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÄÙ Start executing the code, until you get to cs:0128, shown below. ÉÍ[þ]ÍCPU 80486ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍ1Í[][]Í» º cs:011C B9C300 mov cx,00C3  ax 6E4F ³c=0º º cs:011F 33FF xor di,di þ bx 0000 ³z=1º º cs:0121 57 push di ± cx 0000 ³s=0º º cs:0122 BE4401 mov si,0144 ± dx 0140 ³o=0º º cs:0125 FC cld ± si 02CA ³p=1º º cs:0126 F3A5 rep movsw ± di 0186 ³a=0º º cs:0128CB retf ± bp 0000 ³i=1º º cs:0129 B409 mov ah,09 ± sp 01FC ³d=0º º cs:012B BA3201 mov dx,0132 ± ds 68DE ³ º º cs:012E CD21 int 21 ± es 6E4F ³ º º cs:0130 CD20 int 20 ± ss 6E68 ³ º º cs:0132 4E dec si ± cs 68DE ³ º º cs:0133 6F outsw  ip 0128 ³ º Çþ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±´ ³ º º ds:0000 CD 20 FF 9F 00 9A F0 FE Í ÿŸ šðþ ³ ³ º º ds:0008 1D F0 E0 01 7F 36 AA 01 ðà6ª ÃÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄĶ º ds:0010 7F 36 7C 02 8C 30 5D 22 6|Œ0]" ³ ss:01FE 6E4F º º ds:0018 01 01 01 00 02 FF FF FF  ÿÿÿ ³ ss:01FC0000 º ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÄÙ The unpacker has copied itself to a location, which is just after the unpacked code. Singlestep one instruction, and you will see this : ÉÍ[þ]ÍCPU 80486ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍ1Í[][]Í» º cs:0000FD std  ax 6E4F ³c=0º º cs:0001 8CDB mov bx,ds þ bx 0000 ³z=1º º cs:0003 53 push bx ± cx 0000 ³s=0º º cs:0004 83C32D add bx,002D ± dx 0140 ³o=0º º cs:0007 03DA add bx,dx ± si 02CA ³p=1º º cs:0009 8CCD mov bp,cs ± di 0186 ³a=0º º cs:000B 8BC2 mov ax,dx ± bp 0000 ³i=1º º cs:000D 80E40F and ah,0F ± sp 0200 ³d=0º º cs:0010 B104 mov cl,04 ± ds 68DE ³ º º cs:0012 8BF2 mov si,dx ± es 6E4F ³ º º cs:0014 D3E6 shl si,cl ± ss 6E68 ³ º º cs:0016 8BCE mov cx,si ± cs 6E4F ³ º º cs:0018 D1E9 shr cx,1  ip 0000 ³ º Çþ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±´ ³ º º ds:0000 CD 20 FF 9F 00 9A F0 FE Í ÿŸ šðþ ³ ³ º º ds:0008 1D F0 E0 01 7F 36 AA 01 ðà6ª ÃÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄĶ º ds:0010 7F 36 7C 02 8C 30 5D 22 6|Œ0]" ³ ss:0202 0000 º º ds:0018 01 01 01 00 02 FF FF FF  ÿÿÿ ³ ss:02000000 º ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÄÙ Press pagedown a couple of times, until you get this : ÉÍ[þ]ÍCPU 80486ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍ1Í[][]Í» º cs:0155 8BD0 mov dx,ax  ax 0000 ³c=0º º cs:0157 8BE8 mov bp,ax þ bx 0000 ³z=1º º cs:0159 8BF0 mov si,ax ± cx 0000 ³s=0º º cs:015B 8BF8 mov di,ax ± dx 0000 ³o=0º º cs:015DCB retf ± si 0000 ³p=1º º cs:015E 0300 add ax,[bx+si] ± di 0000 ³a=0º º cs:0160 020A add cl,[bp+si] ± bp 0000 ³i=1º º cs:0162 0405 add al,05 ± sp 3FFC ³d=0º º cs:0164 0000 add [bx+si],al ± ds 68DE ³ º º cs:0166 0000 add [bx+si],al ± es 68DE ³ º º cs:0168 0000 add [bx+si],al ± ss 6A98 ³ º º cs:016A 06 push es ± cs 6E4F ³ º º cs:016B 07 pop es  ip 015D ³ º Çþ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±´ ³ º º ds:0000 CD 20 FF 9F 00 9A F0 FE Í ÿŸ šðþ ³ ³ º º ds:0008 1D F0 E0 01 7F 36 AA 01 ðà6ª ÃÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄĶ º ds:0010 7F 36 7C 02 8C 30 5D 22 6|Œ0]" ³ ss:3FFE 68EE º º ds:0018 01 01 01 00 02 FF FF FF  ÿÿÿ ³ ss:3FFC01EA º ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÄÙ Press F4 at location cs:015d, and press F7. That's it. You have now unpacked the test program. If you have done it right your TD showes something like this : ÉÍ[þ]ÍCPU 80486ÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÑÍÍÍÍÍÍÍ1Í[][]Í» º cs:01EA9A00009569 call 6995:0000  ax 0000 ³c=0º º cs:01EF 9A0D003369 call 6933:000D þ bx 0000 ³z=1º º cs:01F4 55 push bp ± cx 0000 ³s=0º º cs:01F5 89E5 mov bp,sp ± dx 0000 ³o=0º º cs:01F7 B80001 mov ax,0100 ± si 0000 ³p=1º º cs:01FA 9ACD029569 call 6995:02CD ± di 0000 ³a=0º º cs:01FF 81EC0001 sub sp,0100 ± bp 0000 ³i=1º º cs:0203 9ACC013369 call 6933:01CC ± sp 4000 ³d=0º º cs:0208 BF5200 mov di,0052 ± ds 68DE ³ º º cs:020B 1E push ds ± es 68DE ³ º º cs:020C 57 push di ± ss 6A98 ³ º º cs:020D 8DBE00FF lea di,[bp-0100] ± cs 68EE ³ º º cs:0211 16 push ss  ip 01EA ³ º Çþ±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±±´ ³ º º ds:0000 CD 20 FF 9F 00 9A F0 FE Í ÿŸ šðþ ³ ³ º º ds:0008 1D F0 E0 01 7F 36 AA 01 ðà6ª ÃÄÄÄÄÄÄÄÄÄÄÄÄÁÄÄĶ º ds:0010 7F 36 7C 02 8C 30 5D 22 6|Œ0]" ³ ss:4002 0000 º º ds:0018 01 01 01 00 02 FF FF FF  ÿÿÿ ³ ss:40000000 º ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÏÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÄÙ As you can see there is 2 far calls. Those are direct calls. It means that it will make a call to a certain location in memory. If we dump the memory used by the test program, we will have a image of the memory. But this is not enough to make a new exe file. This is because a exefile is not just an image of the memory, like a com file is. So what we need is a second dump from a different memory location. This is because of the direct call's. By comparing the two dump files, we can find the relocation needed to build a new exe file. The information like min/max memory usage is taken from the original exe file. But let's get back to the tutorial. Remember the value of SP, DS, ES, SS, CS and IP. Press the two shift keys, and enter the values in there corresponding location in [2]. You will probably notice that there is no field for ES, this is because that the initial value of ES points to the PSP, so write the value of ES at the PSP field. It is time to tell DumpExe the size of the memory block that we want to dump. Use TAB until you get to [4]. Press enter at 'Autodetect size'. There are two ways of getting the size. One is by using the stack, the other is 'by PSP'. The one that you should use (99 % of the times) is 'by stack'. Press S, and the size have been put into size field. Press enter at 'Autodetect name', and the name have been put into the name field. Now it's time to dump memory. This is done by pressing enter at 'Dump exe-code'. It will probably do it so fast that you won't notice that a process message will appear. Press ESC and press F9 in TD. The program has now terminated, and it's time to allocate a 4KB memory block. Start DumpExe again, and press enter at 'Allocate 4Kb'. The menu will change to Deallocate 4Kb. Press ESC, and reload our program by pressing F2. Start debuging like you did the first time. When you have reached the first instruction of the original code, enter all information like CS, SS.... in [3]. To make this this easyer, there is a 'Auto-Config' botton. It will set up all values in [3] by using the those you have entered in [2]. Dump the code, and we are almost done. Again terminate your program, by pressing F9 in TD. Start DumpExe again, and press enter at 'Deallocate 4Kb'. Exit your debugger. Run the MakeExe program with parameteres : First dump, second dump, original exefile, new filename. or like this : MAKEEXE.EXE unpackme.1 unpackme.2 unpackme.exe unpacked.exe The MakeExe program compares the two memory dump and builds a new exe file of the information found in the original exe files exeheader. After MakeExe has build a new exe file, the screen would look like this : Exe-maker v1.2 CARDWARE 1995 by BUGSY of OBSESSiON Read exeinfo : ooo Make new exefile. Make temp file. Process dump files : o Number of relocation : 004Bh Add zero code : oooo Size of EXE-header : 00170h Write code : o Write new exeheader. All done ! If the message 'End of valid code detected at ...' shows up, just press 'N' This message means that MakeExe has detected, that the two dumps does not contain valid code/data anymore. Normally one would answer 'No', to whether MakeExe should continue or not. If you answer 'yes', the current position would be concidered as a relocation in the exe header. But in special cases, where the unpacked exe file is smallere than the packed, one should say yes. Even if MakeExe ask more that one time. But as I said, only in special cases. I think this would be enough for you to continue on your own. If you have any questions about the use of these programs, feel free to contact me. You can get in touch with me by : Writing a letter to : Benjamin Petersen Nybrovej 304, F-48 DK-2800 Lyngby Denmark E-Mail me at : ben@ktas.dk Call me at : +45 45 974-348 [BUGSY/OBSESSiON] þ Greetings My greetings goes to (no order) : Spawn/OBSESSiON : Thanks for the menu system in this production! Darkman/VLAD : Thanks for your help about TSR detection. Ping (pingelingelater) : Thanks for proofreading this documentation. Sheap/s!p : Are you reading those Asm books I gave you ? Motion Man/DOM : Thanks for a nice ratio. HiTech : Never put a bug into a bottle of coca cola! Zteel/Difussion : Go nuke that SD.... Bionic/ECR/STH : Nice txt in 'UD OG SE MED DSB'..... Zero God : Still working on that Delta sound packer ? Jazz : Sorry, but I'd quit smoking. NOOOOT! Sketz/Silente PC : No more logos for 'the top BBS', sad... Drake/DOM : Thanks for the Soft-Ice tip! and all I did'nt remember : Sorry, kill us in our next life. A great welcome to our two new musicians : Fading Nimbus and Unison. Keep up the good work guys, you have really proofed yourselfs.