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
Feature request: "User Custom Section" to resolve many different issues... #28
Comments
Thank you for providing the implementation of "User Custom Section." I have referred to your approach and added an automatic detection mechanism for hidden sections in version 0.9.9.7-beta. Instead of using custom section start and end, I have utilized the "LastHiddenSectionLengthHex" option. It will automatically add a new section after the last known section in the system, with a default length of 0x40000000. Furthermore, because hidden sections, as you mentioned, can be located not only at the end but at any address, the detection mechanism checks if each known section is continuous. When it detects a break in continuity, it automatically adds a new section. |
Thank you, JeymyAV, for conducting such detailed testing on hidden section detection. I'm curious, which game did you use for your testing? Regarding what HexEditor does when switching pages, it's quite straightforward. It reads the specified PS4 memory starting address and the length of each page (8M), then displays it. I'm not sure why ghost data consisting entirely of zeros would appear... byte[] dst = PS4Tool.ReadMemory(mainForm.ProcessPid, section.Start + (ulong)page * PageSize, (int)memSize); section.Start + (ulong)page * PageSize = FFF804001 (page44) |
OMG, can you tell me the exact version of PS4DEBUG that you have used? |
My FW is 6.72, and I'm using ps4debug by Ctn v1.0.15. |
My settings are the same because this parameter value is the default. Apart from the FW, what is your game version? I have installed Update 1.03, and in the game, I see the version as 1.08b. |
I have installed the same update 1.03. it Is not the game, and sure 100% that the issue is with FW9.0 and PS4Debug version for it... |
I noticed, JeymyAV, that your initial custom version was working. The main decisive difference between your modified version and mine is whether the ending digit of the HiddenSection's starting address is 0. In version 0.9.9.9-beta, I changed the ending digit of the HiddenSection's starting address to 0. I'm not sure if this helps, so please test it and let me know. Thank you.
|
Thank you, JeymyAV, for testing and providing a detailed explanation once again. I believe I understand the issue you're describing. Let me confirm if my current understanding is correct: In FW9, when reading data from hidden sections with incorrect addresses, even if there is actual data inside, it becomes empty. For example:
|
That's totally correct, and only happen on FW9. |
If possible, I wonder if JeymyAV could perform another test. It involves modifying the testing of the Below is the ReadMemory function in PS4Tool, where the catch part specifies handling of SocketException errors and attempts to reconnect. public static byte[] ReadMemory(int processID, ulong address, int length)
{
int current = CurrentIdx1();
try
{
mutexs[current].WaitOne();
ConnectedCheck(current);
byte[] buf = ps4s[current].ReadMemory(processID, address, length);
return buf;
}
catch (SocketException ex)
{
if (tickerMajor.Elapsed.TotalSeconds >= 1.5)
{
reTrySocket = tickerMajor.Elapsed.TotalSeconds < 10 ? reTrySocket + 1 : 0;
tickerMajor = System.Diagnostics.Stopwatch.StartNew();
if ((ex.ErrorCode == 10054 || ex.ErrorCode == 10060) && reTrySocket > 5) throw;
Connect(Properties.Settings.Default.PS4IP.Value, out string msg, 1000, true);
}
}
finally { try { mutexs[current].ReleaseMutex(); } catch (Exception) { } }
return new byte[length];
} Originally, I thought SocketException would only occur in case of a connection issue, so the error wouldn't be thrown. The test involves completely commenting out the catch part and then executing the Hex Editor to access the 12th page at address FFF804000. Please check if this results in any error messages in the program. Thank you. public static byte[] ReadMemory(int processID, ulong address, int length)
{
int current = CurrentIdx1();
try
{
mutexs[current].WaitOne();
ConnectedCheck(current);
byte[] buf = ps4s[current].ReadMemory(processID, address, length);
return buf;
}
//catch (SocketException ex)
//{
// if (tickerMajor.Elapsed.TotalSeconds >= 1.5)
// {
// reTrySocket = tickerMajor.Elapsed.TotalSeconds < 10 ? reTrySocket + 1 : 0;
// tickerMajor = System.Diagnostics.Stopwatch.StartNew();
// if ((ex.ErrorCode == 10054 || ex.ErrorCode == 10060) && reTrySocket > 5) throw;
// Connect(Properties.Settings.Default.PS4IP.Value, out string msg, 1000, true);
// }
//}
finally { try { mutexs[current].ReleaseMutex(); } catch (Exception) { } }
return new byte[length];
} If any errors occur after testing, my guess is that the reason the entire 12th page turns into zeros is that ReadMemory simply returns a new byte[length]. |
Ok, I did the test and same result. But it was expected because as I said before, the issue IS NOT on your code... Nothing that you can change on your code that could fix it because if your code is working well on FW 6.72, then that means that nothing is wrong on your code about this issue (I'm 99,99% sure). Maybe, the only thing that you could do is to implement a complex algorithm of double buffer to workaround this issue (as I have explained on others post). But is too much effort (I wouldn't do it if I were you.) It more easy and quick to implement the workaround solution of manual customs sections Anyway, happy to help with it. |
Thank you for helping with the testing. I understand that the issue is not with ReadMemory, and after a series of tests, it's clear that there's no way to fix it in my code. I will consider the improvement method you mentioned and incorporate it into the program. |
The " Please note that this feature requires obtaining the PS4's GAME_ID, so the initial Query window may take longer to start as it waits for this information to be read.
|
Recently have been discovered that some games are using hidden sections or they are creating invisible sections like this example>
Bug fix: List hidden/unlisted section/s
#27
That means that all the PS4 tools that are based on the use of sections to work with the ps4 memory address like PS4CheaterNeo are not able to access the real data of the game because they are allocated and hide in this invisible section.
Actually there is not a good solution so is not an easy way to resolve this anti-cheat measure because the root of the issue is that the ps4debug payload cannot detected it, and probably it will never do.
But there is an easy workaround that you can enhanced the PS4CheaterNeo to overpass this anti-cheat measure and already I did it and tested before telling you to be sure that I am right.
I have amended the Ps4NeoCheater 0.9.8.6 adding 2 settings and a small strip code. See the screen-shoots below:
1º First, 2 parameters options to allow the user to put manually the start address of the custom section and the end address of the custom section:
Of course, by default the values will be 0x0 in both parameters, and that will indicate to ps4NeoC. No use custom section.
2º I have did 2 small changes on the code ps4NeoC:
First change is to pass the name of the process selected for ps4NeoC to many methods as needed because we only want this custom section by applied when the user select the standard game process “eboot.bin”
Second change is this code at the end of the method GetProcessMaps(int processID) at the file PS4Tools.cs (please, you can saw my range changes very easy with the words: “BEGIN” and “END”:
Adding this code you should be see the new custom section at the last of others and now this section can be selected like any other section and do the corresponding scan on it:
Using this simple workaround I was able to find all the values that I was searching and that before was impossible to find on the others sections because they weren't there.
Finally, enhanced a bit the idea of Custom Section you can resolve the two new request made by Pharaoh2k:
1º Feature request: independnt range scan:
2º Feature request: Independent Hex Editor
You only need to add a new setting on the query editor like:
Use Only the User Custom Section (by default no selected)
If the user click on this option, the tool for the eboot process only should be show up one section, the custom section introduced by the user instead the list of sections returned by the ps4debug process..
In this way, the 1º Feature request: independnt range scan: is resolve because the user should put any range scan that he wish to try…
The other 2º Feature request: Independent Hex Editor is resolved too because instead of have 1000 of sections like happens in some games, the user only will have one section, a he could edit very quickly the values of this section using the hex editor.
Even more, another quick enhancement to this is add a new setting like this:
“Default address on the Hex Editor” and by default should be empty .
So if the user put any Hex address in this parameter, when the user click in the menu option “HexView” it should be see in the inputbox the default address save in the settings:
I hope that you like my ideas and I wish you will implement as soon as you can in this amazing tool that you are developing...
The text was updated successfully, but these errors were encountered: