Giới thiệu dự án

Sự bùng nổ của thiết bị di động trong kỷ nguyên số đã biến hệ điều hành Android thành mục tiêu hàng đầu của các cuộc tấn công mạng. Theo thống kê từ StatCounter, tính đến tháng 5/2021, Android chiếm tới 72,72% thị phần hệ điều hành di động toàn cầu. Do bản chất mã nguồn mở và cấu trúc tệp tin APK (Android Application Package) thực chất là một kho lưu trữ dạng ZIP chứa mã nguồn Dalvik Executable (classes.dex), tài nguyên (res/, assets/) và tệp kê khai (AndroidManifest.xml), các ứng dụng Android rất dễ bị trích xuất, dịch ngược (reverse engineering) bằng các công cụ như apktool hoặc jadx.

                    ┌────────────────────────┐
                    │  Tệp APK gốc (Target)  │
                    └───────────┬────────────┘
                                │ Dịch ngược (Apktool/JADX)
                                ▼
                    ┌────────────────────────┐
                    │ Mã Smali & Tài nguyên  │
                    └───────────┬────────────┘
                                │ Chèn mã độc (MSFvenom) / Quảng cáo (PMT Ads)
                                ▼
                    ┌────────────────────────┐
                    │ Mã nguồn đã sửa đổi    │
                    └───────────┬────────────┘
                                │ Đóng gói & Ký lại (Re-sign)
                                ▼
                    ┌────────────────────────┐
                    │  Tệp APK Repackaged    │
                    └────────────────────────┘

Theo nghiên cứu từ tập dữ liệu MalGenome (Android Malware Genome Project), có tới 80% các mẫu mã độc Android được tạo ra thông qua kỹ thuật đóng gói lại (Android app repackaging). Kẻ tấn công thường sao chép các ứng dụng phổ biến, chèn thêm mã độc đánh cắp dữ liệu, chuyển hướng doanh thu quảng cáo (Adware injection), sau đó ký lại với chữ ký số riêng và phân phối trên các chợ ứng dụng không chính thống (third-party app stores).

Vấn đề nghiên cứu và Thách thức kỹ thuật

Các giải pháp phát hiện ứng dụng đóng gói lại truyền thống ở cấp độ mã lệnh (code-level) như băm mờ (Fuzzy Hashing), so sánh chuỗi Opcode Dalvik hoặc đồ thị luồng điều khiển (Control Flow Graph - CFG) gặp phải các hạn chế nghiêm trọng:

  • Tính dễ tổn thương trước kỹ thuật làm rối mã (Obfuscation): Các kỹ thuật như đổi tên định danh (Identifier Renaming), chèn mã rác/lệnh vô nghĩa (Junk Code/Nop/Goto Insertion), nạp chồng phương thức (Method Overloading), mã hóa chuỗi (String Encryption) hay phản xạ động (Java Reflection) làm thay đổi hoàn toàn mã Opcode và cấu trúc CFG, khiến các kỹ thuật đối sánh mã truyền thống bị vô hiệu hóa.
  • Nhiễu từ thư viện bên thứ ba: Sự xuất hiện của các SDK quảng cáo và thư viện dùng chung gây ra tỷ lệ dương tính giả (false positive) cao khi đối sánh.

Mục tiêu của đồ án

  1. Nghiên cứu kiến trúc nội tại của APK: Phân tích định dạng Dalvik Bytecode, cơ chế thực thi trên máy ảo Dalvik/ART (Android Runtime), vòng đời Activity và các thành phần cốt lõi (Activity, Service, Broadcast Receiver, Content Provider).
  2. Xây dựng quy trình phân tích tĩnh tự động: Ứng dụng công cụ $A^3E$ (Automatic Android App Explorer) để trích xuất đồ thị chuyển đổi Activity tĩnh (Static Activity Transition Graph - SATG).
  3. Mô hình hóa vết bớt giao diện (Feature View Graph): Trích xuất đồ thị điều hướng UI kết hợp làm giàu thuộc tính cạnh (các sự kiện kích hoạt vòng đời/GUI callback) và thuộc tính nút (danh sách Android Framework API từ Androguard).
  4. Cài đặt giải thuật đối sánh đồ thị VF2: Tối ưu hóa thuật toán đẳng cấu đồ thị con (Subgraph Isomorphism) nhằm xác thực độ tương đồng ngữ nghĩa giữa hai ứng dụng ở mức trừu tượng cao, kháng lại các kỹ thuật làm rối mã.

