สำคัญ
โปรเจ็กต์นี้ถูกเก็บถาวรและไม่มีการดูแลรักษาอีกต่อไป
คำถามที่พบบ่อยบางข้อมีคำตอบอยู่ในคำถามที่พบบ่อยและการแก้ไขปัญหา
เครื่องมือสร้างความสับสนกล่องดำสำหรับแอป Android
Obfuscapk เป็นเครื่องมือ Python แบบโมดูลาร์สำหรับสร้างความสับสนให้กับแอป Android โดยไม่จำเป็นต้องใช้ซอร์สโค้ด เนื่องจาก apktool
ใช้เพื่อถอดรหัสไฟล์ APK ดั้งเดิมและสร้างแอปพลิเคชันใหม่ หลังจากใช้เทคนิคการทำให้สับสนบางอย่างกับโค้ด smali
ทรัพยากร และไฟล์ Manifest ที่ถอดรหัสแล้ว แอปที่สร้างความสับสนยังคงฟังก์ชันการทำงานเหมือนกับแอปดั้งเดิม แต่ความแตกต่างที่ซ่อนอยู่ในบางครั้งทำให้แอปพลิเคชันใหม่แตกต่างจากแอปดั้งเดิมมาก (เช่น ซอฟต์แวร์ป้องกันไวรัสที่ใช้ลายเซ็น)
Obfuscapk กำลังเพิ่มการรองรับ Android App Bundle (ไฟล์ aab) โดยใช้ BundleDecompiler (ดู #121) ในการใช้คุณสมบัติใหม่นี้ ให้ดาวน์โหลด BundleDecompiler เวอร์ชันล่าสุดจากที่นี่ บันทึกเป็น BundleDecompiler.jar
ในไดเร็กทอรีที่รวมอยู่ใน PATH
(เช่นใน Ubuntu, /usr/local/bin
หรือ /usr/bin
) และสร้าง แน่ใจว่ามีการตั้งค่าสถานะปฏิบัติการ
สำคัญ
BundleDecompiler ยังใช้งานไม่ได้บน Windows ดังนั้น Obfuscapk จึงไม่รองรับ App Bundle Obfuscapk บนแพลตฟอร์ม Windows นอกจากนี้ การสนับสนุน App Bundle ยังอยู่ระหว่างการพัฒนา ดังนั้นหากคุณประสบปัญหาใดๆ หรือต้องการช่วยเราปรับปรุง โปรดดูการมีส่วนร่วม
รายละเอียดเพิ่มเติมเกี่ยวกับ Obfuscapk สามารถพบได้ในบทความ "Obfuscapk: เครื่องมือสร้างความสับสน แบบโอเพ่นซอร์ส สำหรับแอป Android" คุณสามารถอ้างอิงบทความได้ดังนี้:
@article { aonzo2020obfuscapk ,
title = " Obfuscapk: An open-source black-box obfuscation tool for Android apps " ,
journal = " SoftwareX " ,
volume = " 11 " ,
pages = " 100403 " ,
year = " 2020 " ,
issn = " 2352-7110 " ,
doi = " https://doi.org/10.1016/j.softx.2020.100403 " ,
url = " https://www.sciencedirect.com/science/article/pii/S2352711019302791 " ,
author = " Simone Aonzo and Gabriel Claudiu Georgiu and Luca Verderame and Alessio Merlo " ,
keywords = " Android, Obfuscation, Program analysis "
}
Obfuscapk ได้รับการออกแบบให้เป็นโมดูลาร์และขยายได้ง่าย ดังนั้นจึงสร้างขึ้นโดยใช้ระบบปลั๊กอิน ด้วยเหตุนี้ obfuscator ทุกตัวจึงเป็นปลั๊กอินที่สืบทอดมาจากคลาสฐานนามธรรมและจำเป็นต้องใช้เมธอด obfuscate
เมื่อเครื่องมือเริ่มประมวลผลไฟล์แอปพลิเคชัน Android ใหม่ เครื่องมือจะสร้างอ็อบเจ็กต์ obfuscation เพื่อจัดเก็บข้อมูลที่จำเป็นทั้งหมด (เช่น ตำแหน่งของโค้ด smali
ที่คอมไพล์แล้ว) และสถานะภายในของการดำเนินการ (เช่น รายการของ obfuscators ที่ใช้แล้ว) . จากนั้นวัตถุ obfuscation จะถูกส่งผ่านเป็นพารามิเตอร์ไปยังวิธี obfuscate
ไปยังปลั๊กอิน/obfuscators ที่ใช้งานอยู่ทั้งหมด (ตามลำดับ) ที่จะประมวลผลและแก้ไข รายการและลำดับของปลั๊กอินที่ใช้งานอยู่จะถูกระบุผ่านตัวเลือกบรรทัดคำสั่ง
เครื่องมือนี้สามารถขยายได้อย่างง่ายดายด้วย obfuscators ใหม่: เพียงเพิ่มซอร์สโค้ดที่ใช้เทคนิค obfuscation และข้อมูลเมตาของปลั๊กอิน (ไฟล์ <obfuscator-name>.obfuscator
) ในไดเร็กทอรี src/obfuscapk/obfuscators
ก็เพียงพอแล้ว (ใช้ obfuscator แบบธรรมดาที่มีอยู่ เช่น Nop
เป็นตัวอย่างเริ่มต้น) เครื่องมือจะตรวจจับปลั๊กอินใหม่โดยอัตโนมัติ ดังนั้นจึงไม่จำเป็นต้องกำหนดค่าเพิ่มเติม (ปลั๊กอินใหม่จะถือว่าเหมือนกับปลั๊กอินอื่นๆ ที่มาพร้อมกับเครื่องมือ)
มีสองวิธีในการรับสำเนาการทำงานของ Obfuscapk บนคอมพิวเตอร์ของคุณเอง: โดยใช้ Docker หรือโดยใช้ซอร์สโค้ดโดยตรงในสภาพแวดล้อม Python 3
ในทั้งสองกรณี สิ่งแรกที่ต้องทำคือรับสำเนาของพื้นที่เก็บข้อมูลนี้ในเครื่อง ดังนั้นให้เปิดเทอร์มินัลในไดเร็กทอรีที่คุณต้องการบันทึกโปรเจ็กต์และโคลนพื้นที่เก็บข้อมูล:
$ git clone https://github.com/ClaudiuGeorgiu/Obfuscapk.git
นี่เป็นวิธีที่แนะนำในการติดตั้ง Obfuscapk เนื่องจากข้อกำหนดเพียงอย่างเดียวคือต้องติดตั้ง Docker เวอร์ชันล่าสุด:
$ docker --version
Docker version 20.10.21, build baeda1f
อิมเมจ Obfuscapk Docker อย่างเป็นทางการมีอยู่ใน Docker Hub (สร้างโดยอัตโนมัติจากที่เก็บนี้):
$ # Download the Docker image.
$ docker pull claudiugeorgiu/obfuscapk
$ # Give it a shorter name.
$ docker tag claudiugeorgiu/obfuscapk obfuscapk
หากคุณดาวน์โหลดอิมเมจอย่างเป็นทางการจาก Docker Hub คุณก็พร้อมที่จะใช้เครื่องมือแล้ว ดังนั้นโปรดตรวจสอบคำแนะนำการใช้งาน ไม่เช่นนั้นให้ดำเนินการคำสั่งต่อไปนี้ในไดเร็กทอรี Obfuscapk/src/
ที่สร้างไว้ก่อนหน้านี้ (โฟลเดอร์ที่มี Dockerfile
) เพื่อสร้าง ภาพนักเทียบท่า:
$ # Make sure to run the command in Obfuscapk/src/ directory.
$ # It will take some time to download and install all the dependencies.
$ docker build -t obfuscapk .
เมื่ออิมเมจ Docker พร้อม ให้ทำการทดสอบอย่างรวดเร็วเพื่อตรวจสอบว่าทุกอย่างถูกต้องได้รับการติดตั้ง:
$ docker run --rm -it obfuscapk --help
usage: python3 -m obfuscapk.cli [-h] -o OBFUSCATOR [-w DIR] [-d OUT_APK_OR_AAB]
...
ขณะนี้ Obfuscapk พร้อมใช้งานแล้ว โปรดดูคำแนะนำการใช้งานสำหรับข้อมูลเพิ่มเติม
ตรวจสอบให้แน่ใจว่าได้ติดตั้ง apktool
, apksigner
และ zipalign
เวอร์ชันล่าสุดและพร้อมใช้งานจากบรรทัดคำสั่ง:
$ apktool
Apktool v2.9.0 - a tool for reengineering Android apk files
...
$ apksigner
Usage: apksigner < command > [options]
apksigner --version
apksigner --help
...
$ zipalign
Zip alignment utility
Copyright (C) 2009 The Android Open Source Project
...
เพื่อรองรับการรวมกลุ่มแอปที่สับสน คุณต้องมี BundleDecompiler ด้วย ดังนั้นให้ดาวน์โหลดเวอร์ชันล่าสุดที่มีจากที่นี่ บันทึกเป็น BundleDecompiler.jar
ในไดเร็กทอรีที่รวมอยู่ใน PATH
(เช่นใน Ubuntu, /usr/local/bin
หรือ /usr/bin
) และ ตรวจสอบให้แน่ใจว่ามีการตั้งค่าสถานะปฏิบัติการ
หากต้องการใช้ BundleDecompiler และ apktool
คุณต้องมี Java เวอร์ชันล่าสุดด้วย zipalign
และ apksigner
รวมอยู่ใน Android SDK ตำแหน่งของไฟล์เรียกทำงานสามารถระบุได้ผ่านตัวแปรสภาพแวดล้อมต่อไปนี้: APKTOOL_PATH
, BUNDLE_DECOMPILER_PATH
, APKSIGNER_PATH
และ ZIPALIGN_PATH
(เช่น ใน Ubuntu ให้รัน export APKTOOL_PATH=/custom/location/apktool
ก่อนที่จะรัน Obfuscapk ในเทอร์มินัลเดียวกัน)
นอกเหนือจากเครื่องมือข้างต้น ข้อกำหนดเพียงอย่างเดียวของโปรเจ็กต์นี้คือการติดตั้ง Python 3
ที่ใช้งานได้ (อย่างน้อย 3.7
) (พร้อมกับตัวจัดการแพ็คเกจ pip
)
รันคำสั่งต่อไปนี้ในไดเร็กทอรีหลักของโปรเจ็กต์ ( Obfuscapk/
) เพื่อติดตั้งการขึ้นต่อกันที่จำเป็น:
$ # Make sure to run the commands in Obfuscapk/ directory.
$ # The usage of a virtual environment is highly recommended.
$ python3 -m venv venv
$ source venv/bin/activate
$ # Install Obfuscapk's requirements.
$ python3 -m pip install -r src/requirements.txt
หลังจากติดตั้งข้อกำหนดแล้ว ให้ทำการทดสอบอย่างรวดเร็วเพื่อตรวจสอบว่าทุกอย่างทำงานได้อย่างถูกต้อง:
$ cd src/
$ # The following command has to be executed always from Obfuscapk/src/ directory
$ # or by adding Obfuscapk/src/ directory to PYTHONPATH environment variable.
$ python3 -m obfuscapk.cli --help
usage: python3 -m obfuscapk.cli [-h] -o OBFUSCATOR [-w DIR] [-d OUT_APK_OR_AAB]
...
ขณะนี้ Obfuscapk พร้อมใช้งานแล้ว โปรดดูคำแนะนำการใช้งานสำหรับข้อมูลเพิ่มเติม
จากนี้ไป Obfuscapk จะถือเป็นไฟล์ปฏิบัติการที่พร้อมใช้งานในชื่อ obfuscapk
ดังนั้น คุณจะต้องปรับเปลี่ยนคำสั่งตามวิธีที่คุณติดตั้งเครื่องมือ:
อิมเมจนักเทียบท่า : ไดเร็กทอรีในเครื่องที่มีแอปพลิเคชันเพื่อสร้างความสับสนจะต้องติดตั้งกับ /workdir
ในคอนเทนเนอร์ (เช่นไดเร็กทอรีปัจจุบัน "${PWD}"
) ดังนั้นคำสั่ง:
$ obfuscapk [params...]
กลายเป็น:
$ docker run --rm -it -u $( id -u ) : $( id -g ) -v " ${PWD} " : " /workdir " obfuscapk [params...]
จากแหล่งที่มา : ทุกคำสั่งจะต้องดำเนินการจากไดเร็กทอรี Obfuscapk/src/
(หรือโดยการเพิ่มไดเร็กทอรี Obfuscapk/src/
ไปยังตัวแปรสภาพแวดล้อม PYTHONPATH
) และคำสั่ง:
$ obfuscapk [params...]
กลายเป็น:
$ python3 -m obfuscapk.cli [params...]
เริ่มต้นด้วยการดูข้อความช่วยเหลือ:
$ obfuscapk --help
obfuscapk [-h] -o OBFUSCATOR [-w DIR] [-d OUT_APK_OR_AAB] [-i] [-p] [-k VT_API_KEY]
[--keystore-file KEYSTORE_FILE] [--keystore-password KEYSTORE_PASSWORD]
[--key-alias KEY_ALIAS] [--key-password KEY_PASSWORD] [--use-aapt2]
< APK_OR_BUNDLE_FILE >
มีพารามิเตอร์บังคับ 2 รายการ ได้แก่ <APK_OR_BUNDLE_FILE>
เส้นทาง (แบบสัมพัทธ์หรือแบบสัมบูรณ์) ไปยังไฟล์ APK หรือ App Bundle ที่ต้องการสร้างความสับสน และรายการที่มีชื่อของเทคนิคการสร้างความสับสนที่จะใช้ (ระบุด้วยตัวเลือก -o
ที่สามารถใช้ได้หลายรายการ ครั้ง เช่น -o Rebuild -o NewAlignment -o NewSignature
) อาร์กิวเมนต์ทางเลือกอื่นๆ มีดังนี้:
-w DIR
ใช้เพื่อตั้งค่าไดเร็กทอรีการทำงานที่จะบันทึกไฟล์ระดับกลาง (สร้างโดย apktool
) หากไม่ได้ระบุ ไดเร็กทอรีชื่อ obfuscation_working_dir
จะถูกสร้างขึ้นในไดเร็กทอรีเดียวกันกับแอปพลิเคชันอินพุต สิ่งนี้มีประโยชน์สำหรับวัตถุประสงค์ในการแก้ไขข้อบกพร่อง แต่ถ้าไม่จำเป็น ก็สามารถตั้งค่าเป็นไดเร็กทอรีชั่วคราวได้ (เช่น -w /tmp/
)
-d OUT_APK_OR_AAB
ใช้เพื่อกำหนดเส้นทางของไฟล์ปลายทาง: ไฟล์ APK ที่สร้างโดยกระบวนการทำให้สับสน (เช่น -d /home/user/Desktop/obfuscated.apk
หรือ -d /home/user/Desktop/obfuscated.aab
). หากไม่ได้ระบุไว้ ไฟล์ที่สร้างความสับสนขั้นสุดท้ายจะถูกบันทึกไว้ในไดเร็กทอรีการทำงาน หมายเหตุ: ไฟล์ที่มีอยู่จะถูกเขียนทับโดยไม่มีการเตือนใดๆ
-i
คือแฟล็กสำหรับการละเว้นไลบรารีบุคคลที่สามที่รู้จักในระหว่างกระบวนการทำให้สับสน เพื่อใช้ทรัพยากรน้อยลง เพื่อเพิ่มประสิทธิภาพและลดความเสี่ยงของข้อผิดพลาด รายชื่อไลบรารีที่จะเพิกเฉยได้รับการดัดแปลงมาจากโปรเจ็กต์ LiteRadar
-p
คือแฟล็กสำหรับแสดงแถบความคืบหน้าระหว่างการดำเนินการสร้างความสับสน เมื่อใช้เครื่องมือในการดำเนินการแบบแบตช์/บิวด์อัตโนมัติ จะสะดวกที่จะปิดใช้งานแถบความคืบหน้า ไม่เช่นนั้นควรเปิดใช้งานแฟล็กนี้เพื่อดูความคืบหน้าของการสร้างความสับสน
-k VT_API_KEY
จำเป็นเมื่อใช้ Obfuscator VirusTotal
เท่านั้น เพื่อตั้งค่าคีย์ API ที่จะใช้เมื่อสื่อสารกับ Virus Total
--keystore-file KEYSTORE_FILE
, --keystore-password KEYSTORE_PASSWORD
, --key-alias KEY_ALIAS
และ --key-password KEY_PASSWORD
สามารถใช้เพื่อระบุที่เก็บคีย์แบบกำหนดเอง (จำเป็นสำหรับการลงนาม APK) หากใช้ --keystore-file
จะต้องระบุ --keystore-password
และ --key-alias
ด้วยเช่นกัน ในขณะที่ --key-password
จำเป็นเฉพาะในกรณีที่คีย์ที่เลือกมีรหัสผ่านที่แตกต่างจากรหัสผ่านที่เก็บคีย์ ตามค่าดีฟอลต์ (เมื่อไม่ได้ระบุ --keystore-file
) ที่เก็บคีย์ที่มาพร้อมกับ Obfuscapk จะถูกใช้สำหรับการดำเนินการลงนาม
--ignore-packages-file IGNORE_PACKAGES_FILE
เป็นเส้นทางไปยังไฟล์ซึ่งรวมถึงชื่อแพ็คเกจที่จะถูกละเว้น คลาสทั้งหมดภายในแพ็คเกจเหล่านั้นจะไม่ทำให้สับสนเมื่อใช้ตัวเลือกนี้ ไฟล์ควรมีชื่อแพ็กเกจหนึ่งชื่อต่อบรรทัดตามที่แสดงในตัวอย่างด้านล่าง:
com.mycompany.dontobfuscate
com.mycompany.ignore
...
--use-aapt2
เป็นค่าสถานะสำหรับการใช้ตัวเลือก aapt2 เมื่อสร้างแอปขึ้นมาใหม่ด้วย apktool
ลองพิจารณาตัวอย่างการทำงานง่ายๆ เพื่อดูว่า Obfuscapk ทำงานอย่างไร:
$ # original.apk is a valid Android apk file.
$ obfuscapk -o RandomManifest -o Rebuild -o NewAlignment -o NewSignature original.apk
เมื่อรันคำสั่งข้างต้น นี่คือสิ่งที่เกิดขึ้นเบื้องหลัง:
เนื่องจากไม่ได้ระบุไดเร็กทอรีการทำงาน ไดเร็กทอรีการทำงานใหม่ ( obfuscation_working_dir
) จะถูกสร้างขึ้นในตำแหน่งเดียวกันกับ original.apk
(ซึ่งจะมีประโยชน์ในการตรวจสอบไฟล์ smali
/manifest/resources ในกรณีที่มีข้อผิดพลาด)
มีการตรวจสอบบางอย่างเพื่อให้แน่ใจว่าไฟล์/ปฏิบัติการที่จำเป็นทั้งหมดพร้อมใช้งานและพร้อมใช้งาน
กระบวนการสร้างความสับสนที่แท้จริงเริ่มต้นขึ้น: ตัวสร้างความสับสนที่ระบุจะถูกดำเนินการ (ตามลำดับ) ทีละตัวจนกระทั่งไม่มีตัวสร้างความสับสนเหลืออยู่ หรือจนกว่าจะพบข้อผิดพลาด
เมื่อรัน obfuscator ตัวแรก original.apk
จะถูกถอดรหัสด้วย apktool
และผลลัพธ์จะถูกเก็บไว้ในไดเร็กทอรีการทำงาน
เนื่องจาก obfuscator ตัวแรกคือ RandomManifest
รายการในรายการ Android ที่คอมไพล์แล้วจะถูกจัดเรียงใหม่แบบสุ่ม (โดยไม่ทำลายโครงสร้าง xml
)
Rebuild
obfuscator ขึ้นมาใหม่เพียงสร้างแอปพลิเคชันใหม่ (ขณะนี้มีรายการที่ถูกแก้ไข) โดยใช้ apktool
และเนื่องจากไม่ได้ระบุไฟล์เอาต์พุต ไฟล์ apk ที่ได้จะถูกบันทึกในไดเร็กทอรีการทำงานที่สร้างขึ้นก่อนหน้านี้
NewAlignment
obfuscator ใช้เครื่องมือ zipalign
เพื่อจัดแนวไฟล์ APK ที่ได้
NewSignature
obfuscator ลงนามไฟล์ apk ที่สร้างขึ้นใหม่ด้วยใบรับรองที่กำหนดเองที่มีอยู่ในที่เก็บคีย์ที่มาพร้อมกับ Obfuscapk (แม้ว่าสามารถระบุที่เก็บคีย์อื่นได้ด้วยพารามิเตอร์ --keystore-file
)
เมื่อ obfuscators ทั้งหมดถูกดำเนินการโดยไม่มีข้อผิดพลาด ไฟล์ apk ที่ทำให้สับสนที่ได้นั้นสามารถพบได้ใน obfuscation_working_dir/original_obfuscated.apk
ลงนาม จัดแนว และพร้อมที่จะติดตั้งลงในอุปกรณ์/โปรแกรมจำลอง
ดังที่เห็นในตัวอย่างก่อนหน้านี้ Rebuild
, NewAlignment
และ NewSignature
obfuscators จำเป็นเสมอในการดำเนินการ obfuscation ให้เสร็จสมบูรณ์ เพื่อสร้าง apk สุดท้ายที่ทำให้สับสน เทคนิคเหล่านี้ไม่ใช่เทคนิคการทำให้งงงวยจริงๆ แต่จำเป็นในกระบวนการสร้าง ดังนั้นจึงถูกรวมไว้ในรายการของเครื่องมือสร้างความสับสนเพื่อให้สถาปัตยกรรมโดยรวมเป็นแบบโมดูลาร์
ไม่ทำงานอย่างที่คาดไว้ใช่ไหม? ดูคำถามที่พบบ่อยและการแก้ไขปัญหา
Obfuscapk ที่รวมอยู่ใน Obfuscapk สามารถแบ่งออกเป็นประเภทต่าง ๆ ขึ้นอยู่กับการดำเนินการที่พวกเขาทำ:
Trivial : ตามชื่อเลย หมวดหมู่นี้ประกอบด้วยการดำเนินการง่ายๆ (ซึ่งไม่ได้ปรับเปลี่ยนแอปพลิเคชันดั้งเดิมมากนัก) เช่น การลงนามไฟล์ APK ด้วยลายเซ็นใหม่
Rename : การดำเนินการที่เปลี่ยนชื่อของตัวระบุที่ใช้ (คลาส ฟิลด์ เมธอด)
การเข้ารหัส : บรรจุโค้ด/ทรัพยากรที่เข้ารหัสไว้และถอดรหัสระหว่างการทำงานของแอป เมื่อ Obfuscapk เริ่มต้นขึ้น ระบบจะสร้างคีย์ลับแบบสุ่มโดยอัตโนมัติ (ยาว 32 อักขระ โดยใช้ตัวอักษรและตัวเลข ASCII) ที่จะใช้สำหรับการเข้ารหัส
รหัส : การดำเนินการทั้งหมดที่เกี่ยวข้องกับการแก้ไขซอร์สโค้ดที่ถอดรหัสแล้ว
ทรัพยากร : การดำเนินการกับไฟล์ทรัพยากร (เช่น การแก้ไขรายการ)
อื่น
ปัจจุบัน obfuscators ที่มาพร้อมกับ Obfuscapk มีการนำเสนอสั้นๆ ด้านล่างนี้ (ตามลำดับตัวอักษร) โปรดดูซอร์สโค้ดของโครงการสำหรับรายละเอียดเพิ่มเติม
เคล็ดลับ
ไม่ใช่ว่าตัวสร้างความสับสนด้านล่างทั้งหมดจะสอดคล้องกับเทคนิคการสร้างความสับสนจริง (เช่น Rebuild
, NewAlignment
, NewSignature
และ VirusTotal
) แต่พวกมันถูกนำไปใช้เป็น obfuscators เพื่อรักษาสถาปัตยกรรมแบบโมดูลาร์และง่ายต่อการขยายด้วยฟังก์ชันการทำงานใหม่
ใช้การสะท้อนกลับเพื่อเรียกใช้ API ที่เป็นอันตรายของ Android Framework หากต้องการทราบว่าเมธอดเป็นของ Android Framework หรือไม่ Obfuscapk หมายถึงการแมปที่ค้นพบโดย Backes และคณะ
- ซอร์สโค้ด AdvancedReflection
ใส่รหัสขยะ ในกรณีนี้ รหัสขยะจะประกอบด้วยการคำนวณทางคณิตศาสตร์และคำสั่งสาขา ขึ้นอยู่กับผลลัพธ์ของการคำนวณเหล่านี้ ซึ่งสร้างขึ้นในลักษณะที่สาขาไม่เคยถูกนำไปใช้
- ซอร์สโค้ด ArithmeticBranch
เข้ารหัสไฟล์สินทรัพย์
- ซอร์สโค้ด AssetEncryption
เทคนิคนี้จะปรับเปลี่ยนกราฟโฟลว์ควบคุมโดยไม่กระทบต่อซีแมนทิกส์ของโค้ด โดยเพิ่มวิธีการใหม่ที่เรียกใช้วิธีดั้งเดิม ตัวอย่างเช่น การเรียกใช้เมธอด m1 จะถูกแทนที่ด้วยเมธอด wrapper ใหม่ m2 ซึ่งเมื่อเรียกใช้แล้วจะเรียกเมธอดดั้งเดิม m1
- ซอร์สโค้ด CallIndirection
เปลี่ยนชื่อแพ็คเกจและเปลี่ยนชื่อคลาส (แม้ในไฟล์รายการ)
- ซอร์สโค้ด ClassRename
เข้ารหัสสตริงคงที่ในโค้ด
- ซอร์สโค้ด ConstStringEncryption
ลบข้อมูลการดีบัก
- ซอร์สโค้ด DebugRemoval
เปลี่ยนชื่อฟิลด์
- ซอร์สโค้ด FieldRename
เมื่อกำหนดวิธีการ มันจะแทรกคำสั่ง
goto
ที่ชี้ไปที่จุดสิ้นสุดของวิธีการ และgoto
อีกอันชี้ไปที่คำสั่งหลังจากgoto
แรก ; มันปรับเปลี่ยนกราฟโฟลว์ควบคุมโดยการเพิ่มโหนดใหม่สองโหนด
- ไปที่ซอร์สโค้ด
เข้ารหัส libs ดั้งเดิม
- ซอร์สโค้ด LibEncryption
มันใช้ประโยชน์จากคุณสมบัติการโอเวอร์โหลดของภาษาการเขียนโปรแกรม Java เพื่อกำหนดชื่อเดียวกันให้กับวิธีการที่แตกต่างกัน แต่ใช้อาร์กิวเมนต์ต่างกัน ด้วยวิธีการที่มีอยู่แล้ว เทคนิคนี้จะสร้างวิธีการ void ใหม่ที่มีชื่อและอาร์กิวเมนต์เดียวกัน แต่ยังเพิ่มอาร์กิวเมนต์แบบสุ่มใหม่ด้วย จากนั้นเนื้อความของวิธีการใหม่จะเต็มไปด้วยคำสั่งทางคณิตศาสตร์แบบสุ่ม
- ซอร์สโค้ด MethodOverload
เปลี่ยนชื่อวิธีการ
- วิธีการเปลี่ยนชื่อซอร์สโค้ด
ปรับแนวแอปพลิเคชันใหม่
- ซอร์สโค้ด NewAlignment
ลงนามใบสมัครอีกครั้งด้วยลายเซ็นที่กำหนดเองใหม่
- รหัสที่มาใหม่ลายเซ็น
ใส่รหัสขยะ Nop ย่อมาจาก no-operation เป็นคำสั่งเฉพาะที่ไม่ทำอะไรเลย เทคนิคนี้เพียงแค่แทรกคำสั่ง
nop
แบบสุ่มเข้าไปในทุกวิธีการใช้งาน
- ไม่มีซอร์สโค้ด
สุ่มเรียงลำดับรายการใหม่ในไฟล์ Manifest
- ซอร์สโค้ด RandomManifest
สร้างแอปพลิเคชันใหม่
- สร้างซอร์สโค้ดใหม่
เทคนิคนี้จะวิเคราะห์โค้ดที่มีอยู่โดยมองหาการเรียกใช้เมธอดของแอป โดยไม่สนใจการเรียกไปยังเฟรมเวิร์ก Android (ดู
AdvancedReflection
) หากพบคำสั่งที่มีการเรียกใช้เมธอดที่เหมาะสม (เช่น ไม่มีเมธอดคอนสตรัคเตอร์ การเปิดเผยต่อสาธารณะ มีการลงทะเบียนฟรีเพียงพอ ฯลฯ) การร้องขอดังกล่าวจะถูกเปลี่ยนเส้นทางไปยังวิธีการแบบกำหนดเองที่จะเรียกใช้เมธอดดั้งเดิมโดยใช้ Reflection API
- ซอร์สโค้ดการสะท้อน
เทคนิคนี้ประกอบด้วยการเปลี่ยนลำดับของบล็อกพื้นฐานในโค้ด เมื่อพบคำสั่งสาขา เงื่อนไขจะกลับด้าน (เช่น สาขาหากต่ำกว่า จะกลายเป็น สาขาหากมากกว่าหรือเท่ากับ ) และบล็อกพื้นฐานของเป้าหมายจะถูกเรียงลำดับใหม่ตามนั้น นอกจากนี้ยังสุ่มจัดเรียงโค้ดที่ละเมิดคำสั่ง
goto
อีกด้วย
- เรียงลำดับซอร์สโค้ดใหม่
เข้ารหัสสตริงในทรัพยากร (เฉพาะที่เรียกว่าโค้ดภายใน)
- ซอร์สโค้ด ResStringEncryption
ส่งต้นฉบับและแอปพลิเคชันที่สร้างความสับสนไปที่ Virus Total คุณต้องระบุคีย์ VT API (ดูตัวเลือก
-k
)
- ซอร์สโค้ด VirusTotal
คุณสามารถใช้รหัสนี้ได้ฟรีภายใต้ใบอนุญาต MIT
ซอฟต์แวร์นี้ได้รับการพัฒนาเพื่อวัตถุประสงค์ในการวิจัยที่ Computer Security Lab (CSecLab) ซึ่งจัดขึ้นที่ DIBRIS มหาวิทยาลัยเจนัว