我在我的root手机上安装了游戏。我想要更多硬币。而且我知道,播放器数据是使用playerprefs存储的。(我有一部分游戏的源代码。)所以我编辑了xml文件,它位于
/data/data/appname/shared_prefs/appname.xml
我编辑了相应数量的硬币。但是当游戏启动时,硬币的数量并不是我想要的。然后我再次打开xml文件,只发现修改了修改。我试了很多次。
我该怎么办?
答案 0 :(得分:6)
你应该发布或创建一个miniumum,完整且可验证的例子,但我现在会自己做。我创建了一个新的Unity项目,并将该脚本附加到主摄像头:
svg:hover {
fill: #00599c;
}
如果密钥不存在(首次运行),脚本将创建密钥using UnityEngine;
using System.Collections;
public class PlayerPrefsScript : MonoBehaviour {
private int readCoins;
void Start()
{
if (!PlayerPrefs.HasKey("coins"))
{
PlayerPrefs.SetInt("coins", 1);
PlayerPrefs.Save();
}
readCoins = PlayerPrefs.GetInt("coins");
}
void OnGUI()
{
GUI.Box(new Rect(Screen.width / 2 - 150 / 2, Screen.height / 2 - 25 / 2, 150, 25),
"Coins: " + readCoins.ToString("N0"));
}
}
并将值1保存在其中。然后,在"coins"
项下保存的内容的值将保存在"coins"
中。在readCoins
中,它绘制一个简单的150x25像素的框,显示读取的硬币数量。很简单,如果您为Android编译应用程序并让它运行(我在BlueStacks模拟器中执行此操作),您会看到:
您可以在文件系统中看到,PlayerPrefs已保存在您预测的位置。
OnGUI()
它为您提供了XML:
C:\>adb connect 127.0.0.1:5556
connected to 127.0.0.1:5556
C:\>adb.exe -s emulator-5556 shell
root@generic:/ # cd /data/data/com.mycompany.PlayerPrefsTest/shared_prefs && ls -lh
-rw-rw---- u0_a58 u0_a58 361 2015-10-19 19:01 com.mycompany.PlayerPrefsTest.xml
root@generic:[..]/cat com.mycompany.PlayerPrefsTest.xml
所以我把它编辑到了999999并得到了
<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<int name="coins" value="1" />
<int name="Screenmanager Resolution Height" value="1920" />
<string name="5.2.1">293797f02df348f6b7238da14b30277d</string>
<int name="Screenmanager Is Fullscreen mode" value="0" />
<int name="Screenmanager Resolution Width" value="1080" />
</map>
再次启动游戏......
有些事你不知道。如果游戏只是读取该值,它应该像我演示的那样工作。因此,也许游戏会以另一种格式保存它,或者如果它检测到分数的异常变化,则具有备用值。即使略微增加硬币也会导致价值被重置?在这种情况下,只有进一步逆向工程应用程序才能帮助您找到这里发生的事情。但是你现在可以排除简单的C:\>adb.exe -s emulator-5556 pull "/data/data/com.mycompany.PlayerPrefsTest/shared_prefs/com.mycompany.PlayerPrefsTest.xml" prefs.xml
64 KB/s (361 bytes in 0.005s)
*edit it*
C:\>adb.exe -s emulator-5556 push prefs.xml "/data/data/com.mycompany.PlayerPrefsTest/shared_prefs/com.mycompany.PlayerPrefsTest.xml"
4 KB/s (366 bytes in 0.085s)
。
如果您对应用程序进行逆向工程是合法的,请从their google drive,project page获取最新的Android MuliTool(漂亮的一体化工具)并运行反编译器它。我会在这里展示我的应用程序。
在解压缩的工具文件夹中,在“Decompiled apk”下,您将找到应用程序的文件夹结构。
PlayerPrefs.GetInt()
所有已编译的C#脚本都位于assets \ bin \ Managed下的“Assembly.CSharp.dll”文件中。抓住Telerik的反编译器“JustDecompile”(website)并在其上运行文件。您将能够看到所有脚本都在各自的命名空间(在我的情况下是默认命名空间),并且反编译器将以可读的C#语法从脚本输出编译的MSIL代码:
因此,所有脚本都可以以易读的格式再次检索。