PSPx форум

PSPx форум (https://www.pspx.ru/forum/index.php)
-   PSP хакинг и девелопмент (https://www.pspx.ru/forum/forumdisplay.php?f=195)
-   -   Поиск kernel эксплоитов, инструкция (https://www.pspx.ru/forum/showthread.php?t=97295)

frostegater 16.06.2012 11:36

Поиск kernel эксплоитов, инструкция
 
Вложений: 1
Большое спасибо Davee и some1 за всё.
Сегодня я хочу вам рассказать про поиск kernel эксплоитов. Для начала разберемся для чего нам это нужно. PSP имеет много разделов памяти (вы можете посмотреть их ниже в спойлере), но речь пойдет только про 2: user и kernel. Различается память в уровне доступа. Код выполненный с kernel правами (запущенный из модуля с kernel правами) имеет права системы и имеет доступ ко всему, в свою очередь user имеет доступ только к: Scratchpad, VRAM, P5 и Extended Memory (в общем ко всему, кроме kernel).
И так, для чего же нам нужны kernel права? Для того чтобы сделать изменения в прошивке. Проще говоря, создание полноценного HEN или CFW невозможно без наложения патчей на модули системы. Для этого мы и будем получать kernel права.
Хочу огорчить, вам необходимы знания языка Си и ассемблера под архитектуру MIPS (чтобы изучить прочти всё про MIPS в разделе "Интересные ссылки" (см. в конец)).

Описание памяти

Код:

|-------------------------------|------------|------------|------------|--------|--------|
|                              |            |            |  Размер  | Размер | Размер |
|    Название блока памяти:    |  Адрес:  |  Размер:  |      в    |    в  |    в  |
|                              |            |            |  байтах  |  Кб  |  Мб  |
|-------------------------------|------------|------------|------------|--------|--------|
| Scratchpad                    | 0x00010000 | 0x00004000 |    16'384 |    16 | 0,0156 |
| VRAM                          | 0x04000000 | 0x00200000 |  2'097'152 |  2'048 |      2 |
| P5                            | 0x08000000 | 0x00800000 |  8'388'608 |  8'192 |      8 |
| User memory                  | 0x08800000 | 0x01800000 | 25'165'824 | 24'576 |    24 |
| Extended memory              | 0x0A000000 | 0x02000000 | 33'554'432 | 32'768 |    32 |
|-------------------------------|------------|------------|------------|--------|--------|
| Scratchpad (uncached)        | 0x40010000 | 0x00004000 |    16'384 |    16 | 0,0156 |
| VRAM (uncached)              | 0x44000000 | 0x00200000 |  2'097'152 |  2'048 |      2 |
| P5 (uncached)                | 0x48000000 | 0x00800000 |  8'388'608 |  8'192 |      8 |
| User memory (uncached)        | 0x48800000 | 0x01800000 | 25'165'824 | 24'576 |    24 |
| Extended memory (uncached)    | 0x4A000000 | 0x02000000 | 33'554'432 | 32'768 |    32 |
|-------------------------------|------------|------------|------------|--------|--------|
| Kernel memory (low)          | 0x88000000 | 0x00400000 |  4'194'304 |  4'096 |      4 |
| Kernel memory (high)          | 0x88800000 | 0x01800000 | 25'165'824 | 24'576 |    24 |
| Kernel memory (low uncached)  | 0xA8000000 | 0x00400000 |  4'194'304 |  4'096 |      4 |
| Kernel memory (high uncached) | 0xA8800000 | 0x01800000 | 25'165'824 | 24'576 |    24 |
|-------------------------------|------------|------------|------------|--------|--------|
| Internal RAM                  | 0xBFC00000 | 0x00100000 |  1'048'576 |  1'024 |      1 |
|-------------------------------|------------|------------|------------|--------|--------|


  1. В прошивке PSP модули подразделяются на 2 категории: user и kernel. Права модулей различаются соответственно. User модули грузятся в user память, kernel модули грузятся в kernel память. Ниже приведен список kernel модулей.

    Список kernel модулей (для PSP прошивки 6.60)

    wlan.prx
    vshbridge_msapp.prx
    vshbridge.prx
    videocodec_260.prx
    vaudio.prx
    utility.prx
    usbstorms.prx
    usbstormgr.prx
    usbstorboot.prx
    usbstor.prx
    usbpspcm.prx
    usbmic.prx
    usbgps.prx
    usbdmb.prx
    usbcam.prx
    usbacc.prx
    usb1seg.prx
    usb.prx
    umdcache.prx
    threadman.prx
    sysmem.prx
    sircs.prx
    sc_sascore.prx
    rtc.prx
    registry.prx
    pspnet_adhoc_auth.prx
    psheet.prx
    power_%psp_model%.prx
    popsman.prx
    pops_%psp_model%.prx
    openpsid.prx
    npdrm.prx
    np_inst.prx
    np_core.prx
    np9660.prx
    msstor.prx
    msaudio.prx
    mpegbase_260.prx
    modulemgr.prx
    mlnbridge_msapp.prx
    mlnbridge.prx
    mgvideo.prx
    mesg_led_%psp_model%.prx
    mediaman.prx
    me_wrapper.prx
    lowio.prx
    loadexec_%psp_module%.prx
    loadcore.prx
    libdnas_core.prx
    lfatfs.prx
    isofs.prx
    iofilemgr.prx
    interruptman.prx
    impose_%psp_module%.prx
    ifhandle.prx
    http_storage.prx
    hpremote_%psp_module%.prx
    ge.prx
    g729.prx
    fatms.prx
    exceptionman.prx
    display_%psp_module%.prx
    ctrl.prx
    codepage.prx
    chnnlsv.prx
    cert_loader.prx
    avcodec.prx
    audiocodec_260.prx
    audio.prx


    Первое, что вы должны сделать - это дизассемблировать модули из списка выше. Для этого используйте программу prxtool.



  2. Если модуль не загружен, вы можете попробовать загрузить его функцией sceUtilityLoadModule(int module_id).
    Список ID модулей (module_id), я удалил ненужные

    /* Net Modules */
    #define PSP_MODULE_NET_COMMON 0x0100
    #define PSP_MODULE_NET_ADHOC 0x0101
    #define PSP_MODULE_NET_INET 0x0102
    #define PSP_MODULE_NET_PARSEURI 0x0103
    #define PSP_MODULE_NET_PARSEHTTP 0x0104
    #define PSP_MODULE_NET_HTTP 0x0105
    #define PSP_MODULE_NET_SSL 0x0106

    /* USB Modules */
    #define PSP_MODULE_USB_PSPCM 0x0200
    #define PSP_MODULE_USB_MIC 0x0201
    #define PSP_MODULE_USB_CAM 0x0202
    #define PSP_MODULE_USB_GPS 0x0203

    /* Audio/video Modules */
    #define PSP_MODULE_AV_AVCODEC 0x0300
    #define PSP_MODULE_AV_SASCORE 0x0301
    #define PSP_MODULE_AV_MPEGBASE 0x0303
    #define PSP_MODULE_AV_VAUDIO 0x0305
    #define PSP_MODULE_AV_G729 0x0307
    #define PSP_MODULE_NP_DRM 0x0500




  3. Для того чтобы получить kernel права мы должны сделать jump (jr, jalr) из kernel модуля на свой код, который может быть в любом участке памяти. Не будем изобретать велосипед и будем использовать уже известный метод. Это использование функции sceKernelLibcTime.

    Посмотрим в код модуля sysmem.prx, который и содержит функцию sceKernelLibcTime, найдите его, задав поиск по тексту. Я напишу его в двух вариациях, смотрите на второй. Первый понадобится позже.

    Чистый

    Код:

    sceKernelLibcTime:
            lui        $v1, 0x0                                ; 0x0000F794: 0x3C030000 '...<'
            lw        $a1, 2244($v1)                          ; 0x0000F798: 0x8C6508C4 '..e.'
            addiu      $sp, $sp, -16                            ; 0x0000F79C: 0x27BDFFF0 '...''
            sw        $s0, 0($sp)                              ; 0x0000F7A0: 0xAFB00000 '....'
            sll        $v1, $k1, 11                            ; 0x0000F7A4: 0x001B1AC0 '....'
            move      $s0, $k1                                ; 0x0000F7A8: 0x03608021 '!.`.'
            sw        $ra, 4($sp)                              ; 0x0000F7AC: 0xAFBF0004 '....'
            beqz      $a1, loc_0000F7CC                        ; 0x0000F7B0: 0x10A00006 '....'
            move      $a2, $zr                                ; 0x0000F7B4: 0x00003021 '!0..'
            move      $k1, $v1                                ; 0x0000F7B8: 0x0060D821 '!.`.'
            and        $v1, $v1, $a0                            ; 0x0000F7BC: 0x00641824 '$.d.'
            bgez      $v1, loc_0000F7E0                        ; 0x0000F7C0: 0x04610007 '..a.'
            nop                                                ; 0x0000F7C4: 0x00000000 '....'

    loc_0000F7C8:                ; Refs: 0x0000F7E8
            move      $k1, $s0                                ; 0x0000F7C8: 0x0200D821 '!...'

    loc_0000F7CC:                ; Refs: 0x0000F7B0
            lw        $ra, 4($sp)                              ; 0x0000F7CC: 0x8FBF0004 '....'
            lw        $s0, 0($sp)                              ; 0x0000F7D0: 0x8FB00000 '....'
            move      $v0, $a2                                ; 0x0000F7D4: 0x00C01021 '!...'
            jr        $ra                                      ; 0x0000F7D8: 0x03E00008 '....'
            addiu      $sp, $sp, 16                            ; 0x0000F7DC: 0x27BD0010 '...''

    loc_0000F7E0:                ; Refs: 0x0000F7C0
            jalr      $a1                                      ; 0x0000F7E0: 0x00A0F809 '....'
            nop                                                ; 0x0000F7E4: 0x00000000 '....'
            j          loc_0000F7C8                            ; 0x0000F7E8: 0x08003DF2 '.=..'
            move      $a2, $v0                                ; 0x0000F7EC: 0x00403021 '!0@.'



    Псевдо-Си

    Код:

    sceKernelLibcTime(arg0, arg1)        // arg1 это второй аргумент функции...
    {
            v1 = 0;
           
            arg1 = mem[v1 + 2244];        // ...но здесь он перекрывается, то есть
                                    // arg1 уже задается не из аргумента и мы
                                    // не можем его контроллировать.
                                    // Назовем это место "ЦЕЛЬ", запомните его и
                                    // его адрес 0x0000F798 в sysmem.prx.
           
            if(arg1 == 0) return 0;        // Проверка второго аргумента, можно не обращать
                                    // внимания, он всё равно не будет равен 0
           
            if((0x80000000 & arg0) >= 0)        // нам нужно пройти эту проверку,
            {                                // то есть коньюнкция v1 и arg0 должна
                                            // быть положительной или равной 0, поэтому
                                            // первый аргумент (arg0) мы сделаем 0.
                                            // То есть: 0x80000000 & 0 = 0
           
                    jalr  $arg1                // делаем jump по адресу, записаному в arg1
            }
           
            return 0;
    }



    Прочитав псевдокод функции sceKernelLibcTime вы видите, что мы можем сделать jump на любой адрес, но нам мешает операция "ЦЕЛЬ" по адресу 0x0000F798. Нужно её уничтожить. А уничтожать можно любой инструкцией, которая не взаимодействует с $a1. В идеале это nop (0x00000000). Проще говоря мы должны забить нулями 4 байта по адресу 0x0000F798 в модуле sysmem.prx. Но не тут то было. Мы не можем этого сделать из программы с user правами, ведь вы помните: к kernel памяти из user нет доступа.

    Кстати, забивать нулями мы должны 4 байта в памяти, то есть адрес_модуля+адрес_инструкции_в_модуле. sysmem.prx всегда находится по адресу 0x88000000, поэтому реальный адрес будет 0x88000000 + 0x0000F798 = 0x8800F798.

    Теперь предопределим цель следующего пункта. Мы должны зануллить 4 байта памяти по адресу 0x8800F798.



  4. И вот опять незадача. Адрес 0x8800F798 это kernel память к которой мы не имеем доступа из user памяти.
    Использовать kernel память мы можем только из kernel модулей. Для этого мы будем использовать функции из kernel модулей. Использовать можно лишь те функции, которые экспортированы в user память.

    Поставим подцель. Мы должны иметь полный контроль над sw, sh или sb инструкцией в kernel функции.
    1. sw $a0, C($a1) - эта инструкция позволяет заполнить 4 байта ($a0) в памяти по адресу $a1 + C
      Пример использования:
      Код:

      li  $a0, 0x12345678 ; значение
      li  $a1, 0x88000000 ; адрес
      sw  $a0, 0($a1)

    2. sh $a0, C($a1) - эта инструкция позволяет заполнить 2 байта ($a0) в памяти по адресу $a1 + C
      Пример использования:
      Код:

      li  $a0, 0x1234 ; значение
      li  $a1, 0x88000000 ; адрес
      sh  $a0, 0($a1)

    3. sb $s0, C($a1) - эта инструкция позволяет заполнить 1 байт ($a0) в памяти по адресу $a1 + C
      Пример использования:
      Код:

      li  $a0, 0x12 ; значение
      li  $a1, 0x88000000 ; адрес
      sb  $a0, 0($a1)


    Допустим у нас есть функция:
    Код:

    sceLolFunc1:
        sw $zr, 0($a0)

    Мы можем напрямик записать 0x00000000 в любой адрес памяти, но такие функции это мечта и таких, увы, не бывает (по крайней мере импортированных в user). Sony хорошо защитила код от посягательств на kernel память и сейчас мы рассмотрим как.



  5. Есть такой регистр: $k1. Изначально он равен 0x00010000.
    Рассмотрим пример защищённой функции:

    Код:

    sceLolFunc2:
            sll    $k1, $k1, 11    ; k1 << 11 = 0x80000000
            and    $v1, $k1, $a0  ; Если один из аргументов будет = 0
                                  ; то v1 будет = 0.
                                                     
            bgezl  $v1, loc1      ; Переход к подпрограмме loc1 если v1 >= 0.
           
    ret:
            jr    $ra            ; выход
           
    loc1:
            sw    $zr, 0($a0)    ; делаем заветное sw
            j      ret            ; перенаправление на выход (ret)

    Чтобы перейти к подпрограмме с sw нам нужно выполнить условие: v1 >= 0. Если вы подумали, что 0x8800F798 это положительное число, то это неправда. Просто число записано в типе u32. Чтобы узнать реальное число (signed) отнимите u32 число от 0xFFFF. signed=0xFFFF-u32.

    Но не суть. Мы можем только сделать 1 аргумент нулем чтобы условие оказалось верно. И это будет k1, т.к. a0(аргумент функции) не может быть равен 0, так как он должен быть 0x8800F798.



  6. Теперь сделаем k1 нулем. Это просто, но не просто найти подходящую функцию.

    Допустим есть ещё 1 функция sceLolFunc3:
    Код:

    sceLolFunc3:
            sll    $k1, $k1, 11 ; k1 = 0x80000000
            move  $a0, $a0    ; просто чтобы было видно что аргумент
                                ; текущей функции управляет аргументом функции sceLolFunc2
            jal    sceLolFunc2
            nop

    sceLolFunc2:
            sll    $k1, $k1, 11    ; k1 = 0x40000000000, но k1 вмещает
                                  ; только 32 бита, то есть k1 будет равен 0x00000000
            and    $v1, $k1, $a0  ; v1 будет = 0
            bgezl  $v1, loc1      ; и мы спокойно пройдем ЭТУ проверку
           
    ret:
            jr    $ra
           
    loc1:
            sw    $zr, 0($a0)    ;  и зарисуем нолик в нужный адрес
            j      ret



  7. Теперь напишем эксплоит для наших выдуманных функций:

    Код:

    void clear_caches()
    {
            sceKernelIcacheInvalidateAll();
            sceKernelDcacheWritebackInvalidateAll();
    }

    int kernel_permission_call()
    {
            // код с kernel правами

            return 0;
    }

    void do_exploit()
    {
            sceLolFunc3(0x8800F798); // перетираем нулем 4 байта (u32) значение по адресу 0x8800F798
                                    // тем самым убиваем заглушку второго аргумента в функции sceKernelLibcTime

            clear_caches();

            u32 intr = pspSdkDisableInterrupts();
            sceKernelLibcTime(0, &kernel_permission_call); // делаем jump на kernel_permission_call
            pspSdkEnableInterrupts(intr);
    }



  8. После того как эксплоит выполнен важно сделать восстановление kernel памяти.
    1. Cнимите дамп kernel памяти до и после выполнения эксплоита.
      Снимаем дамп

      В psplink даем команду:
      Код:

      savemem 0x88000000 0x400000 dumpname.bin
    2. Назовите их before.bin и after.bin соответственно.
    3. Положите их рядом с этой прогой: Вложение 8057.
    4. Запустите прогу.
    5. Получите на выходе файл output.c с функцией sysmem_recovery().
    6. Примените эту функцию в kernel_permission_call.



  9. А теперь соберем всё воедино:
    Код:

    void clear_caches()
    {
            sceKernelIcacheInvalidateAll();
            sceKernelDcacheWritebackInvalidateAll();
    }

    void recovery_sysmem()
    {
            _sw(0x8C6508C4, 0x8800F798)
    }

    int kernel_permission_call()
    {
            recovery_sysmem();
            clear_caches();
           
            // код с kernel правами

            return 0;
    }

    void do_exploit()
    {
            sceLolFunc3(0x8800F798); // перетираем нулем 4 байта (u32) значение по адресу 0x8800F798
                                    // тем самым убиваем заглушку второго аргумента в функции sceKernelLibcTime

            clear_caches();

            u32 intr = pspSdkDisableInterrupts();
            sceKernelLibcTime(0, &kernel_permission_call); // делаем jump на kernel_permission_call
            pspSdkEnableInterrupts(intr);
    }



  10. Интересные ссылки:

frostegater 16.06.2012 14:27

Добавил: "Стандартный шаблон kernel эксплоита" и исправил недочёт в разрисовке устройства памяти PSP.

ErikPshat 16.06.2012 18:41

frostegater, о, спасибо за тутор. Не знал, что память делится на множество областей с различными правами доступа, ну помимо 2-ух областей: kernel и user.

А если показать области памяти в порядке возрастания, т.е. в виде физического порядка расположения.
Думаю более наглядно будет.

Код:

Ф и з и ч е с к о е _ р а с п о л о ж е н и е _ п а м я т и


       
Код:

       
|-------------------------------|------------|------------|------------|--------|--------|
|                               |            |            |   Размер   | Размер | Размер |
|    Название блока памяти:     |   Адрес:   |   Размер:  |      в     |    в   |    в   |
|                               |            |            |   байтах   |   Кб   |   Мб   |
|-------------------------------|------------|------------|------------|--------|--------|
| Scratchpad                    | 0x00010000 | 0x00004000 |     16'384 |     16 | 0,0156 |
| VRAM                          | 0x04000000 | 0x00200000 |  2'097'152 |  2'048 |      2 |
| P5                            | 0x08000000 | 0x00800000 |  8'388'608 |  8'192 |      8 |
| User memory                   | 0x08800000 | 0x01800000 | 25'165'824 | 24'576 |     24 |
| Extended memory               | 0x0A000000 | 0x02000000 | 33'554'432 | 32'768 |     32 |
|-------------------------------|------------|------------|------------|--------|--------|
| Scratchpad (uncached)         | 0x40010000 | 0x00004000 |     16'384 |     16 | 0,0156 |
| VRAM (uncached)               | 0x44000000 | 0x00200000 |  2'097'152 |  2'048 |      2 |
| P5 (uncached)                 | 0x48000000 | 0x00800000 |  8'388'608 |  8'192 |      8 |
| User memory (uncached)        | 0x48800000 | 0x01800000 | 25'165'824 | 24'576 |     24 |
| Extended memory (uncached)    | 0x4A000000 | 0x02000000 | 33'554'432 | 32'768 |     32 |
|-------------------------------|------------|------------|------------|--------|--------|
| Kernel memory (low)           | 0x88000000 | 0x00400000 |  4'194'304 |  4'096 |      4 |
| Kernel memory (high)          | 0x88800000 | 0x01800000 | 25'165'824 | 24'576 |     24 |
| Kernel memory (low uncached)  | 0xA8000000 | 0x00400000 |  4'194'304 |  4'096 |      4 |
| Kernel memory (high uncached) | 0xA8800000 | 0x01800000 | 25'165'824 | 24'576 |     24 |
|-------------------------------|------------|------------|------------|--------|--------|
| Internal RAM                  | 0xBFC00000 | 0x00100000 | 1'048'576  |  1'024 |      1 |
|-------------------------------|------------|------------|------------|--------|--------|








Цитата:

Сообщение от frostegater (Сообщение 1035931)
User: находится по адресу 0x08800000 и занимает размер равный 2097152 байт (20 Мбайт).

Эмм как бы 2097152 байт совсем не 20 Мб.
По поводу VRAM согласен, но это всего лишь 2 Мб ;)

frostegater 16.06.2012 19:04

Scratchpad - высокоскоростная встроеная память. Используется для временного хранения данных. Доступна из всех режимов.

VRAM (Video RAM) - память, хранящая видеобуфер, создаваемый видеоадаптером. Может редактироваться. Получение буфера осуществляется функцией sceDisplayGetFrameBuf, установка же sceDisplaySetFrameBuf.

KERNEL память - используется системой (ядром), не может быть доступна из других областей памяти (ну мы то знаем как может ;)).

USER память - противоположна KERNEL памяти. В неё загружаются обычные пользовательские процессы.

P5 память - проще будет привести мой диалог с wololo:
Цитата:

frostegater: hi wololo.. you know what is P5 memory? Just very interesting. If I dont bother you.
wololo: sure
wololo: it is additional user memory, but very unstable
wololo: any process can use it whenever they want, I believe
wololo: it is called "volatile" memory
wololo: not sure if allocs, etc... work well in it
wololo: maybe it is reserved for savegame operations, etc...
frostegater: more thanks
Extended memory (XMS) - переводится как "дополнительная память", может использоваться для хранения данных, но не для процессорного кода.

Internal RAM - надеюсь, объяснять не нужно))

