PSPx форум

PSPx форум (https://www.pspx.ru/forum/index.php)
-   PSP хакинг и девелопмент (https://www.pspx.ru/forum/forumdisplay.php?f=195)
-   -   Взлом EBOOT подписи! (https://www.pspx.ru/forum/showthread.php?t=89730)

Ins|der 18.01.2011 19:09

Цитата:

Сообщение от ToTAL_SUiCiDE (Сообщение 932272)
Ins|der, ну так в принципе могли бы и оф сдк

резонно) но вроде и без него неплохо люди справляются

Ins|der добавил 18.01.2011 в 19:09
Цитата:

Сообщение от Acid_Jack (Сообщение 932290)
Но радует тот факт, что для того, чтобы запретить запуск на оф. прошивке контент, подписанный данными ключом, сони придётся менять сам кирк.

то есть убрать поддержку всех официальных приложений, подписанных им? это негуманно =)

ErikPshat 18.01.2011 20:15

А это что за лабуда?

SCEkrit.c (v1.0): Compute Sony's Private Keys
Код:

// SCEkrit.c (v1.0): Compute Sony's Private Keys
// Based on Sven's sceverify.c
// -------------------------------------------------------------
// Compile by copying to fail0verflow's ps3tools and add
// SCEkrit.c to TOOLS in the Makefile.
// Depends on libgmp; add -lgmp to LDFLAGS
// - Aaron Lindsay / @AerialX
// And thanks gbcft!

// Copyright 2010      Sven Peter <svenpeter@gmail.com>
// Licensed under the terms of the GNU GPL, version 2
// http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt

#include "tools.h"
#include "types.h"

#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <stdlib.h>
#include <gmp.h>

static int keyid = -1;

static u8 *ptr1 = NULL;
static u8 *ptr2 = NULL;

static u16 type;
typedef struct {
        u16 flags;
        u32 ****_offset;
        u64 info_offset;
        u32 app_type;
        u64 filesize;
        u64 header_len;
} fileinfo;

static fileinfo info1;
static fileinfo info2;

static struct keylist *klist = NULL;

static struct keylist *self_load_keys(fileinfo* info)
{
        enum sce_key id;

        switch (info->app_type) {
                case 1:
                        id = KEY_LV0;
                        break;
                case 2:
                        id = KEY_LV1;
                        break;
                case 3:
                        id = KEY_LV2;
                        break;
                case 4:       
                        id = KEY_APP;
                        break;
                case 5:
                        id = KEY_ISO;
                        break;
                case 6:
                        id = KEY_LDR;
                        break;
                default:
                        fail("invalid type: %08x", info->app_type);       
        }

        return keys_get(id);
}

static void read_self_header(u8* ptr, fileinfo* info)
{
        info->flags    =    be16(ptr + 0x08);
        info->****_offset = be32(ptr + 0x0c);
        info->header_len =  be64(ptr + 0x10);
        info->filesize =    be64(ptr + 0x18);
        info->info_offset = be64(ptr + 0x28);

        info->app_type =    be32(ptr + info->info_offset + 0x0c);

        klist = self_load_keys(info);
}

static void read_pkg_header(u8* ptr, fileinfo* info)
{
        info->flags    =    be16(ptr + 0x08);
        info->****_offset = be32(ptr + 0x0c);
        info->header_len =  be64(ptr + 0x10);
        info->filesize =    be64(ptr + 0x18);

        klist = keys_get(KEY_PKG);
}

static void decrypt(u8* ptr)
{
        if (keyid < 0)
                keyid = sce_decrypt_header(ptr, klist);
        else if (keyid != sce_decrypt_header(ptr, klist))
                fail("Both files must have the same key id");

        if (keyid < 0)
                fail("sce_decrypt_header failed");

        if (sce_decrypt_data(ptr) < 0)
                fail("sce_decrypt_data failed");

        if (klist->keys[keyid].pub_avail < 0)
                fail("no public key available");

        if (ecdsa_set_curve(klist->keys[keyid].ctype) < 0)
                fail("ecdsa_set_curve failed");

        ecdsa_set_pub(klist->keys[keyid].pub);
}

static void verify_signature(u8* ptr, fileinfo* info, u8* hash, u8** s, u8** r)
{
        u64 sig_len;

        sig_len = be64(ptr + info->****_offset + 0x60);
        *r = ptr + sig_len;
        *s = *r + 21;

        sha1(ptr, sig_len, hash);

        printf("Signature\n");
        if (ecdsa_verify(hash, *r, *s))
                printf("  Status: OK\n");
        else
                printf("  Status: FAIL\n");
}

static void load_num(mpz_t n, u8* un)
{
        char buffer[0x100];
        char* ptr = buffer;
        int i;
        for (i = 0; i < 21; i++) {
                sprintf(ptr, "%02x", un[i]);
                ptr += 2;
        }
        mpz_set_str(n, buffer, 16);
}

static char* calculate_private_key(u8* us1, u8* us2, u8* uz1, u8* uz2, u8* un, u8* ur)
{
        mpz_t s1, s2, z1, z2, n, r, k, dA;
        mpz_inits(s1, s2, z1, z2, n, r, k, dA, NULL);
        load_num(s1, us1); load_num(s2, us2); load_num(z1, uz1); load_num(z2, uz2); load_num(n, un); load_num(r, ur);

        mpz_sub(z2, z1, z2);
        mpz_sub(s2, s1, s2);
        mpz_invert(s2, s2, n);
        mpz_mul(k, z2, s2);
        mpz_mod(k, k, n);

        mpz_mul(s2, s1, k);
        mpz_sub(s2, s2, z1);
        mpz_invert(r, r, n);
        mpz_mul(dA, s2, r);
        mpz_mod(dA, dA, n);

//        printf("k: %s\n", mpz_get_str(NULL, 16, k));
        return mpz_get_str(NULL, 16, dA);
}

int main(int argc, char *argv[])
{
        if (argc != 3)
                fail("usage: scesekrit filename1 filename2");

        ptr1 = mmap_file(argv[1]);
        ptr2 = mmap_file(argv[2]);

        type = be16(ptr1 + 0x0a);
        if (type != be16(ptr2 + 0x0a))
                fail("Files must be the same type");
       
        if (type == 1) {
                read_self_header(ptr1, &info1);
        } else if(type == 3) {
                read_pkg_header(ptr1, &info1);
        } else
                fail("Unknown type: %d", type);

        if ((info1.flags) & 0x8000)
                fail("devkit file; nothing to verify");

        if (klist == NULL)
                fail("no key found");

        decrypt(ptr1);
       
        if (type == 1) {
                read_self_header(ptr2, &info2);
        } else if(type == 3) {
                read_pkg_header(ptr2, &info2);
        } else
                fail("Unknown type: %d", type);

        if ((info2.flags) & 0x8000)
                fail("devkit file; nothing to verify");

        if (klist == NULL)
                fail("no key found");

        decrypt(ptr2);

        u8* s1;
        u8* s2;
        u8 z1[21];
        u8 z2[21];
        u8* r1;
        u8* r2;
        u8 ec[21];
        u8 n[21];
        z1[0] = 0;
        z2[0] = 0;
       
        ecdsa_get_params(klist->keys[keyid].ctype, ec, ec, ec, n, ec, ec);

        printf("%s ", argv[1]);
        verify_signature(ptr1, &info1, z1 + 1, &s1, &r1);
        printf("%s ", argv[2]);
        verify_signature(ptr2, &info2, z2 + 1, &s2, &r2);

        if (memcmp(r1, r2, 21))
                fail("Both files must share the same r signature value.");

        const char* dA = calculate_private_key(s1, s2, z1, z2, n, r1);

        int len = strlen(dA);
        int i;
        printf("Private Key: ");
        for (i = len / 2; i < 21; i++)
                printf("00");
        printf("%s\n", dA);

        return 0;
}

Source

lex3a 18.01.2011 20:34

Цитата:

Сообщение от ErikPshat (Сообщение 932398)
А это что за лабуда?

SCEkrit.c (v1.0): Compute Sony's Private Keys
Код:

// SCEkrit.c (v1.0): Compute Sony's Private Keys
// Based on Sven's sceverify.c
// -------------------------------------------------------------
// Compile by copying to fail0verflow's ps3tools and add
// SCEkrit.c to TOOLS in the Makefile.
// Depends on libgmp; add -lgmp to LDFLAGS
// - Aaron Lindsay / @AerialX
// And thanks gbcft!

// Copyright 2010      Sven Peter <svenpeter@gmail.com>
// Licensed under the terms of the GNU GPL, version 2
// http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt

#include "tools.h"
#include "types.h"

#include <stdio.h>
#include <string.h>
#include <assert.h>
#include <stdlib.h>
#include <gmp.h>

static int keyid = -1;

static u8 *ptr1 = NULL;
static u8 *ptr2 = NULL;

static u16 type;
typedef struct {
        u16 flags;
        u32 ****_offset;
        u64 info_offset;
        u32 app_type;
        u64 filesize;
        u64 header_len;
} fileinfo;

static fileinfo info1;
static fileinfo info2;

static struct keylist *klist = NULL;

static struct keylist *self_load_keys(fileinfo* info)
{
        enum sce_key id;

        switch (info->app_type) {
                case 1:
                        id = KEY_LV0;
                        break;
                case 2:
                        id = KEY_LV1;
                        break;
                case 3:
                        id = KEY_LV2;
                        break;
                case 4:       
                        id = KEY_APP;
                        break;
                case 5:
                        id = KEY_ISO;
                        break;
                case 6:
                        id = KEY_LDR;
                        break;
                default:
                        fail("invalid type: %08x", info->app_type);       
        }

        return keys_get(id);
}

static void read_self_header(u8* ptr, fileinfo* info)
{
        info->flags    =    be16(ptr + 0x08);
        info->****_offset = be32(ptr + 0x0c);
        info->header_len =  be64(ptr + 0x10);
        info->filesize =    be64(ptr + 0x18);
        info->info_offset = be64(ptr + 0x28);

        info->app_type =    be32(ptr + info->info_offset + 0x0c);

        klist = self_load_keys(info);
}

static void read_pkg_header(u8* ptr, fileinfo* info)
{
        info->flags    =    be16(ptr + 0x08);
        info->****_offset = be32(ptr + 0x0c);
        info->header_len =  be64(ptr + 0x10);
        info->filesize =    be64(ptr + 0x18);

        klist = keys_get(KEY_PKG);
}

static void decrypt(u8* ptr)
{
        if (keyid < 0)
                keyid = sce_decrypt_header(ptr, klist);
        else if (keyid != sce_decrypt_header(ptr, klist))
                fail("Both files must have the same key id");

        if (keyid < 0)
                fail("sce_decrypt_header failed");

        if (sce_decrypt_data(ptr) < 0)
                fail("sce_decrypt_data failed");

        if (klist->keys[keyid].pub_avail < 0)
                fail("no public key available");

        if (ecdsa_set_curve(klist->keys[keyid].ctype) < 0)
                fail("ecdsa_set_curve failed");

        ecdsa_set_pub(klist->keys[keyid].pub);
}

static void verify_signature(u8* ptr, fileinfo* info, u8* hash, u8** s, u8** r)
{
        u64 sig_len;

        sig_len = be64(ptr + info->****_offset + 0x60);
        *r = ptr + sig_len;
        *s = *r + 21;

        sha1(ptr, sig_len, hash);

        printf("Signature\n");
        if (ecdsa_verify(hash, *r, *s))
                printf("  Status: OK\n");
        else
                printf("  Status: FAIL\n");
}

static void load_num(mpz_t n, u8* un)
{
        char buffer[0x100];
        char* ptr = buffer;
        int i;
        for (i = 0; i < 21; i++) {
                sprintf(ptr, "%02x", un[i]);
                ptr += 2;
        }
        mpz_set_str(n, buffer, 16);
}

static char* calculate_private_key(u8* us1, u8* us2, u8* uz1, u8* uz2, u8* un, u8* ur)
{
        mpz_t s1, s2, z1, z2, n, r, k, dA;
        mpz_inits(s1, s2, z1, z2, n, r, k, dA, NULL);
        load_num(s1, us1); load_num(s2, us2); load_num(z1, uz1); load_num(z2, uz2); load_num(n, un); load_num(r, ur);

        mpz_sub(z2, z1, z2);
        mpz_sub(s2, s1, s2);
        mpz_invert(s2, s2, n);
        mpz_mul(k, z2, s2);
        mpz_mod(k, k, n);

        mpz_mul(s2, s1, k);
        mpz_sub(s2, s2, z1);
        mpz_invert(r, r, n);
        mpz_mul(dA, s2, r);
        mpz_mod(dA, dA, n);

//        printf("k: %s\n", mpz_get_str(NULL, 16, k));
        return mpz_get_str(NULL, 16, dA);
}

int main(int argc, char *argv[])
{
        if (argc != 3)
                fail("usage: scesekrit filename1 filename2");

        ptr1 = mmap_file(argv[1]);
        ptr2 = mmap_file(argv[2]);

        type = be16(ptr1 + 0x0a);
        if (type != be16(ptr2 + 0x0a))
                fail("Files must be the same type");
       
        if (type == 1) {
                read_self_header(ptr1, &info1);
        } else if(type == 3) {
                read_pkg_header(ptr1, &info1);
        } else
                fail("Unknown type: %d", type);

        if ((info1.flags) & 0x8000)
                fail("devkit file; nothing to verify");

        if (klist == NULL)
                fail("no key found");

        decrypt(ptr1);
       
        if (type == 1) {
                read_self_header(ptr2, &info2);
        } else if(type == 3) {
                read_pkg_header(ptr2, &info2);
        } else
                fail("Unknown type: %d", type);

        if ((info2.flags) & 0x8000)
                fail("devkit file; nothing to verify");

        if (klist == NULL)
                fail("no key found");

        decrypt(ptr2);

        u8* s1;
        u8* s2;
        u8 z1[21];
        u8 z2[21];
        u8* r1;
        u8* r2;
        u8 ec[21];
        u8 n[21];
        z1[0] = 0;
        z2[0] = 0;
       
        ecdsa_get_params(klist->keys[keyid].ctype, ec, ec, ec, n, ec, ec);

        printf("%s ", argv[1]);
        verify_signature(ptr1, &info1, z1 + 1, &s1, &r1);
        printf("%s ", argv[2]);
        verify_signature(ptr2, &info2, z2 + 1, &s2, &r2);

        if (memcmp(r1, r2, 21))
                fail("Both files must share the same r signature value.");

        const char* dA = calculate_private_key(s1, s2, z1, z2, n, r1);

        int len = strlen(dA);
        int i;
        printf("Private Key: ");
        for (i = len / 2; i < 21; i++)
                printf("00");
        printf("%s\n", dA);

        return 0;
}

Source

http://psx-scene.com/forums/f6/scekr...ny-keys-74343/

Подписывальщик PS3 приложений, точнее не совсем. Просто получает волшебный ключ, которым можно потом подписать свое приложение для PS3.

ToTAL_SUiCiDE 18.01.2011 20:43

Ins|der, возможно официальные наработки сони избавили бы от массы проблем, связаных с недопониманием различных библиотек) В любом случае это дало бы толчок в разработке, если бы они сделали все софтовое наполнение опенсорсным. Но это врятли будет;)

akela1979 18.01.2011 23:15

Zer01ne OpenIdea Team (OIP) Black Devs Team (BDT) SignMe
 
Вложений: 1
[IMG]http://img203.**************/img203/2104/signmeu.jpg[/IMG]
Only works on Windows, the application can only sign of PBP which have been compiled with the option (BUILD_PRX = 1) in the makefile "most current application.
источник

frostegater 19.01.2011 07:16

akela1979, Ни черта он не подписывает!
Zer01ne (aka Dridri85) всегда хотел быть впереди всех.
Поэтому и славился alpha/beta версиями :D

Wes64 19.01.2011 13:21

Цитата:

Сообщение от Frostegater (Сообщение 932492)
akela1979, Ни черта он не подписывает!
Zer01ne (aka Dridri85) всегда хотел быть впереди всех.
Поэтому и славился alpha/beta версиями :D

Угу она пишет твоя прога типа в такой папке а там пусто :)

ErikPshat 19.01.2011 14:06

Вот рабочая прога: carlosgs updated PSCRYPTER to v2.0 here

http://www.megaupload.com/?d=5CWJAJTE

Я сам ещё не пробовал, но вот этот список внушает доверие: http://endlessparadigm.com/forum/sho....php?tid=25707

dn3d 19.01.2011 14:50

