-
Notifications
You must be signed in to change notification settings - Fork 0
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
posts/2023-01-18/ #45
Comments
Awesome write-up, very interesting learning material (on how to not encrypt stuff), thanks! One question remains, though: Why bother encrypt this information in the first place? Most likely to keep third-party tools like yours away from it to lock up the system I guess 🤣 |
Hey! Good write up! Really enjoyed the technical details of this. Always love good reverse engineering stories. To me, the encryption is more about obfuscation than anything else. If you have full control of the machine and do the decryption on the file locally, then of course it can be decrypted; this is what the code is designed to do. You said this took 4 days to do, right? This would stop a lot of people in their tracks, which is probably the goal of EA. What would you suggest EA did instead to make this secure? I don't have a good suggestion, since the data needs to be decrypted locally anyway. Even if you pushed this operation to the EA server, you could collect the data used to make the request and simply make it from your application. |
@mdulin2 But considering the data stored in the file there is nothing that would need obfuscation. And the fact that it breaks when you install new hardware is a big red flag and shows no QA process before the update to the EA APP was pushed. |
As someone who maintains a library that needs the file, I'm obviously very biased and say that this should not be encrypted or even obfuscated. The plaintext I posted is unaltered, I did not remove any sensitive information or redacted anything because it doesn't contain anything outside some installation information. What baffles me is the fact that they chose to encrypt this file on purpose. As I've mentioned in the post, an earlier version of EA Desktop saved the plaintext version of this as Although I hate EA with a passion, I want to give the devs the benefit of the doubt and say that they likely just used a utility function for cleaner code: unknown1.SaveToFile("CATS");
unknown2.SaveToFile("IQ");
installState.SaveToFile("IS"); I didn't talk about the To summarize: every other file in the same folder is encrypted Update: yeah, so I decrypted the other files, and they also just contain installation related information. Nothing special whatsoever. I've updated the post to reflect my new findings. |
I must be one of the few people out there who share the exact same problem with you so I can't thank you enough for putting the research to solve all of this mess. |
I've been trying to figure out how to generate the hardware hash on Linux for a while. You can find my progress at erri120/GameFinder#71, and I believe it's not really feasible to generate the hash by reading normal Linux system files. The easiest and most reliable solution appears to be running a command inside the Wine prefix that contains the EA Desktop installation. I'm not sure if they updated their encryption algorithm, erri120/GameFinder#74 is about the only issue reported so far regarding this. Anyways, I've been running Linux for about 4 months at this point, so I don't really have access to all my debugging and reverse engineering tools anymore (aside from Ghidra) and debugging inside a Wine prefix is just a pain. |
That's great to hear and I think we can share our progress at this point and get this to work. I was finally able to double check the hardware info generated key, but it turns out result doesn't decrypt my IS file... I was able to use x64dbg in Wine without issue, and attaching the EABackgroundService process before the IS file was generated is the solution I was looking for. As for the hardware info, I found that wmic was working without issue, with the only component left being the drive C: serial. This can be accessed manually by opening winecfg, in the drives tab opening the advanced property of the C: drive. To access it programmatically, it's possible to use a program like this:
Which can be built on Linux with |
Breaking EA Desktop's pathetic Encryption | erri120's random Blog
EA made a sad attempt to prevent me from reading their files. I’ll explain how I went about breaking their encryption.
https://erri120.github.io/posts/2023-01-18/
The text was updated successfully, but these errors were encountered: