회사의 데이터 복구를하고 있습니다. 그들은 정부의 Java 소프트웨어 패키지에서 작성된 파일의 한 유형을 구체적으로 필요로합니다. 파일 이름은 손실되지만 파일 자체에는 프로젝트 이름이 포함됩니다. 파일을 실제로 일반 텍스트가 포함되어 있지는 않지만 해당 소프트웨어에서 실제로 열 때만 찾을 수 있습니다. 수천 개의 파일이 있으므로 수동으로 열어 파일 이름을 업데이트 할 수는 없습니다.Java에 저장된 알 수없는 파일 열기
이러한 파일에는 여러 가지 다른 형식이 있습니다. 소프트웨어의 최신 버전은 이전 버전의 파일을 열 수 없으므로 파일을 "변환"해야합니다. 이것은 저에게 파일이 단순하게 저장된 객체라는 느낌을줍니다. 그리고 각 소프트웨어 버전으로 클래스를 변경하여 이전 파일을 새로운 클래스로 더 이상 캐스트 할 수 없게 만듭니다. 또는 뭔가. 내가 자바로 프로그래밍 한 이후로 꽤 오래되었습니다. :)
어쨌든 나는 "단순히"그 객체의 단일 속성을 읽고 싶다. 그러나 클래스를 파싱 할 클래스가 없습니다 (파일이 저장된 소프트웨어 버전에 따라 많은 클래스 중 하나 일 수 있음). 나는 그 소프트웨어의 항아리 파일을 가지고 있지만 그것이 정확히 무엇을하는지 전체 소프트웨어 패키지를 분석 할 필요가 없기를 바라고있다.
결국 나는 궁금한 점이 있습니다. 파일을 열어서 (실제로 "저장된 개체"라고 가정), 내용을 일반 텍스트로 구문 분석 할 수 있습니까? 한 번 완료되면 프로젝트 이름이 저장된 위치를 검색 할 수 있습니다. 소프트웨어 버전간에 동일한 위치에 있기를 바랍니다.
경로가 더 쉬울 것이라고 말하기는 어렵지만 두 방향이 표시됩니다. 1) jar 클래스 파일을 디 컴파일하고 파일이 작성된 위치를 찾으십시오 (예를 들어 ObjectOutputStream을 검색하면 작동 할 수 있음). 이것은 나에게 더 쉬운 옵션처럼 보입니다 :) - 2) 파일 형식을 리버스 엔지니어링하려고합니다 (좋은 시작점은 여기의 직렬화 사양입니다 : http://docs.oracle.com/javase/7/docs/platform/serialization /spec/serialTOC.html 및보다 구체적으로 프로토콜 : http://docs.oracle.com/javase/7/docs/platform/serialization/spec/protocol.html – xpa1492
파일이 실제로 작성된 경우 단순히 자바의 표준 직렬화를 사용하면 프로젝트 이름은 문자열 일 뿐이므로 "문자열 객체의 표현은 길이 정보와 수정 된 UTF-8로 인코딩 된 문자열의 내용으로 구성됩니다."이후로 UTF-8은 16 진수 편집기에서 열어 어딘가에 파일로 인코딩되어 있습니다. – xpa1492
처음에 두려워했던 Decompiling은 가장 빠르고 최상의 결과를 제공합니다. 제안 해줘서 고마워. – Sygmoral