Цитата:

Сообщение от ErikPshat (Сообщение 932604)
Вот рабочая прога: carlosgs updated PSCRYPTER to v2.0 here

http://www.megaupload.com/?d=5CWJAJTE

Я сам ещё не пробовал, но вот этот список внушает доверие: http://endlessparadigm.com/forum/sho....php?tid=25707

Я уже потестил ее... Запустил PGE Lua, PicoDrive, bookR (смог подписать, только после распаковки файла data.psp PRXdecrypter'ом)

ErikPshat 19.01.2011 14:53

Причём EBOOT.PBP шифруется прекрасно. А вот сопутствующие PRX что-то я не догнал, что с ними делать. Пытаюсь через prxEncryper прогнать, но прога не запускается с чужими PRX-ами.
А вот те Ибуты, что по одному, прекрасно запускаются на официалке.

Ну всё! Нас ждёт наводнение, всемирный потоп. Потому что PS3 идёт в параллельном направлении и даже немного опережает PSP.

Acid_Jack 19.01.2011 14:57

ErikPshat, wololo же по полочкам расписал процесс подписывания
HOW TO SIGN YOUR HOMEBREW
This assumes you have access to your homebrew’s prx. If you only have the EBOOT, you can extract the prx with pbp unpacker (data.psp == your prx)

1. if your prx has relocations type 7, run fix-relocations on it (fix-relocations mygame.prx) (if you don’t know, run that anyways, it shouldn’t hurt)
2. run PrxEncrypter on your prx (prxEncrypter mygame.prx)
3. run pack-pbp the way you usually do it in a makefile (pack-pbp EBOOT.PBP PARAM.SFO icon.png NULL pic0.png pic1.png NULL data.psp NULL )
4. That’s it

ErikPshat 19.01.2011 15:00

Acid_Jack, а теперь по русски можешь объяснить, как подписать PRX.

Acid_Jack 19.01.2011 15:03

В простом случае pbpunpack'ером извлечь из EBOOT.PBP файл DATA.PSP. Подписать DATA.PSP и упаковать его обратно в EBOOT.PBP.

dn3d 19.01.2011 15:08

Цитата:

Сообщение от Acid_Jack (Сообщение 932627)
В простом случае pbpunpack'ером извлечь из EBOOT.PBP файл DATA.PSP. Подписать DATA.PSP и упаковать его обратно в EBOOT.PBP.

А что будешь делать если кроме EBOOT.PBP у тебя в программе используется *.prx ??? при загрузке этого prx ЗЫЗа ругается)))

