-
Notifications
You must be signed in to change notification settings - Fork 8
/
DUMPAPI.TXT
276 lines (233 loc) · 15.2 KB
/
DUMPAPI.TXT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
Û Û
Û <*> DumpExe API version 2.5 <*> Û
Û Û
Û by ÜÄÜ Ü ÜÄÜ ÜÄÜ ÜÄÜ ÜÄÜ Ü ÜÄÜ ÜÄÜ Û
Û Û Û ÛÄÜ ßÄÜ ÛÄ ßÄÜ ßÄÜ Ü Û Û Û Û Û
Û Û Û Û Û Ü Û Û Ü Û Ü Û Û Û Û Û Û Û
Û ßßß ßßß ßßß ßßß ßßß ßßß ß ßßß ß ß 1998 Û
Û Û
ÛÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÛ
Û Handle Real name Age Profession E-Mail address Group activity Û
ÛÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÛ
Û Bugsy Benjamin Petersen 25 Programmer [email protected] Coder, organizer Û
Û Hendrix Patrick Enoch 22 Study Math [email protected] Coder, unpackers Û
Û Spawn Michael Skovslund 24 Programmer [email protected] Coder, gfx Û
Û Icicle Henrik Eiriksson 25 Study IFA [email protected] Music, art Û
ÛÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÛ
Û Û
Û PLEASE CHECK OUT OUR INTERNET HOMEPAGE AT : home.t-online.de/home/enoch Û
Û Û
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
INDEX
History
Introduction
Installing DumpExe API
Tutorial
Adding security
API documentation
þ History
Version Release Note
2.4 First release of the API interface as requested by Dark Stalker.
2.5 Pentium safe code with Borland Pascal patch for runtime error 200
þ Introduction
By using DumpExe API you will be able to create your own unpackers. So why
would you do that when there are programs like CUP, UNP, TRON, and others ?
Lets first assume that Mr. X. has made an exepacker. This exepacker has
the ability to pack an exefile (make it smaller). This is good because
when you pack a file, it will fill less of your disk. It will also make it
secure (at least a bit secure). You cannot modify, let's say, a text string
that says who made the program, because the text is unreadable while in
its packed form. But only until Mr. Cracker makes an unpacker. Then everyone
can unpack the file and change it. So what does Mr. X. do ? He (or she)
makes a new packer which detects Mr. Crackers unpacker. Then Mr. Cracker
makes a new unpacker...... So what we need here is a unit that isn't
an unpacker, but still makes it easy to make one. This is what the DumpExe
API is about. It isn't an unpacker, just an interface that makes it easier
for you to make custom unpackers. Your job is to load and execute the packed
program until the VERY first original (unpacked) instruction of the program.
Then call DumpExe API a few times, and do it all over again one more time.
What you get from this is two dumps that represent an image of the unpacked
exefile. You need two dumps due to the nature of Exefiles, unlike comfiles
that only need one dump to rebuild a new com file. The next step in order
to create an unpacked exefile is to use the utility MakeExe. MakeExe will
then compare the two dumps and add a relocation to a relocation table for
every word it finds that doesn't match. At last MakeExe creates a new exefile
that centers all informations about the new exefile. You don't need to know
how this is done, all you need is to make a 'tracer' that detects when the
unpacker is finished unpacking the exefile in memory.
þ Introduction
To install the DumpExe API, just run DUMPAPI.EXE once. To uninstall it
just run DUMPAPI.EXE again. Remember to unsecure the session if you secured
it, or DumpExe API will just install itself again (twice).
þ Tutorial
To make use of the DumpExe API, you could follow this cookbook.
1. Execute DUMPAPI.EXE
2. Check for right DumpExe API version
3. Get DumpExe API address and secure session
4. Load packed exefile
5. Execute packed program until the very first unpacked instruction
^ This is the tough part, all others steps are very easy. :-)
6. Fill registers inside DumpExe API
7. Autodetect size (by Stack or by PSP)
8. Dump memory using DumpExe API (part one)
9. Free packed programs environment
10. Shrink packed programs memory to 4 KB (and save a pointer)
11. Load packed exefile again
12. Execute packed program until the very first unpacked instruction
13. Dump memory using DumpExe API (part two)
14. Free packed programs environment
15. Free packed programs memory
16. Free shrinked programs memory
17. Unsecure DumpExe session
18. Unload DumpExe API
19. Execute MakeExe
That's all ;-)
It isn't as hard as it might sound. I have put a full featured unpacker,
and the source code for it, in this package. Check it out to learn more
about using DumpExe API and how it works. Oh, btw, remember to switch
current PSP every time you start and stop tracing a file.
þ Adding security
I have added a little security into the DumpExe API. When you call
'Get DumpExe API address and secure DumpExe session', DumpExe API
uninstalls ALL hooked interrupt vectors. Please see the example below
on how to use the 'Get DumpExe API address and secure DumpExe session' :
;------------------------------------------------------------------------------
Proc Doit
mov ah, 00h
int 0fbh
cmp bx, 0240h
jne ErrorInVersion
mov ah, 01h ; Get API address and secure DumpExe session
int 0fbh
mov word ptr APISeg, es
mov word ptr APIOfs, di
...
mov ah, xxh
call APIAddress
...
mov ah, 02h ; Unsecure DumpExe session
call APIAddress
ErrorInVersion:
ret
EndP Doit
;------------------------------------------------------------------------------
Proc APIAddress
pushf ; Emulate an interrupt call
db 9ah ; call far xxxx:xxxx opcode
APIOfs: dw 0
APISeg: dw 0
ret
EndP APIAddress
;------------------------------------------------------------------------------
Just remember to call the 'Unsecure DumpExe API session' before you exit
your unpacker or you won't be able to uninstall the API.
þ API documentation
To call the DumpExe API you need to issue an INT 0FBh. Remember to fill
registers, as shown below, before calling INT 0FBh. Functions are demined
by register AH, and subfunction by AL.
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
Û Get DumpExe API version Û
ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ
Û Input : ah = 00h Û
Û Û
Û Output : bh = major version Û
Û bl = minor version Û
Û Û
Û Comment : Use this function to demind the DumpExe API version (0240h) Û
Û Û
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
Û Get DumpExe API Address and secure session Û
ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ
Û Input : ah = 01h Û
Û Û
Û Output : es = segment of DumpExe API address Û
Û di = offset of DumpExe API address Û
Û Û
Û Comment : To make DumpExe API a bit more secure, please call this function.Û
Û Û
Û .----------------------------------------------------------------. Û
Û | PLEASE PUSH FLAGS BEFORE CALLING THE DumpExe API ADDRESS AFTER | Û
Û | THIS INTERRUPT CALL, SINCE YOU ARE USING THE INTERRUPT HANDLER.| Û
Û `----------------------------------------------------------------' Û
Û Û
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
Û Unsecure DumpExe API session Û
ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ
Û Input : ah = 02h Û
Û Û
Û Output : None Û
Û Û
Û Comment : Remember to CALL this function, before you exits your unpacker. Û
Û (Only if you are using the DumpExe API security) Û
Û Û
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
Û Fill DumpExe API registers Û
ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ
Û Input : ah = 03h Û
Û al = Dump number (1 = first dump, 2 = second dump) Û
Û ds:si -> DumpExeRegStructure Struc Û
Û _cs dw ? Û
Û _ip dw ? Û
Û _ss dw ? Û
Û _sp dw ? Û
Û _psp dw ? Û
Û DumpExeRegStructure EndS Û
Û Û
Û Output : None Û
Û Û
Û Comment : When you have executed the packed program, until the very first Û
Û original instruction, please call this function with the proper Û
Û register values, found at that moment. PSP is an alias for ES Û
Û ^^^^ Û
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
Û Autodetect dump size Û
ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ
Û Input : ah = 04h Û
Û bl = Detection type. (1 = by PSP, 2 = by stack) Û
Û Û
Û Output : al = nonzero if error Û
Û Û
Û Comment : This function will autodetect the size for BOTH dumps. The most Û
Û common metode is by stack, since it usually gives smaller dumps. Û
Û Û
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
Û Set dump size Û
ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ
Û Input : ah = 05h Û
Û bx = Size in paragraphs (Round up : Size in bytes divided by 16) Û
Û Û
Û Output : None Û
Û Û
Û Comment : If the autodetect function failes on both types, you can use Û
Û this function to set a size of your own choice. Û
Û Û
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
Û Dump exe-code Û
ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ
Û Input : ah = 06h Û
Û al = Dump number (1 = first dump, 2 = second dump) Û
Û Û
Û Output : al = nonzero if error Û
Û Û
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
ÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜ
Û Snapshot memory Û
ÛÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÜÛ
Û Input : ah = 07h Û
Û Û
Û Output : al = nonzero if error Û
Û Û
Û Comment : Take a snapshot of the first megabyte of memory and dump it into Û
Û a file called SNAPSHOT.MEM. You can use this function to view if Û
Û your unpacker/generic tracer works, and for a lot of other stuff.Û
Û Û
ßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßßß
That's it folks, that wasn't so bad after all wasn't it ?
[BUGSY/OBSESSiON]