PSPx форум

PSPx форум (https://www.pspx.ru/forum/index.php)
-   Плагины для PSP (https://www.pspx.ru/forum/forumdisplay.php?f=226)
-   -   HostCore 1.2.1 - Используем файловую систему ПК на PSP (https://www.pspx.ru/forum/showthread.php?t=70158)

ErikPshat 01.04.2014 20:56

Ну в шапке есть ссылка на исходный код. Так что юзайте исходники и играйтесь хоть на 6.60.

Rockets 02.04.2015 21:48

Цитата:

Сообщение от ErikPshat (Сообщение 1085753)
Ну в шапке есть ссылка на исходный код. Так что юзайте исходники и играйтесь хоть на 6.60.

какую строчку там менять надо?

Scorpeg 02.04.2015 23:33

Иршелл с его нетхостами так никто и не переплюнул... А жаль.

karenjan99 13.06.2016 17:56

кто нить может компилить его для 6.61? или может есть альтернатива? а то это вроде единственный с wifi

ErikPshat 14.06.2016 15:31

karenjan99, да, там много нидах завязано на версии прошивок. Смотри файл syspatch.c.

karenjan99 14.06.2016 15:45

ErikPshat, да уже посмотрел но мне не понятно что это и на что заменить

ErikPshat 14.06.2016 16:03

karenjan99, ну берёшь PRXTool 1.1 by TyRaNiD, дизассемблишь файлы известных прошивок и ищешь там известные НИД-ы. Потом находишь в том же месте изменившиеся НИД-ы в 6.61

syspatch.c
Код:


/*
 *        syspatch.c is part of HostCore
 *        Copyright (C) 2008  Poison
 *
 *        This program is free software: you can redistribute it and/or modify
 *        it under the terms of the GNU General Public License as published by
 *        the Free Software Foundation, either version 3 of the License, or
 *        (at your option) any later version.
 *
 *        This program is distributed in the hope that it will be useful,
 *        but WITHOUT ANY WARRANTY; without even the implied warranty of
 *        MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *        GNU General Public License for more details.
 *
 *        You should have received a copy of the GNU General Public License
 *        along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

/*
 *        De******ion:       
 *        Author:                        Poison <hbpoison@gmail.com>
 *        Date Created:        2008-05-15
 */

#include <pspkernel.h>
#include <pspsdk.h>
#include <psputilsforkernel.h>
#include <pspsysmem_kernel.h>

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

#include "utils.h"

int fw_version = FW_371;
int model = PSP_MODEL_STANDARD;

int ( * getDevkitVersion )( void );

int initPatches( void )
{
        getDevkitVersion = ( void * )findProc( "sceSystemMemoryManager", "SysMemUserForUser", 0x3FC9AE6A );
        fw_version = getDevkitVersion();
        model = sceKernelGetModel();
        //Disable slim specific patches
        model = PSP_MODEL_STANDARD;
        return fw_version;
}

unsigned int getFindDriverAddr( void )
{
        tSceModule * pMod = ( tSceModule * )sceKernelFindModuleByName( "sceIOFileManager" );
        unsigned int addr = 0;
        if ( !pMod )
                return 0;
        if ( fw_version == FW_371 )
                addr = pMod->text_addr + 0x00002844;
        else if ( fw_version == FW_380 || fw_version == FW_390 )
                addr = pMod->text_addr + 0x00002808;
        else if ( fw_version == FW_401 )
                addr = pMod->text_addr + 0x000027EC;
        else if ( fw_version == FW_500 || fw_version == FW_550 )
                addr = pMod->text_addr + 0x00002838;
        return addr;
}

void getCtrlNids( unsigned int * nid )
{
        if ( fw_version == FW_371 )
        {
                nid[0] = 0x454455ac; //sceCtrlReadBufferPositive
                nid[1] = 0xc4aad55f; //sceCtrlPeekBufferPositive
        }
        else if ( fw_version == FW_380 || fw_version == FW_390 )
        {
                nid[0] = 0xad0510f6;
                nid[1] = 0xd65d4e9a;
        }
        else if ( fw_version == FW_401 )
        {
                nid[0] = 0xBA664B5E;
                nid[1] = 0x591B3F36;
        }
        else if ( fw_version == FW_500 || fw_version == FW_550 )
        {
                nid[0] = 0x919215D7;
                nid[1] = 0x6B247CCE;
        }
}

void getUtilsNids( unsigned int * nid )
{
        if ( fw_version == FW_371 )
        {
                nid[0] = 0xa3d5e142; //sceKernelExitVSHVSH
                nid[1] = 0xd9739b89; //sceKernelUnregisterExitCallback
                nid[2] = 0x659188e1; //sceKernelCheckExitCallback
                nid[3] = 0x49C5B9E1; //sceKernelLoadModuleForLoadExecVSHMs2
                nid[4] = 0xa1a78C58; //sceKernelLoadModuleForLoadExecVSHDisc
        }
        else if ( fw_version == FW_380 || fw_version == FW_390 )
        {
                nid[0] = 0x62879ad8;
                nid[1] = 0xf1c99c38;
                nid[2] = 0x753ef37c;
                nid[3] = 0x42ED1407;
                nid[4] = 0xc8f0090d;
        }
        else if ( fw_version == FW_401 )
        {
                nid[0] = 0xCA8011A2;
                nid[1] = 0x5AF87B62;
                nid[2] = 0x6274D0D5;
                nid[3] = 0x313F2757;
                nid[4] = 0x83B28C87;
        }
        else if ( fw_version == FW_500 || fw_version == FW_550 )
        {
                nid[0] = 0x94A1C627;
                nid[1] = 0x71F9FB1B;
                nid[2] = 0x2E96EDF8;
                nid[3] = 0xB8E49712;
                nid[4] = 0x7C8A2B62;
        }
}

unsigned int getKillMutexNid()
{
        return 0xf8170fbe;
}

void getDisplayNids( unsigned int * nid )
{
        if ( fw_version == FW_371 )
        {
                nid[0] = 0xe56b11ba;
                nid[1] = 0x7fba941a;
        }
        else if ( fw_version == FW_380 || fw_version == FW_390 )
        {
                nid[0] = 0x3749cda0;
                nid[1] = 0xc89e1f1d;
        }
        else if ( fw_version == FW_401 )
        {
                nid[0] = 0xC28EFAA7;
                nid[1] = 0xC922270C;
        }
        else if ( fw_version == FW_500 || fw_version == FW_550 )
        {
                nid[0] = 0xD8D2FD35;
                nid[1] = 0xFBDA7A1E;
        }
}

void patchMemPartitionInfo()
{
        if ( model == PSP_MODEL_STANDARD ) sceKernelSetDdrMemoryProtection( ( void * )0x88300000, 0x00100000, 0xf );
        else sceKernelSetDdrMemoryProtection( ( void * )0x88600000, 0x00200000, 0xf );
        tSceModule * pMod = ( tSceModule * )sceKernelFindModuleByName( "sceSystemMemoryManager" );
        // 0x02001021 move $v0 $s0
        int offset = 0x00001304;
        if ( fw_version == FW_371 || fw_version == FW_380 || fw_version == FW_390 )
        {
                offset = 0x00001304; //for 3.71, 3.80, 3.90
        }
        else if ( fw_version == FW_401 )
        {
                offset = 0x00003A68; //for 4.01
        }
        else if ( fw_version == FW_500 || fw_version == FW_550 )
        {
                offset = 0x00003AA8; //for 5.00
        }
        _sw( 0x02001021, pMod->text_addr + offset );
        sceKernelIcacheInvalidateAll();
        sceKernelDcacheWritebackInvalidateAll();
        PspSysmemPartitionInfo info;
        memset( &info, 0, sizeof( PspSysmemPartitionInfo ) );
        info.size = sizeof( PspSysmemPartitionInfo );
        PspSysmemPartitionInfo * p_info = ( PspSysmemPartitionInfo * )sceKernelQueryMemoryPartitionInfo( 4, &info );
        if ( model == PSP_MODEL_STANDARD ) p_info->startaddr = 0x08300000;
        else p_info->startaddr = 0x08600000;
        p_info->attr = 0xf;
        //restore
        _sw( 0x00001021, pMod->text_addr + offset );
        sceKernelIcacheInvalidateAll();
        sceKernelDcacheWritebackInvalidateAll();
}

typedef struct PatchSav
{
        unsigned int addr;
        unsigned int val;
} PatchSav;

PatchSav LoadExecVSHCommon_ori[2];

void restoreLoadExecVSHCommon()
{
        _sw( LoadExecVSHCommon_ori[0].val, LoadExecVSHCommon_ori[0].addr );
        _sw( LoadExecVSHCommon_ori[1].val, LoadExecVSHCommon_ori[1].addr );
        sceKernelIcacheInvalidateAll();
        sceKernelDcacheWritebackInvalidateAll();
}

void * patchLoadExecVSHCommon( void * func )
{
        tSceModule * pMod = ( tSceModule * )sceKernelFindModuleByName( "sceLoadExec" );
        if ( fw_version == FW_371 )
                LoadExecVSHCommon_ori[0].addr = pMod->text_addr + 0x0000121c; //same in standare/slim
        else if ( fw_version == FW_380 || fw_version == FW_390 )
                LoadExecVSHCommon_ori[0].addr = pMod->text_addr + 0x000014cc; //same in standare/slim
        else if ( fw_version == FW_401 )
                LoadExecVSHCommon_ori[0].addr = pMod->text_addr + 0x00001E1C; //same in standare/slim
        else if ( fw_version == FW_500 )
                LoadExecVSHCommon_ori[0].addr = pMod->text_addr + 0x00001E58; //verified in phat
        else if ( fw_version == FW_550 )
                LoadExecVSHCommon_ori[0].addr = pMod->text_addr + 0x00001F3C; //same on slim & phat
        LoadExecVSHCommon_ori[1].addr = LoadExecVSHCommon_ori[0].addr + 4;
        LoadExecVSHCommon_ori[0].val = _lw( LoadExecVSHCommon_ori[0].addr );
        LoadExecVSHCommon_ori[1].val = _lw( LoadExecVSHCommon_ori[1].addr );
        MAKE_JUMP( LoadExecVSHCommon_ori[0].addr, func );
        _sw( NOP, LoadExecVSHCommon_ori[1].addr );
        sceKernelIcacheInvalidateAll();
        sceKernelDcacheWritebackInvalidateAll();
        return ( void * )LoadExecVSHCommon_ori[0].addr;
}

unsigned int modulemgr_offset = 0, threadman_offset = 0;

void wifiModulesPatch1()
{
        tSceModule * pMod = ( tSceModule * )sceKernelFindModuleByName( "sceThreadManager" );
        //a0 = 4, change partition id to 4
        if ( fw_version == FW_371 )
                threadman_offset = 0x00010B30;
        else if ( fw_version == FW_380 || fw_version == FW_390 )
                threadman_offset = 0x00010CB8;
        else if ( fw_version == FW_401 )
                threadman_offset = 0x00012154;
        else if ( fw_version == FW_500 || fw_version == FW_550 )
                threadman_offset = 0x000121E0;
        _sw( 0x34040004, pMod->text_addr + threadman_offset );

        pMod = ( tSceModule * )sceKernelFindModuleByName( "sceModuleManager" );
        //a3 stack size 0x40000 -> 0x10000
        if ( fw_version == FW_371 )
                modulemgr_offset = 0x000076A0;
        else if ( fw_version == FW_380 || fw_version == FW_390 )
                modulemgr_offset = 0x00007C9C;
        else if ( fw_version == FW_401 )
                modulemgr_offset = 0x00007C50;
        else if ( fw_version == FW_500 )
                modulemgr_offset = 0x00007C84;
        //added for 5.50
        else if ( fw_version == FW_550 )
                modulemgr_offset = 0x00007F80;
        _sw( 0x3C070001, pMod->text_addr + modulemgr_offset );
        sceKernelIcacheInvalidateAll();
        sceKernelDcacheWritebackInvalidateAll();
}

void wifiModulesPatch2()
{       
        if ( fw_version == FW_550 ) {
            //module renamed to sceNet_Service in 5.50
                tSceModule *  pMod = ( tSceModule * )sceKernelFindModuleByName( "sceNet_Service" );
                //a2 partid = 4 of ifhandle
            _sw( 0x34050004, pMod->text_addr + 0x000014D8 );  //for 5.50
    } else {
            tSceModule *  pMod = ( tSceModule * )sceKernelFindModuleByName( "sceNetInterface_Service" );
            _sw( 0x34050004, pMod->text_addr + 0x00001440 );  //for 3.71, 3.80, 3.90, 4.01, 5.00
    }

        tSceModule * pMod = ( tSceModule * )sceKernelFindModuleByName( "sceNet_Library" );
        unsigned int net_offset = 0;
        if ( fw_version == FW_371 || fw_version == FW_380 || fw_version == FW_390 )
                net_offset = 0x00001800;
        else if ( fw_version == FW_401 )
                net_offset = 0x00002320;
        else if ( fw_version == FW_500 || fw_version == FW_550 )
                net_offset = 0x00002348;
        _sw( 0x34020002, pMod->text_addr + net_offset );
        _sw( 0xAFA20000, pMod->text_addr + net_offset + 0x4 );
        _sw( 0x3C020000, pMod->text_addr + net_offset + 0xC );
       
        pMod = ( tSceModule * )sceKernelFindModuleByName( "sceModuleManager" );
        //a3 stack size 0x10000 -> 0x4000
        _sw( 0x34074000, pMod->text_addr + modulemgr_offset );
        sceKernelIcacheInvalidateAll();
        sceKernelDcacheWritebackInvalidateAll();
}

void wifiModulesPatch3()
{
        tSceModule * pMod = ( tSceModule * )sceKernelFindModuleByName( "sceModuleManager" );
        //restore
        _sw( 0x02403821, pMod->text_addr + modulemgr_offset );

        pMod = ( tSceModule * )sceKernelFindModuleByName( "sceThreadManager" );
        //restore
        _sw( 0x02402021, pMod->text_addr + threadman_offset );
        sceKernelIcacheInvalidateAll();
        sceKernelDcacheWritebackInvalidateAll();
}



karenjan99 14.06.2016 16:53

о спасибо, а я искал как найти эти нид-ы

karenjan99 добавил 14.06.2016 в 16:38
а случаем не найдется файлы 5.00?

karenjan99 добавил 14.06.2016 в 16:53
сорри еще вопросик а для NID-ов prx надо перегнать через файл xmlfile.bat?

ErikPshat 14.06.2016 16:59

  1. Устанавливаешь компилятор для PSP: Minimalist PSPSDK for Windows
  2. Распаковываешь в папку документации компилятора уже готовые НИД-ы до 5.00 SilverSpring's PSP PRX LibDoc's.
    • Путь должен получится какой-то такой: C:\pspsdk\doc\pspsdk\silverspring.lan.st\
  3. Поиск по НИД-ам производишь с помощью программы Replace Studio v7.17 Professional Edition

Цитата:

Сообщение от karenjan99 (Сообщение 1103461)
а случаем не найдется файлы 5.00?

Уже декриптованные файлы можешь найти в БАЗЕ.
Или можешь сам извлечь и декриптовать необходимые инсталляторы официальных прошивок.

Цитата:

Сообщение от karenjan99 (Сообщение 1103461)
сорри еще вопросик а для NID-ов prx надо перегнать через файл xmlfile.bat?

Нет, его (PRX) нужно дизассемблировать через 17. DISASM.bat или 22. DISASM & DISOPTS & FUNCS.bat. Я не помню, как там точно этот пункт называется в той версии, т.к. у меня раздробленная версия на более мелкие операции и названия файлов уже совсем другие. Короче, там должно быть в названии слово DISASM.
Очистка результатов работы производится батником 00. CLEAR ALL.BAT

karenjan99 14.06.2016 17:14

спасибо разберусь сегодня :)

ErikPshat 14.06.2016 18:08

karenjan99, если ты правильно установишь SilverSpring's PSP PRX LibDoc's, то потом можешь запускать справку PSPSDK через:

  • C:\pspsdk\doc\pspsdk.html
или
  • C:\pspsdk\doc\pspsdk\index.html
или
  • C:\pspsdk\doc\pspsdk\silverspring.lan.st\default.html
Ну это чисто для визуального чтения функций.



А для поиска нужных НИД-ов юзай Replace Studio
В поле "Путь" указывай на папку:
  • C:\pspsdk\doc\pspsdk\silverspring.lan.st
В поле "Маска файлов" выставь *.xml (т.е. искать в файлах с любым именем и с XML расширением после точки, т.к. все НИД-ы прописаны в XML файлах)
В поле "Найти" забивай номер НИД-а без нуля в начале (0x).
Потом нажимай синий бинокль для поиска.

Будь осторожен, если случайно нажмёшь на фиолетовый бинокль, то будет происходить замена на то, что прописано в поле "Заменить", даже если там пусто, то заменится на пусто :), т.е. удалится искомое. Хотя там настройки должны стоять так, что перед заменой будет выводится запрос на выполнение.

karenjan99 14.06.2016 18:40

сейчас все поставлю и попробую , если получится конечно:lol:

ErikPshat 14.06.2016 18:42

Вложений: 1
Не забудь отметить свойство "Искать в подпапках"
Вложение 11337

А что там получаться? Всё легко и просто. По названию функции в версии 5.00 из исходников, ты находишь её и можно догадаться название PRX файла. Потом дизассемблишь PRX и находишь через текстовый редактор этот NID. Потом дизассемблишь этот же файл от прошивки 6.61 и ищешь тоже самое место по схожему окружению и определяешь новый NID. Потом заменяешь все НИД-ы от 6.61 в исходнике и компилируешь командой "make" в той папке исходников, где находится файл "Makefile".
Правда я скачал исходники отсюда: https://code.google.com/archive/p/ho...default/source

karenjan99 14.06.2016 19:01

компилятор поставил дальше с архива папку pspsdk полностью копировать в папку doc? эти файлы md5 html map всё надо копировать туда?

karenjan99 добавил 14.06.2016 в 19:01
сорри а тупость при открытии ехе Replace Studio винда требует пароль, вообще то никаког пароля я не поставил на винде:) что делать?:D smartscreen предотвратил запуск бла бла бла требуется уттверждение администратором :)

ErikPshat 14.06.2016 19:12

Цитата:

Сообщение от karenjan99 (Сообщение 1103471)
при открытии ехе Replace Studio винда требует пароль

Хех, ну так это же обычная программа, устанавливается точно так же, как и все обычные программы.
Ты когда-нибудь ставил программы? :D

Ну просто соглашайся на установку. Может требует не пароль, а цифровую подпись, т.к. инсталлятор же не подписан официально.
Либо запускай от имени Администратора.

karenjan99 14.06.2016 19:19

ErikPshat, не не я даже не установил просто когда открыл установщик винда требовала утверждение админа паролем отключил smartscreen на пять минут все пошло:D
ну а теперь

Цитата:

Сообщение от karenjan99 (Сообщение 1103471)
компилятор поставил дальше с архива папку pspsdk полностью копировать в папку doc? эти файлы md5 html map всё надо копировать туда?

:D

ErikPshat 14.06.2016 19:21

Цитата:

Сообщение от karenjan99 (Сообщение 1103471)
smartscreen

Какой нахрен smartscreen :xDD: ну ты же знаешь, когда запускаешь кейгены или любые взломанные программы, то такие вот smartscreen-ы и прочие фильтры и антивирусы обычно всегда ругаются и блокируют, т.к. разработчики программ постоянно жалуются производителям антивирусов на патчи, кейгены, взломанные программы, которые находят в сети, а те, в свою очередь, заносят сигнатуры этих программ в базу данных своих антивирусов, которые потом ругаются.

Не, ну это же ты должен сам знать и понимать. Антивирусы и всякие блокировщики smartscreen-ы, нужно отключать перед установкой программы, если они проявили такой интерес к заведомо чистой программе.
А так же понимать, что я, как админ ресурса, не буду пихать в свои сборки всякие вирусы, за чистоту своих сборок отвечаю!

karenjan99 14.06.2016 19:25

ErikPshat, да нет сам не пользуюсь антивирусами, а вот smartscreen до сех пор не знал что эт такое:lol: никогда при открытии еще не мешала. я то думал отключением defendera все проблемы ушли от меня оказывается в винде есть еще один хрен:lol:

ErikPshat 14.06.2016 19:28

Цитата:

Сообщение от karenjan99 (Сообщение 1103471)
с архива папку pspsdk полностью копировать в папку doc? эти файлы md5 html map всё надо копировать туда?

Эмм, ты архив распакуй снаружи на рабочий стол. Думаю ты должен знать, как работать с архивами. Я обычно открываю архивы в архиваторе и смотрю, что там внутри. Если там отдельная папка, то я её извлекаю. А если там сразу куча папок и файлов, то я извлекаю архив снаружи в "название папки", чтобы все файлы и папки изнутри не рассыпались по всему рабочему столу или где бы то ни было.

Потом ты сверяешь структуру каталогов этого распакованного архива со структурой каталогов в C:\pspsdk\doc
Тут думаю должно быть понятно, что структура должна сойтись точно так же, как я написал пути выше в сообщении: https://www.pspx.ru/forum/showpost.ph...8&postcount=31

karenjan99 15.06.2016 00:45

сразу не заметил что остальные присутствуют в папке pspsdk, осталось найти НИД-Ы :D

karenjan99 добавил 14.06.2016 в 19:52
мда уж небольшая проблемка карта памяти еще не пришла с алиекспреса:D с 32мб картой я точно декриптую файлы. по одному:lol:
качал файлы для 6.60 вот думаю попробовать на 6.60?

karenjan99 добавил 14.06.2016 в 19:54
если найдется время декриптуй файлы 6.61 заодно и в базе будет:blush:

karenjan99 добавил 14.06.2016 в 23:30
ErikPshat, можешь выложить конфиг редактора? я чет не мог разобратся и сделать так чтоб оффсеты подсвечивались

karenjan99 добавил 15.06.2016 в 00:45
так вот нашел пока двое.
в syspatch 0x919215D7 (строка87) 0x6B247CCE(строка88) нашел в файле от 5.00 ctrl.prx открыл DISASM & DISOPTS & FUNCS создались несколько текстовиков один из них 17_DISASM_wiXDRSMW размер у него самый большой искать надо в нем? я искал в другом и нашел :)
потом тоже самое сделал с ctrl.prx от 6.60 в нем нашел ту же строку scepeekbuffer и т.д
надеюсь все правильно?
Нажмите для увеличения


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

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