ErikPshat 19.01.2011 15:10

Acid_Jack, нет, я спрашиваю как PRX зашифровать, а не EBOOT.PBP.

То есть, я так понял, что ntbridge.prx переименовать в DATA.PSP, запихать в EBOOT.PBP, зашифровать, потом извлечь и опять переименовать в ntbridge.prx.

dn3d 19.01.2011 15:12

Цитата:

Сообщение от ErikPshat (Сообщение 932633)
Acid_Jack, нет, я спрашиваю как PRX зашифровать, а не EBOOT.PBP.

То есть, я так понял, что ntbridge.prx переименовать в DATA.PSP, запихать в EBOOT.PBP, зашифровать, потом извлечь и опять переименовать в ntbridge.prx.

не получится, я так уже пробовал... такая же ошибка

Acid_Jack 19.01.2011 15:12

Ух ты ж ёжик...
Если prx внешний, возможно, просто стоит обработать его prxEncrypter'ом.

ErikPshat 19.01.2011 15:13

За пару дней успеем подписать все приложения?

dn3d, вон SD6719 тоже уже успел подписать и выложить Bookr )))

Цитата:

Сообщение от Acid_Jack (Сообщение 932635)
обработать его prxEncrypter'ом

То-же ошибка. Не принимает его прога. Они видать должны быть как-то совместно подписаны или ключ к PRX-ам должен лежать в EBOOT'e.

Acid_Jack 19.01.2011 15:18

ErikPshat, и вторая версия тоже?

Yoti 19.01.2011 16:54

Вы на user mode ограничение и смену методов релокации болт положили?

LaKosta 19.01.2011 17:01

Да вот сижу изучаю блин эти стубы с релоками )))

ToTAL_SUiCiDE 19.01.2011 17:08

Ну так и все-таки, а что нужно изменить в методе подписи, что-бы обращаться к ядру?:scratch_one-s_head:

Yoti 19.01.2011 17:15

Цитата:

Сообщение от Wololo
This assumes you have access to your homebrew’s prx. If you only have the EBOOT, you can extract the prx with pbp unpacker (data.psp == your prx)

- if your prx has relocations type 7, run fix-relocations on it (fix-relocations mygame.prx) (if you don’t know, run that anyways, it shouldn’t hurt)
- run PrxEncrypter on your prx (prxEncrypter mygame.prx)
- run pack-pbp the way you usually do it in a makefile (pack-pbp EBOOT.PBP PARAM.SFO icon.png NULL pic0.png pic1.png NULL data.psp NULL )
- That’s it

There are still lots of limitations (no kernel mode, prx should be less than 5MB, no static elf support,…), but tools are being progressively built to make this easier, so I’m sure that as I type this, more convenient tools will already be available. I spotted some tools that allow to sign static elfs by embedding a loader inside of the eboot.

