Page 1 of 1

Что выводит эта программа при запуске?

PostPosted: 27 Jan 2015, 17:31
by lvd
Code: Select all
const int main[] = {
    -443987883, 440, 113408, -1922629632,
    4149, 899584, 84869120, 15544,
    266023168, 1818576901, 1461743468, 1684828783,
    -1017312735
};

Программа для linux x86-64 и гцц.

Re: Что выводит эта программа при запуске?

PostPosted: 27 Jan 2015, 19:04
by deathsoft
Переведи поебень в массиве в байты и посмотри любым дизасмом - хинт - main - это просто адрес функции - тело в виде массива.

Выводит она видимо надпись "линупс - говно".

Более того на нормальном проце программа вообще упадет с segv, т.к. у любых массивов стоит атрибут NX (non executable), т.к. это данные а не код и страницы с массивом помечаются как не исполняемые (ридонли или RW).

Re: Что выводит эта программа при запуске?

PostPosted: 27 Jan 2015, 21:49
by lvd
А вот хуй, main оказывается в секции .text, и выполняется замечательно.

Re: Что выводит эта программа при запуске?

PostPosted: 28 Jan 2015, 00:03
by deathsoft
lvd wrote:А вот хуй, main оказывается в секции .text, и выполняется замечательно.

Так потому, что компилятор и линкер уебищный, создает потенциально уязвимую программу помещая массив в исполняемые страницы.

Re: Что выводит эта программа при запуске?

PostPosted: 31 Jan 2015, 19:19
by fk0
Пиздишь ёпт!

Code: Select all
   .file   "test.c"
   .globl   main
   .section   .rodata
   .align 32
   .type   main, @object
   .size   main, 52
main:
   .long   -443987883
   .long   440
   .long   113408
   .long   -1922629632
   .long   4149
   .long   899584
   .long   84869120
   .long   15544
   .long   266023168
   .long   1818576901
   .long   1461743468
   .long   1684828783
   .long   -1017312735
   .ident   "GCC: (Debian 4.7.4-3) 4.7.4"
   .section   .note.GNU-stack,"",@progbits


sysop@pc:ghostcheck$ nm a.out | grep main
U __libc_start_main@@GLIBC_2.0
08048480 R main

man nm -->

"R" "r" The symbol is in a read only data section.


$ objdump -D a.out
Code: Select all
...
Disassembly of section .rodata:

08048460 <_fp_hw>:
8048460:   03 00                   add    (%eax),%eax
   ...

08048464 <_IO_stdin_used>:
8048464:   01 00                   add    %eax,(%eax)
8048466:   02 00                   add    (%eax),%al
   ...

08048480 <main>:
8048480:   55                      push   %ebp
8048481:   48                      dec    %eax
8048482:   89 e5                   mov    %esp,%ebp
8048484:   b8 01 00 00 00          mov    $0x1,%eax
8048489:   bb 01 00 00 00          mov    $0x1,%ebx
804848e:   67 8d 35                lea    (%di),%esi
8048491:   10 00                   adc    %al,(%eax)
8048493:   00 00                   add    %al,(%eax)
8048495:   ba 0d 00 00 00          mov    $0xd,%edx
804849a:   0f 05                   syscall
....


Буханка рулез! Виндовс мастдай!

Re: Что выводит эта программа при запуске?

PostPosted: 31 Jan 2015, 19:28
by fk0
А вот хуй. В rodata оно конечно кладёт. С линкером всё заебись, и с компилятором. А стартап уебанский на 146% -- он прямо из rodata main и запускает. И ведь запускается (БУХАНКА, БУХАНКА, БУХАНКА!!!), не падает. NX бит не предусмотрен.

Re: Что выводит эта программа при запуске?

PostPosted: 01 Feb 2015, 22:29
by deathsoft
fk0 wrote:NX бит не предусмотрен.

Давно ядро буханки есть с NX битом и рантайм который все это поддерживает.

Re: Что выводит эта программа при запуске?

PostPosted: 08 Feb 2015, 20:44
by fk0
Ну и покажи как это ведро и рантайм запустить.

Re: Что выводит эта программа при запуске?

PostPosted: 09 Feb 2015, 22:12
by deathsoft
fk0 wrote:Ну и покажи как это ведро и рантайм запустить.

Вот это разве не оно? http://en.wikipedia.org/wiki/PaX
PaX offers executable space protection, using (or emulating in operating system software) the functionality of an NX bit (i.e., built-in CPU/MMU support for memory contents execution privilege tagging). It also provides address space layout randomization to defeat ret2libc attacks and all other attacks relying on known structure of a program's virtual memory.


И в догонку современное ядро с патчами http://grsecurity.net/