Dự án kế thừa mà tôi đang thực hiện bao gồm một số thư viện bên ngoài dưới dạng tập hợp các tệp jar nhị phân. Chúng tôi quyết định rằng để phân tích và vá tiềm năng, chúng tôi muốn nhận các nguồn của thư viện này, sử dụng chúng để xây dựng các tệp nhị phân mới và sau khi chuyển đổi kiểm tra hồi quy đủ chi tiết và đủ dài cho các tệp nhị phân này.Cách kiểm tra xem các tệp nhị phân có được xây dựng từ các nguồn cụ thể hay không
Giả sử rằng chúng tôi đã truy xuất và xây dựng các nguồn (tôi thực sự đang trong giai đoạn lập kế hoạch). Trước khi thử nghiệm thực sự, tôi muốn thực hiện một số "kiểm tra khả năng tương thích" để loại trừ khả năng rằng các nguồn đại diện cho một cái gì đó đáng kể khác với những gì có trong các tệp nhị phân "cũ".
Sử dụng công cụ javap
Tôi đã có thể trích xuất phiên bản JDK được sử dụng để biên soạn (ít nhất tôi tin rằng đó là phiên bản của JDK). Nó nói rằng, các tập tin nhị phân được xây dựng bằng cách sử dụng phiên bản 46 lớn và nhỏ 0. Theo this article nó ánh xạ tới JDK 1.2.
Giả sử rằng cùng một JDK sẽ được sử dụng để biên dịch nguồn.
Câu hỏi là: Có phương pháp xác minh đáng tin cậy và có thể hiệu quả nếu cả hai tệp nhị phân này được tạo từ cùng một nguồn không? Tôi muốn biết nếu tất cả các chữ ký phương thức và các định nghĩa lớp là giống nhau và nếu hầu hết hoặc có thể tất cả các phương thức triển khai thực hiện giống hệt nhau/tương tự nhau.
Thư viện là khá lớn, vì vậy tôi nghĩ rằng phân tích chi tiết các tệp nhị phân bị phân tích có thể không phải là một tùy chọn.
Reflection ('java.lang.reflect') nên làm cho chữ ký lớp học và phương pháp, nhưng không thực hiện. – SJuan76
Điều gì về việc so sánh băm MD5 của hai tập tin nhị phân? – sp00m
Để tham khảo trong tương lai, cách dễ nhất để tìm ra điều này là không sử dụng hệ thống điều khiển phiên bản như Git, Subversion hoặc Mercurial, sau đó bao gồm số sửa đổi và/hoặc ID thay đổi trong jar, chẳng hạn như trong tệp kê khai. – Brian