PSPx форум

PSPx форум (https://www.pspx.ru/forum/index.php)
-   PSP хакинг и девелопмент (https://www.pspx.ru/forum/forumdisplay.php?f=195)
-   -   PrxEncrypter Mod v1.0.0.1 - Full Range Demo Game Sign (https://www.pspx.ru/forum/showthread.php?t=103580)

ErikPshat 25.04.2013 12:26

PrxEncrypter Mod v1.0.0.1 - Full Range Demo Game Sign
 
Вложений: 3
PrxEncrypter Mod
Подписываем приложения оригинальными заголовками

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


Что это за мод?
Это версия шифровальщика, собранного на основании предыдущей подготовительной темы, включающего 103 заголовка демонстрационных версий игр, способного подписывать приложения для запуска с карты памяти на официальных прошивках.
  • Способен подписывать исполняемые файлы DATA.PSP в диапазоне ~ 368 kb - 8 Mb
  • Для подписи автоматически подбирается самый маленький из 103-ёх по размеру заголовок
  • Используются "теги" категории "MG Demo" (MemoryStick Game Demo) - 0x0C000000 и 0xADF305F0
  • Можно подписывать только DATA.PSP для использования в контейнере EBOOT.PBP
    • Но никак не EBOOT.BIN для способа NP.ISO => EBOOT.PBP, т.к. для этого контейнера требуются теги другого диапазона "EG" - 0xD916xxF0
      Для этого случая уже имеется прекрасный инструмент - SEBOOT (Sign EBOOT.BIN)
  • Подписываемые приложения не должны иметь Kernel-модулей, только User-режим.
    • Для запуска приложений, использующих kernel-режим, требуется внедрение rebootex модуля, что пока лично мной не изучено. Если кто-то имеет информацию по данному вопросу, то можете поделиться ей. Например неплохо было бы заставить работать PSPident на официальных прошивках...


Как им пользоваться?
  1. Скачайте и разархивируйте архив с энкриптером: PrxEncrypterMod_(103-Demo-Games).zip
  2. В папку "PrxEncrypter Mod" скопируйте для подписываения файлы EBOOT.PBP, DATA.PSP или EBOOT.BIN. Так же, чтобы сразу собралась подписанная программа со всеми ресурсами, можете в папку добавить файлы ICON0.PNG ICON1.PNG PIC0.PNG PIC1.PNG SND0.AT3 DATA.PSAR.
  3. Запустите программу "PrxEncrypterMod.exe" для подписи.
  4. Заберите создавшуюся папку "SIGNED GAME" с подписанным EBOOT.PBP и положите её на карту памяти в папку ms0(ef0):/PSP/GAME/
    Папку можете переименовать по названию вашей игры или программы.
Changelog PrxEncrypterMod:
  • Добавлено 100 заголовков от демоверсий для подписи, к 3-ём ранее имеющимся. Итого 103 заголовка.
  • Добавлена проверка на ~PSP и ELF
  • Заменён механизм сжатия в GZIP библиотекой zlib на консольный 7-Zip.
  • Исправлен баг, когда файл всегда подписывался бОльшим заголовком, чем он сам, несмотря на используемое сжатие. То есть, даже если файл сжимался намного меньшим размером и свободно помещался в меньший заголовок, то заголовок всё равно брался бОльший, чем несжатый файл.
  • Автоматизирован процесс подписи.



Таблица включённых в PrxEncrypter заголовков по алфавиту:
Таблица демонстрационных игр, выпущенных для Sony PSP (по алфавиту)
Наименование игрыDISC_IDРегионПОДата релиза ГГГГ.ММ.ДДТег шифрованияКате-
гория
Размер
GZIP 0xB0
Размер
ELF 0x28
Размер DATA.PSP
1Airport Hero NaHa DemoULJM05171:JPN:3.402007.05.300xADF305F0MG8 249 2848 249 2848 249 632
2Airport Hero Narita DemoULJM05128:JPN:3.402007.05.290xADF305F0MG8 360 6018 360 6018 360 944
3Ape Academy 2 DemoUCES00302:EUR:2.812006.11.030xADF305F0MG7 657 8247 657 8247 658 160
4Ape Escape Racing DemoUCJS10032:JPN:2.822006.09.250xADF305F0MG8 149 1108 149 1108 149 456
5Ape Escape: Saru Saru DemoUCJS10060:JPN:3.502007.06.290xADF305F0MG6 805 3366 805 3366 805 680
6Astonishia Story 2 DemoULKS46142:KOR:3.902008.03.200xADF305F0MG368 196978 952368 544
7Bleach: Heat the Soul 5 DemoNPJG90020:JPN:3.902008.04.210xADF305F0MG5 737 5307 756 3285 737 872
8Bleach: Soul Carnival 2NPJG90041:JPN:5.002009.05.160xADF305F0MG810 6492 678 576810 992
9Blokus Club Portable DemoULJS00068:JPN:2.812006.10.290xADF305F0MG6 158 4126 158 4126 158 752
10Bounty Hounds DemoULJS00021:JPN:2.802006.09.300xADF305F0MG8 085 3408 085 3408 085 680
11Brain Trainer Portable 2 DemoULJM05126:JPN:3.402007.05.290xADF305F0MG5 245 5715 245 5715 245 920
12Computer Science 1 DemoULJM05135:JPN:3.402007.05.240xADF305F0MG5 417 9985 417 9985 418 336
13Computer Science 2 DemoULJM05189:JPN:3.402007.05.240xADF305F0MG5 456 4365 456 4365 456 784
14DJ Max Portable 2 DemoULKS46116:KOR:3.112007.03.260xADF305F0MG7 922 0387 922 0387 922 384
15Doko: Let's Gakkou! DemoUCJS10039:JPN:3.402007.04.260xADF305F0MG5 627 0005 627 0005 627 344
16Dokusho 2 DemoULJM05393:JPN:4.052008.10.080xADF305F0MG6 652 91113 723 3486 653 248
17Dungeon Explorer DemoULJM05164:JPN:3.512007.09.200xADF305F0MG4 960 8998 227 6444 961 248
18Dungeon Explorer DemoULUS10289:USA:3.902008.03.200xADF305F0MG4 946 7048 253 2364 947 040
19Dungeon Explorer Famitsu DemoULJM05164:JPN:3.732007.12.240xADF305F0MG5 031 8608 345 2925 032 208
20Dynasty Warriors: StrikeforceULJM91017:JPN:5.032009.02.170xADF305F0MG1 457 8384 406 7161 458 176
21echochrome DemoNPJG90019:JPN:3.902008.03.060xADF305F0MG3 913 0927 861 2323 913 440
22echochrome DemoNPHG00005:HKG:3.902008.03.140xADF305F0MG3 864 5997 855 2403 864 944
23Everybody's Sukkiri #1NPJG90047:JPN:5.512009.07.170xADF305F0MG429 8331 119 380430 176
24Everybody's Sukkiri #2NPJG90047:JPN:5.512009.07.310xADF305F0MG511 3911 368 996511 728
25Everybody's Sukkiri #3NPJG90047:JPN:5.512009.09.030xADF305F0MG492 5331 334 524492 880
26Everybody's Sukkiri #4NPJG90047:JPN:5.512009.09.110xADF305F0MG497 0451 341 124497 392
27Everyone in Reading DemoULJM05352:JPN:3.952008.06.190xADF305F0MG5 743 59014 565 4685 743 936
28Exit 2 DemoULJM05161:JPN:2.802006.10.290xADF305F0MG8 089 6408 089 6408 089 984
29Full Auto 2 DemoNPUH90001:USA:3.402007.05.110xADF305F0MG7 799 6687 799 6687 800 016
30Go! Sudoku DemoUCJS10036:JPN:2.712006.06.010x0C000000MG5 735 2205 735 2205 735 568
31Gurumin DemoULJM05123:JPN:3.402007.05.240xADF305F0MG8 223 4728 223 4728 223 808
32Half-Minute Hero 2 Demo #1NPJH90170:JPN:6.312010.11.050xADF305F0MG6 908 8628 055 6926 909 200
33Hello Kitty no Happy AccessoryULJM05469:JPN:5.032009.05.120xADF305F0MG6 107 6069 282 3566 107 952
34Hitman Reborn 2NPJH90061:JPN:5.512009.09.010xADF305F0MG5 396 43513 957 1045 396 784
35Hitman Reborn DemoNPJH90007:USA:4.052008.08.270xADF305F0MG6 254 01813 876 3046 254 368
36Hitman Reborn TagNPJH90081:JPN:6.202010.01.250xADF305F0MG6 449 7359 045 5926 450 080
37Homestar Portable DemoULJM05184:JPN:3.402007.05.290xADF305F0MG7 299 9507 299 9507 300 288
38Hot Pixel DemoULED90025:EUR:3.502007.06.290xADF305F0MG8 241 5928 241 5928 241 936
39Hot Shots Golf 2 Demo #1UCJS10075:JPN:3.802008.02.010xADF305F0MG7 975 3579 791 9887 975 696
40Hot Shots Golf 2 Demo #2UCJS10075:JPN:3.802008.02.010xADF305F0MG8 327 18110 187 0288 327 520
41Hototogisu Ran DemoULJS00159:JPN:4.052008.10.240xADF305F0MG4 940 7207 469 3124 941 056
42Ikuze! Gen-San DemoULJS00141:JPN:3.952008.05.090xADF305F0MG5 468 0597 695 6845 468 400
43Infinite Loop DemoNPJH90004:JPN:3.952008.07.180xADF305F0MG8 383 03712 548 1568 383 376
44Intelligent License 2 DemoULJS00087:JPN:3.402007.05.240xADF305F0MG6 524 3986 524 3986 524 736
45Kanji Trainer Portable DemoULJM05201:JPN:3.402007.05.290xADF305F0MG6 320 0646 320 0646 320 400
46Killzone: Liberation DemoUCES00279:EUR:3.022007.01.020xADF305F0MG8 008 5368 008 5368 008 880
47Killzone: Liberation DemoUCUS98646:USA:3.012007.01.020xADF305F0MG8 008 6168 008 6168 008 960
48LocoRoco Demo #1UCJS10041:JPN:2.712006.04.240x0C000000MG8 004 5748 004 5748 004 912
49LocoRoco Demo #1UCKS45020:KOR:2.712006.04.250x0C000000MG7 944 9267 944 9267 945 264
50LocoRoco Demo #1UCAS40063:HKG:2.712006.04.250x0C000000MG8 084 5108 084 5108 084 848
51LocoRoco Demo #1UCUS98662:USA:2.712006.04.250x0C000000MG8 183 8068 183 8068 184 144
52LocoRoco Demo #1UCES00304:EUR:2.712006.04.250x0C000000MG8 185 7508 185 7508 186 096
53LocoRoco Demo #2UCJS10041:JPN:2.802006.10.260xADF305F0MG8 347 5508 347 5508 347 888
54LocoRoco Demo #3UCAS40063:HKG:2.822006.10.290xADF305F0MG8 233 8068 233 8068 234 144
55LocoRoco Demo #3UCUS98662:USA:2.822006.10.290xADF305F0MG8 289 2628 289 2628 289 600
56LocoRoco Demo #3UCES00304:EUR:2.802006.10.290xADF305F0MG8 316 5508 316 5508 316 896
57LocoRoco Demo #3UCKS45020:KOR:2.822006.10.300xADF305F0MG8 087 6228 087 6228 087 968
58LocoRoco Demo #4UCKS45020:KOR:3.022006.12.110xADF305F0MG7 933 7427 933 7427 934 080
59LocoRoco Demo #4UCJS10041:JPN:3.022006.12.110xADF305F0MG7 950 5747 950 5747 950 912
60LocoRoco Demo #4UCAS40063:HKG:3.022006.12.110xADF305F0MG8 050 8068 050 8068 051 152
61LocoRoco Demo #4UCUS98662:USA:3.022006.12.110xADF305F0MG8 113 5428 113 5428 113 888
62LocoRoco Demo #4UCED90007:EUR:3.022006.12.110xADF305F0MG8 122 7188 122 7188 123 056
63LocoRoco Demo #5UCJS10041:JPN:3.402007.04.270xADF305F0MG7 134 6787 134 6787 135 024
64Lumines 2 DemoULJM05232:JPN:3.112007.04.270xADF305F0MG7 630 4367 630 4367 630 784
65Mawaskes DemoULJS00105:JPN:3.512007.07.250xADF305F0MG6 167 1757 995 2526 167 520
66Medal of Honor: Heroes DemoULED90008:EUR:3.032007.02.020xADF305F0MG6 799 9366 799 9366 800 272
67Mercury Meltdown Demo #1UCJS10043:JPN:2.802006.07.280xADF305F0MG6 817 3486 817 3486 817 696
68Mercury Meltdown Demo #2ULED90018:EUR:2.802006.12.250xADF305F0MG6 767 1086 767 1086 767 456
69Metal Gear Solid: Portable Ops DemoULED90040:EUR:3.402007.05.120xADF305F0MG6 563 5246 563 5246 563 872
70MLB 07 DemoUCUS98667:USA:3.302007.05.020xADF305F0MG5 781 6445 781 6445 781 984
71Monster Hunter Portable 2nd G TrailerULJM05500:JPN:1.002007.12.260xADF305F0MG4 784 4745 145 1884 784 816
72Moto GP DemoUCES00373:EUR:2.802006.10.270xADF305F0MG8 271 5528 271 5528 271 888
73NBA 07 DemoUCUS98644:USA:3.032007.04.060xADF305F0MG7 127 8847 127 8847 128 224
74NBA 08 DemoUCUS98699:USA:3.712007.12.050xADF305F0MG1 772 2645 881 5321 772 608
75Neo Angelique Special DemoNPJH90010:JPN:4.052008.09.120xADF305F0MG3 868 7934 167 3203 869 136
76Onore no Shinzuru Michi wo YukeNPJH90034:JPN:5.032009.04.170xADF305F0MG3 251 6589 286 1563 252 000
77Otsugea Uranai na Desu DemoULJM05409:JPN:5.012008.12.040xADF305F0MG5 799 28111 721 1005 799 632
78Phantasy Star PortableULJM91014:JPN:3.952008.07.110xADF305F0MG2 417 7496 735 4882 418 096
79Ridge Racer 2 DemoUCES00422:EUR:2.812006.10.200xADF305F0MG6 687 7486 687 7486 688 096
80R-Type Tactics 2: Operation Bitter Chocolate ver. AULJS00233:JPN:5.512009.09.240xADF305F0MG8 272 69311 715 2048 273 040
81R-Type Tactics 2: Operation Bitter Chocolate ver. BULJS00233:JPN:6.002009.10.080xADF305F0MG7 165 57610 410 5967 165 920
82R-Type Tactics 2: Operation Bitter Chocolate ver. CULJS00233:JPN:6.102009.11.230xADF305F0MG7 877 64011 405 3967 877 984
83Shichoka Crossword DemoULJM05168:JPN:3.402007.05.290xADF305F0MG7 536 4647 536 4647 536 800
84Smash Court Tennis 3 DemoUCED90036:EUR:3.402007.06.080xADF305F0MG2 665 7402 665 7402 666 080
85Socom Fireteam Bravo 2 Demo #1UCUS98645:USA:3.502007.05.160xADF305F0MG4 553 8764 553 8764 554 224
86Socom Fireteam Bravo 2 Demo #2UCED90042:EUR:3.502007.06.290xADF305F0MG5 930 5738 870 7245 930 912
87Space Invaders Extreme DemoULJM05315:JPN:3.802008.02.180xADF305F0MG5 103 9186 284 4565 104 256
88Syphon Filter: Dark Mirror DemoUCUS98641:USA:3.032007.02.160xADF305F0MG7 452 5607 452 5607 452 896
89The Legend of Heroes: Trails in the SkyULJM05170:JPN:3.402007.05.240xADF305F0MG7 891 3767 891 3767 891 712
90ToCA Race Driver 3 DemoULED90009:EUR:3.032007.02.090xADF305F0MG3 400 2243 400 2243 400 560
91Umihara Kawase DemoULJS00137:JPN:3.902008.03.140xADF305F0MG3 125 2589 288 4443 125 600
92Valhalla Knights 2 DemoULJS00138:JPN:3.952008.05.190xADF305F0MG5 327 41112 722 5405 327 760
93Warhammer 40k Squad Command DemoULUD90004:USA:3.712007.10.240xADF305F0MG6 537 95910 703 8966 538 304
94Warhammer 40k Squad Command DemoNPEH90001:EUR:3.522007.10.290xADF305F0MG6 537 95910 703 8966 538 304
95What Did I Do To Deserve This, My LordNPJG90009:JPN:3.722007.11.150xADF305F0MG3 725 4398 141 7723 725 776
96World Tour Soccer 06 DemoUCES00206:EUR:2.802006.07.270xADF305F0MG5 583 6165 583 6165 583 952
97World Tour Soccer 2 DemoUCUS98631:USA:2.802006.07.270xADF305F0MG5 583 0565 583 0565 583 392
98Worms Open Warfare 2 DemoULED90045:EUR:3.522007.08.170xADF305F0MG4 411 2797 732 9724 411 616
99Xyanide: Resurrection DemoULED90043:EUR:3.502007.06.150xADF305F0MG8 296 2688 296 2688 296 608
100Yuusha 30 #1NPJH90024:JPN:5.022009.02.130xADF305F0MG6 175 0856 792 8766 175 424
101Yuusha 30 #2NPJH90026:JPN:5.032009.03.260xADF305F0MG7 165 4467 709 7247 165 792
102Yuusha 30 #3NPJH90025:JPN:5.032009.04.280xADF305F0MG5 312 1945 677 2285 312 544
103Yuusha 30 #4NPJH90027:JPN:5.032009.05.220xADF305F0MG6 936 9927 575 0526 937 328

Таблица включённых в PrxEncrypter заголовков по размеру DATA.PSP:
Таблица демонстрационных игр, выпущенных для Sony PSP (по размеру DATA.PSP)
Наименование игрыDISC_IDРегионПОДата релиза ГГГГ.ММ.ДДТег шифрованияКате-
гория
Размер
GZIP 0xB0
Размер
ELF 0x28
Размер DATA.PSP
1Astonishia Story 2 DemoULKS46142:KOR:3.902008.03.200xADF305F0MG368 196978 952368 544
2Everybody's Sukkiri #1NPJG90047:JPN:5.512009.07.170xADF305F0MG429 8331 119 380430 176
3Everybody's Sukkiri #3NPJG90047:JPN:5.512009.09.030xADF305F0MG492 5331 334 524492 880
4Everybody's Sukkiri #4NPJG90047:JPN:5.512009.09.110xADF305F0MG497 0451 341 124497 392
5Everybody's Sukkiri #2NPJG90047:JPN:5.512009.07.310xADF305F0MG511 3911 368 996511 728
6Bleach: Soul Carnival 2NPJG90041:JPN:5.002009.05.160xADF305F0MG810 6492 678 576810 992
7Dynasty Warriors: StrikeforceULJM91017:JPN:5.032009.02.170xADF305F0MG1 457 8384 406 7161 458 176
8NBA 08 DemoUCUS98699:USA:3.712007.12.050xADF305F0MG1 772 2645 881 5321 772 608
9Phantasy Star PortableULJM91014:JPN:3.952008.07.110xADF305F0MG2 417 7496 735 4882 418 096
10Smash Court Tennis 3 DemoUCED90036:EUR:3.402007.06.080xADF305F0MG2 665 7402 665 7402 666 080
11Umihara Kawase DemoULJS00137:JPN:3.902008.03.140xADF305F0MG3 125 2589 288 4443 125 600
12Onore no Shinzuru Michi wo YukeNPJH90034:JPN:5.032009.04.170xADF305F0MG3 251 6589 286 1563 252 000
13ToCA Race Driver 3 DemoULED90009:EUR:3.032007.02.090xADF305F0MG3 400 2243 400 2243 400 560
14What Did I Do To Deserve This, My LordNPJG90009:JPN:3.722007.11.150xADF305F0MG3 725 4398 141 7723 725 776
15echochrome DemoNPHG00005:HKG:3.902008.03.140xADF305F0MG3 864 5997 855 2403 864 944
16Neo Angelique Special DemoNPJH90010:JPN:4.052008.09.120xADF305F0MG3 868 7934 167 3203 869 136
17echochrome DemoNPJG90019:JPN:3.902008.03.060xADF305F0MG3 913 0927 861 2323 913 440
18Worms Open Warfare 2 DemoULED90045:EUR:3.522007.08.170xADF305F0MG4 411 2797 732 9724 411 616
19Socom Fireteam Bravo 2 Demo #1UCUS98645:USA:3.502007.05.160xADF305F0MG4 553 8764 553 8764 554 224
20Monster Hunter Portable 2nd G TrailerULJM05500:JPN:1.002007.12.260xADF305F0MG4 784 4745 145 1884 784 816
21Hototogisu Ran DemoULJS00159:JPN:4.052008.10.240xADF305F0MG4 940 7207 469 3124 941 056
22Dungeon Explorer DemoULUS10289:USA:3.902008.03.200xADF305F0MG4 946 7048 253 2364 947 040
23Dungeon Explorer DemoULJM05164:JPN:3.512007.09.200xADF305F0MG4 960 8998 227 6444 961 248
24Dungeon Explorer Famitsu DemoULJM05164:JPN:3.732007.12.240xADF305F0MG5 031 8608 345 2925 032 208
25Space Invaders Extreme DemoULJM05315:JPN:3.802008.02.180xADF305F0MG5 103 9186 284 4565 104 256
26Brain Trainer Portable 2 DemoULJM05126:JPN:3.402007.05.290xADF305F0MG5 245 5715 245 5715 245 920
27Yuusha 30 #3NPJH90025:JPN:5.032009.04.280xADF305F0MG5 312 1945 677 2285 312 544
28Valhalla Knights 2 DemoULJS00138:JPN:3.952008.05.190xADF305F0MG5 327 41112 722 5405 327 760
29Hitman Reborn 2NPJH90061:JPN:5.512009.09.010xADF305F0MG5 396 43513 957 1045 396 784
30Computer Science 1 DemoULJM05135:JPN:3.402007.05.240xADF305F0MG5 417 9985 417 9985 418 336
31Computer Science 2 DemoULJM05189:JPN:3.402007.05.240xADF305F0MG5 456 4365 456 4365 456 784
32Ikuze! Gen-San DemoULJS00141:JPN:3.952008.05.090xADF305F0MG5 468 0597 695 6845 468 400
33World Tour Soccer 2 DemoUCUS98631:USA:2.802006.07.270xADF305F0MG5 583 0565 583 0565 583 392
34World Tour Soccer 06 DemoUCES00206:EUR:2.802006.07.270xADF305F0MG5 583 6165 583 6165 583 952
35Doko: Let's Gakkou! DemoUCJS10039:JPN:3.402007.04.260xADF305F0MG5 627 0005 627 0005 627 344
36Go! Sudoku DemoUCJS10036:JPN:2.712006.06.010x0C000000MG5 735 2205 735 2205 735 568
37Bleach: Heat the Soul 5 DemoNPJG90020:JPN:3.902008.04.210xADF305F0MG5 737 5307 756 3285 737 872
38Everyone in Reading DemoULJM05352:JPN:3.952008.06.190xADF305F0MG5 743 59014 565 4685 743 936
39MLB 07 DemoUCUS98667:USA:3.302007.05.020xADF305F0MG5 781 6445 781 6445 781 984
40Otsugea Uranai na Desu DemoULJM05409:JPN:5.012008.12.040xADF305F0MG5 799 28111 721 1005 799 632
41Socom Fireteam Bravo 2 Demo #2UCED90042:EUR:3.502007.06.290xADF305F0MG5 930 5738 870 7245 930 912
42Hello Kitty no Happy AccessoryULJM05469:JPN:5.032009.05.120xADF305F0MG6 107 6069 282 3566 107 952
43Blokus Club Portable DemoULJS00068:JPN:2.812006.10.290xADF305F0MG6 158 4126 158 4126 158 752
44Mawaskes DemoULJS00105:JPN:3.512007.07.250xADF305F0MG6 167 1757 995 2526 167 520
45Yuusha 30 #1NPJH90024:JPN:5.022009.02.130xADF305F0MG6 175 0856 792 8766 175 424
46Hitman Reborn DemoNPJH90007:USA:4.052008.08.270xADF305F0MG6 254 01813 876 3046 254 368
47Kanji Trainer Portable DemoULJM05201:JPN:3.402007.05.290xADF305F0MG6 320 0646 320 0646 320 400
48Hitman Reborn TagNPJH90081:JPN:6.202010.01.250xADF305F0MG6 449 7359 045 5926 450 080
49Intelligent License 2 DemoULJS00087:JPN:3.402007.05.240xADF305F0MG6 524 3986 524 3986 524 736
50Warhammer 40k Squad Command DemoULUD90004:USA:3.712007.10.240xADF305F0MG6 537 95910 703 8966 538 304
51Warhammer 40k Squad Command DemoNPEH90001:EUR:3.522007.10.290xADF305F0MG6 537 95910 703 8966 538 304
52Metal Gear Solid: Portable Ops DemoULED90040:EUR:3.402007.05.120xADF305F0MG6 563 5246 563 5246 563 872
53Dokusho 2 DemoULJM05393:JPN:4.052008.10.080xADF305F0MG6 652 91113 723 3486 653 248
54Ridge Racer 2 DemoUCES00422:EUR:2.812006.10.200xADF305F0MG6 687 7486 687 7486 688 096
55Mercury Meltdown Demo #2ULED90018:EUR:2.802006.12.250xADF305F0MG6 767 1086 767 1086 767 456
56Medal of Honor: Heroes DemoULED90008:EUR:3.032007.02.020xADF305F0MG6 799 9366 799 9366 800 272
57Ape Escape: Saru Saru DemoUCJS10060:JPN:3.502007.06.290xADF305F0MG6 805 3366 805 3366 805 680
58Mercury Meltdown Demo #1UCJS10043:JPN:2.802006.07.280xADF305F0MG6 817 3486 817 3486 817 696
59Half-Minute Hero 2 Demo #1NPJH90170:JPN:6.312010.11.050xADF305F0MG6 908 8628 055 6926 909 200
60Yuusha 30 #4NPJH90027:JPN:5.032009.05.220xADF305F0MG6 936 9927 575 0526 937 328
61NBA 07 DemoUCUS98644:USA:3.032007.04.060xADF305F0MG7 127 8847 127 8847 128 224
62LocoRoco Demo #5UCJS10041:JPN:3.402007.04.270xADF305F0MG7 134 6787 134 6787 135 024
63Yuusha 30 #2NPJH90026:JPN:5.032009.03.260xADF305F0MG7 165 4467 709 7247 165 792
64R-Type Tactics 2: Operation Bitter Chocolate ver. BULJS00233:JPN:6.002009.10.080xADF305F0MG7 165 57610 410 5967 165 920
65Homestar Portable DemoULJM05184:JPN:3.402007.05.290xADF305F0MG7 299 9507 299 9507 300 288
66Syphon Filter: Dark Mirror DemoUCUS98641:USA:3.032007.02.160xADF305F0MG7 452 5607 452 5607 452 896
67Shichoka Crossword DemoULJM05168:JPN:3.402007.05.290xADF305F0MG7 536 4647 536 4647 536 800
68Lumines 2 DemoULJM05232:JPN:3.112007.04.270xADF305F0MG7 630 4367 630 4367 630 784
69Ape Academy 2 DemoUCES00302:EUR:2.812006.11.030xADF305F0MG7 657 8247 657 8247 658 160
70Full Auto 2 DemoNPUH90001:USA:3.402007.05.110xADF305F0MG7 799 6687 799 6687 800 016
71R-Type Tactics 2: Operation Bitter Chocolate ver. CULJS00233:JPN:6.102009.11.230xADF305F0MG7 877 64011 405 3967 877 984
72The Legend of Heroes: Trails in the SkyULJM05170:JPN:3.402007.05.240xADF305F0MG7 891 3767 891 3767 891 712
73DJ Max Portable 2 DemoULKS46116:KOR:3.112007.03.260xADF305F0MG7 922 0387 922 0387 922 384
74LocoRoco Demo #4UCKS45020:KOR:3.022006.12.110xADF305F0MG7 933 7427 933 7427 934 080
75LocoRoco Demo #1UCKS45020:KOR:2.712006.04.250x0C000000MG7 944 9267 944 9267 945 264
76LocoRoco Demo #4UCJS10041:JPN:3.022006.12.110xADF305F0MG7 950 5747 950 5747 950 912
77Hot Shots Golf 2 Demo #1UCJS10075:JPN:3.802008.02.010xADF305F0MG7 975 3579 791 9887 975 696
78LocoRoco Demo #1UCJS10041:JPN:2.712006.04.240x0C000000MG8 004 5748 004 5748 004 912
79Killzone: Liberation DemoUCES00279:EUR:3.022007.01.020xADF305F0MG8 008 5368 008 5368 008 880
80Killzone: Liberation DemoUCUS98646:USA:3.012007.01.020xADF305F0MG8 008 6168 008 6168 008 960
81LocoRoco Demo #4UCAS40063:HKG:3.022006.12.110xADF305F0MG8 050 8068 050 8068 051 152
82LocoRoco Demo #1UCAS40063:HKG:2.712006.04.250x0C000000MG8 084 5108 084 5108 084 848
83Bounty Hounds DemoULJS00021:JPN:2.802006.09.300xADF305F0MG8 085 3408 085 3408 085 680
84LocoRoco Demo #3UCKS45020:KOR:2.822006.10.300xADF305F0MG8 087 6228 087 6228 087 968
85Exit 2 DemoULJM05161:JPN:2.802006.10.290xADF305F0MG8 089 6408 089 6408 089 984
86LocoRoco Demo #4UCUS98662:USA:3.022006.12.110xADF305F0MG8 113 5428 113 5428 113 888
87LocoRoco Demo #4UCED90007:EUR:3.022006.12.110xADF305F0MG8 122 7188 122 7188 123 056
88Ape Escape Racing DemoUCJS10032:JPN:2.822006.09.250xADF305F0MG8 149 1108 149 1108 149 456
89LocoRoco Demo #1UCUS98662:USA:2.712006.04.250x0C000000MG8 183 8068 183 8068 184 144
90LocoRoco Demo #1UCES00304:EUR:2.712006.04.250x0C000000MG8 185 7508 185 7508 186 096
91Gurumin DemoULJM05123:JPN:3.402007.05.240xADF305F0MG8 223 4728 223 4728 223 808
92LocoRoco Demo #3UCAS40063:HKG:2.822006.10.290xADF305F0MG8 233 8068 233 8068 234 144
93Hot Pixel DemoULED90025:EUR:3.502007.06.290xADF305F0MG8 241 5928 241 5928 241 936
94Airport Hero NaHa DemoULJM05171:JPN:3.402007.05.300xADF305F0MG8 249 2848 249 2848 249 632
95Moto GP DemoUCES00373:EUR:2.802006.10.270xADF305F0MG8 271 5528 271 5528 271 888
96R-Type Tactics 2: Operation Bitter Chocolate ver. AULJS00233:JPN:5.512009.09.240xADF305F0MG8 272 69311 715 2048 273 040
97LocoRoco Demo #3UCUS98662:USA:2.822006.10.290xADF305F0MG8 289 2628 289 2628 289 600
98Xyanide: Resurrection DemoULED90043:EUR:3.502007.06.150xADF305F0MG8 296 2688 296 2688 296 608
99LocoRoco Demo #3UCES00304:EUR:2.802006.10.290xADF305F0MG8 316 5508 316 5508 316 896
100Hot Shots Golf 2 Demo #2UCJS10075:JPN:3.802008.02.010xADF305F0MG8 327 18110 187 0288 327 520
101LocoRoco Demo #2UCJS10041:JPN:2.802006.10.260xADF305F0MG8 347 5508 347 5508 347 888
102Airport Hero Narita DemoULJM05128:JPN:3.402007.05.290xADF305F0MG8 360 6018 360 6018 360 944
103Infinite Loop DemoNPJH90004:JPN:3.952008.07.180xADF305F0MG8 383 03712 548 1568 383 376

Таблица включённых в PrxEncrypter заголовков по размеру ELF:
Таблица демонстрационных игр, выпущенных для Sony PSP (по размеру декриптованного ELF)
Наименование игрыDISC_IDРегионПОДата релиза ГГГГ.ММ.ДДТег шифрованияКате-
гория
Размер
GZIP 0xB0
Размер
ELF 0x28
Размер DATA.PSP
1Astonishia Story 2 DemoULKS46142:KOR:3.902008.03.200xADF305F0MG368 196978 952368 544
2Everybody's Sukkiri #1NPJG90047:JPN:5.512009.07.170xADF305F0MG429 8331 119 380430 176
3Everybody's Sukkiri #3NPJG90047:JPN:5.512009.09.030xADF305F0MG492 5331 334 524492 880
4Everybody's Sukkiri #4NPJG90047:JPN:5.512009.09.110xADF305F0MG497 0451 341 124497 392
5Everybody's Sukkiri #2NPJG90047:JPN:5.512009.07.310xADF305F0MG511 3911 368 996511 728
6Smash Court Tennis 3 DemoUCED90036:EUR:3.402007.06.080xADF305F0MG2 665 7402 665 7402 666 080
7Bleach: Soul Carnival 2NPJG90041:JPN:5.002009.05.160xADF305F0MG810 6492 678 576810 992
8ToCA Race Driver 3 DemoULED90009:EUR:3.032007.02.090xADF305F0MG3 400 2243 400 2243 400 560
9Neo Angelique Special DemoNPJH90010:JPN:4.052008.09.120xADF305F0MG3 868 7934 167 3203 869 136
10Dynasty Warriors: StrikeforceULJM91017:JPN:5.032009.02.170xADF305F0MG1 457 8384 406 7161 458 176
11Socom Fireteam Bravo 2 Demo #1UCUS98645:USA:3.502007.05.160xADF305F0MG4 553 8764 553 8764 554 224
12Monster Hunter Portable 2nd G TrailerULJM05500:JPN:1.002007.12.260xADF305F0MG4 784 4745 145 1884 784 816
13Brain Trainer Portable 2 DemoULJM05126:JPN:3.402007.05.290xADF305F0MG5 245 5715 245 5715 245 920
14Computer Science 1 DemoULJM05135:JPN:3.402007.05.240xADF305F0MG5 417 9985 417 9985 418 336
15Computer Science 2 DemoULJM05189:JPN:3.402007.05.240xADF305F0MG5 456 4365 456 4365 456 784
16World Tour Soccer 2 DemoUCUS98631:USA:2.802006.07.270xADF305F0MG5 583 0565 583 0565 583 392
17World Tour Soccer 06 DemoUCES00206:EUR:2.802006.07.270xADF305F0MG5 583 6165 583 6165 583 952
18Doko: Let's Gakkou! DemoUCJS10039:JPN:3.402007.04.260xADF305F0MG5 627 0005 627 0005 627 344
19Yuusha 30 #3NPJH90025:JPN:5.032009.04.280xADF305F0MG5 312 1945 677 2285 312 544
20Go! Sudoku DemoUCJS10036:JPN:2.712006.06.010x0C000000MG5 735 2205 735 2205 735 568
21MLB 07 DemoUCUS98667:USA:3.302007.05.020xADF305F0MG5 781 6445 781 6445 781 984
22NBA 08 DemoUCUS98699:USA:3.712007.12.050xADF305F0MG1 772 2645 881 5321 772 608
23Blokus Club Portable DemoULJS00068:JPN:2.812006.10.290xADF305F0MG6 158 4126 158 4126 158 752
24Space Invaders Extreme DemoULJM05315:JPN:3.802008.02.180xADF305F0MG5 103 9186 284 4565 104 256
25Kanji Trainer Portable DemoULJM05201:JPN:3.402007.05.290xADF305F0MG6 320 0646 320 0646 320 400
26Intelligent License 2 DemoULJS00087:JPN:3.402007.05.240xADF305F0MG6 524 3986 524 3986 524 736
27Metal Gear Solid: Portable Ops DemoULED90040:EUR:3.402007.05.120xADF305F0MG6 563 5246 563 5246 563 872
28Ridge Racer 2 DemoUCES00422:EUR:2.812006.10.200xADF305F0MG6 687 7486 687 7486 688 096
29Phantasy Star PortableULJM91014:JPN:3.952008.07.110xADF305F0MG2 417 7496 735 4882 418 096
30Mercury Meltdown Demo #2ULED90018:EUR:2.802006.12.250xADF305F0MG6 767 1086 767 1086 767 456
31Yuusha 30 #1NPJH90024:JPN:5.022009.02.130xADF305F0MG6 175 0856 792 8766 175 424
32Medal of Honor: Heroes DemoULED90008:EUR:3.032007.02.020xADF305F0MG6 799 9366 799 9366 800 272
33Ape Escape: Saru Saru DemoUCJS10060:JPN:3.502007.06.290xADF305F0MG6 805 3366 805 3366 805 680
34Mercury Meltdown Demo #1UCJS10043:JPN:2.802006.07.280xADF305F0MG6 817 3486 817 3486 817 696
35NBA 07 DemoUCUS98644:USA:3.032007.04.060xADF305F0MG7 127 8847 127 8847 128 224
36LocoRoco Demo #5UCJS10041:JPN:3.402007.04.270xADF305F0MG7 134 6787 134 6787 135 024
37Homestar Portable DemoULJM05184:JPN:3.402007.05.290xADF305F0MG7 299 9507 299 9507 300 288
38Syphon Filter: Dark Mirror DemoUCUS98641:USA:3.032007.02.160xADF305F0MG7 452 5607 452 5607 452 896
39Hototogisu Ran DemoULJS00159:JPN:4.052008.10.240xADF305F0MG4 940 7207 469 3124 941 056
40Shichoka Crossword DemoULJM05168:JPN:3.402007.05.290xADF305F0MG7 536 4647 536 4647 536 800
41Yuusha 30 #4NPJH90027:JPN:5.032009.05.220xADF305F0MG6 936 9927 575 0526 937 328
42Lumines 2 DemoULJM05232:JPN:3.112007.04.270xADF305F0MG7 630 4367 630 4367 630 784
43Ape Academy 2 DemoUCES00302:EUR:2.812006.11.030xADF305F0MG7 657 8247 657 8247 658 160
44Ikuze! Gen-San DemoULJS00141:JPN:3.952008.05.090xADF305F0MG5 468 0597 695 6845 468 400
45Yuusha 30 #2NPJH90026:JPN:5.032009.03.260xADF305F0MG7 165 4467 709 7247 165 792
46Worms Open Warfare 2 DemoULED90045:EUR:3.522007.08.170xADF305F0MG4 411 2797 732 9724 411 616
47Bleach: Heat the Soul 5 DemoNPJG90020:JPN:3.902008.04.210xADF305F0MG5 737 5307 756 3285 737 872
48Full Auto 2 DemoNPUH90001:USA:3.402007.05.110xADF305F0MG7 799 6687 799 6687 800 016
49echochrome DemoNPHG00005:HKG:3.902008.03.140xADF305F0MG3 864 5997 855 2403 864 944
50echochrome DemoNPJG90019:JPN:3.902008.03.060xADF305F0MG3 913 0927 861 2323 913 440
51The Legend of Heroes: Trails in the SkyULJM05170:JPN:3.402007.05.240xADF305F0MG7 891 3767 891 3767 891 712
52DJ Max Portable 2 DemoULKS46116:KOR:3.112007.03.260xADF305F0MG7 922 0387 922 0387 922 384
53LocoRoco Demo #4UCKS45020:KOR:3.022006.12.110xADF305F0MG7 933 7427 933 7427 934 080
54LocoRoco Demo #1UCKS45020:KOR:2.712006.04.250x0C000000MG7 944 9267 944 9267 945 264
55LocoRoco Demo #4UCJS10041:JPN:3.022006.12.110xADF305F0MG7 950 5747 950 5747 950 912
56Mawaskes DemoULJS00105:JPN:3.512007.07.250xADF305F0MG6 167 1757 995 2526 167 520
57LocoRoco Demo #1UCJS10041:JPN:2.712006.04.240x0C000000MG8 004 5748 004 5748 004 912
58Killzone: Liberation DemoUCES00279:EUR:3.022007.01.020xADF305F0MG8 008 5368 008 5368 008 880
59Killzone: Liberation DemoUCUS98646:USA:3.012007.01.020xADF305F0MG8 008 6168 008 6168 008 960
60LocoRoco Demo #4UCAS40063:HKG:3.022006.12.110xADF305F0MG8 050 8068 050 8068 051 152
61Half-Minute Hero 2 Demo #1NPJH90170:JPN:6.312010.11.050xADF305F0MG6 908 8628 055 6926 909 200
62LocoRoco Demo #1UCAS40063:HKG:2.712006.04.250x0C000000MG8 084 5108 084 5108 084 848
63Bounty Hounds DemoULJS00021:JPN:2.802006.09.300xADF305F0MG8 085 3408 085 3408 085 680
64LocoRoco Demo #3UCKS45020:KOR:2.822006.10.300xADF305F0MG8 087 6228 087 6228 087 968
65Exit 2 DemoULJM05161:JPN:2.802006.10.290xADF305F0MG8 089 6408 089 6408 089 984
66LocoRoco Demo #4UCUS98662:USA:3.022006.12.110xADF305F0MG8 113 5428 113 5428 113 888
67LocoRoco Demo #4UCED90007:EUR:3.022006.12.110xADF305F0MG8 122 7188 122 7188 123 056
68What Did I Do To Deserve This, My LordNPJG90009:JPN:3.722007.11.150xADF305F0MG3 725 4398 141 7723 725 776
69Ape Escape Racing DemoUCJS10032:JPN:2.822006.09.250xADF305F0MG8 149 1108 149 1108 149 456
70LocoRoco Demo #1UCUS98662:USA:2.712006.04.250x0C000000MG8 183 8068 183 8068 184 144
71LocoRoco Demo #1UCES00304:EUR:2.712006.04.250x0C000000MG8 185 7508 185 7508 186 096
72Gurumin DemoULJM05123:JPN:3.402007.05.240xADF305F0MG8 223 4728 223 4728 223 808
73Dungeon Explorer DemoULJM05164:JPN:3.512007.09.200xADF305F0MG4 960 8998 227 6444 961 248
74LocoRoco Demo #3UCAS40063:HKG:2.822006.10.290xADF305F0MG8 233 8068 233 8068 234 144
75Hot Pixel DemoULED90025:EUR:3.502007.06.290xADF305F0MG8 241 5928 241 5928 241 936
76Airport Hero NaHa DemoULJM05171:JPN:3.402007.05.300xADF305F0MG8 249 2848 249 2848 249 632
77Dungeon Explorer DemoULUS10289:USA:3.902008.03.200xADF305F0MG4 946 7048 253 2364 947 040
78Moto GP DemoUCES00373:EUR:2.802006.10.270xADF305F0MG8 271 5528 271 5528 271 888
79LocoRoco Demo #3UCUS98662:USA:2.822006.10.290xADF305F0MG8 289 2628 289 2628 289 600
80Xyanide: Resurrection DemoULED90043:EUR:3.502007.06.150xADF305F0MG8 296 2688 296 2688 296 608
81LocoRoco Demo #3UCES00304:EUR:2.802006.10.290xADF305F0MG8 316 5508 316 5508 316 896
82Dungeon Explorer Famitsu DemoULJM05164:JPN:3.732007.12.240xADF305F0MG5 031 8608 345 2925 032 208
83LocoRoco Demo #2UCJS10041:JPN:2.802006.10.260xADF305F0MG8 347 5508 347 5508 347 888
84Airport Hero Narita DemoULJM05128:JPN:3.402007.05.290xADF305F0MG8 360 6018 360 6018 360 944
85Socom Fireteam Bravo 2 Demo #2UCED90042:EUR:3.502007.06.290xADF305F0MG5 930 5738 870 7245 930 912
86Hitman Reborn TagNPJH90081:JPN:6.202010.01.250xADF305F0MG6 449 7359 045 5926 450 080
87Hello Kitty no Happy AccessoryULJM05469:JPN:5.032009.05.120xADF305F0MG6 107 6069 282 3566 107 952
88Onore no Shinzuru Michi wo YukeNPJH90034:JPN:5.032009.04.170xADF305F0MG3 251 6589 286 1563 252 000
89Umihara Kawase DemoULJS00137:JPN:3.902008.03.140xADF305F0MG3 125 2589 288 4443 125 600
90Hot Shots Golf 2 Demo #1UCJS10075:JPN:3.802008.02.010xADF305F0MG7 975 3579 791 9887 975 696
91Hot Shots Golf 2 Demo #2UCJS10075:JPN:3.802008.02.010xADF305F0MG8 327 18110 187 0288 327 520
92R-Type Tactics 2: Operation Bitter Chocolate ver. BULJS00233:JPN:6.002009.10.080xADF305F0MG7 165 57610 410 5967 165 920
93Warhammer 40k Squad Command DemoULUD90004:USA:3.712007.10.240xADF305F0MG6 537 95910 703 8966 538 304
94Warhammer 40k Squad Command DemoNPEH90001:EUR:3.522007.10.290xADF305F0MG6 537 95910 703 8966 538 304
95R-Type Tactics 2: Operation Bitter Chocolate ver. CULJS00233:JPN:6.102009.11.230xADF305F0MG7 877 64011 405 3967 877 984
96R-Type Tactics 2: Operation Bitter Chocolate ver. AULJS00233:JPN:5.512009.09.240xADF305F0MG8 272 69311 715 2048 273 040
97Otsugea Uranai na Desu DemoULJM05409:JPN:5.012008.12.040xADF305F0MG5 799 28111 721 1005 799 632
98Infinite Loop DemoNPJH90004:JPN:3.952008.07.180xADF305F0MG8 383 03712 548 1568 383 376
99Valhalla Knights 2 DemoULJS00138:JPN:3.952008.05.190xADF305F0MG5 327 41112 722 5405 327 760
100Dokusho 2 DemoULJM05393:JPN:4.052008.10.080xADF305F0MG6 652 91113 723 3486 653 248
101Hitman Reborn DemoNPJH90007:USA:4.052008.08.270xADF305F0MG6 254 01813 876 3046 254 368
102Hitman Reborn 2NPJH90061:JPN:5.512009.09.010xADF305F0MG5 396 43513 957 1045 396 784
103Everyone in Reading DemoULJM05352:JPN:3.952008.06.190xADF305F0MG5 743 59014 565 4685 743 936

Таблица включённых в PrxEncrypter заголовков по размеру GZIP:
Таблица демонстрационных игр, выпущенных для Sony PSP (по размеру декриптованного GZIP [kirk 0x70])
Наименование игрыDISC_IDРегионПОДата релиза ГГГГ.ММ.ДДТег шифрованияКате-
гория
Размер
GZIP 0xB0
Размер
ELF 0x28
Размер DATA.PSP
1Astonishia Story 2 DemoULKS46142:KOR:3.902008.03.200xADF305F0MG368 196978 952368 544
2Everybody's Sukkiri #1NPJG90047:JPN:5.512009.07.170xADF305F0MG429 8331 119 380430 176
3Everybody's Sukkiri #3NPJG90047:JPN:5.512009.09.030xADF305F0MG492 5331 334 524492 880
4Everybody's Sukkiri #4NPJG90047:JPN:5.512009.09.110xADF305F0MG497 0451 341 124497 392
5Everybody's Sukkiri #2NPJG90047:JPN:5.512009.07.310xADF305F0MG511 3911 368 996511 728
6Bleach: Soul Carnival 2NPJG90041:JPN:5.002009.05.160xADF305F0MG810 6492 678 576810 992
7Dynasty Warriors: StrikeforceULJM91017:JPN:5.032009.02.170xADF305F0MG1 457 8384 406 7161 458 176
8NBA 08 DemoUCUS98699:USA:3.712007.12.050xADF305F0MG1 772 2645 881 5321 772 608
9Phantasy Star PortableULJM91014:JPN:3.952008.07.110xADF305F0MG2 417 7496 735 4882 418 096
10Smash Court Tennis 3 DemoUCED90036:EUR:3.402007.06.080xADF305F0MG2 665 7402 665 7402 666 080
11Umihara Kawase DemoULJS00137:JPN:3.902008.03.140xADF305F0MG3 125 2589 288 4443 125 600
12Onore no Shinzuru Michi wo YukeNPJH90034:JPN:5.032009.04.170xADF305F0MG3 251 6589 286 1563 252 000
13ToCA Race Driver 3 DemoULED90009:EUR:3.032007.02.090xADF305F0MG3 400 2243 400 2243 400 560
14What Did I Do To Deserve This, My LordNPJG90009:JPN:3.722007.11.150xADF305F0MG3 725 4398 141 7723 725 776
15echochrome DemoNPHG00005:HKG:3.902008.03.140xADF305F0MG3 864 5997 855 2403 864 944
16Neo Angelique Special DemoNPJH90010:JPN:4.052008.09.120xADF305F0MG3 868 7934 167 3203 869 136
17echochrome DemoNPJG90019:JPN:3.902008.03.060xADF305F0MG3 913 0927 861 2323 913 440
18Worms Open Warfare 2 DemoULED90045:EUR:3.522007.08.170xADF305F0MG4 411 2797 732 9724 411 616
19Socom Fireteam Bravo 2 Demo #1UCUS98645:USA:3.502007.05.160xADF305F0MG4 553 8764 553 8764 554 224
20Monster Hunter Portable 2nd G TrailerULJM05500:JPN:1.002007.12.260xADF305F0MG4 784 4745 145 1884 784 816
21Hototogisu Ran DemoULJS00159:JPN:4.052008.10.240xADF305F0MG4 940 7207 469 3124 941 056
22Dungeon Explorer DemoULUS10289:USA:3.902008.03.200xADF305F0MG4 946 7048 253 2364 947 040
23Dungeon Explorer DemoULJM05164:JPN:3.512007.09.200xADF305F0MG4 960 8998 227 6444 961 248
24Dungeon Explorer Famitsu DemoULJM05164:JPN:3.732007.12.240xADF305F0MG5 031 8608 345 2925 032 208
25Space Invaders Extreme DemoULJM05315:JPN:3.802008.02.180xADF305F0MG5 103 9186 284 4565 104 256
26Brain Trainer Portable 2 DemoULJM05126:JPN:3.402007.05.290xADF305F0MG5 245 5715 245 5715 245 920
27Yuusha 30 #3NPJH90025:JPN:5.032009.04.280xADF305F0MG5 312 1945 677 2285 312 544
28Valhalla Knights 2 DemoULJS00138:JPN:3.952008.05.190xADF305F0MG5 327 41112 722 5405 327 760
29Hitman Reborn 2NPJH90061:JPN:5.512009.09.010xADF305F0MG5 396 43513 957 1045 396 784
30Computer Science 1 DemoULJM05135:JPN:3.402007.05.240xADF305F0MG5 417 9985 417 9985 418 336
31Computer Science 2 DemoULJM05189:JPN:3.402007.05.240xADF305F0MG5 456 4365 456 4365 456 784
32Ikuze! Gen-San DemoULJS00141:JPN:3.952008.05.090xADF305F0MG5 468 0597 695 6845 468 400
33World Tour Soccer 2 DemoUCUS98631:USA:2.802006.07.270xADF305F0MG5 583 0565 583 0565 583 392
34World Tour Soccer 06 DemoUCES00206:EUR:2.802006.07.270xADF305F0MG5 583 6165 583 6165 583 952
35Doko: Let's Gakkou! DemoUCJS10039:JPN:3.402007.04.260xADF305F0MG5 627 0005 627 0005 627 344
36Go! Sudoku DemoUCJS10036:JPN:2.712006.06.010x0C000000MG5 735 2205 735 2205 735 568
37Bleach: Heat the Soul 5 DemoNPJG90020:JPN:3.902008.04.210xADF305F0MG5 737 5307 756 3285 737 872
38Everyone in Reading DemoULJM05352:JPN:3.952008.06.190xADF305F0MG5 743 59014 565 4685 743 936
39MLB 07 DemoUCUS98667:USA:3.302007.05.020xADF305F0MG5 781 6445 781 6445 781 984
40Otsugea Uranai na Desu DemoULJM05409:JPN:5.012008.12.040xADF305F0MG5 799 28111 721 1005 799 632
41Socom Fireteam Bravo 2 Demo #2UCED90042:EUR:3.502007.06.290xADF305F0MG5 930 5738 870 7245 930 912
42Hello Kitty no Happy AccessoryULJM05469:JPN:5.032009.05.120xADF305F0MG6 107 6069 282 3566 107 952
43Blokus Club Portable DemoULJS00068:JPN:2.812006.10.290xADF305F0MG6 158 4126 158 4126 158 752
44Mawaskes DemoULJS00105:JPN:3.512007.07.250xADF305F0MG6 167 1757 995 2526 167 520
45Yuusha 30 #1NPJH90024:JPN:5.022009.02.130xADF305F0MG6 175 0856 792 8766 175 424
46Hitman Reborn DemoNPJH90007:USA:4.052008.08.270xADF305F0MG6 254 01813 876 3046 254 368
47Kanji Trainer Portable DemoULJM05201:JPN:3.402007.05.290xADF305F0MG6 320 0646 320 0646 320 400
48Hitman Reborn TagNPJH90081:JPN:6.202010.01.250xADF305F0MG6 449 7359 045 5926 450 080
49Intelligent License 2 DemoULJS00087:JPN:3.402007.05.240xADF305F0MG6 524 3986 524 3986 524 736
50Warhammer 40k Squad Command DemoULUD90004:USA:3.712007.10.240xADF305F0MG6 537 95910 703 8966 538 304
51Warhammer 40k Squad Command DemoNPEH90001:EUR:3.522007.10.290xADF305F0MG6 537 95910 703 8966 538 304
52Metal Gear Solid: Portable Ops DemoULED90040:EUR:3.402007.05.120xADF305F0MG6 563 5246 563 5246 563 872
53Dokusho 2 DemoULJM05393:JPN:4.052008.10.080xADF305F0MG6 652 91113 723 3486 653 248
54Ridge Racer 2 DemoUCES00422:EUR:2.812006.10.200xADF305F0MG6 687 7486 687 7486 688 096
55Mercury Meltdown Demo #2ULED90018:EUR:2.802006.12.250xADF305F0MG6 767 1086 767 1086 767 456
56Medal of Honor: Heroes DemoULED90008:EUR:3.032007.02.020xADF305F0MG6 799 9366 799 9366 800 272
57Ape Escape: Saru Saru DemoUCJS10060:JPN:3.502007.06.290xADF305F0MG6 805 3366 805 3366 805 680
58Mercury Meltdown Demo #1UCJS10043:JPN:2.802006.07.280xADF305F0MG6 817 3486 817 3486 817 696
59Half-Minute Hero 2 Demo #1NPJH90170:JPN:6.312010.11.050xADF305F0MG6 908 8628 055 6926 909 200
60Yuusha 30 #4NPJH90027:JPN:5.032009.05.220xADF305F0MG6 936 9927 575 0526 937 328
61NBA 07 DemoUCUS98644:USA:3.032007.04.060xADF305F0MG7 127 8847 127 8847 128 224
62LocoRoco Demo #5UCJS10041:JPN:3.402007.04.270xADF305F0MG7 134 6787 134 6787 135 024
63Yuusha 30 #2NPJH90026:JPN:5.032009.03.260xADF305F0MG7 165 4467 709 7247 165 792
64R-Type Tactics 2: Operation Bitter Chocolate ver. BULJS00233:JPN:6.002009.10.080xADF305F0MG7 165 57610 410 5967 165 920
65Homestar Portable DemoULJM05184:JPN:3.402007.05.290xADF305F0MG7 299 9507 299 9507 300 288
66Syphon Filter: Dark Mirror DemoUCUS98641:USA:3.032007.02.160xADF305F0MG7 452 5607 452 5607 452 896
67Shichoka Crossword DemoULJM05168:JPN:3.402007.05.290xADF305F0MG7 536 4647 536 4647 536 800
68Lumines 2 DemoULJM05232:JPN:3.112007.04.270xADF305F0MG7 630 4367 630 4367 630 784
69Ape Academy 2 DemoUCES00302:EUR:2.812006.11.030xADF305F0MG7 657 8247 657 8247 658 160
70Full Auto 2 DemoNPUH90001:USA:3.402007.05.110xADF305F0MG7 799 6687 799 6687 800 016
71R-Type Tactics 2: Operation Bitter Chocolate ver. CULJS00233:JPN:6.102009.11.230xADF305F0MG7 877 64011 405 3967 877 984
72The Legend of Heroes: Trails in the SkyULJM05170:JPN:3.402007.05.240xADF305F0MG7 891 3767 891 3767 891 712
73DJ Max Portable 2 DemoULKS46116:KOR:3.112007.03.260xADF305F0MG7 922 0387 922 0387 922 384
74LocoRoco Demo #4UCKS45020:KOR:3.022006.12.110xADF305F0MG7 933 7427 933 7427 934 080
75LocoRoco Demo #1UCKS45020:KOR:2.712006.04.250x0C000000MG7 944 9267 944 9267 945 264
76LocoRoco Demo #4UCJS10041:JPN:3.022006.12.110xADF305F0MG7 950 5747 950 5747 950 912
77Hot Shots Golf 2 Demo #1UCJS10075:JPN:3.802008.02.010xADF305F0MG7 975 3579 791 9887 975 696
78LocoRoco Demo #1UCJS10041:JPN:2.712006.04.240x0C000000MG8 004 5748 004 5748 004 912
79Killzone: Liberation DemoUCES00279:EUR:3.022007.01.020xADF305F0MG8 008 5368 008 5368 008 880
80Killzone: Liberation DemoUCUS98646:USA:3.012007.01.020xADF305F0MG8 008 6168 008 6168 008 960
81LocoRoco Demo #4UCAS40063:HKG:3.022006.12.110xADF305F0MG8 050 8068 050 8068 051 152
82LocoRoco Demo #1UCAS40063:HKG:2.712006.04.250x0C000000MG8 084 5108 084 5108 084 848
83Bounty Hounds DemoULJS00021:JPN:2.802006.09.300xADF305F0MG8 085 3408 085 3408 085 680
84LocoRoco Demo #3UCKS45020:KOR:2.822006.10.300xADF305F0MG8 087 6228 087 6228 087 968
85Exit 2 DemoULJM05161:JPN:2.802006.10.290xADF305F0MG8 089 6408 089 6408 089 984
86LocoRoco Demo #4UCUS98662:USA:3.022006.12.110xADF305F0MG8 113 5428 113 5428 113 888
87LocoRoco Demo #4UCED90007:EUR:3.022006.12.110xADF305F0MG8 122 7188 122 7188 123 056
88Ape Escape Racing DemoUCJS10032:JPN:2.822006.09.250xADF305F0MG8 149 1108 149 1108 149 456
89LocoRoco Demo #1UCUS98662:USA:2.712006.04.250x0C000000MG8 183 8068 183 8068 184 144
90LocoRoco Demo #1UCES00304:EUR:2.712006.04.250x0C000000MG8 185 7508 185 7508 186 096
91Gurumin DemoULJM05123:JPN:3.402007.05.240xADF305F0MG8 223 4728 223 4728 223 808
92LocoRoco Demo #3UCAS40063:HKG:2.822006.10.290xADF305F0MG8 233 8068 233 8068 234 144
93Hot Pixel DemoULED90025:EUR:3.502007.06.290xADF305F0MG8 241 5928 241 5928 241 936
94Airport Hero NaHa DemoULJM05171:JPN:3.402007.05.300xADF305F0MG8 249 2848 249 2848 249 632
95Moto GP DemoUCES00373:EUR:2.802006.10.270xADF305F0MG8 271 5528 271 5528 271 888
96R-Type Tactics 2: Operation Bitter Chocolate ver. AULJS00233:JPN:5.512009.09.240xADF305F0MG8 272 69311 715 2048 273 040
97LocoRoco Demo #3UCUS98662:USA:2.822006.10.290xADF305F0MG8 289 2628 289 2628 289 600
98Xyanide: Resurrection DemoULED90043:EUR:3.502007.06.150xADF305F0MG8 296 2688 296 2688 296 608
99LocoRoco Demo #3UCES00304:EUR:2.802006.10.290xADF305F0MG8 316 5508 316 5508 316 896
100Hot Shots Golf 2 Demo #2UCJS10075:JPN:3.802008.02.010xADF305F0MG8 327 18110 187 0288 327 520
101LocoRoco Demo #2UCJS10041:JPN:2.802006.10.260xADF305F0MG8 347 5508 347 5508 347 888
102Airport Hero Narita DemoULJM05128:JPN:3.402007.05.290xADF305F0MG8 360 6018 360 6018 360 944
103Infinite Loop DemoNPJH90004:JPN:3.952008.07.180xADF305F0MG8 383 03712 548 1568 383 376


ErikPshat 27.04.2013 00:10

Вложений: 1
Ликбез №1. Вступление.
Вопрос к разработчикам ...

Тут в PrxDecrypter я заметил некорректно написанный код сжатия. Вернее он сжимает и всё подсчитывает корректно, но алгоритм сжатия у него работает не так, как надо.
В ообщем тут такое дело, что если декриптовать тот же Astinishia Story 2 и попытаться обратно зашифровать его же родным заголовком, то так не получится, потому что декриптованный ELF-файл уже не поместится по размеру в свой родной заголовок - будет ошибка: Elf is to big. И это при том, что якобы в алгоритме энкриптера используется сжатие :), причём после шифровки и последующей декриптовке явно отображается, что файл:
Код:

* DATA.PSP -> decrypted, decompressed (GZ), saved.
Аналогичная ситуация происходит со всеми файлами, например при попытке подписать файлы прошивки своими же заголовками.
Короче, я так понял, алгоритм шифрования происходит в следующем порядке:
  1. Сравнение по размеру ELF-файла с размером, записанном в шифрованном заголовке по адресу 0x2C минус 0x15С
    • Если ELF-файл больше, то выдаётся сообщение об ошибке: Elf is to big
  2. Затем, если файл меньше, то он в конце забивается нулями до размера, прописанного в шифрованном заголовке по адресу 0x28 (размер декриптованного ELF)
  3. После применяется сжатие GZIP
  4. Добивается архив в конце нулями до размера, указанного в шифрованном заголовке по адресу 0xB0 (размер архива)
  5. И наконец файл шифруется и добавляется заголовок.

Тут требуется только поправить порядок действий на такой:
  1. Если сжатый файл меньше, то он в конце забивается нулями до размера, прописанного в шифрованном заголовке по адресу 0x28
  2. Применить сжатие GZIP
  3. Добивается архив в конце нулями до размера, указанного в шифрованном заголовке по адресу 0xB0
  4. Сравнение по размеру сжатого ELF-файла с размером, записанном в шифрованном заголовке по адресу 0x2C
    • Если ELF-файл больше, то выдаётся сообщение об ошибке: Elf is to big
  5. И наконец файл шифруется и добавляется заголовок.

Это моё видение навскидку, но возможно там происходят более масштабные преобразования и придётся не просто поменять местами порядок выполнения функций, а ещё и переписывать код.
Хотя, сам код довольно короткий и простой, но я так и не понял, каким же образом происходит порядок сжатия.

Сам код:
Код:

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

#include "types.h"
#include "endian.h"
#include "kirk_engine.h"
#include "psp_headers.h"

unsigned char pspHeader_name[336] = {data};
unsigned char kirkHeader_name[272] = {data};

typedef struct Header_List {
        unsigned char *pspHeader;
        unsigned char *kirkHeader;
} Header_List;

Header_List header_list[] = {
        { pspHeader_name, kirkHeader_name },
};

u8 in_buffer[1024*1024*12];
u8 out_buffer[1024*1024*12];

u8 kirk_raw[1024*1024*12];
u8 kirk_enc[1024*1024*12];
u8 elf[1024*1024*12];

typedef struct header_keys
{
    u8 AES[16];
    u8 CMAC[16];
}header_keys;

int load_elf(char *elff)
{
        FILE *fp = fopen(elff, "rb");

        if(fp == NULL) {
                return -1;
        }

        fseek(fp, 0, SEEK_END);
        int size = ftell(fp);
        fseek(fp, 0, SEEK_SET);
        fread(elf, 1, size, fp);
        fclose(fp);

        return size;
}

int dumpFile(char *name, void *in, int size)
{
        FILE *fp = fopen(name, "wb");

        if(fp == NULL) {
                return -1;
        }

        fwrite(in, 1, size, fp);
        fclose(fp);

        return 0;
}

int get_kirk_size(u8 *key_hdr)
{
        int krawSize = *(u32*)(key_hdr+0x70);

        if(krawSize % 0x10) {
                krawSize += 0x10 - (krawSize % 0x10); // 16 bytes aligned
        }

        krawSize += 0x110;

        return krawSize;
}

Header_List *get_header_list(int size)
{
        int i;
        int h_size;

        for(i=0; i<sizeof(header_list)/sizeof(header_list[i]); i++) {
                h_size = get_kirk_size(header_list[i].kirkHeader);
                h_size -= 0x150;

                if( h_size >= size ) {
                        return &header_list[i];
                }
        }

        return NULL;
}

int is_compressed(u8 *psp_header)
{
        if (*(u16*)(psp_header+6) == 1) {
                return 1;
        }

        return 0;
}

int get_elf_size(u8 *psp_header)
{
        return *(u32*)(psp_header+0x28);
}

int gzip_compress(u8 *dst, const u8 *src, int size)
{
        int ret;
        z_stream strm;
        u8 *elf_compress;
        const int compress_max_size = 12 * 1024 * 1024;

        strm.zalloc = Z_NULL;
        strm.zfree = Z_NULL;
        strm.opaque = Z_NULL;

        elf_compress = malloc(compress_max_size);

        if(elf_compress == NULL) {
                return -1;
        }

        ret = deflateInit2(&strm, 9, Z_DEFLATED, 15+16, 8, Z_DEFAULT_STRATEGY);

        if(ret != Z_OK) {
                printf("%s: compress error\n", __func__);
                free(elf_compress);
               
                return -2;
        }

        strm.avail_in = size;
        strm.next_in = (void*)src;
        strm.avail_out = compress_max_size;
        strm.next_out = elf_compress;

        ret = deflate(&strm, Z_FINISH);

        if(ret == Z_STREAM_ERROR) {
                deflateEnd(&strm);
                printf("%s: compress error\n", __func__);
                free(elf_compress);

                return -3;
        }

        memcpy(dst, elf_compress, strm.total_out);
        deflateEnd(&strm);
        free(elf_compress);

        return 0;
}

int main(int argc, char **argv)
{
        header_keys keys;
        u8 rawkheaderBk[0x90];

        if(argc < 2)
        {
                printf("USAGE: [exe] [prx]\n");
                return 0;
        }

        memset(in_buffer, 0, sizeof(in_buffer));
        memset(out_buffer, 0, sizeof(out_buffer));
        memset(kirk_raw, 0, sizeof(kirk_raw));
        memset(kirk_enc, 0, sizeof(kirk_enc));
        memset(elf, 0, sizeof(elf));

        kirk_init();

        int elfSize = load_elf(argv[1]);

        if(elfSize < 0) {
                printf("Cannot open %s\n", argv[1]);

                return 0;
        }

        Header_List *target_header = get_header_list( elfSize );

        if( target_header == NULL ) {
                printf("PRX SIGNER: Elf is to big\n");

                return 0;
        }

        u8 *kirkHeader        = target_header->kirkHeader;
        u8 *pspHeader        = target_header->pspHeader;
        int krawSize = get_kirk_size(kirkHeader);

        if (is_compressed(pspHeader)) {
                elfSize = get_elf_size(pspHeader);
                gzip_compress(elf, elf, elfSize);
        }

        memcpy(kirk_raw, kirkHeader, 0x110);
        memcpy(rawkheaderBk, kirk_raw, sizeof(rawkheaderBk));

        kirk_decrypt_keys((u8*)&keys, kirk_raw);
        memcpy(kirk_raw, &keys, sizeof(header_keys));
        memcpy(kirk_raw+0x110, elf, elfSize);

        if(kirk_CMD0(kirk_enc, kirk_raw, sizeof(kirk_enc), 0) != 0)
        {
                printf("PRX SIGNER: Could not encrypt elf\n");
                return 0;
        }

        memcpy(kirk_enc, rawkheaderBk, sizeof(rawkheaderBk));

        if(kirk_forge(kirk_enc, sizeof(kirk_enc)) != 0)
        {
                printf("PRX SIGNER: Could not forge cmac block\n");

                return 0;
        }

        memcpy(out_buffer, pspHeader, 0x150);
        memcpy(out_buffer+0x150, kirk_enc+0x110, krawSize-0x110);

        return dumpFile("./DATA.PSP", out_buffer, (krawSize-0x110)+0x150);
}


Ликбез №2
Я хотел сказать, что СЖАТИЕ здесь вообще не имеет никакого смысла и эффекта, хотя оно явно используется.
То есть, файл размером 1 Мб должен ужаться и подписаться маленьким заголовком, однако он всегда подписывается большим заголовком, чем сам файл.



Провёл такой эксперимент. За основу взял оригинал DATA.PSP - Astinishia Story 2.

Имеем такие данные:
  • 0x28 = 0x000EF008 = 978'952 byte - размер ELF декриптованного файла.
  • 0x2C = 0x00059FA0 = 368'544 byte - размер всего файла с заголовком.
  • 0xB0 = 0x00059E44 = 368'196 byte - размер архива.
Чтобы файл работал, все эти данные должны совпадать. Ну а мы пока работаем с оригинальным файлом, поэтому тут и так всё должно быть чётко.
Так как я знаю, что файл пожат в GZIP, то теперь я в PrxDecrypter отключаю декомпрессию (тупо в коде меняю сигнатуру 1F8B на любую другую, по которой программа определяет, что перед ней GZIP-архив). Это находится здесь:
Код:

                                // GZIP DECOMPRESSION
                                if (*(u16 *)&g_dataOut2[0] == 0x8B1F) {


Теперь программа будет только декриптовать шифрованный файл, но разархивировать не будет.
Декриптуем оригинальный DATA.PSP от Astinishia Story 2
В папке "enc" обнаруживаем декриптованный файл, но конечно там нет знакомой сигнатуры ELF, а видим знакомые цифры 1F8B - архив GZIP.
Смотрю его размер. Он в точности совпадает с указанным в заголовке:
  • 0xB0 = 0x00059E44 = 368'196 byte - размер архива.
Смотрю у архива последние 4 байта -> 0x000EF008.
Они по спецификации GZIP указывают на размер разархивированного файла, что в точности совпадает с указанным в заголовке:
  • 0x28 = 0x000EF008 = 978'952 byte - размер ELF декриптованного файла.
Для уверенности разархивирую с помощью 7-zip этот архив и получаю чистый ELF, как и положено ему быть.

Ликбез №3
Поехали дальше... Теперь проводим эксперимент с фейковой подписью.

Беру чистый декриптованный ELF от Astinishia Story 2 (978'952 byte - довольно большой :) )
Подписываю через PrxEncrypter.
Получаю на выходе подписанный файл размером 0x00164000 = 1'458'176 byte заголовком от Dynasty Warriors Strikeforce
Вот те ппц, приехали, наглядный пример сжатия PrxEncrypter :D
Ну это не удивительно, он всегда так подписывал, потому что сначала подбирает под декриптованный ELF подходящий заголовок, не меньше размером, забивает до нужного размера 0x28 нулями, а только потом сжимает, опять добивает уже архив всяким мусором до указанного в заголовке 0xB0 размера архива и затем шифрует.

Короче, подписанный фейковый файл опять декриптуем без декомпрессии.
  1. Получаем на выходе архив 1F8B размером 0х00163EAE = 1'457'838 byte - собственно, как и указано в заголовке 0xB0 Dynasty Warriors Strikeforce
  2. Сразу разархивирую его с помощью 7-Zip и получаю декриптованный ELF размером 0x00433DBC = 4'406'716 - как и указано в заголовке 0x28.
1. По первому пункту получаем такой прикол - ищу конец архива - последние 4 байта в архиве, по уже известному размеру разархивированного файла BC3D4300 - настоящий архив кончается в 1/3 от начала и составляет 0x0005DD59 = 384'345 byte. Остальная 2/3 части забито оставшейся частью декриптованного ELF-файла и далее нулями. То есть, берётся сам декриптованный файл, архивируется в GZIP и затем архив вставляется в этот же файл в начало, и есстественно конец декриптованного файла остаётся. Но это не беда, архив GZIP имеет потоковый формат и разархивируется потоково, пока не дойдёт до своего конца, а что там после конца - ему на это пофиг. Не зря GZIP не имеет меток размера и конца, но в конце обязательно имеет последние 4 байта метки разархивированного размера.
Да, настоящий архив, без нулей и мусора от ELF, немного не дотягивает до "Astonishia Story 2" (368'544), но зато свободно бы влез в заголовок от "Everybody's Sukkiri #1" (430'176 byte).

2. По второму пункту - разархивированный файл так же забит на 2/3 нулями, чтобы подогнать его под размер заголовка в 0x28



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

Yoti 27.04.2013 10:28

В ранних версиях энкриптера не было сжатия, как я помню. Потом его допилили.
В коде даже есть проверка на использование сжатия:
Код
Код:

int is_compressed(u8 *psp_header)
{
        if (*(u16*)(psp_header+6) == 1) {
                return 1; // 1 = да
        }

        return 0; // 0 = нет
}

Код:

typedef struct
{
    u32 signature;          //0
    u16 mod_attribute;      //4
    u16 comp_attribute;    //6 <-- флаг компрессии (сжатия)
    u8 module_ver_lo;      //8
    u8 module_ver_hi;      //9
    char modname[28];      //0xA
    u8 mod_version;        //0x26
    u8 nsegments;          //0x27
    u32 elf_size;          //0x28
    u32 psp_size;          //0x2C
    u32 boot_entry;        //0x30
    u32 modinfo_offset; //0x34
    int bss_size;          //0x38
    u32 seg_align[4];      //0x3C
    u32 seg_address[4];    //0x44
    int seg_size[4];        //0x54
    u32 reserved[5];        //0x64
    u32 devkit_version;    //0x78
    u8 decrypt_mode;        //0x7C
    u8 padding;                    //0x7D
    u8 overlap_size;        //0x7E
    u8 key_data[0x30];      //0x80
    u32 comp_size;          //0xB0
    int _80;                        //0xB4
    u32 unk_B8;                    //0xB8
    u32 unk_BC;                    //0xBC
    u8 key_data2[0x10];    //0xC0
    u32 tag;                        //0xD0
    u8 scheck[0x58];        //0xD4
    u8 sha1_hash[0x14];    //0x12C
    u8 key_data4[0x10]; //0x140
} PSP_Header2; //0x150


А что в итоге нужно я так и не понял. Проверку на размер по 0xB0 вместо 0x28?
Так там в "забег" по заголовкам отправляется размер файла на харде.
Код
Код:

int load_elf(char *elff)
{
        FILE *fp = fopen(elff, "rb");

        if(fp == NULL) {
                return -1;
        }

        fseek(fp, 0, SEEK_END);
        int size = ftell(fp); // получаем размер файла
        fseek(fp, 0, SEEK_SET);
        fread(elf, 1, size, fp);
        fclose(fp);

        return size; // возращаем значение
}

Код:

Header_List *target_header = get_header_list( elfSize ); // отправляем в "забег"
Код:

Header_List *get_header_list(int size)
{
        int i;
        int h_size;

        for(i=0; i<sizeof(header_list)/sizeof(header_list[i]); i++) {
                h_size = get_kirk_size(header_list[i].kirkHeader); // получаем полный размер файла из заголовка
                h_size -= 0x150; // получаем полезный размер файла

                if( h_size >= size ) { // если текущий заголовок подходит
                        return &header_list[i]; // используем его
                }
        }

        return NULL; // подходящего заголовка нет
}


ErikPshat 27.04.2013 14:56

Цитата:

Сообщение от Yoti (Сообщение 1070569)
А что в итоге нужно я так и не понял. Проверку на размер по 0xB0 вместо 0x28?

Да нет, не совсем так. Выше 2 моих лигбеза специально сравнивают 2 механизма сжатия - оригинальное и фейковое.
  1. В оригинальном механизме файл почти в 1 Мб сжимается в 368 Кб и потом шифруется.
  2. В фейковом механизме файл почти в 1 Мб сначала подбирается под заголовок большего размера, потом ЗАЧЕМ-ТО сжимается и шифруется.
Вопрос в том - нафига тогда вообще используют сжатие, если всё получается так же, как без сжатия.
Должно быть не так. Файл сначала должен сжаться, а только потом подбираться заголовок под маленький сжатый файл, а потом всё остальное.

frostegater 28.04.2013 03:45

Цитата:

Сообщение от ErikPshat (Сообщение 1070469)
Для запуска приложений, использующих kernel-режим, требуется внедрение rebootex модуля, что пока лично мной не изучено. Если кто-то имеет информацию по данному вопросу, то можете поделиться ей. Например неплохо было бы заставить работать PSPident на официальных прошивках...

Ну во-первых rebootex не есть модуль. Чтобы досконально изучить это дело можешь посмотреть Davee's Downgrader. Схема работы такая.
1. Использование kernel-эксплоита под определённую прошивку.
2. rebootex по сути это код с kernel правами, который так и так выполняется каждый раз при перезагрузке или смене режима (VSH, GAME...).
Так вот он внедряется. Он патчатит необходимые модули: LoadExec в первую очередь. И только потом можно уже стандартно загрузить модуль с правами ядра.

Что мы сейчас написали? Угу, прошивку. Поэтому, предположение было в корне неправильное :)




Что насчет енкриптера. Я не совсем понял о чем ты говоришь. То есть тебя смущает что заголовок подбирается под несжатый файл, а только потом жмется?

P.S. Если ты хочешь чтобы подборка хедера работала корректно, то их нужно располагать в строгом порядке возрастания размера подписи, т.к. этого требует алгоритм. Он буквально берет первый подходящий, а не самый оптимальный из списка. Нужно или переписать алгоритм или располагать в порядке возрастания.

Код:

Header_List *get_header_list(int size)
{
    int i;
    int h_size;

    for(i=0; i<sizeof(header_list)/sizeof(header_list[i]); i++) {
        h_size = get_kirk_size(header_list[i].kirkHeader);
        h_size -= 0x150;

        if( h_size >= size ) {
            return &header_list[i];
        }
    }

    return NULL;
}


ErikPshat 28.04.2013 04:20

Цитата:

Сообщение от frostegater (Сообщение 1070629)
их нужно располагать в строгом порядке возрастания размера подписи

Они именно так расположены.
Сами хедеры идут сверху вниз по убыванию размера в заголовке, а листинг, список хедеров, идёт по возрастанию размеров.
Таблица в шапке уже составлена по возрастанию, а я располагал хедеры именно в том порядке, как было подготовлено в таблице.

Тут всё правильно, подпись берётся именно по возрастанию. Я проверял, если файл не умещается в заголовок, то берётся следующий.

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

Ну если бы ты повнимательнее почитал бы, что я написал и вник бы, то наверное бы всё понял.

frostegater 28.04.2013 06:36

ErikPshat, ну вот смотри, ты хочешь чтобы все было так:
  1. Считали некриптованый файл
  2. Зажали его
  3. Измерили размер
  4. Подобрали заголовок
  5. Загнали нулями пустое место
  6. Подписали
Я прав?

ErikPshat 28.04.2013 07:51

frostegater, да, именно так, но немного не так. Ещё нужно, чтобы математика была точной и опираться на указанные в заголовке размеры:
  • 0x28 - размер ELF декриптованного файла.
  • 0x2C - размер всего файла с заголовком.
  • 0xB0 - размер архива.
Только по твоей формуле как мы будем забивать декриптованный ELF нулями до размера 0x28, если он уже будет запакован :D
Тут нужно как-то изловчиться по другому...
  1. Считали некриптованый ELF файл
  2. Подобрали заголовок >= по позиции 0х28
  3. Забили ELF нулями до этого размера 0х28
  4. Зажали его
  5. Измерили размер архива
    • (размер разархивированного архива записан в последних 4-ёх байтах GZ-архива, должен равняться позиции 0x28 - это и есть конец архива)
  6. Забили конец архива нулями до размера в позиции 0xB0
  7. Подписали


Я не понимаю, как у них внутри архива оказывается конец на 1/3 архива, а остальное забито остатками декриптованного незаархивированного ELF. Они наверное архивируют не в чистое место памяти, а прямо туда же в начало, где находится ELF, потом отрезают по размеру 0xB0 и получается хвост не просто забитый нулями, а забитый остатками ELF :D

Причём зачем-то в последней строчке нулевого архива вставляют какой-то код. Оно ведь и так конец читать не будет и правильно разархивируется.

Yoti 28.04.2013 23:45

Цитата:

Сообщение от frostegater (Сообщение 1070629)
Ну во-первых rebootex не есть модуль. Чтобы досконально изучить это дело можешь посмотреть Davee's Downgrader. Схема работы такая.

Я ему в личку про это писал.

Цитата:

Сообщение от ErikPshat (Сообщение 1070630)
Ну если бы ты повнимательнее почитал бы, что я написал и вник бы, то наверное бы всё понял.

Что я, что Фрости могут сделать что нужно, но оба нифига не поняли. У тебя, как я и говорил у тебя в гостях, в тексте слишком много воды. Как всё работает я спокойно могу прочесть в исходниках. А вот что не так по твоему мнению приходится выискивать в дебрях букв. Единственное, что я нормально понял, так это то, что эльф своим же родным заголовком не подписывается - вот от этого утверждения ещё можно плясать.

ErikPshat 29.04.2013 00:39

Цитата:

Сообщение от Yoti (Сообщение 1070678)
эльф своим же родным заголовком не подписывается - вот от этого утверждения ещё можно плясать.

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

Можешь сам проверить на оригинальных исходниках.
Удаляешь оттуда все лишние хедеры с кирками и оставляешь только 1 кирк с хедером от того же файла, который хочешь подписать.
Взять тот же Astonishia Story 2 или vshmain.prx, или любой другой.
Ессно файл не влезет обратно в свой родной заголовок и будет ошибка "ELF is to big"

P.S. Порядок упорядочивания кода я уже написал в предыдущем посту.

Yoti 29.04.2013 01:21

Цитата:

Сообщение от ErikPshat (Сообщение 1070684)
Порядок упорядочивания кода я уже написал в предыдущем посту.

Вот это немного сбивает с толку, на самом деле. Я тебе цитировал код вверху, там же не по пунктам разложено =)

ErikPshat 29.04.2013 03:09

Yoti, ладно, поставим вопрос по другому.

Если я беру декриптованный файл Astonishia Story 2 и его-же кирк с заголовком, то получаю сообщение:
  • PRX SIGNER: Elf is to big
Код:

        Header_List *target_header = get_header_list( elfSize );

        if( target_header == NULL ) {
                printf("PRX SIGNER: Elf is to big\n");

                return 0;
        }

В то время, когда нифига не BIG, а в точности совпадает и подходит размер ELF с размером 0x28 в psp_header.
Где ошибка?



Вот здесь мне кажется нужно выкинуть h_size -= 0x150; или сделать равным нулю.
Код:

Header_List *get_header_list(int size)
{
    int i;
    int h_size;

    for(i=0; i<sizeof(header_list)/sizeof(header_list[i]); i++) {
        h_size = get_kirk_size(header_list[i].kirkHeader); // получаем полный размер файла из заголовка
        h_size -= 0x150; // получаем полезный размер файла

        if( h_size >= size ) { // если текущий заголовок подходит
            return &header_list[i]; // используем его
        }
    }

    return NULL; // подходящего заголовка нет
}

Нет, ничего не даёт. Балин, наплодили формул, фиг разберёшься )))

P.S. Нужно было в таблицах ещё добавить размеры ELF.

Yoti 29.04.2013 03:46

1) У меня нифига не компилится энкриптер, и разбираться чего не хватает поздновато уже.
2) Ну, можно попробовать так подсунуть:
Код:

        int elfSize = load_elf(argv[1]);

        if(elfSize < 0) {
                printf("Cannot open %s\n", argv[1]);

                return 0;
        }

        // пробуем подкинуть сжатие пораньше
        gzip_compress(argv[1], argv[1], elfSize)

        Header_List *target_header = get_header_list( elfSize );

3) Почему у тебя в итоге DATA.ENC выходит? Пришлось хексить, чтобы по ENCRYPT=1 работало.

ErikPshat 29.04.2013 04:11

Yoti
1) Я вроде ничего такого не ставил, но вроде Cygwin.exe всё решает.
2) Попробую...
3) А ты его в SDK положил )) Ну я так сделал, чтобы в папке не затирался декриптованный исходник DATA.PSP. Поначалу исходник сразу копировал в папку SOURCE, да потом что-то решил так сделать.

А кстати, всё-таки ведь файл подбирается не по порядку списка, а наверное выбирается наименьший подходящий размер.
Блин, сижу щас таблицу заполняю по размерам декриптованных ELF, чтобы понять почему так прыгает далеко. Просто у Astonishia Story размер декриптованный очень большой, поэтому наверное не может найти более подходящий хедер поменьше. Но полюбэ должен же подойти свой родной.