У вас должен быть доступ к основному модулю (prx) вашей программы.
Если же у вас имеется только готовый файл EBOOT.PBP, извлеките из него DATA.PSP (это и есть программный код, он же prx модуль программы).
  • Прогоните модуль программой fix-relocations (это не повредит в любом случае)
    Синтаксис: fix-relocation.exe %имя_модуля%
  • Подпишите ваш модуль программой PrxEncrypter
    Синтаксис: PrxEncrypter.exe %имя_модуля%
  • Запакуйте EBOOT.PBP с вашим новым DATA.PSP

Не забывайте про ограничения:
  • Тип модуля "kernel" не поддерживается
    Можно посмотреть при отладке в линке, в исходном коде и, вроде, в заголовке
  • Размер модуля должен быть менее 5МБ
    Программная его часть (скомпилированный код)
  • Приложение не должно быть статичным
    Должна быть использована директива компилятора: BUILD_PRX = 1

Yoti 19.01.2011 17:21

С предыдущим сообщением не клеить!

Цитата:

Сообщение от Frostegater (Сообщение 932680)
ограничения на юзер походу там нету

Я вот сейчас тебя за дезинформацию забаню на пару-тройку дней. Иди учи мат.часть, пока я остываю. Я стал спать на пару часов меньше: сижу дома - слежу за процессом. А у тебя, 6л9ть, и ограничений уже нет. Уметь открывать файлы хексом - это не значит стать профи.

ToTAL_SUiCiDE,
нужно брать заголовок не от демо-версии, как сейчас, а от чего-либо "ядрёного" (например, регионального обновления) или написать свой. А для подписи своего пока алгоритм не подобрали.

ErikPshat 19.01.2011 17:22

Yoti, вот эта программа всё то-же самое делает по пунктам, только в автоматическом режиме: https://www.pspx.ru/forum/showpost.ph...4&postcount=48

Для PRX нужна другая инструкция: http://wololo.net/talk/viewtopic.php...art=250#p21323
Вот я ща сижу мучаю этот EmitStaticStubs.exe.
Он выдёргивает их PRX:
  • data.h - это просто разложенный побайтно elf-файл.
  • stubs.S - это эти самы стубсы ))) функции релокации.
stubs.S
.set noreorder

#include "pspstub.s"

STUB_START "LflashFatfmt",0x00090011,0x00010005
STUB_FUNC 0xB7A424A4, LflashFatfmt_B7A424A4
STUB_END

STUB_START "sceNand_driver",0x00010000,0x00010005
STUB_FUNC 0x0BEE8F36, sceNand_driver_0BEE8F36
STUB_END

STUB_START "sceNand_driver",0x00010000,0x000C0005
STUB_FUNC 0xAE4438C7, sceNand_driver_AE4438C7
STUB_FUNC 0x41FFA822, sceNand_driver_41FFA822
STUB_FUNC 0x8AF0AB9F, sceNand_driver_8AF0AB9F
STUB_FUNC 0x766756EF, sceNand_driver_766756EF
STUB_FUNC 0x5182C394, sceNand_driver_5182C394
STUB_FUNC 0xEF55F193, sceNand_driver_EF55F193
STUB_FUNC 0xCE9843E6, sceNand_driver_CE9843E6
STUB_FUNC 0xB07C41D4, sceNand_driver_B07C41D4
STUB_FUNC 0xC1376222, sceNand_driver_C1376222
STUB_FUNC 0xB2B021E5, sceNand_driver_B2B021E5
STUB_FUNC 0x8933B2E0, sceNand_driver_8933B2E0
STUB_FUNC 0x01F09203, sceNand_driver_01F09203
STUB_END

