최근 Gamecih라는 루트 사용자 용 앱을 사용하여 속이는 사람들에게 몇 가지 문제가있었습니다. Gamecih는 런타임에 게임을 일시 중지하고 변수를 변경합니다.ProGuard를 사용하여 난독 화 소스 코드
사기꾼이 런타임에 어떤 변수를 변경해야하는지 알기는 어려울 지 모르지만 코드를 이해하기 어렵지만 다른 문제가 발생할 수도 있습니다.
Javas Serializable 인터페이스를 사용하여 게임 객체를 직렬화 한 다음 파일에 기록합니다. 이제 "Player"클래스의 객체를 직렬화한다고 가정 해 보겠습니다. 직렬화되어 파일에 저장됩니다. 그런 다음 사용자가 Proguard 구현과 함께 업데이트를 다운로드합니다. Proguard는 클래스 및 클래스 멤버 이름의 이름을 바꿉니다. 이미 저장된 Player 객체를 읽을 때 중대한 오류가 발생하지 않습니까?
게임을 아직 시작하지 않은 경우 문제가되지 않습니다. 그러나 이제 일부 플레이어는 동일한 저장된 게임 (RPG)을 몇 달 동안 사용하고 있습니다. 그들은 업데이트를 다운로드하고 처음부터 다시 시작해야한다면 꽤 열 받게 될 것입니다.
나는 Proguard에게 특정 클래스를 난독 화하지 않도록 지시 할 수 있지만, 난 정말 난독 화해야하는 플레이어 클래스입니다.
명확한 설명 :의 나는 다음과 같은 간단한 읽을 수있게 클래스가 있다고 가정 해 봅시다 :
public class Player {
private int gold;
private String name;
//Lots more.
public Player(String name)
{
this.name = name;
}
public int getGold() {
return gold;
}
public void setGold(int gold) {
this.gold = gold;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
플레이어는 직렬화 만들고 파일에 저장됩니다. 내가 난독을 구현 한 후에는 다음과 같습니다
public class Axynasf {
private int akdmakn;
private String anxcmjna;
public Axynasf(String adna)
{
anxcmjna=adna;
}
public int getAkdmakn() {
return akdmakn;
}
public void setAkdmakn(int akdmakn) {
this.akdmakn = akdmakn;
}
public String getAnxcmjna() {
return anxcmjna;
}
public void setAnxcmjna(String anxcmjna) {
this.anxcmjna = anxcmjna;
}
}
내가 지금 업데이 트와 Player가 읽을 수있게 버전이 해당 업데이트를 다운로드있는 플레이어를 게시 할 것을 상상해보십시오. 해당 Object를 읽으려고 할 때 다른 멤버 이름과 다른 클래스 이름이 있습니다. ClassCastException 또는 그와 비슷한 것을 얻을 가능성이 큽니다.
왜곡 된 이유는 무엇입니까? 일부 게이머가 속이기를 원한다면, 마치 당신이나 다른 사람들에게 영향을주는 것과 같은 것이 아닙니다. – SJuan76
@ SJuan76 : 글로벌 최고 점수 목록과 PvP 전투가 있기 때문에. – Emiam
게임에 대한 좀 더 deatil 도움이 될 것입니다. 또한 나는 당신이 문제를 일으킬 수있는 클라이언트 쪽에서 무엇을하고 있는지 정확히 이해하지 못합니까? –