Кстати, размер архива берётся из kirk_header 0x70 - там дублируется тот же размер, что и в psp_header 0xB0. Ну ты и сам знаешь ))

ErikPshat 29.04.2013 04:58

1. А может список хедеров нужно было выстраивать по ELF размеру, а не по размеру всего файла? Или всё-таки он не находит подходящий из всего списка...
2. Может он тупо не может сжать файл до 0xB0? Потому что я смотрел сжатый файл Astonishia, так он больше получается, чем записано в 0xB0. Но в коде не заметил, чтобы он по этому параметру производил листинг.

Странно, через 7-Zip он у меня сжимается значительно сильнее в GZIP. Вот с такими параметрами:
  • 7z a -tgzip DATA.PSP DATA -mx=7 -mfb=64 -mpass=3
Спецификацию сжатия я тут изложил: https://www.pspx.ru/forum/showpost.ph...81&postcount=1
В коде я смотрю параметры такие стоят:
Код:

        ret = deflateInit2(&strm, 9, Z_DEFLATED, 15+16, 8, Z_DEFAULT_STRATEGY);

frostegater 30.04.2013 16:48

Дайте libz.a. Глупые люди думают, что его легче собрать чем скачать бинар.

ErikPshat 30.04.2013 18:09

Цитата:

Сообщение от Yoti (Сообщение 1070704)
2) Ну, можно попробовать так подсунуть:

