Bối cảnh và vấn đề nghiên cứu

Khóa luận tốt nghiệp kỹ sư ngành An toàn thông tin của tác giả Thiều Thái An và Nguyễn Phan Bách (Trường Đại học Công nghệ Thông tin – Đại học Quốc gia TP. Hồ Chí Minh, 2021), do TS. Nguyễn Tấn Cầm hướng dẫn, tập trung giải quyết bài toán phát hiện các ứng dụng Android bị đóng gói lại (repackaged applications) trên thiết bị di động.

Về bối cảnh thực tiễn, số liệu thống kê từ Statcounter đến hết tháng 5 năm 2021 ghi nhận hệ điều hành Android chiếm 72,72% thị phần hệ điều hành di động toàn cầu. Do tính chất phổ biến và cấu trúc định dạng tệp gói ứng dụng Android (APK) thực chất là tệp nén dạng ZIP chứa mã bytecode (classes.dex), tài nguyên (res, assets) và tệp kê khai (AndroidManifest.xml), nền tảng này đối mặt với nguy cơ bị dịch ngược rất lớn. Các công cụ mã nguồn mở như apktool và jadx cho phép kẻ tấn công dễ dàng giải mã, chèn mã độc hại hoặc thay thế định danh quảng cáo rồi đóng gói và ký số lại dưới tên mới. Theo tập dữ liệu MalGenome, có đến 80% mẫu mã độc Android được phát hiện hình thành từ việc đóng gói lại các ứng dụng hợp pháp nhằm tận dụng danh tiếng của ứng dụng gốc để đẩy nhanh tốc độ phát tán qua các kho ứng dụng không chính thống.

Mục tiêu nghiên cứu của đề tài được xác định cụ thể:

  1. Nghiên cứu, thiết kế và xây dựng công cụ ứng dụng giải pháp ViewDroid nhằm phát hiện ứng dụng Android đóng gói lại.
  2. Cải thiện năng lực chống chịu của công cụ trước các kỹ thuật làm rối mã (obfuscation) phổ biến hiện nay.

Đối tượng nghiên cứu của khóa luận gồm:

  1. Thành phần và cấu trúc kỹ thuật của tệp APK và hệ thống ứng dụng Android.
  2. Các kỹ thuật và công cụ hỗ trợ phân tích tĩnh trên tệp APK.
  3. Mô hình ViewDroid cùng các phương pháp nhận diện ứng dụng đóng gói lại hiện hành (như DroidMOSS, AppInk, AnDarwin, DNADroid).
  4. Các kỹ thuật làm rối mã tự động trực tiếp trên tệp APK mà không yêu cầu mã nguồn gốc.

Phạm vi nghiên cứu bao gồm:

  1. Cơ chế và quy trình thực hiện đóng gói lại ứng dụng Android.
  2. Các giải pháp kỹ thuật dùng để phát hiện ứng dụng đóng gói lại.
  3. Các kỹ thuật làm rối mã mức tệp thực thi APK độc lập với mã nguồn gốc.

Cơ sở lý thuyết và phương pháp

Khóa luận xây dựng hệ thống phân tích dựa trên các nền tảng lý thuyết và công nghệ kỹ thuật chuyên sâu về cấu trúc hệ điều hành Android:

Cấu trúc ứng dụng và cơ chế thực thi Android

Tệp APK bao gồm các thư mục và tập tin cốt lõi: thư mục META-INF (chứa MANIFEST.MF, tệp chữ ký .SF và chứng chỉ nhà phát triển), lib (mã biên dịch phụ thuộc kiến trúc vi xử lý), res (tài nguyên giao diện), assets (tài nguyên tĩnh bổ sung), AndroidManifest.xml (khai báo quyền, thành phần và bộ lọc intent), classes.dex (mã Dalvik bytecode thực thi trên máy ảo Dalvik hoặc Android Runtime - ART) và resources.arsc (tài nguyên biên dịch sẵn). Trong tập chỉ lệnh Dalvik bytecode, khóa luận tập trung phân tích 5 quy ước gọi phương thức: invoke-virtual, invoke-super, invoke-direct, invoke-static và invoke-interface.

Bốn thành phần cấu tạo chính của ứng dụng được khảo sát gồm: Activity (giao diện tương tác người dùng), Service (tiến trình nền), Broadcast Receiver (bộ tiếp nhận thông điệp phát thanh) và Content Provider (quản lý và chia sẻ dữ liệu). Giao tiếp chuyển đổi giữa các Activity được điều hướng thông qua đối tượng Intent (tường minh hoặc không tường minh).

Các kỹ thuật làm rối mã đối kháng

Nghiên cứu tổng hợp các phương thức làm rối mã tác động trực tiếp lên tệp APK nhằm trốn tránh hệ thống kiểm tra:

  • Thay đổi tên định danh (Identifier Renaming): Đổi tên biến, lớp, phương thức thành các chuỗi ngẫu nhiên vô nghĩa.
  • Mã hóa (Encryption): Mã hóa thư viện gốc, tệp asset, chuỗi ký tự trong strings.xml và các chuỗi hằng (constant string).
  • Java Reflection: Khởi tạo và gọi phương thức động thông qua các API như Class.getMethod để ẩn luồng thực thi khỏi phân tích tĩnh.
  • Tác động cấu trúc tập lệnh trong tệp DEX: Chèn lệnh goto, chèn lệnh rác nop, sắp xếp lại khối cơ bản (Reorder), chèn nhánh điều kiện giả (Arithmetic Branch / Opaque Predicate) và nạp chồng phương thức (Methods Overload) kèm mã rác.

Phương pháp phân tích và mô hình lý thuyết

Đề tài áp dụng giải pháp vết bớt dựa trên giao diện người dùng (GUI-based birthmark) thông qua đồ thị chuyển đổi đặc trưng (feature view graph), kế thừa mô hình ViewDroid của tác giả Fangfang Zhang và cộng sự. Thay vì phân tích cú pháp mức mã lệnh (code-level opcodes) vốn dễ bị xáo trộn, giải pháp tiếp cận ở mức trừu tượng hóa cao hơn dựa trên hành vi điều hướng giao diện thực tế của người dùng.

Phương pháp nghiên cứu thực nghiệm kết hợp:

  1. Phân tích tĩnh (Static Analysis): Sử dụng công cụ Automatic Android App Explorer (A3E) để trích xuất đồ thị chuyển đổi Activity tĩnh (Static Activity Transition Graph - SATG) bằng kỹ thuật truy vết luồng dữ liệu (taint tracking). Nguồn (source) là các cấu trúc khởi tạo Intent (new Intent()) và đích (sink) là các hàm chuyển giao Activity (startActivity, startActivityForResult, startActivityIfNeeded).
  2. Trích xuất thuộc tính: Sử dụng công cụ apktool để dịch ngược tệp AndroidManifest.xml và công cụ Androguard để phân tích tĩnh các phương thức trong từng lớp Activity nhằm thu thập tập API Android framework được kích hoạt.
  3. Thuật toán so khớp đồ thị: Triển khai thuật toán kiểm tra đẳng cấu đồ thị con VF2 (Cordella và cộng sự) dựa trên biểu diễn không gian trạng thái (State Space Representation - SSR) với 5 quy tắc khả thi ($R_{pred}$, $R_{succ}$, $R_{in}$, $R_{out}$, $R_{new}$) để đối sánh đồ thị giữa ứng dụng nghi ngờ và ứng dụng gốc.

Thiết kế và triển khai công cụ

Hệ thống phát hiện được thiết kế và hiện thực hóa thông qua quy trình tự động hóa viết bằng ngôn ngữ Python 3, bao gồm ba giai đoạn xử lý chính:

[Tệp APK Đầu Vào]
[Giải mã bằng apktool]                   [Phân tích tĩnh bằng A3E]
[Trích xuất AndroidManifest.xml]         [Truy vết taint tracking: Intent]
[Xác định Main Activity]                 [Xuất XML: Cặp Activity & Callback]
              [Xây dựng View Graph (Python 3)]
[Lọc bỏ Activity thư viện quảng cáo]     [Đưa Main Activity làm Node 0]
              [Trích xuất thuộc tính bổ sung]
[Gán thuộc tính Cạnh (A3E Trigger)]      [Gán thuộc tính Node (Androguard API)]
               [Feature View Graph hoàn chỉnh]
              [So khớp đồ thị con bằng VF2]
         [Xác định ứng dụng gốc / đóng gói lại]

1. Xây dựng cấu trúc View Graph

  • Đầu vào: Tệp APK ứng dụng gốc và tệp APK cần kiểm tra.
  • Xác định điểm khởi đầu: Công cụ phân tích tệp AndroidManifest.xml (trích xuất thông qua apktool) để tìm kiếm thẻ <activity> chứa bộ lọc <intent-filter> có thuộc tính android.name là "android.MAIN" và danh mục "android.LAUNCHER". Activity này được thiết lập làm Main Activity và gán làm node số 0 trong đồ thị nhằm định vị trạng thái gốc, tối ưu hóa không gian tìm kiếm của thuật toán VF2.
  • Trích xuất cấu trúc quan hệ: Đọc dữ liệu đầu ra dạng XML từ công cụ A3E để thiết lập danh sách các node (tương ứng với các lớp Activity) và các cạnh định hướng (thể hiện quan hệ chuyển tiếp giữa Activity cha và Activity con).
  • Tiền xử lý loại trừ nhiễu: Loại bỏ các Activity thuộc về các bộ thư viện quảng cáo phổ biến khỏi đồ thị để tránh hiện tượng dương tính giả khi hai ứng dụng độc lập cùng tích hợp chung một mạng quảng cáo của bên thứ ba.

2. Xây dựng thuộc tính cho Feature View Graph

  • Thuộc tính cạnh (Edge Attributes): Trích xuất các sự kiện kích hoạt (trigger events) dẫn đến việc chuyển Activity. Các sự kiện này được công cụ A3E ghi nhận từ các phương thức lắng nghe tương tác người dùng (onClick, onBackPressed, onOptionsItemSelected, onCheckedChanged), các phương thức trong vòng đời Activity (onCreate, onStart, onResume, onPause, onStop), vòng đời dịch vụ/bộ thu (onBind, onStartCommand, onReceive) hoặc các phương thức tùy biến của nhà phát triển.
  • Thuộc tính nút (Node Attributes): Sử dụng công cụ Androguard để dịch ngược mã bytecode trong từng Activity, trích xuất toàn bộ danh mục các API thuộc Android framework được gọi trong phạm vi lớp đó để làm nhãn thuộc tính ngữ nghĩa ($F_{sem}$).

3. Động cơ so khớp bằng thuật toán VF2

Đồ thị đặc trưng của hai ứng dụng được đưa vào mô hình so khớp đẳng cấu đồ thị con VF2. Thuật toán tiến hành tìm kiếm theo chiều sâu (Depth-First Search) trên không gian trạng thái ánh xạ $M(s)$. Tính hợp lệ của mỗi cặp node ứng viên $(n, m)$ được kiểm tra đồng thời qua hàm khả thi cú pháp $F_{syn}$ (thỏa mãn 5 quy tắc cắt tỉa cây tìm kiếm $R_{pred}$, $R_{succ}$, $R_{in}$, $R_{out}$, $R_{new}$) và hàm khả thi ngữ nghĩa $F_{sem}$ (đối chiếu sự tương đồng của tập API tại node và sự kiện kích hoạt tại cạnh tương ứng).

Nội dung chính theo từng chương

Chương 1: Tổng quan về vấn đề nghiên cứu

Chương này phân tích tính cấp thiết của an toàn thông tin trên nền tảng Android trước thực trạng gia tăng của ứng dụng đóng gói lại phục vụ mục đích chèn mã độc hoặc trục lợi quảng cáo. Tác giả tổng hợp, so sánh 4 nghiên cứu tiêu biểu trong lĩnh vực:

Công trình Phương pháp cốt lõi Dấu trưng nhận diện (Birthmark) Hạn chế chính
DroidMOSS Băm mờ (Fuzzy Hashing) với cửa sổ trượt và điểm đặt lại số nguyên tố Chuỗi opcode Dalvik kết hợp ID tác giả (chứng chỉ số) Dễ bị vô hiệu hóa bởi các kỹ thuật làm rối mã ở cấp độ lệnh (code-level)
AppInk Nhúng thủy vân động (Dynamic Watermarking) qua ứng dụng kê khai Cấu trúc đồ thị thủy vân phân mảnh nhúng trong mã nguồn Yêu cầu quyền can thiệp mã nguồn gốc và cần bên thứ ba tin cậy lưu trữ khóa
AnDarwin Phân cụm LSH (Locality Sensitive Hashing) và MinHash, tính độ tương đồng Jaccard Vector ngữ nghĩa trích xuất từ đồ thị phụ thuộc dữ liệu (PDG) Tiêu tốn tài nguyên tính toán khi quy mô vector mở rộng; nhạy cảm với tái cấu trúc phương thức
DNADroid Phân cụm metadata bằng Solr, trích xuất PDG qua WALA, so khớp bằng VF2 Đồ thị phụ thuộc chương trình (PDG) theo từng phương thức Dễ bị đánh lừa nếu kẻ tấn công chia nhỏ phương thức để thay đổi tần suất nút

Từ những hạn chế trên, chương 1 xác lập hướng đi của đề tài là tái hiện mô hình ViewDroid, dịch chuyển trọng tâm nhận diện từ cấp độ mã lệnh sang cấp độ giao diện tương tác người dùng.

Chương 2: Cơ sở lý thuyết

Chương 2 cung cấp nền tảng kỹ thuật chi tiết về cấu trúc gói tệp APK, quy chế thực thi của máy ảo Dalvik và ART, các kiểu gọi hàm bytecode (invoke-virtual, invoke-super, invoke-direct, invoke-static, invoke-interface), cùng mô hình hoạt động của 4 thành phần ứng dụng Android. Chương này mô tả chi tiết cơ chế phân tích truy vết (taint tracking) của công cụ A3E trên mã bytecode nhằm giải quyết thách thức luồng điều khiển hướng sự kiện không có hàm main(). Đồng thời, chương 2 hệ thống hóa các kỹ thuật làm rối mã APK (đổi tên định danh, mã hóa, Java Reflection, chèn lệnh goto, nop, đảo nhánh, nhánh giả số học, nạp chồng phương thức) và trình bày toán học giải thuật VF2 cùng 5 quy tắc khả thi giúp cắt tỉa không gian tìm kiếm trạng thái.

Chương 3: Phương pháp và quy trình thực hiện

Chương 3 trình bày chi tiết quy trình xây dựng công cụ phát hiện dựa trên ba thành phần của Feature View Graph: cấu trúc đồ thị Activity, thuộc tính cạnh và thuộc tính node. Tác giả trình bày giải thuật trích xuất thông tin bằng Python 3 kết hợp tệp đầu ra của A3E và tệp AndroidManifest.xml thu được từ apktool. Quy trình nhận diện Main Activity để đặt làm node khởi đầu và cơ chế loại bỏ các Activity quảng cáo được mô tả từng bước kèm định dạng dữ liệu XML minh họa. Quá trình sử dụng Androguard để bóc tách các lệnh gọi API hệ thống nhằm tạo lập vector thuộc tính ngữ nghĩa cho từng node cũng được giải thích chi tiết.

Chương 4: Kết quả thử nghiệm và thảo luận

Chương 4 thiết lập môi trường thực nghiệm để kiểm chứng khả năng phát hiện của công cụ trên các mẫu ứng dụng thực tế. Dữ liệu thử nghiệm bao gồm các ứng dụng gốc và các biến thể bị đóng gói lại thông qua hai công cụ tấn công điển hình:

  1. MSFvenom: Dùng để chèn mã độc (payload backdoor/meterpreter) vào ứng dụng Android hợp pháp sau khi xử lý dịch ngược bằng apktool.
  2. PMT Ads: Dùng để tiêm các lớp hiển thị quảng cáo Google AdMob vào tệp APK nhằm chuyển hướng doanh thu.

