byOpen เป็นไลบรารี dlfunctions เวอร์ชันปรับปรุงที่ข้ามข้อจำกัดของระบบมือถือ
โดยเปิดคุณสมบัติ
รองรับการโหลดและใช้อินเทอร์เฟซไลบรารีระบบ Android ในแอป (แม้ว่าจะยังไม่ได้โหลดแผนที่ก็ตาม)
บน Android 7 ขึ้นไป dlopen และ System.load ถูกจำกัดไม่ให้ถูกเรียก แม้ว่าในปัจจุบันจะมีไลบรารี่ เช่น Nougat_dlfunctions บนอินเทอร์เน็ตที่ข้ามข้อจำกัดในการโหลดโดยการค้นหาไลบรารี so จากแผนที่
อย่างไรก็ตาม วิธีการนี้ใช้ไม่ได้กับไลบรารี so ในแอปที่ยังไม่ได้โหลดลงในแผนที่
ByOpen ไม่เพียงแต่รองรับการโหลด dlopen ปลอมจากแผนที่เท่านั้น แต่ยังสามารถบังคับโหลดเพื่อให้ไลบรารีที่ยังไม่ได้โหลดลงในแผนที่ โดยข้ามข้อจำกัดของระบบ เพื่อให้ได้ dlopen ที่เป็นสากลมากขึ้น
หมายเหตุ: วิธีการใช้งานในปัจจุบันค่อนข้างเป็นสากลในทางทฤษฎี อย่างน้อยก็ทดสอบได้บน Android 10 ของฉัน แต่ยังไม่ได้รับการทดสอบโดยละเอียดทั้งหมด
โดยหลักการที่เกี่ยวข้องกับการเปิด
หลักการใช้งานเฉพาะนั้นค่อนข้างง่าย โดยส่วนใหญ่ใช้แนวคิดและการใช้วิธีการง่าย ๆ เพื่อข้ามข้อจำกัดของ Android P บนอินเทอร์เฟซที่ไม่ใช่ SDK
แม้ว่าวัตถุประสงค์หลักของบทความนี้คือการเลี่ยงผ่าน Hide API แต่วิธีการที่ใช้ในการปลอมตัวเป็นการเรียกระบบยังสามารถใช้กับ System.loadLibrary เพื่อทำให้ระบบคิดว่าระบบกำลังเรียก System.loadLibrary อยู่
สิ่งนี้จะข้ามข้อจำกัด classloader-namespace ของ Android N โหลดไลบรารีใด ๆ ในระบบ/ระบบ/lib ลงในแผนที่ จากนั้นใช้ dlopen ปลอมเพื่อ dlsym
โดยเปิดการใช้งานอินเทอร์เฟซ
ไลบรารีสแตติกและอินเทอร์เฟซที่เกี่ยวข้องอยู่ใน: dlopen.h
วิธีการใช้งานที่เกี่ยวข้องจะเหมือนกับ dlopen ดั้งเดิมทุกประการ
typedef by_char_t const* (*curl_version_t)();
by_pointer_t handle = by_dlopen("libcurl.so", BY_RTLD_LAZY);
ถ้า(จัดการ)
-
by_pointer_t addr = by_dlsym (จัดการ, "curl_version");
ถ้า (เพิ่ม)
-
curl_version_t curl_version = (curl_version_t)เพิ่ม;
by_print("curl_version: %s", curl_version());
-
by_dlclose(จัดการ);
-