Сжатие раньше - думаю не выход.
  • Там по-ходу от размера заголовка отнимается 0x150, а потом идёт сравнение. А нужно, чтобы соблюдалось условие >= без всяких вычитаний.
  • И может быть файл не может ужаться до размера 0xB0, поэтому ищется следующий подходящий заголовок.
Интересно, как можно добиться максимального уровня сжатия, как на компе:
  • 7z a -tgzip DATA.PSP DATA -mx=9 -mfb=128 -mpass=8

Библиотека в SDK вроде использует урезаный механизм:
  • ret = deflateInit2(&strm, 9, Z_DEFLATED, 15+16, 8, Z_DEFAULT_STRATEGY);
Уровень сжатия максимум = 9
Метод сжатия для GZ только = Z_DEFLATED
windowBits состоит из двух логарифмов и может быть в пределах 8-15. Если добавить +16, то не будет включаться название файла, подсчитываться CRC и прочие плюшки.
memLevel может быть в пределах 1-9, здесь стоит = 8

Интересный пример GZIP

frostegater 01.05.2013 01:45

ErikPshat, ты дал libz из pspsdk. А ты мне из цигвина дай.

ErikPshat 01.05.2013 06:03

Цитата:

Сообщение от frostegater (Сообщение 1070851)
А ты мне из цигвина дай.

Ну вот тогда, нашёлся здесь: C:\cygwin\usr\x86_64-w64-mingw32\sys-root\mingw\lib

Кстати, разработчики игры Astonishia ведь как-то ужали так сильно файл в GZ какой-то библиотекой, значит должно ужаться с совместимостью.



Короче, тут дело в сжатии. Он просто не может сжать файл до исходного размера, как он был сжат ранее, поэтому сжимает и потом ищет не среди psp_header по размеру файла 0x28, а по размеру архива из KIRK-заголовков, продублированного в 0x70 в кирке (0xB0 в psp_header):
Код:

int get_kirk_size(u8 *key_hdr)
{
        int krawSize = *(u32*)(key_hdr+0x70);

        if(krawSize % 0x10) {
                krawSize += 0x10 - (krawSize % 0x10); // 16 bytes aligned
        }

        krawSize += 0x110;

        return krawSize;
}

krawSize - это и есть размер архива, записанного в kirk_header по адресу 0x70.

Поэтому, даже если размер ELF >= размера в psp_header, то он берёт нужный хедер, но, если после сжатия размер архива не подходит к kirk_header, то он по списку ищет следующий подходящий по размеру среди kirk_header-ов.
Другой вопрос - действительно ли он ищет по порядку в списке или всё-таки из всего списка выбирает наиболее подходящий?