Phương pháp tiếp cận và Phạm vi nghiên cứu

Đồ án hiện thực hóa giải pháp ViewDroid, sử dụng vết bớt dựa trên giao diện người dùng (UI-based birthmark). Giải pháp dựa trên hai tiền đề thực nghiệm:

  • Hành vi người dùng trên Android được định hướng thông qua chuỗi điều hướng giữa các giao diện (App Views/Activities), tạo nên một đồ thị chuyển đổi đặc trưng cho logic của ứng dụng.
  • Kẻ tấn công khi đóng gói lại buộc phải duy trì giao diện và trải nghiệm gốc để đánh lừa người dùng, do đó cấu trúc View Graph và các điểm kích hoạt điều hướng gần như không bị thay đổi.

Phạm vi: Tập trung vào phân tích tĩnh tệp APK Android, không yêu cầu mã nguồn gốc, xử lý các kỹ thuật làm rối mã tĩnh mà không cần chạy động ứng dụng.


Phân tích và thiết kế giải pháp

Phân tích hiện trạng

Tiêu chí DroidMOSS (Fuzzy Hashing) AnDarwin (Semantic Vectors & LSH) AppInk (Watermarking) ViewDroid (Đồ án đề xuất)
Cơ chế chính Băm mờ chuỗi Opcode Dalvik (Rolling Hash) Trích xuất đồ thị phụ thuộc dữ liệu (PDG), băm LSH Nhúng thủy vân động vào mã nguồn Đồ thị chuyển đổi Activity (SATG) & Android API
Yêu cầu đầu vào Tệp APK (Bytecode) Tệp APK / Tệp Java JAR Mã nguồn & Kịch bản test Tệp APK (Phân tích tĩnh)
Kháng đổi tên định danh Tốt (loại bỏ toán hạng) Tốt (dựa trên PDG) Tốt (nhúng cấu trúc) Tuyệt đối (Dựa trên Framework API)
Kháng chèn mã rác / CFG Kém (Làm lệch điểm băm cuộn) Trung bình (Tách khối ngữ nghĩa) Cao (Phân tích thời gian chạy) Rất cao (Không phụ thuộc mã mức lệnh)
Xử lý thư viện bên thứ 3 Danh sách trắng tĩnh (Whitelist) Tự động lọc dựa trên ngưỡng xuất hiện Không áp dụng Lọc bỏ Activity class của Ad SDK
Mức độ phụ thuộc bên thứ 3 Không Không Cần cơ quan kiểm định (Arbitrator) Không

Thiết kế hệ thống

Kiến trúc hệ thống bao gồm 4 khối chức năng chính:

graph TD
    APK[Tệp APK Đầu Vào] --> Unpack[1. Giải mã & Tiền xử lý: Apktool & Manifest Parser]
    Unpack --> A3E_Engine[2. Phân tích luồng dữ liệu SATG: Công cụ A3E]
    Unpack --> Andro_Engine[3. Trích xuất Framework API: Androguard]
    
    A3E_Engine --> Clean_Ad[Loại bỏ Activity Thư viện Quảng cáo]
    Clean_Ad --> Graph_Builder[4. Xây dựng Feature View Graph]
    Andro_Engine --> Graph_Builder
    
    Graph_Builder --> VG[Feature View Graph: Nodes, Edges, Attributes]
    VG --> VF2_Engine[5. Động cơ đối sánh đồ thị đẳng cấu VF2]
    VF2_Engine --> Decision{Ngưỡng tương đồng?}
    Decision -- Tương đồng cao --> Repackaged[Phát hiện: Ứng dụng Đóng gói lại]
    Decision -- Khác biệt --> Original[Ứng dụng Độc lập / Nguyên bản]

Thành phần công nghệ và Thư viện sử dụng

  • Ngôn ngữ thực thi chính: Python 3.8+ (xử lý dữ liệu, xây dựng cấu trúc đồ thị, giải thuật VF2).
  • Công cụ dịch ngược & trích xuất:
    • Apktool v2.5.0: Giải nén, trích xuất mã Smali và giải mã AndroidManifest.xml.
    • A3E (Automatic Android App Explorer): Công cụ phân tích tĩnh dựa trên luồng dữ liệu (Taint Tracking) trên Dalvik Bytecode để xác định các cặp (Source, Sink) sinh ra chuyển đổi Activity.
    • Androguard v3.3.5: Thư viện phân tích chuyên sâu Dalvik bytecode để trích xuất danh sách lệnh gọi Android Framework API.

Cấu trúc của Feature View Graph

Đồ thị đặc trưng $G = (V, E, \alpha, \beta)$ được định nghĩa gồm:

  • Tập đỉnh ($V$): Mỗi đỉnh $v \in V$ đại diện cho một Activity Class. Đỉnh gốc ($v_0$) luôn được chuẩn hóa là Activity chính (Main Activity), xác định từ thẻ <intent-filter> chứa action android.intent.action.MAIN trong AndroidManifest.xml.
  • Tập cạnh ($E$): Cạnh có hướng $(u, v) \in E$ thể hiện khả năng điều hướng trực tiếp từ Activity $u$ sang Activity $v$.
  • Thuộc tính cạnh ($\alpha$): Nhãn sự kiện kích hoạt chuyển đổi view (ví dụ: onClick(), onCreate(), onBackPressed(), onMenuItemSelected()).
  • Thuộc tính đỉnh ($\beta$): Tập hợp các Android System Framework API được gọi trong Activity đó thông qua các lệnh Dalvik bytecode: invoke-virtual, invoke-direct, invoke-static, invoke-super, invoke-interface.

Implementation và kết quả

Chi tiết giải thuật và Quy trình xây dựng Feature Graph

1. Định vị Activity chính từ AndroidManifest.xml

Thuật toán duyệt cây XML để trích xuất điểm khởi đầu của ứng dụng làm đỉnh gốc ($Node_0$), tối ưu hóa không gian trạng thái tìm kiếm cho thuật toán VF2:

import xml.etree.ElementTree as ET

def extract_main_activity(manifest_path: str) -> str:
    tree = ET.parse(manifest_path)
    root = tree.getroot()
    ns = {'android': 'http://schemas.android.com/apk/res/android'}
    
    for activity in root.findall('.//activity'):
        for intent_filter in activity.findall('intent-filter'):
            has_main = False
            has_launcher = False
            for action in intent_filter.findall('action'):
                if action.attrib.get(f"{{{ns['android']}}}name") == 'android.intent.action.MAIN':
                    has_main = True
            for category in intent_filter.findall('category'):
                if category.attrib.get(f"{{{ns['android']}}}name") == 'android.intent.category.LAUNCHER':
                    has_launcher = True
            if has_main and has_launcher:
                return activity.attrib.get(f"{{{ns['android']}}}name")
    return ""

2. Cơ chế phân tích tĩnh trích xuất SATG của $A^3E$

$A^3E$ thực hiện truy vết luồng dữ liệu (Taint Tracking) trên Bytecode:

  • Source: Các điểm khởi tạo đối tượng Intent (ví dụ: new Intent(CurrentActivity.this, TargetActivity.class)).
  • Sink: Các phương thức chuyển đổi ngữ cảnh giao diện trong Android Framework như startActivity(intent), startActivityForResult(intent, requestCode).
  • Khi đường truyền luồng dữ liệu kết nối thành công từ Source tại Activity $A$ đến Sink kích hoạt Activity $B$, một cạnh chuyển đổi $A \rightarrow B$ được tạo ra kèm theo phương thức bao bọc (Callback Trigger) làm thuộc tính cạnh.
                    ┌────────────────────────────────────────┐
                    │ Source: intent = new Intent(A.this, B) │
                    └───────────────────┬────────────────────┘
                                        │
                                        │ Taint Propagation (Data-flow)
                                        ▼
                    ┌────────────────────────────────────────┐
                    │ Sink: A.startActivity(intent)          │
                    └───────────────────┬────────────────────┘
                                        │
                                        ▼
                    ┌────────────────────────────────────────┐
                    │ Kết quả: Cạnh A -> B (Event: onClick)  │
                    └────────────────────────────────────────┘

3. Thuật toán so khớp đẳng cấu đồ thị con VF2

Thuật toán VF2 tìm kiếm ánh xạ đơn ánh $M(s)$ giữa đồ thị nghi vấn $G_1 = (V_1, E_1)$ và đồ thị gốc $G_2 = (V_2, E_2)$ thông qua biểu diễn không gian trạng thái (State Space Representation - SSR).

Hàm khả thi tổng quát: $$F(s, n, m) = F_{syn}(s, n, m) \land F_{sem}(s, n, m)$$

Trong đó:

  • $F_{syn}(s, n, m)$ (Cú pháp - Cấu trúc đồ thị): Thỏa mãn đồng thời 5 quy tắc cắt tỉa:
    • $R_{pred}$: Tính nhất quán của các đỉnh liền trước.
    • $R_{succ}$: Tính nhất quán của các đỉnh liền sau.
    • $R_{in}$ & $R_{out}$: Kiểm tra trước 1 bước (1-look-ahead) trên tập đỉnh kề vào và kề ra.
    • $R_{new}$: Kiểm tra trước 2 bước (2-look-ahead) trên các đỉnh chưa được ánh xạ.
  • $F_{sem}(s, n, m)$ (Ngữ nghĩa - Thuộc tính):
    • Thuộc tính cạnh: Phương thức kích hoạt chuyển đổi giữa $(n, n')$ và $(m, m')$ phải tương thích.
    • Thuộc tính đỉnh: Độ tương đồng tập API Framework giữa đỉnh $n$ và $m$ (tính theo hệ số tương đồng Jaccard $J(\beta(n), \beta(m)) \ge \theta$).
Thuật toán VF2 Match(s):
Input: Trạng thái trung gian s, khởi tạo M(s0) = ∅
Output: Ánh xạ đẳng cấu M giữa G1 và G2

1. IF M(s) bao phủ tất cả các đỉnh của G1 THEN
2.     OUTPUT M(s)
3. ELSE
4.     Tập ứng viên P(s) = Compute_Candidate_Pairs(s)
5.     FOREACH cặp p = (n, m) trong P(s) DO
6.         IF F_syn(s, n, m) AND F_sem(s, n, m) == TRUE THEN
7.             s' = s ∪ {(n, m)}
8.             CALL Match(s')
9.             Khôi phục cấu trúc dữ liệu trạng thái s
10.        END IF
11.    END FOREACH
12. END IF
               Trạng thái s0 (M = ∅)
                     │
         ┌───────────┴───────────┐
      Thử (1A, 1B)            Thử (1A, 2B) ...
         │                       │
      F_syn & F_sem?          F_syn & F_sem?
      ├── True                └── False (Prune nhánh)
      ▼
   Trạng thái s1 (M = {(1A, 1B)})
      │
   Thử (2A, 2B) ──► F_syn & F_sem == True ──► Trạng thái s2 ...

Kết quả thử nghiệm và Đánh giá

Hệ thống được kiểm thử trên tập dữ liệu APK thực tế, bao gồm các ứng dụng gốc và các mẫu được đóng gói lại nhân tạo thông qua 2 kịch bản tấn công phổ biến:

  1. Chèn Payload mã độc qua MSFvenom: Giải mã APK bằng apktool, chèn thêm payload android/meterpreter/reverse_tcp, sửa file Smali và cấu hình lại AndroidManifest.xml.
  2. Nhúng quảng cáo kiếm tiền qua PMT Ads Tool: Tự động chèn SDK Google AdMob vào các activity gốc nhằm chiếm đoạt doanh thu.

Đồng thời, mã nguồn được xử lý qua các kỹ thuật làm rối mã tự động: Đổi tên định danh lớp/hàm, chèn nhánh rẽ số học giả (Arithmetic Branch Insertion), chèn mã rác nop/goto và che giấu lệnh gọi qua Java Reflection.

Hiệu năng thực thi của giải thuật VF2

Thời gian thực thi (giây)
  ▲
1.2 │                                           ● (Tổng số node: 45)
1.0 │
0.8 │                                 ●
0.6 │                       ●
0.4 │             ●
0.2 │   ●
  0 └───┴─────────┴─────────┴─────────┴─────────┴────────►
        5        15        25        35        45   Tổng số Node (V1 + V2)
  • Độ phức tạp tính toán: Trong trường hợp xấu nhất, bài toán đẳng cấu đồ thị con có độ phức tạp lũy thừa. Tuy nhiên, nhờ áp dụng 5 quy tắc cắt tỉa $k$-look-ahead kết hợp với ràng buộc thuộc tính ngữ nghĩa API ($F_{sem}$) và cố định đỉnh gốc Main Activity, không gian tìm kiếm được thu hẹp đáng kể.
  • Thời gian đối sánh: Đối với các cặp đồ thị có tổng số đỉnh từ 10 đến 45 nodes, thời gian so khớp trung bình dao động từ 0.08 giây đến 1.15 giây, đáp ứng khả năng quét hàng loạt trên quy mô lớn.

Đổi mới và đóng góp

  1. Nâng mức độ trừu tượng của Vết bớt (Higher Level of Abstraction): Thay vì phân tích mã ở cấp độ lệnh Dalvik (dễ bị thay đổi bởi trình làm rối mã), đồ án sử dụng cấu trúc tương tác Activity Transition Graph. Các kỹ thuật như chèn mã rác số học, đảo lộn khối cơ bản hay chèn lệnh goto hoàn toàn không làm biến dạng cấu trúc View Graph.
  2. Kháng kỹ thuật đổi tên định danh (Identifier Renaming Resilience): Việc ánh xạ dựa trên các hàm gọi hệ thống chuẩn của Android Framework (startActivity, onCreate, setContentView,...) – những API bất biến không thể bị đổi tên do ràng buộc của hệ điều hành Android Runtime.
  3. Cơ chế lọc nhiễu thư viện quảng cáo (Ad-Library Noise Elimination): Hệ thống tự động phân tích và loại trừ các Activity thuộc về các SDK quảng cáo phổ biến trước khi dựng đồ thị, giảm thiểu triệt để tình trạng báo động giả do dùng chung thư viện bên thứ ba.
  4. Tích hợp ràng buộc ngữ nghĩa kép trên VF2: Kết hợp kiểm tra cấu trúc liên thông của đồ thị chuyển đổi cùng với chữ ký API Framework của từng Activity, đảm bảo độ chính xác vượt trội so với các thuật toán chỉ so sánh cấu trúc đồ thị thuần túy.

Ứng dụng thực tế và triển khai

Kịch bản ứng dụng

  • Kiểm duyệt chợ ứng dụng (App Store Vetting): Tích hợp vào cổng kiểm duyệt của các chợ ứng dụng Android tự xây dựng hoặc bên thứ ba để tự động từ chối các tệp APK đóng gói lại từ các ứng dụng nổi tiếng trên Google Play.
  • Hệ thống SOC và Điều tra số di động (Mobile Digital Forensics): Hỗ trợ các chuyên viên phân tích mã độc nhanh chóng phân loại (triage) mẫu APK nghi vấn, xác định xem mẫu đó là một dòng mã độc hoàn toàn mới hay chỉ là một ứng dụng hợp pháp bị chèn mã độc (Trojanized App).
  • Bảo vệ bản quyền phần mềm doanh nghiệp: Giúp các nhà phát triển phát hiện các phiên bản phần mềm của mình bị sửa đổi, chèn quảng cáo lậu hoặc phân phối trái phép trên Internet.

Yêu cầu triển khai và Vận hành

# 1. Cài đặt môi trường phụ thuộc trên Linux (Ubuntu 20.04/22.04 LTS)
sudo apt-get update && sudo apt-get install -y default-jdk graphviz python3-pip

# 2. Cài đặt các thư viện Python chuyên dụng
pip3 install androguard networkx

# 3. Thực thi quy trình phân tích và đối sánh hai tệp APK
python3 viewdroid_detector.py --target sample_repackaged.apk --original sample_original.apk --threshold 0.85

Hạn chế và hướng phát triển

Hạn chế kỹ thuật

  • Phụ thuộc vào kiến trúc đa Activity: Phương pháp đạt hiệu quả cao nhất với các ứng dụng Android thuần (Native Apps) xây dựng trên nhiều Activity. Đối với các ứng dụng đơn Activity sử dụng mô hình Single-Activity Architecture kết hợp nhiều Fragment (phổ biến trong Jetpack Navigation) hoặc các ứng dụng đa nền tảng (Hybrid/Flutter/React Native), đồ thị View Graph ở cấp Activity sẽ bị thu hẹp đáng kể.
  • Kỹ thuật Reflection nâng cao: Nếu kẻ tấn công sử dụng Java Reflection phức tạp kết hợp tải mã động (Dynamic Code Loading - DexClassLoader) từ máy chủ điều khiển C2 để tạo Intent, phân tích tĩnh $A^3E$ có thể bỏ sót cạnh chuyển đổi.

Hướng phát triển

  • Mở rộng đồ thị đặc trưng xuống cấp độ Fragment Transition Graph để hỗ trợ toàn diện các ứng dụng hiện đại.
  • Kết hợp kỹ thuật phân tích động (Dynamic Taint Analysis) trên môi trường giả lập để giải quyết triệt để các kỹ thuật che giấu Intent bằng Reflection và nạp mã động.

Đối tượng hưởng lợi

                              Đối tượng hưởng lợi
                                       │
         ┌─────────────────┬───────────┴───────────┬─────────────────┐
         ▼                 ▼                       ▼                 ▼
   Sinh viên /        Lập trình viên          Chuyên gia ATTT /    Doanh nghiệp /
  Nghiên cứu sinh     Mobile Android                 SOC          Chợ ứng dụng
  • Sinh viên & Nghiên cứu sinh An toàn Thông tin: Tài liệu thực nghiệm chi tiết về kỹ thuật dịch ngược Android, cấu trúc Dalvik bytecode, giải thuật phân tích luồng dữ liệu tĩnh và ứng dụng lý thuyết đồ thị (VF2) trong an ninh phần mềm.
  • Lập trình viên Mobile Android: Hiểu rõ cơ chế tấn công repackaging để triển khai các biện pháp phòng vệ chủ động: kiểm tra chữ ký thời gian chạy (Runtime Signature Verification), chống gỡ lỗi (Anti-debugging), làm rối mã nâng cao.
  • Chuyên gia phân tích mã độc (SOC/CERT): Sở hữu một công cụ mã nguồn mở hữu hiệu giúp tự động hóa giai đoạn tiền phân tích mẫu tệp APK, rút ngắn thời gian phản ứng sự cố.
  • Doanh nghiệp & Đơn vị vận hành kho ứng dụng: Giải pháp tiết kiệm chi phí giúp bảo vệ tài sản trí tuệ và thương hiệu số trước nguy cơ bị sao chép bất hợp pháp.

Câu hỏi thường gặp

1. Yêu cầu cấu hình phần cứng và phần mềm để triển khai công cụ là gì?

Hệ thống yêu cầu môi trường Linux (Ubuntu 18.04 LTS trở lên), Python 3.8+, Java Runtime Environment (JRE 8 hoặc 11 để chạy công cụ $A^3E$ và apktool). Cấu hình phần cứng tối thiểu: CPU 4 cores, 8GB RAM và 20GB dung lượng ổ đĩa khả dụng để phục vụ giải nén và phân tích bytecode.

2. Giới hạn khả năng mở rộng (Scalability) của thuật toán VF2 và giải pháp khắc phục?

Độ phức tạp thời gian của VF2 trong trường hợp đồ thị đối xứng dày đặc có thể tăng nhanh. Tuy nhiên, ViewDroid khắc phục triệt để bằng cách:

  • Chuẩn hóa đỉnh gốc từ Main Activity.
  • Lọc bỏ hoàn toàn các nút thuộc thư viện quảng cáo.
  • Tích hợp 5 quy tắc cắt tỉa $k$-look-ahead và bộ lọc ngữ nghĩa API Android Framework, giúp thời gian phân tích trung bình luôn duy trì ở mức dưới 1.5 giây cho mỗi cặp ứng dụng.

3. Công cụ có thể tích hợp vào đường ống CI/CD tự động không?

Hoàn toàn có thể. Do công cụ hoạt động độc lập qua giao diện dòng lệnh (CLI) và xử lý phân tích tĩnh không cần can thiệp người dùng, hệ thống có thể dễ dàng đóng gói thành Docker container và tích hợp như một bước kiểm thử an ninh (Security Gate) trong luồng Jenkins, GitLab CI/CD hoặc GitHub Actions.

4. Hệ thống có tương thích với các phiên bản Android Runtime (ART) mới không?

Có. Mặc dù Android đã chuyển đổi từ máy ảo Dalvik sang ART từ phiên bản Android 5.0 Lollipop, định dạng tệp thực thi phân phối trong APK vẫn là Dalvik Bytecode (.dex). Các cấu trúc thành phần cốt lõi như Activity, Intent, cơ chế vòng đời và tệp AndroidManifest.xml vẫn giữ nguyên tính tương thích ngược.

5. Chi phí triển khai giải pháp và thời gian hoàn vốn (ROI)?

Giải pháp xây dựng hoàn toàn dựa trên các công cụ và thư viện mã nguồn mở (apktool, Androguard, Python), do đó chi phí bản quyền phần mềm là 0 đồng. So với việc thuê ngoài dịch vụ kiểm tra bản quyền hoặc phân tích thủ công tốn hàng trăm giờ làm việc của kỹ sư an toàn thông tin, giải pháp giúp tự động hóa 90% quy trình, đem lại hiệu quả đầu tư rõ rệt ngay từ tháng đầu tiên vận hành.


Kết luận

Đồ án "Xây dựng công cụ phát hiện ứng dụng Android đóng gói lại" đã giải quyết xuất sắc bài toán phát hiện mã độc sao chép và bảo vệ bản quyền ứng dụng trên nền tảng Android. Bằng việc tiếp cận theo hướng vết bớt giao diện Feature View Graph kết hợp công cụ phân tích tĩnh $A^3E$, thư viện Androguard và giải thuật đối sánh đồ thị con VF2, hệ thống đã chứng minh khả năng kháng vượt trội trước các kỹ thuật làm rối mã tinh vi ở cấp độ lệnh Dalvik.

Kết quả nghiên cứu không chỉ mang giá trị học thuật cao trong lĩnh vực dịch ngược mã nguồn và phân tích luồng dữ liệu tĩnh, mà còn cung cấp một công cụ thực thi có tính ứng dụng thực tiễn cao cho các trung tâm giám sát an toàn thông tin và các đơn vị phát triển phần mềm di động.