2016-11-26 1 views
-2

문제의 .class 파일

헤이 문자열을 편집. 나는 게임을 개발하고 있었고 게임에서 버전 1.0.13을 보여 주었고 완전히 잘못되었다는 것을 빨리 알게되었고 "1.9"가 표시됩니다. Eclipse에서 코드를 편집하고 각 코드에 대한 백업을 만들지 않았으므로 Eclipse에서 String을 편집 할 수 없었습니다. .jar decompiler을 사용하여 게임용 .jar 파일을 디 컴파일하려고했습니다. 소스 코드 (.java 파일)를 다운로드하여 Eclipse Neon에 넣었습니다. .java 파일을 넣으면 몇 가지 오류가 나타났습니다. 나는 그들을 고치고 프로그램을 운영했다. 게임의 많은 메커니즘이 완전히 깨졌습니다. 그게 작동하지 않을 것을 깨달았습니다. 그래서 WinRAR으로 .jar를 추출한 다음 메모장 ++을 사용하여 수동으로 .class 파일을 편집 해 보았습니다. (어리석은 아이디어였습니다). 내장 도구를 사용한 후에 나는 "1.0.13"을 모두 "1.9"로 신속하게 대체했습니다. 코드를 저장하고 .jar 파일을 실행하면 "Java Virtual Machine Launcher"라는 제목의 텍스트와 "Error"라는 텍스트가 나타났습니다. JNI 오류가 발생했습니다. 설치를 확인하고 다시 시도하십시오. "그런 다음 프로그램을 실행했습니다. 이름 JBE (자바 바이트 코드 편집기). 난 그냥 하나의 문자열을 편집 할 내가 상수 변수를 편집하는 방법에 확신이 있었고, 나는이 프로그램을 사용하여 자습서를 검색하고 아무것도 찾을 수 없습니다.

프로그램을 사용하는 경우와 I '연구의 소요 시간을했습니다, 그리고 난 해결책을 찾을 수 없습니다.이 상황을 해결하는 방법을 알고 있다면, 의견을주십시오. 사전에 감사.

정보

저는 "2 개의 링크에 감사를 표시하려면 최소한 10 개의 평판이 필요합니다."나는이 게시물에서 언급 한 모든 웹 사이트 및 프로그램에 링크 될 수있는 single PasteBin link을 게시 할 것입니다.

+0

왜 1.9라고해야합니까? 이것이 당신 게임이라면, 당신은 소스 코드에서 그것을 바꿀 수 있어야합니다. – chrylis

+0

@chrylis _ "각 버전에 대한 코드를 백업하지 않았기 때문에 이클립스에서 문자열을 편집 할 수 없었습니다."_ – Jerrybibo

+1

@Jerrybibo 아,이 코드가 최신 버전 일 것이라고 생각했습니다. 꼭 그런 것은 아닙니다. – chrylis

답변

1

디 컴파일하지 않고 바이트 코드를 편집하지 마십시오.

표준 16 진수 편집기 (http://www.hexedit.com/)를 사용하는 경우 이진 클래스 파일을 열 수 있습니다. 거기를 살펴 보시면 어딘가에서 구 버전 번호를 구할 수 있습니다. 개별 바이트를 변경할 수 있습니다 (UTF-16로 인코딩 된 것을 잊지 마십시오!). 바이너리 변경 사항을 저장하십시오.

열쇠는 클래스의 다른 위치가 이동하거나 위치를 변경하지 않는다는 것입니다. 메모장에서 문자를 삽입하거나 제거하면 클래스 파일이 손상됩니다. 리터럴을 찾을 때 문자열을 공백 문자로 채 웁니다 (문자열 리터럴의 길이를 변경할 수 없음). 즉, 존재하는 문자를 새 숫자 또는 공백 문자로 변경하지만 절대로 아무 것도 추가하거나 제거하지 마십시오.

클래스 파일의 문자열을 나타내는 바이트를 제외하고 아무 것도 변경되지 않습니다.

+0

답변 해 주셔서 감사합니다. .jar을 실행하면 게임은 적절한 버전이 표시되면서 작동하지만 버전 번호를 가운데에 맞출 수있는 코드가있어서 화면 중앙에 표시됩니다. 나는 체크했다. 그리고 String 값은 "1.9"대신에 "1.9 \ n"이다. String의 값이 "1.9"가되도록 내가 할 수있는 방법을 알고 있습니까? 미리 감사드립니다. – Flames

관련 문제