Vui lòng không đăng câu trả lời cho biết "bạn không nên làm điều này". Tôi không có kế hoạch sử dụng điều này trong mã sản xuất, nhưng chỉ cho một số niềm vui hacking.Có cách nào để thực thi mã không an toàn (vô hiệu hóa trình quản lý bảo mật) trong Java không?
Khi trả lời this question, tôi muốn chạy một số mã Java không an toàn tùy ý để giải trí. Mã trong câu hỏi liên quan đến việc tìm kiếm các nút lá của Java TreeMap
.
Chạy kết quả mã dưới đây trong
Exception in thread "main" java.lang.SecurityException: Prohibited package name: java.util
Theo this question, tôi có thể sử dụng System.setSecurityManager(null)
để có được xung quanh hầu hết những hạn chế này. Nhưng tôi không thể làm điều này vì lỗi xuất hiện khi lớp của tôi được tải.
Tôi đã biết rằng tôi có thể làm mọi thứ tôi muốn sử dụng phản chiếu sau khi tắt trình quản lý bảo mật. Nhưng điều đó sẽ làm cho mã xấu hơn nhiều. Làm thế nào để các nhà phát triển Java lõi viết các bài kiểm tra đơn vị của họ, ví dụ, nếu họ không thể đóng gói những thứ trong java.util
?
Tôi cũng đã thử -Djava.security.manager=...
nhưng điều này gây ra lỗi khởi tạo JVM khi tôi đặt thành null
và tôi không chắc chắn những gì khác tôi có thể đặt. Bất kỳ ý tưởng?
package java.util;
import java.util.TreeMap.Entry;
public class TreeMapHax {
static <K,V> List<Entry<K, V>> getLeafEntries(TreeMap<K, V> map) {
Entry<K, V> root = map.getFirstEntry();
while(root.parent != null) root = root.parent;
List<Entry<K,V>> l = new LinkedList<Entry<K,V>>();
visitInOrderLeaves(root, l);
return l;
}
static <K,V> void visitInOrderLeaves(Entry<K, V> node, List<Entry<K, V>> accum) {
if(node.left != null) visitInOrderLeaves(node.left, accum);
if(node.left == null && node.right == null) accum.add(node);
if(node.right != null) visitInOrderLeaves(node.right, accum);
}
public static void main(String[] args) {
TreeMap<String, Integer> map = new TreeMap<String, Integer>();
for(int i = 0; i < 10; i++)
map.put(Integer.toString(i), i);
System.out.println(getLeafEntries(map));
}
}
Tôi đoán rằng các nhà phát triển cốt lõi hoặc là hạnh phúc đặt các bài kiểm tra của họ trong các gói khác nhau (vì họ nên thử nghiệm giao diện công khai) hoặc có JVM xây dựng mà không có những hạn chế bảo mật. Xét cho cùng, Oracle là công ty viết mã JVM. –
có thể thử lấy nguồn (trà đá hoặc thứ gì đó giống như nó), lén tệp của bạn vào gói "đúng" và biên dịch toàn bộ? Tôi không biết nếu điều đó sẽ làm việc nhưng nó có thể là đủ để lừa hệ thống. đó là những gì tôi muốn thử. –
Bạn có thể sử dụng đường dẫn lớp khởi động. Tạo jar của riêng bạn có chứa mọi thứ từ rt.jar cộng với lớp này. Đây là một hack xấu xí, nhưng bạn nói rằng bạn muốn hack. –