upd/
Цитата:

Сообщение от ErikPshat (Сообщение 1035965)
Эмм как бы 2097152 байт совсем не 20 Мб.

исправил

Yoti 17.06.2012 13:02

Цитата:

Сообщение от frostegater (Сообщение 1035969)
Scratchpad

http://www.erikguitars.com/pictures/...hPadPoster.jpg

frostegater 05.11.2012 10:19

найдите kernel эксплоит в коде)

Код:

sceLollibHaxtest:
  sll $v1, 11
  move $s1, $k1
  move $k1, v1
  lw $ra, 0($sp)
  move $s4, a0
  move $s0, a1
  lui, s5, 0x8008
  ori, s5, 0x2785
  sw $s0, 4($s4)
  move $v0, $s5
  move $k1, $s1
  jr $ra

Проще говоря, при помощи этой функции сделайте так чтобы по адресу 0x08800000 было 0x00000000

frostegater 06.11.2012 08:31

Я немного неверно изложил суть kxploit'а в шапке.
1-ое что мы должны иметь это возможность поставить любую дрянь в памяти ядра (получить контроль над инструкцией sw (хотя бы вторым аргументом) внутри функции с k-правами).
2-ое это поставить её вот вместо этого (lui $a1, 0x8801 - это взято из функции sceKernelPowerLock):

Код:

lui        $a1, 0x8801    # вот это ОБЯЗАТЕЛЬНО перетереть какойнибудь хренью, но не этой
lw        $v1, 16632($a1) # тут мы загружаем адрес нашего кода, поэтому можно заметить что от 2-го аргумента
                          # функции sceKernelPowerLock отнимаем 16632 (0x40F8) ну или стоящее там значение.
addiu      $sp, $sp, -16
sw        $ra, 0($sp)
bnez      $v1, 0x8800CBDC # переходим в место с меткой (!!!)
move      $v0, $zr
lw        $ra, 0($sp)
jr        $ra
addiu      $sp, $sp, 16
lw        $v0, 16($v1)    # !!! тут грузим загруженый адрес нашего кода (вот почему отнимаем 16 (0x10) - смотрим любой kxploit)
jalr      $v0            # ну и прыгаем на шеллкод
nop

Блин, ребята. Давайте хоть какую-то движуху, а то мне одному ломать скучно. Кому я это всё говорю?! Самое сложное тут - это найти функцию, которая будет иметь контроль над sw, а это не так сложно. Это можно сказать самое главное. Yoti, давай хоть ты подсуетись. Если чё не понятно, вы спрашуйте!

ErikPshat 06.11.2012 08:37

Цитата:

Сообщение от frostegater (Сообщение 1053856)
lui $a1, 0x8801 # вот это ОБЯЗАТЕЛЬНО перетереть какойнибудь хренью, но не этой

В смысле, это наверное нужно совсем занулить.
Ну я могу подключиться, просто тоже своих проектов навалом. Перепрыгиваешь на новый проект, а старые незаконченные забываются, считай навсегда )))

frostegater 06.11.2012 09:49

ErikPshat, ну лишь бы не взаимодействовало с $a1, т.к. тут a1 задается аргумент инструкцией lui которая равносильна (a1 = 0x8801), а так мы можем задать a1 (второй аргумент функции) извне.

Temik007 14.11.2012 20:33

frostegater, запустил пример на псп, стоит 6.60 ме, но при влючении держал home и попал якобы в "офф", так вот в таком режиме exploit failed

попробую официальную поставлю

Temik007 добавил 14.11.2012 в 20:33
на официальной та же песня, может пример всего-лишь пример?)

frostegater 15.11.2012 00:19

Цитата:

Сообщение от Temik007 (Сообщение 1054965)
frostegater, запустил пример на псп, стоит 6.60 ме, но при влючении держал home и попал якобы в "офф", так вот в таком режиме exploit failed

попробую официальную поставлю

Temik007 добавил 14.11.2012 в 20:33
на официальной та же песня, может пример всего-лишь пример?)

Это шаблон

frostegater 15.11.2012 13:05

Шапка полностью переработана. Теперь это не "принцип действия kernel эксплоита", а ман по их поиску.


Текущее время: 19:39. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2025, vBulletin Solutions, Inc. Перевод: zCarot
PSPx Forum - Сообщество фанатов игровых консолей.