เอลฟ์-ทัมม์
การตอบสนองนี้รวมถึงสองสิ่งที่ใช้ในการทุ่มตลาดและแก้ไขแขน ELF32/ELF64 จากหน่วยความจำ
- ทิ้ง
- รันบน Android สามารถทิ้ง ELF จากหน่วยความจำกระบวนการและแก้ไขสร้างส่วนหัวส่วนใหม่เพื่อการวิเคราะห์ IDA ที่ดีขึ้น
- โซฟิกซ์
- รันบนพีซีสามารถแก้ไขไฟล์ ELF ที่ทิ้งจากหน่วยความจำและสร้างส่วนหัวส่วนใหม่เพื่อการวิเคราะห์ IDA ที่ดีขึ้น
เป้าหมายหลักคือการสร้างส่วนหัวส่วนของเอลฟ์โดยหน่วยความจำที่ทิ้งไปใช้ในการทำลายไฟล์เช่น UPX หรืออะไรบางอย่างเช่น 360 libjiagu.so
สร้าง
ทิ้ง
- เส้นทางเอาท์พุทคือแอป/libs/armeabi-v7a/dump
โซฟิกซ์
- บน Linux/Mac ตรวจสอบให้แน่ใจว่ามีการติดตั้ง Clang/GCC เพียงแค่เรียกใช้/build-fix.sh
- บน Windows สามารถสร้างขึ้นได้ใน MingW แต่ไม่ได้ทดสอบ
Howtouse
- โซฟิกซ์
- params <src_so_path> <base_addr_in_memory_in_hex> <out_so_path>
- <src_so_path> ไฟล์ ELF ที่ทิ้งจากหน่วยความจำ (คุณสามารถใช้ DD หรือ IDA Debugger ที่ทิ้งไฟล์ ELF จากกระบวนการ Android)
- <base_addr_in_memory_in_hex> ฐานหน่วยความจำสำหรับไฟล์ ELF ที่ถูกทิ้งจากหน่วยความจำหากคุณไม่รู้ผ่าน 0 ก็โอเคก็โอเค
- <out_so_path> ไฟล์เอาต์พุต
- ตัวอย่าง
- ./sofix dumped.so 0x6f5a4000 b.so
- ทิ้ง
- สิ่งนี้ทำงานบนโทรศัพท์ Android
- ตรวจสอบให้แน่ใจว่าโทรศัพท์ของคุณสามารถเข้าถึงรูทได้
- กดลงบน/data/local/tmp และ grant +x เช่นนี้
- ADB Push App/libs/armeabi-v7a/dump/data/local/tmp/&& adb shell chmod 777/data/local/tmp/dump
- ใช้ ADB Shell เพื่อเข้าสู่โทรศัพท์ของคุณและเปลี่ยนเป็น Root User โดยคำสั่ง SU
- Params <ase_hex> <den_hex> [is-stop-process-before-before-dump] [is-fix-so-after-dump]
- รหัสกระบวนการที่คุณต้องการทิ้ง
- <sase_hex> ที่อยู่เริ่มต้นของเอลฟ์ที่คุณต้องการทิ้งในหน่วยความจำกระบวนการคุณสามารถรับสิ่งนี้ได้ด้วย
cat /proc/<pid>/maps - <DEND_HEX> ที่อยู่สุดท้ายของ ELF ที่คุณต้องการทิ้งในหน่วยความจำกระบวนการคุณสามารถรับสิ่งนี้ได้ด้วย
cat /proc/<pid>/maps - เส้นทางเอาต์พุต ELF คงที่ในโทรศัพท์ของคุณ
- [is-stop-process-before-dump] 0/1 ควรส่ง sigal ไปยังกระบวนการก่อนที่จะทำงานทิ้งมีประโยชน์ในแอพต่อต้านการทิ้ง หากไม่มีการต่อต้านการทิ้งในกระบวนการเป้าหมายของคุณ 0 ก็โอเค
- [is-fix-so-after-dump] 0/1 ควรทำงานใหม่และการสร้างส่วนหัวส่วนหัวใหม่หากคุณผ่านมันจะพยายามแก้ไข ELF หลังจากถ่ายโอนข้อมูล
- ตัวอย่าง
- หากคุณต้องการทิ้ง libc.so และ/proc/[pid]/แผนที่เช่นนี้
40105000-4014c000 r-xp 00000000 b3:19 717 /system/lib/libc.so
4014c000-4014d000 ---p 00000000 00:00 0
4014d000-4014f000 r--p 00047000 b3:19 717 /system/lib/libc.so
4014f000-40152000 rw-p 00049000 b3:19 717 /system/lib/libc.so
40152000-40160000 rw-p 00000000 00:00 0
- ./dump 1148 0x40105000 0x40160000 ./out.so 0 1
- การถ่ายโอนข้อมูลถึง 40160000 ไม่ใช่ 40152000 เป็นเพราะหน่วยความจำ ELF .BSS หากมีอยู่ควรถ่ายโอนข้อมูลด้วยกระบวนการแก้ไขขึ้นอยู่กับมัน
เปรียบเทียบระหว่าง NO-FIX และ ELF คงที่

