-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathhenkaku.patch
205 lines (198 loc) · 11.5 KB
/
henkaku.patch
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
diff --git a/bootstrap/bootstrap.c b/bootstrap/bootstrap.c
index 94e9808..64807fe 100644
--- a/bootstrap/bootstrap.c
+++ b/bootstrap/bootstrap.c
@@ -546,7 +546,7 @@ int update_taihen_config(void) {
int state[2] = {0};
int ret;
- if ((ret = search_file_with_fsms(TAIHEN_CONFIG_FILE, 2, fsm, state)) >= 0) {
+/* if ((ret = search_file_with_fsms(TAIHEN_CONFIG_FILE, 2, fsm, state)) >= 0) {
if (state[0] >= 99) { // found null char
DRAWF("ux0:tai/config.txt is corrupted, rewriting it\n");
write_taihen_config(TAIHEN_CONFIG_FILE, 0);
@@ -558,7 +558,7 @@ int update_taihen_config(void) {
sceIoWrite(fd, taihen_config, sizeof(taihen_config) - 1);
sceIoClose(fd);
}
- }
+ }*/ // TODO: proper fix
if (exists("ux0:app/MLCL00001/henkaku.suprx")) {
DRAWF("Removing old henkaku.suprx\n");
@@ -768,7 +768,7 @@ int module_start(SceSize argc, const void *args) {
if (VITASHELL_CRC32 == 0 || (crc[0] = crc32_file("ux0:app/MLCL00001/eboot.bin")) != VITASHELL_CRC32) {
DRAWF("molecularShell CRC32:%x, latest:%x\n", crc[0], VITASHELL_CRC32);
DRAWF("Getting latest version...\n");
- ret = install_pkg(PKG_URL_PREFIX);
+ /*ret = */install_pkg(PKG_URL_PREFIX); // TODO: proper fix
} else {
DRAWF("molecularShell already installed and is the latest version\n");
DRAWF(force_reinstall);
diff --git a/plugin/henkaku.h b/plugin/henkaku.h
index 73a1ea5..e4dba75 100644
--- a/plugin/henkaku.h
+++ b/plugin/henkaku.h
@@ -37,6 +37,6 @@ typedef struct {
#define HENKAKU_CONFIG_MAGIC (0x4C434C4D)
#define CONFIG_PATH "ur0:tai/henkaku_config.bin"
#define OLD_CONFIG_PATH "ux0:temp/app_work/MLCL00001/rec/config.bin"
-#define SPOOF_VERSION (0x3650000)
+#define SPOOF_VERSION (0x3730000)
#endif // HENKAKU_HEADER
diff --git a/plugin/language.h b/plugin/language.h
index c86d437..282cfa6 100644
--- a/plugin/language.h
+++ b/plugin/language.h
@@ -183,24 +183,24 @@ language_container_t language_portuguese_pt = {
L"Falha ao montar ux0. O cartão de memória está inserido?",
};
-// by Tenek & MuskratDesman & dec0dOS
+// by Yoti
language_container_t language_russian = {
L"Настройки HENkaku",
- L"Включить спуфинг PSN",
- L"Включить небезопасные приложения",
- L"Небезопасные приложения могут повредить ваше устройство навсегда, если они используются неправильно, неправильно настроены или вредоносны.\nПожалуйста, проявляйте осторожность при их установке.",
- L"Включить подмену версии",
- L"Поддельная версия",
- L"Поведение кнопки ○",
- L"Ввод",
+ L"Подменять версию ПО для PSN",
+ L"Разрешить небезопасные хоумбрю",
+ L"Небезопасные хоумбрю могут необратимо повредить систему, если они используются не по назначению или содержат вредоносный код.\nУстанавливайте и используйте таковые на свой страх и риск.",
+ L"Подменять версию ПО для игр",
+ L"Указать версию для подмены",
+ L"Функция кнопки ○",
+ L"Выбор",
L"Отмена",
- L"Перезагрузить taiHEN config.txt",
- L"taiHEN config.txt был успешно перезагружен.",
- L"Перезапустить устройство",
+ L"Перечитать taiHEN config.txt",
+ L"taiHEN config.txt был успешно перечитан.",
+ L"Перезагрузить систему",
L"Загрузчик контента",
L"Отвязать карту памяти",
- L"ux0:id.dat был удален. Эта карта памяти теперь может быть использована на любой PSVita.",
- L"Ошибка при монтировании ux0. Проверьте, вставлена ли карта памяти",
+ L"Файл ux0:id.dat был удалён. Теперь эту карту памяти можно использовать на любой другой PS Vita (TV).",
+ L"Ошибка при обращении к разделу ux0. Проверьте, вставлена ли карта памяти.",
};
// by TriggerHavoc
diff --git a/plugin/user.c b/plugin/user.c
index debedfc..750afeb 100644
--- a/plugin/user.c
+++ b/plugin/user.c
@@ -10,9 +10,8 @@
#include "language.h"
#include "../build/version.c"
-#define DISPLAY_VERSION (0x3600000)
-
int _vshIoMount(int id, const char *path, int permissions, void *opt);
+int _vshSblGetSystemSwVersion(SceKernelFwInfo *info);
extern unsigned char _binary_system_settings_xml_start;
extern unsigned char _binary_system_settings_xml_size;
@@ -26,15 +25,20 @@ static SceUID g_hooks[15];
static tai_hook_ref_t g_sceKernelGetSystemSwVersion_SceSettings_hook;
static int sceKernelGetSystemSwVersion_SceSettings_patched(SceKernelFwInfo *info) {
int ret;
- int ver_major;
- int ver_minor;
+ SceKernelFwInfo real_info;
ret = TAI_CONTINUE(int, g_sceKernelGetSystemSwVersion_SceSettings_hook, info);
- ver_major = ((DISPLAY_VERSION >> 24) & 0xF) + 10 * (DISPLAY_VERSION >> 28);
- ver_minor = ((DISPLAY_VERSION >> 16) & 0xF) + 10 * ((DISPLAY_VERSION >> 20) & 0xF);
+ sceClibMemset(&real_info, 0, sizeof(SceKernelFwInfo));
+ real_info.size = sizeof(SceKernelFwInfo);
+ _vshSblGetSystemSwVersion(&real_info);
if (BETA_RELEASE) {
- sceClibSnprintf(info->versionString, 16, "%d.%02d \xE5\xA4\x89\xE9\x9D\xA9-%d\xCE\xB2%d", ver_major, ver_minor, HENKAKU_RELEASE, BETA_RELEASE);
+ //sceClibSnprintf(info->versionString, 16, "%s \xE5\xA4\x89\xE9\x9D\xA9-%d\xCE\xB2%d", real_info.versionString, HENKAKU_RELEASE, BETA_RELEASE);
+ sceClibSnprintf(info->versionString, 19, "%s \xE3\x83\xA8\xE3\x83\x86\xE3\x82\xA3-%d\xCE\xB2%d", real_info.versionString, HENKAKU_RELEASE, BETA_RELEASE);
+ } else if (HENKAKU_RELEASE > 1) {
+ //sceClibSnprintf(info->versionString, 16, "%s \xE5\xA4\x89\xE9\x9D\xA9-%d", real_info.versionString, HENKAKU_RELEASE);
+ sceClibSnprintf(info->versionString, 19, "%s \xE3\x83\xA8\xE3\x83\x86\xE3\x82\xA3-%d", real_info.versionString, HENKAKU_RELEASE);
} else {
- sceClibSnprintf(info->versionString, 16, "%d.%02d \xE5\xA4\x89\xE9\x9D\xA9-%d", ver_major, ver_minor, HENKAKU_RELEASE);
+ //sceClibSnprintf(info->versionString, 16, "%s \xE5\xA4\x89\xE9\x9D\xA9", real_info.versionString);
+ sceClibSnprintf(info->versionString, 19, "%s \xE3\x83\xA8\xE3\x83\x86\xE3\x82\xA3", real_info.versionString);
}
return ret;
}
@@ -440,17 +444,59 @@ int module_start(SceSize argc, const void *args) {
// version and retail/dex/test unit, this should allow us to specify different
// offsets.
switch (info.module_nid) {
+ case 0x8978D25D: { // retail 3.55 SceShell thanks to Yoti for offsets
+ g_hooks[3] = taiHookFunctionOffset(&g_update_check_hook,
+ info.modid,
+ 0, // segidx
+ 0x363968, // offset
+ 1, // thumb
+ update_check_patched);
+ g_hooks[4] = taiHookFunctionOffset(&g_game_update_check_hook,
+ info.modid,
+ 0, // segidx
+ 0x37BA5A, // offset
+ 1, // thumb
+ game_update_check_patched);
+ g_hooks[5] = taiHookFunctionOffset(&g_passphrase_decrypt_hook,
+ info.modid,
+ 0, // segidx
+ 0x324DB0, // offset
+ 1, // thumb
+ passphrase_decrypt_patched);
+ break;
+ }
+ case 0x9F367BFC: { // retail 3.57 SceShell thanks to Yoti for offsets
+ g_hooks[3] = taiHookFunctionOffset(&g_update_check_hook,
+ info.modid,
+ 0, // segidx
+ 0x3637CC, // offset
+ 1, // thumb
+ update_check_patched);
+ g_hooks[4] = taiHookFunctionOffset(&g_game_update_check_hook,
+ info.modid,
+ 0, // segidx
+ 0x37B8BE, // offset
+ 1, // thumb
+ game_update_check_patched);
+ g_hooks[5] = taiHookFunctionOffset(&g_passphrase_decrypt_hook,
+ info.modid,
+ 0, // segidx
+ 0x324C14, // offset
+ 1, // thumb
+ passphrase_decrypt_patched);
+ break;
+ }
case 0x0552F692: { // retail 3.60 SceShell
g_hooks[3] = taiHookFunctionOffset(&g_update_check_hook,
info.modid,
0, // segidx
- 0x363de8, // offset
+ 0x363DE8, // offset
1, // thumb
update_check_patched);
g_hooks[4] = taiHookFunctionOffset(&g_game_update_check_hook,
info.modid,
0, // segidx
- 0x37beda, // offset
+ 0x37BEDA, // offset
1, // thumb
game_update_check_patched);
g_hooks[5] = taiHookFunctionOffset(&g_passphrase_decrypt_hook,
@@ -486,13 +532,13 @@ int module_start(SceSize argc, const void *args) {
g_hooks[3] = taiHookFunctionOffset(&g_update_check_hook,
info.modid,
0, // segidx
- 0x12c882, // offset
+ 0x12C882, // offset
1, // thumb
update_check_patched);
g_hooks[4] = taiHookFunctionOffset(&g_game_update_check_hook,
info.modid,
0, // segidx
- 0x36df3e, // offset
+ 0x36DF3E, // offset
1, // thumb
game_update_check_patched);
g_hooks[5] = taiHookFunctionOffset(&g_passphrase_decrypt_hook,