2017-10-20 1 views
2

최근에 우리는 불분명 한 내부 응용 프로그램을 실행하는 서버를 파헤 쳤습니다. 그것은 tomcat6/java6 내부에서 실행되었고 수년간 유지되지 않았습니다. 우선 들어java6 웹 응용 프로그램을 완전히 디 컴파일하십시오.

나는 응용 프로그램 리핑 (안 WAR을하지만,이 "폭발"/var/lib/tomcat6/webapps/ROOT의 디렉토리) 서버의 출력 및 (기본으로 debian-eol/squeeze 사용) 도커 환경을 설정하기 때문에 응용 프로그램은 나이 오래된 필요없이 노력하고 있습니다 기계. 그러나 여전히 소프트웨어의 버그를 수정해야하며 더 이상 소스 코드가 없으며 원래 작성한 사람도 없습니다.

jdGui는 개별 구성 요소의 jar 파일과 .class 파일을 분해 할 수 있지만, 전체 프로젝트 설정하는 방법 (WEB-INF/lib/에 -snapshot 단지의 무리에 분할, 플러스 OSS 라이브러리의 무리) 뭔가가있다 이클립스 나 IDEA에로드 할 수 있으며 "간단히"다시 컴파일 할 수 있습니까?

+1

짧은 대답, 아니요.필자가 선택한 JD-GUI의 디 컴파일러에서 얻은 것에서 소스를 다시 빌드하는 무서운 작업을 시작할 수도 있습니다. 그런 다음 무언가가 작동 할 때까지 다시 컴파일하고 배포하고 테스트하십시오. 나는 네가되고 싶지 않아. – Mena

+0

또한 디 컴파일의 품질은 컴파일 당시의 원래 컴파일러 설정에 따라 다릅니다. 지금 당장 나는 당신이 피해 평가를 할 것을 제안 할 것입니다. 완전한 소스를 되 찾을 필요가 있습니까, 아니면 클래스 또는 두 가지를 대체하는 간단한 수정을 할 수 있습니까? 이것에 대한 답은 시간이 걸리기 때문에 행동과 예산을 결정할 수 있습니다. –

+0

IntelliJ의 최신 버전에는 적절하게 좋은 디 컴파일러가 있음에 유의하십시오. 이렇게하면 꽤 길을 얻을 수 있습니다. –

답변

1

jdGui는 개별 구성 요소의 jar 파일을 분해 .class 파일을, [...]하지만 이클립스 또는 IDEA에로드 할 수있는 전체 프로젝트 뭔가 을 설정하는 방법이있다 "단순히"수 다시 컴파일합니까?

"단순한"방식이든 "단순하지 않은"방식이든 상관없이 간단하지만 시간이 오래 걸리는지 또는 시간이 많이 걸릴지에 따라 달라집니다. 단순한.

자동 디스어셈블러는 드물게 개발자 작성 코드처럼 보이는 코드를 생성하는 경향이 있습니다. 즉, 새로운 문제가 발생하면 디스어셈블러 코드를 읽는 데 어려움이 있습니다. 한편 해체 경험이 풍부한 숙련 된 개발자는 동일한 드롭 인 대체품으로 컴파일 된 Java Opcode를 읽음으로써 코드를 작성할 수 있습니다. 두 방법 모두 성공 가능성을 높입니다.

그런 다음 의미있는 내부 변수 이름을 재구성하는 부분이 있습니다. 이는 일반적으로 코드를 읽을 수있게 만드는 데 중요합니다. 이는 저렴한 코드 유지 관리의 전제 조건이됩니다. 노련한 개발자는 종종 코드의 구조를 읽고 디버거에서 플랫폼을 관찰하여 도움을받으며 변수의 이름을 무엇인지에 대해 교육받은 추측을합니다. 종종 그 정도면 충분하지만, 다시 말하면 느린 과정입니다.

마지막으로 코드 구조가 올바르게 이해되어 문제를 해결할 수 있어야합니다. 운이 좋다면 문제는 캡슐화 된 작은 코드 블록에 영향을 미칩니다. 그러한 상황에서, 단위 테스트의 작은 세트는 픽스가 문서화되지 않은 다른, 그러나 달리 요구되는 논리를 깨뜨리지 않도록하기 위해 구성 될 수 있습니다.

당신이 불행한 경우, 여러 다른 모듈을 함께 업데이트해야합니다. 다시 말하지만, 이것은 변경되고있는 모든 모듈이 안전한 변경을하기에 충분히 이해되어야한다는 것을 의미합니다 (간신히 읽을 수있는 환경에서).

이렇게 할 수 있습니다. 많은 작업이 해결하려는 문제에 직접적으로 기여하지 않을 수도있는 많은 작업입니다. 이 분야에 숙련 된 사람들은 JAR 파일을 재 포장하여 작업이 진행되는 동안 런타임 디버깅을 얻을 수 있습니다. 나는 전에 그것을했으며, Mena의 의견을 완전히 이해합니다. 그러나 나는 이상한 새이다. 나는 그 일을 좋아했다.

나는 주머니가 충분히 깊다면 걱정할 것입니다. 트래픽을 컨테이너 안팎에 기록하고 동일한 작업을 수행하는 새로운 대체 메시지를 작성하는 것이 더 저렴할 수 있습니다 (단, 다음을 제외하고는 전송되지 않는 초 임계 메시지를 로깅 할 위험이 있습니다. 당신이 포착하지 않은 조건 하에서).

+0

그래서 프로젝트의 뉴스 - jdGui는 실제로 원래 변수 이름처럼 보이게 만들었습니다. 누락 된 유일한 것은 코멘트이지만, 이걸로도 살 수 있습니다. 총 7 개의 JAR 파일로 구성된 512 개의 파일이며 대부분 잘 보입니다. paven.xml을 자동으로 생성하는 방법이 있나요? 그리고 프로젝트를 "다시 빌드"할 수있는 무언가가 있습니까? 아니면 이것을 처음부터 작성해야합니까? –

+1

@MarcoSchuster 당신이 사용하는 도구는 그다지 중요하지 않습니다. 가장 익숙한 도구를 사용하겠습니다. 즉, 종속성의 정확한 버전을 식별하거나 도구를 해킹하여 기존 jar 파일의 라이브러리 디렉토리를 사용해야합니다. 첫 번째 작업은 더 많은 작업이지만 종종 일반적으로 알려진 버전의 코드에 대한 소스 코드를 찾을 수 있기 때문에 일반적으로 라이브러리 안팎으로 디버깅 할 수 있기 때문에 유용합니다. 기본적으로, 원래 프로젝트 파일에 있었을 수도있는 것을 쓰려고합니다. –

관련 문제