Thực nghiệm đo lường thời gian thực thi trung bình của thuật toán VF2 theo tổng số lượng node của các cặp đồ thị được đối sánh, đồng thời đánh giá độ chính xác thông qua Bảng 4.1 về kết quả phát hiện ứng dụng đóng gói lại. Kết quả cho thấy việc gán nhãn thuộc tính ngữ nghĩa và cố định node gốc (Main Activity) giúp giảm đáng kể thời gian tìm kiếm của thuật toán VF2 và duy trì độ chính xác cao ngay cả khi ứng dụng bị chèn thêm các Activity ngoại lai.

Chương 5: Kết luận và hướng phát triển

Chương 5 đúc kết toàn bộ quá trình nghiên cứu, khẳng định việc xây dựng thành công công cụ phát hiện dựa trên giao diện người dùng có khả năng kháng các kỹ thuật làm rối mã mức mã lệnh. Tác giả đồng thời chỉ ra các hạn chế thực tế và đề xuất các hướng mở rộng cho các nghiên cứu tiếp theo.

Kết quả và đóng góp

Kết quả thực nghiệm

Khóa luận đã hiện thực hóa hoàn chỉnh công cụ phát hiện ứng dụng đóng gói lại trên nền tảng Android với các kết quả cụ thể:

  1. Nhận diện chính xác các ứng dụng bị đóng gói lại bằng công cụ MSFvenom (chèn thêm các lớp mã độc độc lập) và công cụ PMT Ads (chèn thêm các lớp hiển thị quảng cáo Google AdMob).
  2. Quy trình tiền xử lý xác định Main Activity làm node số 0 đã tối ưu hóa tốc độ khởi tạo không gian trạng thái trong thuật toán VF2, ngăn chặn bùng nổ tổ hợp khi số lượng Activity gia tăng.
  3. Thuật toán VF2 kết hợp kiểm tra tính khả thi cú pháp ($F_{syn}$) và ngữ nghĩa ($F_{sem}$ gồm API node và trigger cạnh) đã loại bỏ thành công các trường hợp so khớp nhầm giữa các ứng dụng độc lập có cấu trúc chuyển đổi giao diện tương đồng.

Giải pháp và khuyến nghị kỹ thuật

Từ kết quả nghiên cứu, tác giả đề xuất:

  1. Sử dụng vết bớt dựa trên hành vi giao diện người dùng làm lớp kiểm tra vòng ngoài (lọc thô) trước khi đưa các mẫu nghi ngờ vào các hệ thống phân tích động chuyên sâu tiêu tốn tài nguyên.
  2. Áp dụng kỹ thuật loại bỏ Activity quảng cáo dựa trên danh sách nhận diện lớp nhằm giảm thiểu sai số dương tính giả do việc dùng chung thư viện bên thứ ba gây ra.

Đóng góp học thuật và thực tiễn

So với các nghiên cứu trước đó, khóa luận đóng góp:

  • Tái hiện thành công giải pháp ViewDroid trong môi trường thực nghiệm với các công cụ phân tích hiện đại (A3E, apktool, Androguard, Python 3).
  • Khắc phục nhược điểm cốt tử của các phương pháp phân tích mức mã lệnh truyền thống (như DroidMOSS hay phương pháp so khớp chuỗi opcode): công cụ duy trì tính bền vững trước các kỹ thuật làm rối mã như đổi tên biến/lớp, mã hóa chuỗi, chèn lệnh rác (nop, goto), hoán đổi khối lệnh hay nạp chồng hàm, do các kỹ thuật này không làm thay đổi luồng điều hướng giao diện chính của ứng dụng.

Hạn chế và hướng nghiên cứu tiếp

Hạn chế được ghi nhận

Căn cứ vào phạm vi và nội dung phân tích trong văn bản:

  1. Sự phụ thuộc vào công cụ phân tích tĩnh A3E: Do A3E hoạt động dựa trên phân tích tĩnh để dựng đồ thị chuyển đổi, công cụ gặp khó khăn trong việc phát hiện các liên kết chuyển đổi Activity được kích hoạt thông qua Java Reflection phức tạp hoặc các lệnh gọi động không thể phân giải tại thời điểm biên dịch.
  2. Chi phí tính toán của thuật toán VF2: Mặc dù đã áp dụng 5 quy tắc khả thi và bổ sung thuộc tính ngữ nghĩa, độ phức tạp tính toán của bài toán so khớp đồ thị con vẫn tăng theo số lượng node của đồ thị, gây ảnh hưởng đến hiệu năng khi đối sánh các ứng dụng có quy mô lớn với hàng trăm Activity.
  3. Cơ chế loại bỏ thư viện quảng cáo mang tính chọn lọc thủ công: Việc loại bỏ lớp Activity quảng cáo chưa được tự động hóa hoàn toàn ở quy mô lớn như phương pháp phân cụm của AnDarwin.

Hướng phát triển

  1. Tối ưu hóa hiệu năng thuật toán so khớp đồ thị để mở rộng quy mô kiểm tra tự động trên các tập dữ liệu chợ ứng dụng lớn.
  2. Hoàn thiện cơ chế nhận diện và tự động bóc tách các thư viện bên thứ ba (thư viện quảng cáo, tiện ích mạng) để tránh ảnh hưởng đến tính đặc trưng của đồ thị.
  3. Nghiên cứu giải pháp kết hợp phân tích động để bổ sung các cạnh chuyển đổi giao diện bị che giấu bởi kỹ thuật Java Reflection hoặc nạp mã động (dynamic code loading).

Giá trị tham khảo

Khóa luận là tài liệu tham khảo có giá trị học thuật và ứng dụng thực tiễn cao cho:

  1. Sinh viên và học viên chuyên ngành An toàn thông tin, Kỹ thuật phần mềm và Mạng máy tính đang làm đồ án, khóa luận về phân tích mã độc di động (Android Malware Analysis) hoặc dịch ngược phần mềm (Reverse Engineering).
  2. Các nhà nghiên cứu và kỹ sư bảo mật cần tham khảo quy trình trích xuất đồ thị luồng điều khiển/giao diện người dùng và cơ chế kiểm tra tính bất biến của vết bớt phần mềm (software birthmarking).

Các phần nội dung có giá trị tham khảo kỹ thuật cao nhất bao gồm:

  • Mục phân tích quy chế gọi phương thức Dalvik bytecode (invoke-virtual, invoke-super, invoke-direct, invoke-static, invoke-interface) trong Chương 2.
  • Phương pháp luận áp dụng kỹ thuật truy vết taint tracking của công cụ A3E từ các điểm khởi tạo Intent đến các API chuyển đổi Activity trong Chương 2 và Chương 3.
  • Định thức toán học và nguyên lý hoạt động của 5 quy tắc khả thi trong thuật toán so khớp đồ thị VF2 tại Chương 2.

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

1. Tại sao nhóm tác giả lựa chọn vết bớt dựa trên giao diện người dùng (Feature View Graph) thay vì vết bớt mức mã lệnh (như opcode hay hàm băm)?

Các phương pháp dựa trên mã lệnh (như chuỗi Dalvik opcode trong DroidMOSS) rất dễ bị vô hiệu hóa bởi các kỹ thuật làm rối mã tự động như chèn lệnh rác (nop, goto), hoán đổi khối cơ bản hoặc nạp chồng hàm. Ngược lại, đồ thị giao diện người dùng mô tả ứng dụng ở mức trừu tượng hóa cao hơn. Những kẻ đóng gói lại ứng dụng buộc phải duy trì giao diện và luồng điều hướng tương tự ứng dụng gốc để đánh lừa người dùng, đồng thời các API chuyển đổi Activity của Android framework (startActivity, startActivityForResult) rất khó bị thay thế hay đổi tên, giúp Feature View Graph có khả năng chống rối mã vượt trội.

2. Công cụ A3E đóng vai trò gì trong quy trình xây dựng đồ thị của khóa luận?

A3E (Automatic Android App Explorer) là công cụ phân tích tĩnh được nhóm tác giả sử dụng để trích xuất đồ thị chuyển đổi Activity tĩnh (SATG). Do ứng dụng Android hoạt động hướng sự kiện và không có hàm main(), A3E sử dụng kỹ thuật truy vết luồng dữ liệu (taint tracking) từ các điểm source (khởi tạo new Intent()) truyền qua mã bytecode đến các điểm sink (gọi hàm startActivity, startActivityForResult, startActivityIfNeeded). Mỗi khi có đường truyền từ source đến sink, một cạnh chuyển đổi kèm phương thức kích hoạt tương ứng sẽ được ghi nhận vào tệp XML đầu ra.

3. Việc xác định và đưa Main Activity làm node đầu tiên (Node 0) có ý nghĩa gì đối với thuật toán VF2?

Trong thuật toán VF2, việc ánh xạ các node giữa hai đồ thị được thực hiện tuần tự qua không gian trạng thái. Bằng cách duyệt tệp AndroidManifest.xml để xác định chính xác Activity khởi chạy đầu tiên (android.MAIN và android.LAUNCHER) và gán làm node 0, thuật toán có điểm tựa cố định để bắt đầu quá trình ghép cặp. Điều này giúp định hướng việc mở rộng các nhánh tìm kiếm tiếp theo, giảm thiểu số lần phải quay lui (backtracking) và tăng tỷ lệ ánh xạ thành công các node tương ứng giữa hai ứng dụng.

4. Thuộc tính ngữ nghĩa của các node và cạnh trong đồ thị được xây dựng từ nguồn dữ liệu nào?

Thuộc tính cạnh được trích xuất từ kết quả phân tích của công cụ A3E, là tên các phương thức hoặc sự kiện kích hoạt chuyển đổi (ví dụ: các callback tương tác onClick, sự kiện vòng đời onCreate, onResume, onStartCommand...). Thuộc tính node được trích xuất bằng công cụ Androguard, là tập hợp danh mục các API thuộc Android framework được gọi bên trong từng lớp Activity tương ứng. Cả hai thuộc tính này cấu thành điều kiện kiểm tra ngữ nghĩa $F_{sem}$ trong giải thuật VF2.

5. Khóa luận sử dụng các công cụ nào để tạo dữ liệu ứng dụng đóng gói lại phục vụ thực nghiệm kiểm chứng?

Nhóm tác giả sử dụng hai công cụ tấn công thực tế gồm: MSFvenom (công cụ thuộc Metasploit Framework dùng để tiêm mã độc/backdoor vào ứng dụng gốc đã dịch ngược bằng apktool) và PMT Ads (công cụ dùng để chèn các lớp hiển thị quảng cáo Google AdMob vào ứng dụng). Cả hai nhóm ứng dụng sau khi can thiệp đều được đóng gói lại và ký số để làm tập mẫu kiểm thử cho công cụ phát hiện.

Kết luận

Khóa luận tốt nghiệp của tác giả Thiều Thái An và Nguyễn Phan Bách đã nghiên cứu và hiện thực hóa thành công công cụ phát hiện ứng dụng Android đóng gói lại dựa trên mô hình vết bớt giao diện người dùng Feature View Graph và giải thuật đẳng cấu đồ thị con VF2. Bằng cách kết hợp phân tích truy vết luồng dữ liệu qua công cụ A3E, trích xuất đặc trưng API qua Androguard và loại trừ Activity quảng cáo gây nhiễu, hệ thống đã chứng minh được tính hiệu quả và độ bền vững trước các kỹ thuật làm rối mã phổ biến. Đây là công trình nghiên cứu hoàn chỉnh, mang tính thực tiễn cao, đóng góp một giải pháp kỹ thuật hữu ích cho công tác kiểm định an toàn và phân tích mã độc trên thiết bị di động.