ErikPshat 01.05.2013 09:10

Вложений: 1
Насколько знаю, архиватор 7-Zip всегда сжимает в правильный GZIP с любыми настройками сжатия, поэтому провёл ещё эксперимент...
  1. Отключил в PrxEncrypter сжатие в GZIP /* закомментил */
  2. Подключил внешнее сжатие через 7-Zip по максимуму (-mx=9 -mfb=128 -mpass=10 - Ультра)
  3. Кидаем декриптованный ELF (DATA.PSP) в папку и запускаем SIGN.BAT - файл сжимается через 7-Zip и подписывается.
  4. Собственно ELF Astonishia подписалась своим собственным заголовком и прекрасно функционирует на оффпрошивке.
Причём энкриптер по прежнему автоматом сам добавляет нули к архиву до размера в кирке 0x70.

Но есть одно но, т.к. мы подсовываем Энкриптеру готовый архив, предварительно прогнанный через 7-Zip, то к ELF-файлу нули не добавляются до размера 0x28, потому что он заархивирован ))) У Astonishia ничего добавлять не нужно, т.к. ELF уже имеет нужный размер к своему же заголовку.

Поэтому, если мы берём декриптованный файл меньше указанного в заголовке, то сначала добиваем его нулями, а потом кидаем для сжатия и подписи.
Так же чётко подписался архив "Cube Sample", предварительно конечно добитый нулями до указанного в заголовке размера в 0x28.
Можете сами потестить, всё в архиве заготовлено.

Как можно подключить библиотеки 7-Zip к исходникам? И где их ваще взять?
Кстати, Zlib в SDK лежит версии 1.2.5, а на оффсайте уже zlib 1.2.8 (April 28, 2013)

ErikPshat 02.05.2013 06:38

Вложений: 1
Цитата:

Сообщение от frostegater (Сообщение 1070784)
Дайте libz.a. Глупые люди думают, что его легче собрать чем скачать бинар.

Ну вот собрал libz-1.2.8 (April 28, 2013) из исходников.

Скомпилировал через MSYS по инструкции, надеюсь правильно сделал через [win32/Makefile.gcc].

Изменения 1.2.5 -> 1.2.8
Цитата:

Changes in 1.2.8 (28 Apr 2013)
- Update contrib/minizip/iowin32.c for Windows RT [Vollant]
- Do not force Z_CONST for C++
- Clean up contrib/vstudio [Ro§]
- Correct spelling error in zlib.h
- Fix mixed line endings in contrib/vstudio

