The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
'ring 0' и Написание модуля ядра на C/C++, !*! proglammer, 20-Фев-05, 00:11  [смотреть все]
Здравствуйте все.
я пытаюсь получить уровень 0 в линуксе на ассемблере,
но поскольку я ламер и не знаю английского - я не могу нормально понять доки по заражению елф(хочу заразить ядро без потери его функциональности).
мне советовали написать модуль к ядру - но я не знаток C/C++, сейчас понемногу изучаю.
боольшая просьба всем тем - у кого есть свободное время и знания C/C++ или Gnu_as - выложить здесь или скинуть на proglammer@inbox.ru код получения уровня 0 на асме(не под виндовс!), или код ЛЮБОГО модуля ядра(2.4-18.3) для линукса(ну пусть он хоть хелло выводит) который можно скомпилить gcc-2.96-110.

большая просьба - дайте код и всё. не надо писать "зайди на коденет.ру там все есть".
заранее ОХРЕНЕННОЕ спасибо всем кто сможет помочь.
и извиняюсь - но отвечать здесь кому либо смогу нескоро т.к. вкалываю грузчиком и времени ОЧЕНЬ мало.
в качестве платы за вашу щедрость моду дать поюзать мой hex - редактор, ом довольно сырой(пишу часика по два в день, когда не сплю и не работаю :) ).
вот он - leaker.narod.ru/hewr.rar

также буду благодарен всем кто даст ссылки на русские хелпы по ELF формату.

  • 'ring 0' и Написание модуля ядра на C/C++, !*! proglammer, 00:16 , 20-Фев-05 (1)
    господи... не "моду" а могу, и не "ом" а он.
  • 'ring 0' и Написание модуля ядра на C/C++, !*! Murr, 17:37 , 20-Фев-05 (3)
    mymodule.c
    --->
    #define __KERNEL__
    #define MODULE

    #include <linux/kernel.h>
    #include <linux/module.h>
    #include <linux/init.h>

    static int mymodule_init() {
        printk("hello,world\n");
        return 0;
    }

    static void mymodule_done() {
    }

    module_init();
    module_exit();

    --->

    gcc -I/lib/modules/`uname -r`/build include mymodule.c -o mymodule.o -c

    --->

    Если хочешь получить ассемблерный код, то замени "-c" на "-s". :)

    • 'ring 0' и Написание модуля ядра на C/C++, !*! Murr, 17:38 , 20-Фев-05 (4)
      Пардон "-c" на "-S", конечно же.
      • 'ring 0' и Написание модуля ядра на C/C++, !*! proglammer, 11:56 , 21-Фев-05 (5)
        gcc -I/lib/modules/`uname -r`/build include mymodule.c -o mymodule.o -c
        выдает: "gcc: cannot specify -o with -c or -S and multiple compilations"
        ----------
        gcc -I/lib/modules/`uname -r`/build mymodule.c -o mymodule.o -c
        выдает:
        In file included from mymodule.c:5:
        /usr/include/linux/module.h:60: parse error before `atomic_t'
        /usr/include/linux/module.h:60: warning: no semicolon at end of struct or union
        /usr/include/linux/module.h:60: warning: no semicolon at end of struct or union
        /usr/include/linux/module.h:62: parse error before `}'
        /usr/include/linux/module.h:62: warning: data definition has no type or storage class
        /usr/include/linux/module.h:91: parse error before `}'
        ----------
        закомментил
        union
        { atomic_t usecount;
          long pad;
        } uc;
        в module.h

        gcc выдал:
        /tmp/ccaA55N7.s: Assembler messages:
        /tmp/ccaA55N7.s:38: Error: missing expression
        /tmp/ccaA55N7.s:40: Error: missing expression

        я так понял - у меня говеный glibc-kernheaders*rpm   ?
        или что?

        • 'ring 0' и Написание модуля ядра на C/C++, !*! Murr, 13:38 , 21-Фев-05 (6)
          >gcc -I/lib/modules/`uname -r`/build include mymodule.c -o mymodule.o -c

          gcc -I/lib/modules/`uname -r`/build/include mymodule.c -o mymodule.o -c

          • 'ring 0' и Написание модуля ядра на C/C++, !*! proglammer, 16:09 , 21-Фев-05 (7)
            Спасибо! :) совсем отупел я от работы, пора увольнятся.
            но тут загвоздка:
            теперь
            gcc -I/lib/modules/`uname -r`/build/include mymodule.c -o mymodule.o -c
            выдает:
            /tmp/ccQKp19t.s: Assembler messages:
            /tmp/ccQKp19t.s:38: Error: missing expression
            /tmp/ccQKp19t.s:40: Error: missing expression
            --------
            я сделал так
            gcc -I/lib/modules/`uname -r`/build/include mymodule.c -o mymodule.o -S
            и исправил строчки 38/40
            с     .set    init_module,
            .globl cleanup_module
                .set    cleanup_module,

            на    .set    init_module,0
            .globl cleanup_module
                .set    cleanup_module,1
            и попытался скомпилить
            вот что выдал ld
            ld: warning: cannot find entry symbol _start; defaulting to 08048074
            a.out: In function `mymodule_init':
            a.out(.text+0xf): undefined reference to `printk'

            :(

          • 'ring 0' и Написание модуля ядра на C/C++, !*! Lamr, 17:20 , 21-Фев-05 (8)
            >>gcc -I/lib/modules/`uname -r`/build include mymodule.c -o mymodule.o -c
            >
            >gcc -I/lib/modules/`uname -r`/build/include mymodule.c -o mymodule.o -c

            Чё, Murr, на пиво заработать решил?

            :-))

            ну-ну

            • 'ring 0' и Написание модуля ядра на C/C++, !*! proglammer, 16:48 , 22-Фев-05 (9)
              :) !!!!!
              спасибо пиплы!
              допер! радости полные штаны блин!!!!

              всего-то
              gcc -I/lib/modules/`uname -r`/build/include mymodule.c -o 0.s -S
              -----------------------0.s:
              .set    init_module,0
              .globl cleanup_module
              .set    cleanup_module,0
              -----------------------
              gcc -I/lib/modules/`uname -r`/build/include 0.s -o mymodule.o -c

              все работает - вот тока insmod выдает:
              Warning: loading mymodule.o will taint the kernel: no license

              как от этого избавится а?

              • 'ring 0' и Написание модуля ядра на C/C++, !*! proglammer, 18:21 , 22-Фев-05 (10)
                ну все! разобрался.
                короче для всех ламеров вроде меня выкладываю сл. код:
                файл mymod.c
                ------------------------------
                #define __KERNEL__
                #define MODULE
                #include <linux/module.h>
                #include <linux/kernel.h>
                #include <linux/init.h>
                #define DRIVER_AUTHOR "автор модуля"
                #define DRIVER_DESC   "описание модуля"

                static int __init init_fisrt_mod(void)
                {
                        printk(KERN_ALERT "Hello, world!\n");
                        return 0;
                }

                static void __exit cleanup_fisrt_mod(void)
                {
                        printk(KERN_ALERT "Goodbye, world.\n");
                }

                module_init(init_fisrt_mod);
                module_exit(cleanup_fisrt_mod);

                MODULE_LICENSE("GPL");
                /*
                *эта хрень не дает insmod-у выводить:
                Warning: loading mymodule.o will taint the kernel: no license
                */

                а то что ниже я пока не пробовал
                // MODULE_AUTHOR(DRIVER_AUTHOR);    /* Автор модуля */
                // MODULE_DESCRIPTION(DRIVER_DESC); /* Назначение модуля */
                ---------------------------------
                чтобы это скомпилить должен быть установлен kernel-source*.rpm
                компилить так:
                gcc -I/lib/modules/`uname -r`/build/include mymod.c -o mymod.o -c
                ---------------------------------
                а те кто в С/С++ ноль, а в асме крут - делают так:

                gcc -I/lib/modules/`uname -r`/build/include mymod.c -o 0.s -S
                #дальше редактируем файл 0.s:
                #и компилим дальше
                gcc -I/lib/modules/`uname -r`/build/include 0.s -o mymod.o -c

                блин ну и долго`ж я мудился....


                • 'ring 0' и Написание модуля ядра на C/C++, !*! Simps, 19:25 , 22-Фев-05 (11)
                  >ну все! разобрался.
                  >короче для всех ламеров вроде меня выкладываю сл. код:
                  >файл mymod.c
                  >------------------------------
                  >#define __KERNEL__
                  >#define MODULE
                  >#include <linux/module.h>
                  >#include <linux/kernel.h>
                  >#include <linux/init.h>
                  >#define DRIVER_AUTHOR "автор модуля"
                  >#define DRIVER_DESC   "описание модуля"
                  >
                  >static int __init init_fisrt_mod(void)
                  >{
                  >        printk(KERN_ALERT "Hello, world!\n");
                  >        return 0;
                  >}
                  >
                  >static void __exit cleanup_fisrt_mod(void)
                  >{
                  >        printk(KERN_ALERT "Goodbye, world.\n");
                  >}
                  >
                  >module_init(init_fisrt_mod);
                  >module_exit(cleanup_fisrt_mod);
                  >
                  >MODULE_LICENSE("GPL");
                  >/*
                  >*эта хрень не дает insmod-у выводить:
                  >Warning: loading mymodule.o will taint the kernel: no license
                  >*/
                  >
                  >а то что ниже я пока не пробовал
                  >// MODULE_AUTHOR(DRIVER_AUTHOR);    /* Автор модуля */
                  >// MODULE_DESCRIPTION(DRIVER_DESC); /* Назначение модуля */
                  >---------------------------------
                  >чтобы это скомпилить должен быть установлен kernel-source*.rpm
                  >компилить так:
                  >gcc -I/lib/modules/`uname -r`/build/include mymod.c -o mymod.o -c
                  >---------------------------------
                  >а те кто в С/С++ ноль, а в асме крут - делают
                  >так:
                  >
                  >gcc -I/lib/modules/`uname -r`/build/include mymod.c -o 0.s -S
                  >#дальше редактируем файл 0.s:
                  >#и компилим дальше
                  >gcc -I/lib/modules/`uname -r`/build/include 0.s -o mymod.o -c
                  >
                  >блин ну и долго`ж я мудился....

                  Да ты уже гуру в вопросе написания модулей для ядра =)

                  • 'ring 0' и Написание модуля ядра на C/C++, !*! proglammer, 21:19 , 24-Фев-05 (12)
                    >Да ты уже гуру в вопросе написания модулей для ядра =)

                    :)

                    нее до гуру мне оччень далеко...
                    я в осносном asm мучаю, и вообщем еще один вопрос - как из модуля запустить программу.
                    я хотел через execve("/bin/prog");, execl и т.д. но во первых -
                    insmod выдает:
                    mymod.o: unresolved symbol execve
                    и во вторых ведь при execve код вызвавшегоо процесса перезапишется, а ето лажа...
                    ну а с fork-ом я конкретно обломался, как только вызвал - ядро повисло.
                    а попытавшись сделать execve через асм
                    pushl    $0x7672732f      #/srv - запускаемая прога
                    movl    %esp,%ebx
                    movl    $11,%eax
                    xorl    %ecx,%ecx
                    xorl    %edx,%edx
                    int    $0x80
                    опять обломался - ничего не произошло....

                    • 'ring 0' и Написание модуля ядра на C/C++, !*! Murr, 20:42 , 25-Фев-05 (14)
                      >pushl $0x7672732f      #/srv - запускаемая прога

                      Строки должны быть 0-завершенные. В ядре используются ASCIIZ строки.

                      >movl %esp,%ebx
                      >movl $11,%eax
                      >xorl    %ecx,%ecx
                      >xorl    %edx,%edx
                      >int $0x80
                      >опять обломался - ничего не произошло....

                      В ядре нужно быть очень аккуратным при попытках из ядра делать вещи, завязанные на контекст текущего процесса/нити. К тому же, не забывай, что если ты дергаешь ядреные функции не напрямую, а через intx80, то ты тем самым портишь стек ядра (если ты сделаешь это из init функции, то модуль не завершит инициализацию).

                      • 'ring 0' и Написание модуля ядра на C/C++, !*! proglammer, 20:05 , 26-Фев-05 (15)
                        >В ядре нужно быть очень аккуратным при попытках из ядра делать вещи,
                        >завязанные на контекст текущего процесса/нити. К тому же, не забывай, что
                        >если ты дергаешь ядреные функции не напрямую, а через intx80, то
                        >ты тем самым портишь стек ядра (если ты сделаешь это из
                        >init функции, то модуль не завершит инициализацию).

                        а из какой функции это делать?("main(){}"?), как вызывать функции напрямую,
                        и как можно запустить прогу не испортив стек ядра?
                        хочется знать все и сразу. :)

                        ставлю виртуальную бутылку пива всем участникам беседы. :)

                        • 'ring 0' и Написание модуля ядра на C/C++, !*! majordomo, 22:06 , 26-Фев-05 (16)
                          >>В ядре нужно быть очень аккуратным при попытках из ядра делать вещи,
                          >>завязанные на контекст текущего процесса/нити. К тому же, не забывай, что
                          >>если ты дергаешь ядреные функции не напрямую, а через intx80, то
                          >>ты тем самым портишь стек ядра (если ты сделаешь это из
                          >>init функции, то модуль не завершит инициализацию).
                          >
                          >а из какой функции это делать?("main(){}"?), как вызывать функции напрямую,
                          >и как можно запустить прогу не испортив стек ядра?
                          >хочется знать все и сразу. :)
                          >
                          >ставлю виртуальную бутылку пива всем участникам беседы. :)


                          static void call(void* dummy){
                              int rv;
                              static char * envp[] = { "HOME=/", "TERM=linux", "PATH=/sbin:/usr/sbin:/bin:/usr/bin", NULL };
                              char *argv[] = { "/sbin/watchdog", NULL };
                              rv = call_usermodehelper(argv[0],argv,envp,0);
                          // можно что-нибудь сделать с rv...
                          }

                          static DECLARE_WORK(work,call,0);

                          void func() // где-то внутри модуля
                          {
                              schedule_work(&work);
                          }

                          static void __exit fini(void) // при выгрузке модуля
                          {
                                  flush_scheduled_work();
                          }

                          Код для 2.6, в 2.4 немного по-другому... В прошлом году мне на Lor подсказали, для iptables расширение писал, там и для 2.4 пример остался...

                        • 'ring 0' и Написание модуля ядра на C/C++, !*! proglammer, 21:21 , 27-Фев-05 (17)
                          >Код для 2.6, в 2.4 немного по-другому...
                          а у меня какраз 2.4-18.3
                          да и скомпилить не получилось :(
                          асм всетаки проще...
                          и в модуле всего 2-е функции чтоли?(__init и __exit)
                          я попробовал между ними " main(){ printk(KERN_ALERT "work.\n");} " вставить,
                          и ничего не вышло.
                          блин из меня программер как из горбачева балерина.
                          а "Lor" это что за форум? - я на lor.ru зашел так это сайт оториноларингологии! оказался :)

                        • 'ring 0' и Написание модуля ядра на C/C++, !*! majordomo, 22:14 , 27-Фев-05 (18)
                          >>Код для 2.6, в 2.4 немного по-другому...
                          >а у меня какраз 2.4-18.3
                          >да и скомпилить не получилось :(
                          >асм всетаки проще...
                          >и в модуле всего 2-е функции чтоли?(__init и __exit)
                          >я попробовал между ними " main(){ printk(KERN_ALERT "work.\n");} " вставить,
                          >и ничего не вышло.
                          >блин из меня программер как из горбачева балерина.
                          >а "Lor" это что за форум? - я на lor.ru зашел так
                          >это сайт оториноларингологии! оказался :)

                          1) Почитайте литературу по ядру линукса, хотя бы вот это:
                          http://jamesthornton.com/linux/lkmpg/

                          2) lor == linux.org.ru
                          Вот ссылка на нужный тред:
                          http://www.linux.org.ru/profile/majordomo//view-message.jsp?...
                          см. сообщение от idle 20.04.2004 18:09:13, да и вообще вес тред познавательный 8)

                        • 'ring 0' и Написание модуля ядра на C/C++, !*! Link, 22:38 , 27-Фев-05 (19)
                          >блин из меня программер как из горбачева балерина.

                          Вы бы для начала почитали хоть какую-нить плохонькую теорию, представление получили, над чем вообще работаете. А то всё это сильно напоминает шаманские пляски с бубном под мухоморами.

                          Вот, например, замечательная книжка Морриса Баха,"Архитектура ОС UNIX"
                          http://coolsoft.ru/lib/unix.txt.tgz

                          ( смотреть можно так: tar zxfO unix.txt.tgz | less )

                          И вообще, завязывайте с линухом возюкаться - это мода, впустую время потратите.
                          ИМХО
                          beastie.ru

                        • 'ring 0' и Написание модуля ядра на C/C++, !*! proglammer, 23:19 , 27-Фев-05 (20)
                          >1) Почитайте литературу по ядру линукса, хотя бы вот это:
                          >http://jamesthornton.com/linux/lkmpg/
                          я совершенно не знаю английского.
                          а на lor сходил - хелпов там куча, буду читать.

                          > И вообще, завязывайте с линухом возюкаться - это мода, впустую время
                          >потратите.
                          > ИМХО
                          >beastie.ru
                          книжку ессно скачал и буду читать.
                          а про linux/unix споров много - на вкус и цвет товарищей нет.

                        • 'ring 0' и Написание модуля ядра на C/C++, !*! majordomo, 00:10 , 28-Фев-05 (21)
                          >>1) Почитайте литературу по ядру линукса, хотя бы вот это:
                          >>http://jamesthornton.com/linux/lkmpg/
                          >я совершенно не знаю английского.

                          Это не кошерно. Самые интересные доки как обычно не на русском 8)

                          Посмотрите еще вот это:
                          https://www.opennet.ru/openforum/vsluhforumID3/4560.html

                        • 'ring 0' и Написание модуля ядра на C/C++, !*! proglammer, 12:44 , 28-Фев-05 (22)
                          >Посмотрите еще вот это:
                          >https://www.opennet.ru/openforum/vsluhforumID3/4560.html

                          :)
                          а вот по русски - это дело! буду читать ессно!
                          Спасиба всем! а именно Murr-у majordomo и Link-у!

            • 'ring 0' и Написание модуля ядра на C/C++, !*! Murr, 20:31 , 25-Фев-05 (13)
              > Чё, Murr, на пиво заработать решил?
              >
              > :-))
              >
              > ну-ну


              На пиво мне в отличие от некоторых и зарплаты хватает.
              Насчет того кода - руки решил размять.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру