我有一个班级Client
,其中有一个我无法编辑的变量privilege
。但是,我可以编辑扩展Launcher
的课程Client
。 Client
中的方法检查权限,我想在该方法之前覆盖privilege
变量。
public class Client { // I can't edit this class at all
private int privilege = 0;
public void chat(String msg) {
if (privilege == 3) {
// send chat packet with privileges to server
}
}
}
然后在一个单独的文件中:
public class Launcher extends Client { // I can edit this class
// This is what I tried... it didn't work
@Override
public void chat(String msg) {
int privilege = 3;
super.chat(msg);
}
}
这是我反编译的游戏的一部分,我想覆盖权限变量(作弊),我该如何实现?
答案 0 :(得分:1)
您可以使用反射来编写private
字段。获取field,使其成为accessible,和assign您想要的值。可以使用类似的方法来调用私有方法。
@Override
public void chat(String msg)
{
try {
Field field = Client.class.getDeclaredField("privilege");
field.setAccessible(true);
field.setInt(this, 3);
}
catch (Exception ex) {
throw new RuntimeException("Failed to modify field", ex);
}
super.chat(msg);
}
答案 1 :(得分:-1)
int privilege = 3
是局部变量,它怎么会影响班级Client
?
您需要在privilege
中为Client
实施getter,setter或将变量可见性更改为protected