Changes in 1.2.7.3 (13 Apr 2013)
- Fix version numbers and DLL names in contrib/vstudio/*/zlib.rc

Changes in 1.2.7.2 (13 Apr 2013)
- Change check for a four-byte type back to hexadecimal
- Fix typo in win32/Makefile.msc
- Add casts in gzwrite.c for pointer differences

Changes in 1.2.7.1 (24 Mar 2013)
- Replace use of unsafe string functions with snprintf if available
- Avoid including stddef.h on Windows for Z_SOLO compile [Niessink]
- Fix gzgetc undefine when Z_PREFIX set [Turk]
- Eliminate use of mktemp in Makefile (not always available)
- Fix bug in 'F' mode for gzopen()
- Add inflateGetDictionary() function
- Correct comment in deflate.h
- Use _snprintf for snprintf in Microsoft C
- On Darwin, only use /usr/bin/libtool if libtool is not Apple
- Delete "--version" file if created by "ar --version" [Richard G.]
- Fix configure check for veracity of compiler error return codes
- Fix CMake compilation of static lib for MSVC2010 x64
- Remove unused variable in infback9.c
- Fix argument checks in gzlog_compress() and gzlog_write()
- Clean up the usage of z_const and respect const usage within zlib
- Clean up examples/gzlog.[ch] comparisons of different types
- Avoid shift equal to bits in type (caused endless loop)
- Fix unintialized value bug in gzputc() introduced by const patches
- Fix memory allocation error in examples/zran.c [Nor]
- Fix bug where gzopen(), gzclose() would write an empty file
- Fix bug in gzclose() when gzwrite() runs out of memory
- Check for input buffer malloc failure in examples/gzappend.c
- Add note to contrib/blast to use binary mode in stdio
- Fix comparisons of differently signed integers in contrib/blast
- Check for invalid code length codes in contrib/puff
- Fix serious but very rare decompression bug in inftrees.c
- Update inflateBack() comments, since inflate() can be faster
- Use underscored I/O function names for WINAPI_FAMILY
- Add _tr_flush_bits to the external symbols prefixed by --zprefix
- Add contrib/vstudio/vc10 pre-build step for static only
- Quote --version-script argument in CMakeLists.txt
- Don't specify --version-script on Apple platforms in CMakeLists.txt
- Fix casting error in contrib/testzlib/testzlib.c
- Fix types in contrib/minizip to match result of get_crc_table()
- Simplify contrib/vstudio/vc10 with 'd' suffix
- Add TOP support to win32/Makefile.msc
- Suport i686 and amd64 assembler builds in CMakeLists.txt
- Fix typos in the use of _LARGEFILE64_SOURCE in zconf.h
- Add vc11 and vc12 build files to contrib/vstudio
- Add gzvprintf() as an undocumented function in zlib
- Fix configure for Sun shell
- Remove runtime check in configure for four-byte integer type
- Add casts and consts to ease user conversion to C++
- Add man pages for minizip and miniunzip
- In Makefile uninstall, don't rm if preceding cd fails
- Do not return Z_BUF_ERROR if deflateParam() has nothing to write

Changes in 1.2.7 (2 May 2012)
- Replace use of memmove() with a simple copy for portability
- Test for existence of strerror
- Restore gzgetc_ for backward compatibility with 1.2.6
- Fix build with non-GNU make on Solaris
- Require gcc 4.0 or later on Mac OS X to use the hidden attribute
- Include unistd.h for Watcom C
- Use __WATCOMC__ instead of __WATCOM__
- Do not use the visibility attribute if NO_VIZ defined
- Improve the detection of no hidden visibility attribute
- Avoid using __int64 for gcc or solo compilation
- Cast to char * in gzprintf to avoid warnings [Zinser]
- Fix make_vms.com for VAX [Zinser]
- Don't use library or built-in byte swaps
- Simplify test and use of gcc hidden attribute
- Fix bug in gzclose_w() when gzwrite() fails to allocate memory
- Add "x" (O_EXCL) and "e" (O_CLOEXEC) modes support to gzopen()
- Fix bug in test/minigzip.c for configure --solo
- Fix contrib/vstudio project link errors [Mohanathas]
- Add ability to choose the builder in make_vms.com [Schweda]
- Add DESTDIR support to mingw32 win32/Makefile.gcc
- Fix comments in win32/Makefile.gcc for proper usage
- Allow overriding the default install locations for cmake
- Generate and install the pkg-config file with cmake
- Build both a static and a shared version of zlib with cmake
- Include version symbols for cmake builds
- If using cmake with MSVC, add the source directory to the includes
- Remove unneeded EXTRA_CFLAGS from win32/Makefile.gcc [Truta]
- Move obsolete emx makefile to old [Truta]
- Allow the use of -Wundef when compiling or using zlib
- Avoid the use of the -u option with mktemp
- Improve inflate() documentation on the use of Z_FINISH
- Recognize clang as gcc
- Add gzopen_w() in Windows for wide character path names
- Rename zconf.h in CMakeLists.txt to move it out of the way
- Add source directory in CMakeLists.txt for building examples
- Look in build directory for zlib.pc in CMakeLists.txt
- Remove gzflags from zlibvc.def in vc9 and vc10
- Fix contrib/minizip compilation in the MinGW environment
- Update ./configure for Solaris, support --64 [Mooney]
- Remove -R. from Solaris shared build (possible security issue)
- Avoid race condition for parallel make (-j) running example
- Fix type mismatch between get_crc_table() and crc_table
- Fix parsing of version with "-" in CMakeLists.txt [Snider, Ziegler]
- Fix the path to zlib.map in CMakeLists.txt
- Force the native libtool in Mac OS X to avoid GNU libtool [Beebe]
- Add instructions to win32/Makefile.gcc for shared install [Torri]

Changes in 1.2.6.1 (12 Feb 2012)
- Avoid the use of the Objective-C reserved name "id"
- Include io.h in gzguts.h for Microsoft compilers
- Fix problem with ./configure --prefix and gzgetc macro
- Include gz_header definition when compiling zlib solo
- Put gzflags() functionality back in zutil.c
- Avoid library header include in crc32.c for Z_SOLO
- Use name in GCC_CLASSIC as C compiler for coverage testing, if set
- Minor cleanup in contrib/minizip/zip.c [Vollant]
- Update make_vms.com [Zinser]
- Remove unnecessary gzgetc_ function
- Use optimized byte swap operations for Microsoft and GNU [Snyder]
- Fix minor typo in zlib.h comments [Rzesniowiecki]

Changes in 1.2.6 (29 Jan 2012)
- Update the Pascal interface in contrib/pascal
- Fix function numbers for gzgetc_ in zlibvc.def files
- Fix configure.ac for contrib/minizip [Schiffer]
- Fix large-entry detection in minizip on 64-bit systems [Schiffer]
- Have ./configure use the compiler return code for error indication
- Fix CMakeLists.txt for cross compilation [McClure]
- Fix contrib/minizip/zip.c for 64-bit architectures [Dalsnes]
- Fix compilation of contrib/minizip on FreeBSD [Marquez]
- Correct suggested usages in win32/Makefile.msc [Shachar, Horvath]
- Include io.h for Turbo C / Borland C on all platforms [Truta]
- Make version explicit in contrib/minizip/configure.ac [Bosmans]
- Avoid warning for no encryption in contrib/minizip/zip.c [Vollant]
- Minor cleanup up contrib/minizip/unzip.c [Vollant]
- Fix bug when compiling minizip with C++ [Vollant]
- Protect for long name and extra fields in contrib/minizip [Vollant]
- Avoid some warnings in contrib/minizip [Vollant]
- Add -I../.. -L../.. to CFLAGS for minizip and miniunzip
- Add missing libs to minizip linker command
- Add support for VPATH builds in contrib/minizip
- Add an --enable-demos option to contrib/minizip/configure
- Add the generation of configure.log by ./configure
- Exit when required parameters not provided to win32/Makefile.gcc
- Have gzputc return the character written instead of the argument
- Use the -m option on ldconfig for BSD systems [Tobias]
- Correct in zlib.map when deflateResetKeep was added

Changes in 1.2.5.3 (15 Jan 2012)
- Restore gzgetc function for binary compatibility
- Do not use _lseeki64 under Borland C++ [Truta]
- Update win32/Makefile.msc to build test/*.c [Truta]
- Remove old/visualc6 given CMakefile and other alternatives
- Update AS400 build files and documentation [Monnerat]
- Update win32/Makefile.gcc to build test/*.c [Truta]
- Permit stronger flushes after Z_BLOCK flushes
- Avoid extraneous empty blocks when doing empty flushes
- Permit Z_NULL arguments to deflatePending
- Allow deflatePrime() to insert bits in the middle of a stream
- Remove second empty static block for Z_PARTIAL_FLUSH
- Write out all of the available bits when using Z_BLOCK
- Insert the first two strings in the hash table after a flush

Changes in 1.2.5.2 (17 Dec 2011)
- fix ld error: unable to find version dependency 'ZLIB_1.2.5'
- use relative symlinks for shared libs
- Avoid searching past window for Z_RLE strategy
- Assure that high-water mark initialization is always applied in deflate
- Add assertions to fill_window() in deflate.c to match comments
- Update python link in README
- Correct spelling error in gzread.c
- Fix bug in gzgets() for a concatenated empty gzip stream
- Correct error in comment for gz_make()
- Change gzread() and related to ignore junk after gzip streams
- Allow gzread() and related to continue after gzclearerr()
- Allow gzrewind() and gzseek() after a premature end-of-file
- Simplify gzseek() now that raw after gzip is ignored
- Change gzgetc() to a macro for speed (~40% speedup in testing)
- Fix gzclose() to return the actual error last encountered
- Always add large file support for windows
- Include zconf.h for windows large file support
- Include zconf.h.cmakein for windows large file support
- Update zconf.h.cmakein on make distclean
- Merge vestigial vsnprintf determination from zutil.h to gzguts.h
- Clarify how gzopen() appends in zlib.h comments
- Correct documentation of gzdirect() since junk at end now ignored
- Add a transparent write mode to gzopen() when 'T' is in the mode
- Update python link in zlib man page
- Get inffixed.h and MAKEFIXED result to match
- Add a ./config --solo option to make zlib subset with no libary use
- Add undocumented inflateResetKeep() function for CAB file decoding
- Add --cover option to ./configure for gcc coverage testing
- Add #define ZLIB_CONST option to use const in the z_stream interface
- Add comment to gzdopen() in zlib.h to use dup() when using fileno()
- Note behavior of uncompress() to provide as much data as it can
- Add files in contrib/minizip to aid in building libminizip
- Split off AR options in Makefile.in and configure
- Change ON macro to Z_ARG to avoid application conflicts
- Facilitate compilation with Borland C++ for pragmas and vsnprintf
- Include io.h for Turbo C / Borland C++
- Move example.c and minigzip.c to test/
- Simplify incomplete code table filling in inflate_table()
- Remove code from inflate.c and infback.c that is impossible to execute
- Test the inflate code with full coverage
- Allow deflateSetDictionary, inflateSetDictionary at any time (in raw)
- Add deflateResetKeep and fix inflateResetKeep to retain dictionary
- Fix gzwrite.c to accommodate reduced memory zlib compilation
- Have inflate() with Z_FINISH avoid the allocation of a window
- Do not set strm->adler when doing raw inflate
- Fix gzeof() to behave just like feof() when read is not past end of file
- Fix bug in gzread.c when end-of-file is reached
- Avoid use of Z_BUF_ERROR in gz* functions except for premature EOF
- Document gzread() capability to read concurrently written files
- Remove hard-coding of resource compiler in CMakeLists.txt [Blammo]

Changes in 1.2.5.1 (10 Sep 2011)
- Update FAQ entry on shared builds (#13)
- Avoid symbolic argument to chmod in Makefile.in
- Fix bug and add consts in contrib/puff [Oberhumer]
- Update contrib/puff/zeros.raw test file to have all block types
- Add full coverage test for puff in contrib/puff/Makefile
- Fix static-only-build install in Makefile.in
- Fix bug in unzGetCurrentFileInfo() in contrib/minizip [Kuno]
- Add libz.a dependency to shared in Makefile.in for parallel builds
- Spell out "number" (instead of "nb") in zlib.h for total_in, total_out
- Replace $(...) with `...` in configure for non-bash sh [Bowler]
- Add darwin* to Darwin* and solaris* to SunOS\ 5* in configure [Groffen]
- Add solaris* to Linux* in configure to allow gcc use [Groffen]
- Add *bsd* to Linux* case in configure [Bar-Lev]
- Add inffast.obj to dependencies in win32/Makefile.msc
- Correct spelling error in deflate.h [Kohler]
- Change libzdll.a again to libz.dll.a (!) in win32/Makefile.gcc
- Add test to configure for GNU C looking for gcc in output of $cc -v
- Add zlib.pc generation to win32/Makefile.gcc [Weigelt]
- Fix bug in zlib.h for _FILE_OFFSET_BITS set and _LARGEFILE64_SOURCE not
- Add comment in zlib.h that adler32_combine with len2 < 0 makes no sense
- Make NO_DIVIDE option in adler32.c much faster (thanks to John Reiser)
- Make stronger test in zconf.h to include unistd.h for LFS
- Apply Darwin patches for 64-bit file offsets to contrib/minizip [Slack]
- Fix zlib.h LFS support when Z_PREFIX used
- Add updated as400 support (removed from old) [Monnerat]
- Avoid deflate sensitivity to volatile input data
- Avoid division in adler32_combine for NO_DIVIDE
- Clarify the use of Z_FINISH with deflateBound() amount of space
- Set binary for output file in puff.c
- Use u4 type for crc_table to avoid conversion warnings
- Apply casts in zlib.h to avoid conversion warnings
- Add OF to prototypes for adler32_combine_ and crc32_combine_ [Miller]
- Improve inflateSync() documentation to note indeterminancy
- Add deflatePending() function to return the amount of pending output
- Correct the spelling of "specification" in FAQ [Randers-Pehrson]
- Add a check in configure for stdarg.h, use for gzprintf()
- Check that pointers fit in ints when gzprint() compiled old style
- Add dummy name before $(SHAREDLIBV) in Makefile [Bar-Lev, Bowler]
- Delete line in configure that adds -L. libz.a to LDFLAGS [Weigelt]
- Add debug records in assmebler code [Londer]
- Update RFC references to use http://tools.ietf.org/html/... [Li]
- Add --archs option, use of libtool to configure for Mac OS X [Borstel]

frostegater 02.05.2013 10:39

ErikPshat, WTF?
Код:

main.o(.text+0x161):main.c: undefined reference to `deflateInit2_'
main.o(.text+0x1a2):main.c: undefined reference to `deflate'
main.o(.text+0x1af):main.c: undefined reference to `deflateEnd'
main.o(.text+0x1dd):main.c: undefined reference to `deflateEnd'
collect2: ld returned 1 exit status
make: *** [PrxEncrypter] Error 1


Yoti 02.05.2013 16:26

frostegater,
ошибка в бинарнике - проблема с либами.

ErikPshat 02.05.2013 18:10

Цитата:

Сообщение от frostegater (Сообщение 1070899)
ErikPshat, WTF?

Я вообще не пойму откуда у меня компиляция происходит.
Я обновил zlib на 1.2.8 в MinGW и в PSPSDK. Компилируется всё так же нормально.
Но пробовал переименовать zlib.a и zlib.h - всё равно компилируется нормально. Что за чудеса?

frostegater 03.05.2013 06:21

Yoti, http://cs11418.vk.me/g39139940/a_0a424cf1.jpg

Короче я решил проблему. Сейчас покопаюсь.

frostegater 03.05.2013 16:01

мусор при запаковке победил
интересная вещь, последние 4 байта декриптованого стаффа не нули.. что же они значат?

/upd
Очень интересно. Хедеры подбираются по 0x70 оффсету в Kirk хедере. В нем хранится размер закриптованого DATA.PSP.
Этот оффсет с выравниванием и поправками (хз зачем, но получается верно) сравнивается с размером считанного elf и подбирается подходящий хедер.
Я вот не пойму почему размер ELF меряется с размером криптованого файла?!

ErikPshat 03.05.2013 19:31

Цитата:

Сообщение от frostegater (Сообщение 1070958)
/upd
Очень интересно. Хедеры подбираются по 0x70 оффсету в Kirk хедере. В нем хранится размер закриптованого DATA.PSP.
Этот оффсет с выравниванием и поправками (хз зачем, но получается верно) сравнивается с размером считанного elf и подбирается подходящий хедер.

Ну так я об чём писал здесь и здесь и ещё одну строчку здесь.
Я уже по нескольку раз здесь переписал диссертацию, а вы по ходу её не читали :)


Цитата:

Сообщение от frostegater (Сообщение 1070958)
интересная вещь, последние 4 байта декриптованого стаффа не нули.. что же они значат?

Они не всегда 4 байта. Это зависит от размера архива. При архивировании архив забивается нулями по размеру 0x70 в кирке и в конец добавляются какие-то байты, я встречал до 8-ми байт. Скорее всего контрольные суммы блоков.

И потом, после подписывания ты наверное проверяешь и декриптуешь. Но декриптер тебе выдаёт уже разархивированный файл, поэтому сам архив ты не видишь, как он выглядет внутри и сколько места занимает. Я уже писал вот здесь (Ликбез №2), что лучше в исходниках PrxDecrypter (не путать с Энкриптером) пофиксить расжатие 1F8B и он не будет разархивировать, а только декриптовать. Тогда ты сможешь подсмотреть, как сжимает Энкриптер в архив, сколько места занимает, на сколько добиватся нулями и что дописывает в конце. Конец архива GZ найдёшь по размеру декриптованного файла. - Поэтому я и говорю, что Astonishia Энкриптер не в состоянии ужать до исходника.


Цитата:

Сообщение от frostegater (Сообщение 1070958)
Я вот не пойму почему размер ELF меряется с размером криптованого файла?!

Я думаю, что он сначала ищет по psp_header, затем проверяет по kirk-header, если кирк не подходит, то он снова отправляется в поиск по psp-header. То есть зацикленный круг, пока не сойдётся. Я тоже сначала полумал, с какой стати он из обработки кирка начинает искать в psp-header.

frostegater 04.05.2013 08:45

ErikPshat, ну дак ты пишешь жидко, среди твоего рассуждения истину искать что иголку в стоге сена.
Для начала нужно устроить мега-компрессию. 7-zip юзает стандартную zlib библиотеку. Я нашел объявление функции сжатия:
Код:

ZEXTERN int ZEXPORT deflateInit2 OF((z_streamp strm,
                                    int  level,
                                    int  method,
                                    int  windowBits,
                                    int  memLevel,
                                    int  strategy));

method

The method parameter is the compression method. It must be Z_DEFLATED in this version of the library.


windowBits

The windowBits parameter is the base two logarithm of the window size (the size of the history buffer). It should be in the range 8..15 for this version of the library. Larger values of this parameter result in better compression at the expense of memory usage. The default value is 15 if deflateInit is used instead

windowBits can also be –8..–15 for raw deflate. In this case, -windowBits determines the window size. deflate() will then generate raw deflate data with no zlib header or trailer, and will not compute an adler32 check value.

windowBits can also be greater than 15 for optional gzip encoding. Add 16 to windowBits to write a simple gzip header and trailer around the compressed data instead of a zlib wrapper. The gzip header will have no file name, no extra data, no comment, no modification time (set to zero), no header crc, and the operating system will be set to 255 (unknown). If a gzip stream is being written, strm->adler is a crc32 instead of an adler32.


memLevel

The memLevel parameter specifies how much memory should be allocated for the internal compression state. memLevel=1 uses minimum memory but is slow and reduces compression ratio; memLevel=9 uses maximum memory for optimal speed. The default value is 8. See zconf.h for total memory usage as a function of windowBits and memLevel.


strategy

The strategy parameter is used to tune the compression algorithm. Use the value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a filter (or predictor), Z_HUFFMAN_ONLY to force Huffman encoding only (no string match), or Z_RLE to limit match distances to one (run-length encoding). Filtered data consists mostly of small values with a somewhat random distribution. In this case, the compression algorithm is tuned to compress them better. The effect of Z_FILTERED is to force more Huffman coding and less string matching; it is somewhat intermediate between Z_DEFAULT_STRATEGY and Z_HUFFMAN_ONLY. Z_RLE is designed to be almost as fast as Z_HUFFMAN_ONLY, but give better compression for PNG image data. The strategy parameter only affects the compression ratio but not the correctness of the compressed output even if it is not set appropriately. Z_FIXED prevents the use of dynamic Huffman codes, allowing for a simpler decoder for special applications.


у нас стоит

Код:

deflateInit2(&strm,
            9, // максимальный насколько я понимаю
            Z_DEFLATED, // метод DEFLATED он в этой либе такой всегда
            15+16,
            8, // это размер памяти который будет выделен на внутрение операции (в уровнях, 8 по дефолту)
            Z_DEFAULT_STRATEGY // алгоритм сжатия
);

Скажи мне какие параметры должны быть для максимального сжатия? Вроде они такие как и должны быть.

P.S. Тут много интересного: http://www.zlib.net/manual.html

ErikPshat 04.05.2013 13:45

frostegater, да, я уже 100500 раз перечитыл исходники, изучил метод компрессии zlib :)

К сожалению тут всё выставлено на максимум и алгоритм deflateInit2 самый расширенный, поэтому не знаю даже куда копать.
Можно ещё memLevel=9 выставить, он у меня так и проставлено, но это на большее сжатие вроде не влияет.
Единственно тут не хватает сжатия по словарю, как в 7-Zip:
Цитата:

Changes in 1.2.5.2 (17 Dec 2011)
- Allow deflateSetDictionary, inflateSetDictionary at any time (in raw)
- Add deflateResetKeep and fix inflateResetKeep to retain dictionary
- Fix gzwrite.c to accommodate reduced memory zlib compilation
Кстати, выше я скомпилировал zlib-1.2.8 для Win32, а оказывается нужно было под Unix, но у меня так выползает непонятная ошибка. Поэтому выкладываю zlib-1.2.7
Может как-то подключить либу 7z?

frostegater 04.05.2013 14:15

ErikPshat, я так понимаю в 7-zip используется не zlib, а gunziplib: http://www.gzip.org/
скомпиль под юникс

ErikPshat 04.05.2013 14:58

Цитата:

Сообщение от frostegater (Сообщение 1071025)
скомпиль под юникс

Попробую.
Я тут уже весь измотался с zlib-1.2.8...

Вот такой лог
cc -O -c -o adler32.o adler32.c
cc -O -c -o crc32.o crc32.c
cc -O -c -o deflate.o deflate.c
cc -O -c -o infback.o infback.c
cc -O -c -o inffast.o inffast.c
cc -O -c -o inflate.o inflate.c
cc -O -c -o inftrees.o inftrees.c
cc -O -c -o trees.o trees.c
cc -O -c -o zutil.o zutil.c
cc -O -c -o compress.o compress.c
cc -O -c -o uncompr.o uncompr.c
cc -O -c -o gzclose.o gzclose.c
cc -O -c -o gzlib.o gzlib.c
cc -O -c -o gzread.o gzread.c
cc -O -c -o gzwrite.o gzwrite.c
ar rc libz.a adler32.o crc32.o deflate.o infback.o inffast.o inflate.o inftrees.o trees.o zutil.o compress.o uncompr.o gzclose.o gzlib.o gzread.o gzwrite.o
cc -O -DPIC -c -o objs/adler32.o adler32.c
cc -O -DPIC -c -o objs/crc32.o crc32.c
cc -O -DPIC -c -o objs/deflate.o deflate.c
cc -O -DPIC -c -o objs/infback.o infback.c
cc -O -DPIC -c -o objs/inffast.o inffast.c
cc -O -DPIC -c -o objs/inflate.o inflate.c
cc -O -DPIC -c -o objs/inftrees.o inftrees.c
cc -O -DPIC -c -o objs/trees.o trees.c
cc -O -DPIC -c -o objs/zutil.o zutil.c
cc -O -DPIC -c -o objs/compress.o compress.c
cc -O -DPIC -c -o objs/uncompr.o uncompr.c
cc -O -DPIC -c -o objs/gzclose.o gzclose.c
cc -O -DPIC -c -o objs/gzlib.o gzlib.c
cc -O -DPIC -c -o objs/gzread.o gzread.c
cc -O -DPIC -c -o objs/gzwrite.o gzwrite.c
cc -O -o libz.so.1.2.8 adler32.lo crc32.lo deflate.lo infback.lo inffast.lo inflate.lo inftrees.lo trees.lo zutil.lo compress.lo uncompr.lo gzclose.lo gzlib.lo gzread.lo gzwrite.lo -lc
c:/cygwin/usr/i686-pc-mingw32/sys-root/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../../mingw32/bin/ld.exe: cannot find -lc
collect2: ld returned 1 exit status
make: *** [libz.so.1.2.8] Error 1
Причём libz.so.1.2.8 отсутствует.
Нарыл в инете инфу
Цитата:

Устанавливаемые библиотеки: libz[a,so]
Я так понял, что получаемый libz.a и есть libz.so.1.2.8 = переименовал, компиляция прошла дальше и появились файлы *.lo
  • adler32.lo crc32.lo deflate.lo infback.lo inffast.lo inflate.lo inftrees.lo trees.lo zutil.lo compress.lo uncompr.lo gzclose.lo gzlib.lo gzread.lo gzwrite.lo
Теперь выползает опять типичная ошибка, похоже libz.a и libz.so.1.2.8 - не одно и тоже.
Log
cc -O -o libz.so.1.2.8 adler32.lo crc32.lo deflate.lo infback.lo inffast.lo inflate.lo inftrees.lo trees.lo zutil.lo compress.lo uncompr.lo gzclose.lo gzlib.lo gzread.lo gzwrite.lo -lc
c:/cygwin/usr/i686-pc-mingw32/sys-root/mingw/bin/../lib/gcc/mingw32/4.6.2/../../../../mingw32/bin/ld.exe: cannot find -lc
collect2: ld returned 1 exit status
make: *** [libz.so.1.2.8] Error 1
Где взять: cannot find -lc ?
И где взять libz.so.1.2.8 ?

ErikPshat 04.05.2013 15:47

Вложений: 1
Цитата:

Сообщение от frostegater (Сообщение 1071025)
ErikPshat, я так понимаю в 7-zip используется не zlib, а gunziplib: http://www.gzip.org/
скомпиль под юникс

Так?

frostegater 05.05.2013 03:10

Цитата:

Сообщение от ErikPshat (Сообщение 1071028)
[/SPOILER]Где взять: cannot find -lc ?

libc это

ErikPshat, максимальное сжатие у меня получилось в 53.6%. Не намного отличается от 7z'шного.

ErikPshat 05.05.2013 03:17

frostegater, отлично! пробовал подписать Astonishia своим же заголовком?

Кстати, не пробовал подписать любую игру или хомку через Fake_NP из шапки? Приколишься :)
Ну раз тишина, значит никто не пробовал или не понял юмора.

frostegater 05.05.2013 05:53

ErikPshat, у меня нет Astonishia. Залей пожалуйста. Времени совсем в обрез лазить по инету.
upd/ у меня на тот fakenp каспер ругается.

ErikPshat 06.05.2013 11:24

Цитата:

Сообщение от frostegater (Сообщение 1071105)
у меня нет Astonishia. Залей пожалуйста.

Она лежит здесь во вложении: https://www.pspx.ru/forum/showpost.ph...4&postcount=20
Я же специально для теста в 7-Zip её туда положил. Там всё готово, нужно только нажать на батничек.

Цитата:

Сообщение от frostegater (Сообщение 1071105)
у меня на тот fakenp каспер ругается.

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

frostegater


Ну чо там у тебя тишина, есть какие-нибудь движения в правую сторону?

frostegater 07.05.2013 14:44

Подключил 7z, через одно место, правда.
После подписи Astonishia виснет на Now Loading, не вырубается.

LaKosta 07.05.2013 15:17

Цитата:

Сообщение от frostegater (Сообщение 1071331)
После подписи Astonishia виснет на Now Loading, не вырубается.

Значит она запускается и это нормально. Просто с Астонишией должен в комплекте быть ещё один файл ресурсов "ASTO.DRM" (15 Мб), который она должна запускать. У тебя его по видимому нету. Хотя у меня оригинал и с этим файлом висит на Now Loading, может сам что-то не так проверял.
А сам EBOOT.PBP - это всего лишь лоадер.

Оригинал я брал здесь: http://www.pspdemocenter.com/page.php?id=926

frostegater 07.05.2013 15:51

Все короче.
Как теперь прога работает (в теории):
  • Подбираем заголовок сравнивая 0x28 оффсет в pspHeader с размером исходного эльфа.
  • Пакуем 7-zip'ом через прямой вызов system.
  • Сравниваем размер архива с оффсетом 0xB0 в pspHeader. На сколько я понимаю, этот размер включает ~PSP хедер.
  • Если не проходит, то возвращаемся к 1 пункту.

Сделал 2 батничка на ELF и EBOOT подписывание. Только не могу все лишние exe уложить в Utils. unpack-pbp не хочет работать с относительными путями.
В общем.. доделаешь. Будет баг, стучи.
http://rghost.ru/45825803

ErikPshat 08.05.2013 05:30

Жалко внутреннюю библиотеку не удалось внедрить, а всё-таки внешний 7z. Ну да ладно, хоть избавил ты нас от ручного добивания нулями ELF-а.

Цитата:

Сообщение от frostegater (Сообщение 1071337)
Сравниваем размер архива с оффсетом 0xB0 в pspHeader. На сколько я понимаю, этот размер включает ~PSP хедер.

Ну да, ведь psp_header включает 0x150 байт. А смещение 0xB0 дублируется в kirk_header в смещении 0x70. Так что тут всё верно.





В общем такой эксперимент.

Оригинальная упаковка:
  • Беру оригинальный Astonishia = 368544 байта
  • Декриптую без расжатия - получаю архив GZ (1F8B0800) = 368196 байта
  • Расжимаю в ELF = 978952 байта


Кастомная упаковка:
  • Беру подписанный Astonishia = 368544 байта
  • Декриптую без расжатия - получаю архив GZ (1F8B0808) = 368196 байта - внутри архива палится название temp.uncompressed :)
    По размеру декриптованного файла 0хEF008 нахожу настоящий конец архива = 366578 байта настоящий архив.
  • Расжимаю в ELF = 978952 байта
Ну сжался получается прямо почти копейка в копейку. На 1618 байта меньше оригинального сжатия.
Astonishia запускается и работает замечательно!



Беру свой любимый Cube Sample = 52988 байта

Кастомная упаковка:
  • Подписанный Cube Sample = 368544 байта - всё верно, подписался заголовком Astonishia.
  • Декриптую без расжатия - получаю архив GZ (1F8B0808) = 368196 байта - внутри архива палится название temp.uncompressed :)
    По размеру декриптованного файла 0хEF008 нахожу настоящий конец архива = 19030 байта настоящий архив, в конце забитый только нулями, а не как было раньше - забитый остатками ELF-файла.
  • Расжимаю в ELF = 978952 байта, конец забит нулями очень много )))
В общем всё чётко, всё работает как надо.


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

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