STUB_START "LoadCoreForKernel",0x00010000,0x00010005
STUB_FUNC 0xCF8A41B1, LoadCoreForKernel_CF8A41B1
STUB_END

STUB_START "sceSysreg_driver",0x00010000,0x00030005
STUB_FUNC 0xE2A5D1EE, sceSysreg_driver_E2A5D1EE
STUB_FUNC 0x4F46EEDE, sceSysreg_driver_4F46EEDE
STUB_FUNC 0x8F4F4E96, sceSysreg_driver_8F4F4E96
STUB_END

STUB_START "UtilsForKernel",0x00090000,0x00010005
STUB_FUNC 0x840259F1, UtilsForKernel_840259F1
STUB_END

STUB_START "sceSyscon_driver",0x00010000,0x00020005
STUB_FUNC 0x7EC5A957, sceSyscon_driver_7EC5A957
STUB_FUNC 0xC8439C57, sceSyscon_driver_C8439C57
STUB_END

STUB_START "SysclibForKernel",0x00010000,0x00010005
STUB_FUNC 0xC0AB8932, SysclibForKernel_C0AB8932
STUB_END

STUB_START "SysMemForKernel",0x00010011,0x00010005
STUB_FUNC 0x3FC9AE6A, SysMemForKernel_3FC9AE6A
STUB_END
И что там высчитывать, не догоняю.

Переведите пока это:
Цитата:

Step one: extract the stubs from the static elf and compile them in with the loader prx.
Step two: embed the static elf into the loader.
Step three: sign and run.

The loader copies the elf to its proffered address and fixes its stubs with the loaders stubs that where linked by the kernel. Then jumps into it.
И вообще, что вы здесь запёрлись у программистов. Пойдём в Хакинг, тема вроде туда более подходит.

Yoti 19.01.2011 17:28

Цитата:

Сообщение от ErikPshat (Сообщение 932686)
что вы здесь запёрлись

переноси или отдели посты.
Цитата:

Сообщение от ErikPshat (Сообщение 932686)
вот эта программа всё то-же самое делает

Нафиг homebrew.
Цитата:

Сообщение от ErikPshat (Сообщение 932686)
Для PRX нужна другая инструкция

Это для статичных модулей, а не prx.

Цитата:

Step one: extract the stubs from the static elf and compile them in with the loader prx.
Step two: embed the static elf into the loader.
Step three: sign and run.

The loader copies the elf to its proffered address and fixes its stubs with the loaders stubs that where linked by the kernel. Then jumps into it.
  1. Извлеките stubs'ы из статичного эльфа и соберите загрузчик вместе с ними
  2. Интегрируйте статичный эльф в загрузчик
  3. Подпишите и запустите

ErikPshat 19.01.2011 17:37

Yoti, мне кажется, что просто-напросто неподписанные модули PRX не даёт запустить PSP с официальной прошивкой. Потому как она распознаёт, что пытаются запустить неподписанный код. Поэтому думаю, что первым делом тут дело не в релокациях или ещё чего. А вначале нужно суметь подписать модули единой подписью с EBOOT.PBP. Если подпись будет и там и там разная, то соответственно и приложение будет считаться нелигитимным.
Там хоть SCEA вначале бы хоть подпись стояла бы xD

Yoti 19.01.2011 17:51

Вложений: 1
ErikPshat,
это сейчас не критично.

Вот у меня в аттаче два "Привет, мир". Компилируем (или берём готовый EBOOT), подписываем, проверяем.

ErikPshat 19.01.2011 18:04

Yoti, а ты попробуй из подписанного файла извлечь DATA.PSP и декриптовать его через PRXDecrypter )))

Ну вот, пока динамический запустился на оффпроше 6.20 "Hello [dynamic] OFWorld =)"

Yoti 19.01.2011 18:12

ErikPshat,
вот, а статический без подписи должен на кастоме работать. Это DAX постарался - совместимость реализовал.

ErikPshat 19.01.2011 18:17

Эмм. Ну на кастоме понятно, что и без подписи работает. Понятно, что не сам по себе.

Только почему-то при компиляции Build, твой статический даже PRX не выдал. В итоге он не стал подписываться, говоря, что здесь нету PRX'a.

Цитата:

Сообщение от ErikPshat (Сообщение 932700)
Yoti, а ты попробуй из подписанного файла извлечь DATA.PSP и декриптовать его через PRXDecrypter )))

Ты уже понял, почему изначальный EBOOT.PBP, весивший 75Кб, после подписывания вдруг прибавляет 5Мб в весе? )))

Yoti 19.01.2011 18:32

Цитата:

Сообщение от ErikPshat (Сообщение 932703)
Только почему-то при компиляции Build, твой статический даже PRX не выдал

А ты расшифровку prx вспомни =) В нём вся динамика и заключена. Вся разница в этих двух прожках - в одном (!) параметре в makefile - BUILD_PRX = 1. В статике он закомментирован =)

Цитата:

Сообщение от ErikPshat (Сообщение 932700)
попробуй из подписанного файла извлечь DATA.PSP и декриптовать его через PRXDecrypter

Пока ещё ничего не делал. Займусь минут через 20.



Цитата:

Сообщение от ErikPshat (Сообщение 932703)
Ты уже понял, почему изначальный EBOOT.PBP, весивший 75Кб, после подписывания вдруг прибавляет 5Мб в весе?

Хах, ты это мне пишешь? Потому, что размер файла строго прописан в заголовке и его (свой исполняемый файл) увеличивают до необходимого. Это в теме у wololo было написано с самого начала. И я это читал, естественно. И даже ещё помню.
Разжал. Ты про кучу нолей? Так оно меня не удивило (см. абзац выше) =)

ErikPshat 19.01.2011 20:40

Yoti, странно, разве нельзя поменять размер файла в заголовке и потом подписать?
Что за бред?
Sony ведь так не поступает. Что это тогда за взлом подписи и шифрования?

Yoti 19.01.2011 21:56

ErikPshat,
кто-то писал про взлом?))
1. Заголовок содержит ХЕШ, алгоритм создания которого пока неизвестен.
2. В заголовке prx есть данные о разжатом размере, ты это знаешь. Меняешь - ломаешь подпись - файл становится "инвалидом" =)
3. Подпись пока только gzip-секции. Вся структура prx тебе отлично известна.

P.S. Мне ты так в личку и не ответил на вопрос о gzip =)

ErikPshat 20.01.2011 09:55

Цитата:

Сообщение от Yoti (Сообщение 932787)
P.S. Мне ты так в личку и не ответил на вопрос о gzip =)

Эмм, не помню, о чём это. Повтори ещё раз...

И ещё хотел спросить заодно:
Как можно выводить на экран текст -> в нужное для меня место?
Думаю что-то должно быть похоже на такое: printf(x,y, "Hello World"; 140,96)

frostegater 20.01.2011 12:03

Yoti, простите, больше флудерить не буду
учу мат часть, а сообщние удалю пожалуй, стыдно

Yoti 20.01.2011 13:39

Цитата:

Сообщение от ErikPshat (Сообщение 932859)
Эмм, не помню, о чём это. Повтори ещё раз...

Где там размер то прячется, если заголовка prx нет? Я что-то так в спецификации и не нашёл, к своему удивлению.

Цитата:

Сообщение от ErikPshat (Сообщение 932859)
Как можно выводить на экран текст -> в нужное для меня место?
Думаю что-то должно быть похоже на такое: printf(x,y, "Hello World"; 140,96)

Функция - тут.
Просто код:
Код:

pspDebugScreenSetXY(2, 2);
// координаты не в пикселях, а в символах дебаг-шрифта, начиная с 0
pspDebugScreenPrintf("Hello World");


Setsuna-ch4n 20.01.2011 15:58

Хм, ничего еще не решено относительно смерти PSP как платформы, да и пс3 тоже. Сони может просто пихнуть в следующую прошивку список разрешенных приложений (или пары запрещенных) с соответствующими хэш суммами и будет блин вам в масле а не халява

frostegater 20.01.2011 16:15

flashcore, вот на wololo.net пишут что новая офф прошивка намечается

Setsuna-ch4n 20.01.2011 16:33

6.37 чтоли?
PSP 1-3k
PSP Go
сорь за оффтоп


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

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