anonymous
написал 14 июля 2005 года в 17:57 (967 просмотров)
Ведет себя
неопределенно; открыл 1814 темы в форуме, оставил 5575 комментариев на сайте.
Не знал куда эту тему запостить …. по идее к программированию относится.
Ногами сильно прошу не пинать за такой вопрос.
Часто бывает что встречаешь в исходнике на СИ типа такое объявление:
char blabla[] = {
«\x73\x32\x76\x32\x90\…..»
и т.д.
т.е. я как бы знаю что это команды ассемблера. Но как их получить ? И как расшифровать такую строку? т.е. обратно в ассемблерный код.
В принципе я вроде знаю один метод получения такой строки. Пишем на асме потом компилим и дебужим.
К примеру nasm a.out …. А потом записывает адреса справа на лево.
Если не так то поправьте.
Если кто знает где об этом можно почитать, буду оч признателен.
Последние комментарии
- OlegL, 17 декабря 2023 года в 15:00 → Перекличка 21
- REDkiy, 8 июня 2023 года в 9:09 → Как «замокать» файл для юниттеста в Python? 2
- fhunter, 29 ноября 2022 года в 2:09 → Проблема с NO_PUBKEY: как получить GPG-ключ и добавить его в базу apt? 6
- Иванн, 9 апреля 2022 года в 8:31 → Ассоциация РАСПО провела первое учредительное собрание 1
- Kiri11.ADV1, 7 марта 2021 года в 12:01 → Логи catalina.out в TomCat 9 в формате JSON 1
ecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.
бррр… нах оно тебе? Я бы GDB воспользовался, в любом случае…
как это сделать с gdb ?
Имя массива ты знаешь. Выведи дамп с этого адреса.
Что-то я как-то сомневаюсь, что это «команды ассемблера». Нафига кому-то включать в сяшный исходник опкоды? Какой-нибудь mov и jmp еще куда ни шло, но опкоды? Это чтобы ни самому прочитать, ни людям показать?
Я бы сказал, что это картинка какая-нибудь, bitmap или pixmap. Соответственно, дизассемблировать ее несколько бессмыссленно будет. Я неправ?
Good Luck,
UT
посмотри исходник любого сплойта. Почти в каждом используется shellcode в виде такой строки.
берёшь эту строку, записываешь её в двоичном виде в файл. И потом:
$ objdump --disassemble-all --target=binary --architecture=i386 file.bin
Идея эксплоита, примерно такая: если надо выполнить кусок вражеского кода от имени root, то можно попросить suid программу скопировать этот код себе в стек, например, из stdin, или передавая его в качестве агрумента. Главное правильно написать шеллкод, подсунуть его в правильном месте, и добиться правильного сбоя root’овского процесса.
А шеллкод, может быть, с привязкой к конкретному адресу (в смысле не Position independent code)…
А эксплоит, может быть, на bash написан…
В общем эксплоит это программа, а шеллкод — это патч для другой программы (runtime патченной программы с правами root), в большинстве (во всех?) случаев для стека.
Вы чего какой это ASM. Это шеел код Вот гляньте кто хотите ;o)
P.S Вреда прога не делает
вот что я сделал:
; shell
char cliphcode[] =
«\x90\x90\xeb\x1f\xb8\xb6\x00\x00»
«\x00\x5b\x31\xc9\x89\xca\xcd\x80»
«\xb8\x0f\x00\x00\x00\xb9\xed\x0d»
«\x00\x00\xcd\x80\x89\xd0\x89\xd3»
«\x40\xcd\x80\xe8\xdc\xff\xff\xff»;
записал в файл ggg такое:
0000b6b81feb9090
80cdca89c9315b00
0dedb90000000fb8
d389d08980cd0000
ffffffdce880cd40
т.е. адреса справа налево.
потом сделал как сказал rgo
objdump --disassemble-all --target=binary --architecture=i386 ggg
и получил дамп
ggg: file format binary
Disassembly of section .data:
00000000 <.data>:
0: 30 30 xor %dh,(%eax)
2: 30 30 xor %dh,(%eax)
4: 62 36 bound %esi,(%esi)
6: 62 38 bound %edi,(%eax)
8: 31 66 65 xor %esp,0×65(%esi)
b: 62 39 bound %edi,(%ecx)
d: 30 39 xor %bh,(%ecx)
f: 30 0a xor %cl,(%edx)
11: 38 30 cmp %dh,(%eax)
13: 63 64 63 61 arpl %sp,0×61(%ebx,2)
17: 38 39 cmp %bh,(%ecx)
19: 63 39 arpl %di,(%ecx)
1b: 33 31 xor (%ecx),%esi
1d: 35 62 30 30 0a xor $0xa303062,%eax
22: 30 64 65 64 xor %ah,0×64(%ebp,2)
26: 62 39 bound %edi,(%ecx)
28: 30 30 xor %dh,(%eax)
2a: 30 30 xor %dh,(%eax)
2c: 30 30 xor %dh,(%eax)
2e: 30 66 62 xor %ah,0×62(%esi)
31: 38 0a cmp %cl,(%edx)
33: 64 33 38 xor %fs:(%eax),%edi
36: 39 64 30 38 cmp %esp,0×38(%eax,%esi,1)
3a: 39 38 cmp %edi,(%eax)
3c: 30 63 64 xor %ah,0×64(%ebx)
3f: 30 30 xor %dh,(%eax)
41: 30 30 xor %dh,(%eax)
43: 0a 66 66 or 0×66(%esi),%ah
46: 66 data16
47: 66 data16
…………………………….
это понятно когда shellcode как в моем примере. А если он на целую страницу? Это где-то день займет на переписывание. В этом случае наверно надо делать как сказал myst. Т.е. при помощи gdb. Хотя я ламо в gdb (2 раза юзал)…. знаю токо run breakpoint и next со степом ))
Вообщем, как этот дамп вывести в gdb ?
Тут уж ты не теряйся и читай, читай, читай…