-
Notifications
You must be signed in to change notification settings - Fork 53
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
The curious case of Crash Anywhere, on PocketStation #48
Comments
I think I know what is happening. The header XOR calc function ends 1 byte prematurely. For 99.9999999% of games that doesn't matter as most of the header is padded with zeros, including that next to last byte. memcardrex/MemcardRex/ps1card.cs Line 972 in ccaab70
If you copy pasted the save via temp buffer it will recalc the XOR value and corrupt the header with wrong checksum. What probably ends up happening is that he game needs to save the image data to itself basically and it can't because What a weird edge case... In order to burn the image properly don't use the copy/paste but write the complete .mcd file directly to the pocketstation, Thanks for the heads up. |
First of all, thanks for a quick answer! I really appreciate it. I haven't used the copy-paste feature for saves. I always go to "File > Open" and search for the .mcb file that DuckStation has created while playing the japanese Crash 3. I then flash the whole file to my PocketStation. The version I am using is 1.9.1536670. Copying the contents of one memory card to PocketStation on actual PS1 hardware is a good suggestion, I need to try that later. One thing I have tried is: I create the Crash Anywhere file on a real PS1 hardware and save it directly from the game to my PocketStation. This way the Crash Anywhere app works 100 %. I then take this PocketStation and hook it up to my PC, and use MemcardRex to make a copy of its contents by creating a .mcb file on my computer. I then take another [empty] PocketStation that I have, plug it in to my PC, and transfer previously copied .mcb file to that unit. I take PocketStation out and try it out, and.... Crash Anywhere app again lacks the photo functionality. So even if I copy a confirmed 100 % working file from another PocketStation to my PC, and then transfer the same file back to another PocketStation, the file no longer works as intended. So something weird must happen to it during the transfer progress? EDIT: Easiest/fastest way to determine if your Crash Anywhere app is working 100 % correctly, is to boot up the app and the first thing it does it goes to a "Crash virtual pet" mode that shows large Crash sprite on the display. If Crash is performing some kind of action (other than standing idle) there should flash a small camera icon in the lower right corner every 3-4 frame (Crash animations usually have only 3-4 frames). Note that if you have already taken a picture of that specific animation, the camera icon wont show anymore (can only take one photo per new animation). |
Can you try with this version of MemcardRex? Just replace the one you have in the folder with this one. |
Thanks for the update! However, the problem still persists... BUT. It was not for vain. I found out something else while testing this, and I think I figured it out. Say I have PocketStation A and PocketStation B. I use an actual PS1 + Crash 3 to install Crash Anywhere app to both PocketStations. Both work fine. Then, if I use MemcardRex to transfer the app data from PS-A to my PC, then format PS-A completely, then transfer the same data file back to PS-A, it works again. Cool. And if I do similar test for PS-B with its own file, it works the same. So this means that MemcardRex is working perfectly fine. BUT. If I instead try to transfer the file, which was created for PS-A, to PS-B, it stops working properly. And this error happens same way even if I use PS1's built-in memory manager, so it is definitely not a problem of a MemcardRex, but of the Crash Anywhere software itself. My non-coder brain tells me that either
Now that I wrote the last part out, I think it actually makes perfect sense to me... It must be the time differences between the devices. The file created for PS-A has a different time progression, and when I transfer that file to PS-B, the part of the code that checks for time runs into a difference and skips some steps... And the file created by the emulator wouldn't work, because it probably set some arbitrary "default time" for the app during save process, which of course is different to each of my real PocketStations. If the emulator could access the device directly, then I'm sure it'd work too. I guess it's case closed huh? |
So I made a test with two different [formatted] PocketStations as you instructed, and I can definitely see some differences in their data. I couldn't test it with a regular memory card, because the game recognizes it as such and so it refuses to install the PocketStation app to it. Here's the files I dumped: https://we.tl/t-ETuquZjmxX There are 4 files in that archive. 2 files per device, one taken before the first launch and one afterwards. This screenshot shows the difference between the two files (before launch; the one on temp buffer is "PS-A"): And this screenshot shows the difference between the two files (after launch; the one on temp buffer is "PS-A"): |
Haha WHAT. You typed that response the second I sent mine lol. I need to check this out. |
Hey I got home now I had the time to test your plugin. Sadly I cannot get it to show up in MemcardRex? I tried the XOR-fix edition as well as the usual 1.9.1536670 version by placing the dll in the plugins folder. I closed and reopened the app but it won't show up in plugins menu? EDIT: |
Oh, silly me. I compiled it for .net framework 2.0 and MemcardRex uses 4.8. Try it now. |
Sure I'll have to try it out on my work PC (win 10). |
Ah... I get it. Windows is not allowing files from untrusted sources.
So. delete this dll and use 7zip or any other archiver beside the windows one. Also, another solution:
Try to see if there is an unblock option in the CrashReSign.dll file properties. |
Brotherrrrr! Here's Johnny! And it works! Thanks!! I used the plugin to copy-paste ID from one device file to another, and it appears to be running now fully functional as it's supposed to! Thanks for your help & for the great app!! And thanks for crediting me in the plugin info :D If possible, maybe add some sort of description to let others know (if anyone ever has the same issue lol) what the plugin is for? For example: "Use this plugin to copy device-ID from one Crash Anywhere file to another. Running the same Crash Anywhere app on multiple devices does not work properly unless the app's ID is changed to match the device's real ID. This operation is required whenever you try to run a copy of Crash Anywhere app in another PocketStation, that is not the app's original installation device. For example, if you create Crash Anywhere savefile using an emulator and try to transfer the file to your physical PocketStation, you need to change that file's ID to correspond your PocketStation's ID. Otherwise the in-app "photo capture" mode won't work. Unfortunately, currently the only way to determine your PocketStation's real-ID is to use actual PS1 and a copy of japanese Crash Bandicoot 3 to install Crash Anywhere app to your PocketStation (the correct ID is assigned to your device's Crash Anywhere app during the installation process)." |
That tool saves the BIOS file inside a .mcr but I didn't know how to extract them out. You can dl them here if you want to take a look: https://we.tl/t-pEod7QQfjV The BIOS info reads as: PS-A: Serial: W06036513 PS-B: Serial: G04037516 |
Didn't understand any of it! But it sounds like a very impressive discovery! And this just dawned on me: Are we possibly witnessing here the birth of a world's first ever PocketStation crack...? The game that took the longest to crack...? :D This might call for a ice cold Pepsi(tm). I'm excited to see what comes from this! |
Oh 😮 I figured it out. The games (both CB3 and CA) do not obfuscate the serial number, they use it as is. So for your first PocketStation we have W06036513 serial. Let's try with other PocketStation: I just need to implement that conversion in CrashReSign and we are good, we can use serial to sign the game. |
You crazy sonovabitch, you did it! And it works! I just tested it by taking the file of PS-B, wrote the serial from PS-A and installed it to PS-A... and it runs flawlessly! Thanks for your hard work!! It is true that PocketStations have the serial written on the actual item under the lid, but not all seem to have it. For example in my collection this PS-A does have the serial under lid but PS-B doesn't, so it's a good thing that Orion's BIOS tool exists so that the serial can be acquired at least by digital means. Now imagine if there were a function in MemcardRex, "Read PocketStation serial", that when activated would present a "In progress, please wait.." screen to the user, while MemcardRex would write a tiny temporary app similar to BIOS tool to the PS, read devices ID, save it to a savefile, then download it back to PC, read the serial within and present it to the user, while at the same the removing itself from the PS memory so that no junk data would be left behind... 😎 Weeeell maybe that's for future versions haha. But good thing is that this plugin is now pretty much perfect for this use. I have plenty of PocketStation games to go through and who knows if some other game uses similar ID lock. Thanks again!! EDIT: And congrats for the world's first PS game crack 😁🎉 |
There is certainly more fun to be had with PocketStation. The serial read is not a bad idea, I believe PocketStation even has extended commands Your idea could work also for a BIOS dumper, apparently you can upload I'll include CrashReSign as standard for every new release from now on. |
Hey this is a bit off topic but do you have email or anything that I could send a inquiry about different topic? You can ignore that if you don't have the time, and I totally understand it. I'm messing around with PocketStation coding project for my own fun and I've got a simple test app working, but there's one specific issue I'm having, and that is how reading the system time works. I mean it's basic C stuff for most people, I just have trouble figuring it out as I'm more of a graphics guy than a code guy lol. I could send more detailed description by email. |
Whaatt 😄😄 Pocketstation features hypee!!
Lähetetty Gmail Mobilesta
ma 5.8.2024 klo 17.09 Shendo ***@***.***> kirjoitti:
… image.png (view on web)
<https://github.com/user-attachments/assets/f27a5ad0-8341-4b1d-88ee-a0798ad699fa>
I know you'll appreciate this.
Some cool stuff are coming in version 2.0 😁
—
Reply to this email directly, view it on GitHub
<#48 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AHWBRQN4C2J7VHXYBAV2RLDZP6BTPAVCNFSM6AAAAABDHA4TD2VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDENRZGE3TGOJWGA>
.
You are receiving this because you authored the thread.Message ID:
***@***.***>
|
Hey @NKO55 Would you like to beta test the newest build of MemcardRex? I added support for PocketStation commands for both MemCARDuino and PS3 MC Adaptor. So you can easily read serial, dump bios and push current date and time with a couple of clicks. If you are interested I'll send you compiled build via email. |
Hey!
Sure thing dude I can test it!
Lähetetty Gmail Mobilesta
su 8.9.2024 klo 16.11 Shendo ***@***.***> kirjoitti:
… Hey @NKO55 <https://github.com/NKO55> Would you like to beta test the
newest build of MemcardRex?
I added support for PocketStation commands for both MemCARDuino and PS3 MC
Adaptor.
So you can easily read serial, dump bios and push current date and time
with a couple of clicks.
If you are interested I'll send you compiled build via email.
—
Reply to this email directly, view it on GitHub
<#48 (comment)>,
or unsubscribe
<https://github.com/notifications/unsubscribe-auth/AHWBRQK7O6ZRGPZ2SOWH3PDZVREHXAVCNFSM6AAAAABDHA4TD2VHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMZDGMZWGY4DCNBYGI>
.
You are receiving this because you were mentioned.Message ID:
***@***.***>
|
(This might not even be related to MemcardRex, but in the rare case that it is, I leave it here for posterity sake)
Background info: I have been using latest MemcardRex on my Win 11 PC to transfer savedata and PocketStation apps to my PocketStation via PS3 Memorycard Adapter, and everything has been working great. No problems whatsoever.
Prologue: The japanese version of Crash Bandicoot 3 has a PocketStation companion app called Crash Anywhere. You can "install" the app to your PocketStation via a settings menu within the Crash 3 game. Crash Anywhere app has 3 different minigames, and a feature, which allows the player to take "snapshots" of funny in-game moments, that are then saved as little 32 x 32 pixelart images to your in-game gallery. Pretty advanced, huh. When for example the player finishes a dance minigame, they earn a picture to their gallery.
Issue TL;DR: a PocketStation application transferred through MemcardRex is missing an in-game "photo" feature; possibly because a triggered anti-piracy method? When same application is transferred through an actual PS1, the said feature is present.
The issue in-depth: If the user has a real PS1 console and a copy of japanese Crash 3 (burned copy or a real one), and plugs in the PocketStation to their PS1, player is able to succesfully install the companion app to the PocketStation via in-game menus. When the user takes PocketStation out and plays the Crash Anywhere app, it works as expected and user is able to gather in-game "pixel photos" through gameplay. However, if the user instead uses emulator on their PC to emulate the japanese Crash 3 game, with DuckStation as an example, and creates a virtual .mcb-file that has the Crash Anywhere app inside, the user can then transfer the .mcb file to their PocketStation by using latest MemcardRex. The transfer finishes succesfully, and the user is able to play the Crash Anywhere app on their PocketStation, but there is a curious issue now: the events that are supposed to be triggered in game that allows user to take "photos" of said events, does no longer work. Everything else is in place. Only the "photo-feature", that appears after completing minigames etc is gone, and user can't complete the game via collecting these "digital pixel photos". Even if the user uses the same Crash 3 BIN/CUE-imagefile for emulation (the same that has been burned to disc and tried on an actual PS1), doesn't make the PocketStation app work properly.
So my hypothesis is, that there is something missing when transferring the crash 3 .mcb file to PocketStation with MemcardRex. Maybe it's a weird software glitch on MCR's part, or maybe it's some sort of rudimentary copy protection mechanism made by the game studio. Maybe there's a function written inside that can detect the way the files are written on the device, and if something is a miss, the game functions become limited. There were some copy protection methods created by PS1 devs for certain games, so it is not completely out of the question to think that there might be something similar going on here.
Has anyone else ran into similar weird issues with any other PocketStation app?
The text was updated successfully, but these errors were encountered: