Vì thế, hàng triệu ứng dụng đã được pháttriển cho Android, mang đến nhiều tiện ích và trải nghiệm phong phú cho người dùng.1.3.Giới thiệu đề tàiĐề tài "Nghiên cứu các thư mục, tập tin dữ
NỘI DUNG ĐỀ TÀI
Một số loại tệp thực thi được trên Android
● Vị trí:/data/app/[package_name]/
● Thực thi: khi người dùng cài đặt và khởi chạy ứng dụng, hệ thống Android sẽ thực thi mã bytecode từ tệp APK.
2.1.2 Tệp nhị phân (Binary executables)
● Được biên dịch cho kiến trúc CPU cụ thể (ARM, ARM64, x86, x86_64). Thường là các thư viện hoặc công cụ dòng lệnh.
● Vị trí:/data/app/[package_name]/lib/
● Thực thi:từ dòng lệnh hoặc từ mã ứng dụng sử dụng các API hệ thống.
● Viết bằng ngôn ngữ kịch bản như Shell, Python hoặc Lua Cần có trình thông dịch tương ứng đã được cài đặt trên hệ thống để thực thi.
● Thực thi:từ dòng lệnh hoặc từ ứng dụng khác sử dụng API thích hợp.
● Chứa mã bytecode được biên dịch từ mã nguồn Java Được thiết kế để chạy trên Dalvik Virtual Machine hoặc Android Runtime.
○ Trong tệp APK: /data/app/[package_name]/base.apk
○ Trong Dalvik Cache: /data/dalvik-cache
● Thực thi:khi chạy ứng dụng.
● Là các thư viện nhị phân được viết bằng C hoặc C++.
● Vị trí:/data/app/[package_name]/lib/
● Thực thi:không được thực thi trực tiếp bởi người dùng mà được gọi từ mã Java hoặc Kotlin trong ứng dụng thông qua JNI (Java Native Interface).
2.1.6 Tệp Opaque Binary Blob (OBB)
● Chứa dữ liệu bổ sung mà ứng dụng có thể sử dụng Thường chứa tài nguyên lớn như đồ hoạ, âm thanh, video,
● Vị trí:/sdcard/Android/obb/[package_name]/
● Thực thi: không trực tiếp mà thông qua ứng dụng trong quá trình chạy Khi cần dữ liệu từ tệp OBB, ứng dụng truy cập tệp này thông qua API của hệ thốngAndroid.
Cách thức và vị trí tệp được cài đặt trên Android
APK, viết tắt của “Android Package Kit” (Gói ứng dụng Android), là định dạng tập tin dùng để phân phối và cài đặt ứng dụng trên hệ điều hành Android, tương tự như file exe trên Windows hoặc dmg trên MacOS.[3]
Tệp APK bản chất là một loại tệp nén theo định dạng ZIP Bên trong tệp apk bao gồm cấu trúc thư mục và các tệp cần thiết để ứng dụng Android hoạt động Nó bao gồm mã nguồn đã được biên dịch, tài nguyên, thư viện, và các tệp kê khai.
2.2.2 Cách thức cài đặt tệp APK trên Android
● Tệp APK của ứng dụng có thể tải từ các nguồn như trình duyệt web, Google Play Store,…
● Khi thực hiện cài đặt, hệ thống Android kiểm tra chữ ký số của tệp APK trong thư mục META-INF để đảm bảo nó không bị thay đổi từ khi được phát hành bởi nhà phát triển.
● Vì tệp APK là một loại tệp nén, nó cần được giải nén để truy cập các tệp và thư mục bên trong.
● Phân tích tệp AndroidManifest.xml để lấy thông tin về tên ứng dụng, phiên bản, quyền truy cập cần thiết, và các thành phần chính của ứng dụng (như Activity, Service, BroadcastReceiver).
● Một thư mục ứng dụng tương ứng được tạo ra trong /data/app/ để lưu trữ các
● Tệp classes.dex, chứa bytecode của ứng dụng, được cài đặt và chuyển đến thư mục phù hợp Bytecode này sẽ được Android Runtime (ART) hoặc Dalvik Virtual Machine (DVM) thực thi.
● Các thư viện nhị phân được cài đặt trong thư mục lib/ (SO files) được sao chép vào thư mục /data/app-lib/.
● Các tài nguyên không biên dịch trong thư mục res/ và các tài nguyên trong thư mục assets/ được sao chép vào thư mục ứng dụng.
● Hệ điều hành Android đăng ký ứng dụng mới vào hệ thống quản lý ứng dụng của Android Các quyền truy cập được yêu cầu bởi ứng dụng trong AndroidManifest.xml sẽ được hệ thống xem xét và có thể yêu cầu người dùng chấp nhận.
Hình 2.2.2 Yêu cầu người dùng chấp nhận cấp quyền truy cập cho ứng dụng
● Một biểu tượng dùng để truy cập ứng dụng được thêm vào màn hình chính và danh sách ứng dụng.
● Khi người dùng chạy ứng dụng, hệ thống sẽ khởi chạy Activity chính của ứng dụng, bắt đầu từ phương thức onCreate() của Activity đó.
2.2.3 Vị trí cài đặt tệp APK trên Android
Sau khi được cài đặt, tệp APK sẽ được lưu vào trong bộ nhớ phụ của máy, trong thư mục dữ liệu của hệ điều hành Android, sdcard, cụ thể là: /data/app/, /data//data/ và /sdcard/Android/data
Hình 2.2.3 Thư mục /sdcard/Android/data
Cấu trúc thư mục tệp APK của Android
2.3.1 Tổng quan tệp APK trên Android
Hình 2.3.1 Tổng quan tệp APK trên Android
2.3.2 Chi tiết các thư mục và tệp trong tệp APK Android
Tệp manifest được sử dụng để khai báo các thành phần của ứng dụng như activities (hoạt động), services (dịch vụ), broadcast receivers, và content providers. Ngoài ra, bên trong tệp manifest bao gồm một tệp XML chứa các thông tin cần thiết về ứng dụng, như quyền truy cập, phiên bản, thông tin ứng dụng, và các thiết lập khác.
2.3.2.1.2 Các quyền truy cập được định nghĩa trong tệp manifest
● Quyền truy cập internet ()
● Quyền truy cập camera ()
● Quyền truy cập vị trí ()
● Quyền truy cập đọc danh bạ ()
● Quyền truy cập đọc video ()
● Quyền truy cập đọc hình ảnh ()
● Một số quyền truy cập khác: bluetooth, vị trí, gọi điện thoại,
Tên thư mục Định nghĩa thư mục assets
● Lưu trữ các tài nguyên tĩnh như hình ảnh, âm thanh, video, phông chữ, và các tệp tin văn bản khác.
● Tài nguyên được tích hợp trực tiếp vào gói ứng dụng, được ứng dụng sử dụng và không thay đổi trong quá trình chạy. lib (library)
Chứa các modules thư viện, các đoạn mã lệnh, mã nguồn, và tài nguyên được sử dụng để tối ưu hóa và chia sẻ giữa các ứng dụng khác nhau. strings
● Chứa tài nguyên chuỗi, được sử dụng để lưu trữ các chuỗi văn bản như tiêu đề, thông báo, và các phần giao diện người dùng.
● Các chuỗi này có thể được gọi và hiển thị trong mã nguồn ứng dụng. fonts Chứa các phông chữ được sử dụng cho ứng dụng. dsp (digital signal processing)
Lưu trữ các tệp liên quan đến xử lý tín hiệu số. app_modules Chứa các modules được sử dụng trong ứng dụng. com
Không có vai trò cụ thể trong ứng dụng Android, nhưng thường xuất hiện trong tên gói của ứng dụng để định danh duy nhất cho ứng dụng trên thiết bị và trong cửa hàng Google Play. json Lưu trữ và quản lý các tệp JSON liên quan đến dữ liệu ứng dụng.
META-INF Chứa các tệp liên quan đến chữ ký số, thông tin phiên bản, và khai báo ứng dụng, đóng góp vào việc đóng gói và phân phối ứng dụng. org
Không có vai trò cụ thể trong ứng dụng Android, nhưng thường xuất hiện trong tên gói của ứng dụng để định danh duy nhất cho ứng dụng trên thiết bị và trong Cửa hàng Google Play. res Chứa các tài nguyên không phải mã nguồn, bao gồm hình ảnh, layout, màu sắc, và chuỗi giao diện người dùng. java Chứa các đoạn mã nguồn, thư viện của Java, được sử dụng để thiết kế, lập trình ứng dụng. cpp Chứa các đoạn mã nguồn, thư viện của C/C++, được sử dụng để thiết kế, lập trình ứng dụng.
Hình 2.3.2.2.2.6 Thư mục app_modules
Hình 2.3.2.2.2.9 Thư mục META-INF
2.4 Các thư mục và tệp được tạo sau khi cài đặt tệp APK
2.4.1 Thư mục ứng dụng cài đặt
● Đường dẫn:/data/app/[folder_name_of_app]/
○ base.apk: Tệp APK chính của ứng dụng.
○ lib/: Thư mục chứa các thư viện nhị phân (.so files) cho các kiến trúc CPU khác nhau.
○ oat/: Thư mục chứa các tệp OAT (Optimized Android Runtime Executable) và các tệp liên quan đến trình biên dịch ART (Android Runtime).
○ base.dm: Tệp này được dùng để lưu trữ định nghĩa của cơ sở dữ liệu ứng dụng, bao gồm cấu trúc bảng, định nghĩa trường, và mối quan hệ giữa các bảng.
2.4.2 Thư mục dữ liệu ứng dụng
● Đường dẫn:/data/data/[folder _name_of_app]/
○ shared_prefs/: Thư mục chứa các tệp Shared Preferences, lưu trữ cấu hình và cài đặt của ứng dụng dưới dạng XML.
○ files/: Thư mục chứa các tệp mà ứng dụng lưu trữ, thường là các tệp do người dùng tạo ra hoặc tải về.
○ cache/: Thư mục chứa các tệp tạm thời mà ứng dụng sử dụng.
○ databases/: Thư mục chứa các cơ sở dữ liệu SQLite mà ứng dụng sử dụng.
○ code_cache/: Thư mục chứa các tệp bytecode được biên dịch JIT (Just-In-Time) để cải thiện hiệu suất ứng dụng.
○ lib/: Thư mục chứa các thư viện nhị phân (.so files) được ứng dụng sử dụng.
Hình 2.4.2 Thư mục dữ liệu ứng dụng
2.4.3 Thư mục OBB (Opaque Binary Blob)
Thư mục OBB có thể có hoặc không, tùy thuộc vào ứng dụng.
● Đường dẫn:/sdcard/Android/obb/[package_ name]/
● Nội dung: Các tệp obb chứa dữ liệu bổ sung của ứng dụng, như tài nguyên đa phương tiện, dữ liệu kích thước lớn,…
● Nội dung:Các tệp dex được tối ưu hoá và lưu trữ tại đây.
Hình 2.4.4 Thư mục Dalvik Cache
2.4.5 Thư mục ART (Android Runtime)
● Đường dẫn: /data/dalvik-cache/arm/ hoặc /data/dalvik-cache/arm64 (tuỳ thuộc vào kiến trúc CPU).
● Nội dung: Các tệp oat, vdex và art được tạo ra bởi ART để tối ưu hoá việc thực thi mã bytecode.
2.4.6 Thư mục liên quan người dùng
● Đường dẫn:/data/system/users/
● Nội dung:Thông tin về người dùng và các quyền hạn người dùng.
Hình 2.4.6 Thư mục liên quan người dùng
● Nội dung: Chứa các tệp tạm thời của ứng dụng Mục đích của thư mục là tăng tốc độ hoạt động của ứng dụng và giảm số lượng dữ liệu cần xử lý.
● Nội dung: Dùng để sao lưu dữ liệu, khôi phục thiết bị về tình trạng trước đó,thực hiện bảo trì.
Quyền truy cập của ứng dụng trên Android
Hình 2.5 Xem quyền truy cập của ứng dụng trên Android
Khi một ứng dụng cần có một quyền truy cập nào đó, nó phải yêu cầu sự cho phép từ người dùng Yêu cầu xuất hiện khi ứng dụng được cài đặt hoặc khi ứng dụng lần đầu tiên cần sử dụng quyền đó Người dùng có thể quản lý (xem và thay đổi) các quyền truy cập của ứng dụng thông qua cài đặt của thiết bị.
Các quyền truy cập của ứng dụng trên Android có thể bao gồm:
● Cảm biến cơ thể: Truy cập thông tin cảm biến về những dấu hiệu sức khỏe.
● Bộ nhớ: Truy cập vào các tệp, thư mục trong hệ thống trong một mức độ nhất định.
● Nhật ký cuộc gọi: Đọc và ghi nhật ký cuộc gọi của người dùng.
● Máy ảnh: Chụp ảnh và quay video bằng máy ảnh điện thoại của người dùng.
● Danh bạ: Truy cập vào danh bạ của người dùng.
● Tệp: Truy cập tất cả tệp trên thiết bị.
● Vị trí: Truy cập thông tin vị trí của thiết bị.
● Micrô: Trao quyền dùng micrô điện thoại và ghi âm theo mong muốn của người dùng.
● Nhạc và âm thanh: Truy cập tệp nhạc và các tệp âm thanh khác trên thiết bị.
● Thiết bị ở gần: Tìm, kết nối, và xác định vị trí tương đối của các thiết bị ở gần.
● Thông báo: Gửi thông báo cho người dùng.
● Điện thoại: Gọi và quản lý cuộc gọi.
● Ảnh và video: Truy cập vào ảnh và video trên thiết bị.
● Hoạt động thể chất: Truy cập vào hoạt động thể chất (như đi bộ, đạp xe, lái xe, số bước và nhiều hoạt động khác).
● Một số quyền truy cập khác: bluetooth, bộ nhớ ngoài,…
Phân tích sâu về ứng dụng Facebook
Facebook là một trong những mạng xã hội được sử dụng nhiều nhất trên thế giới Theo một báo cáo năm 2022, Facebook có gần 3 tỷ người dùng thường xuyên,[4] trong đó hơn 2,1 tỷ người dùng trên 18 tuổi Một báo cáo khác được xuất bản năm
2021 cho biết 98,5% người dùng trên 18 tuổi truy cập Facebook bằng ứng dụng trên điện thoại di động, và 81,8% trong số đó sử dụng điện thoại Android.[5] Điều này tương đương với khoảng 1,7 tỷ người dùng thường xuyên sử dụng điện thoại Android để truy cập Facebook.
Mục đích của việc phân tích sâu về ứng dụng Facebook là để tìm hiểu cách Facebook quản lý và sử dụng dữ liệu qua việc lưu trữ chúng trong các thư mục và tệp kèm theo khi được cài đặt trên điện thoại Android Với số lượng người dùng lớn đáng kể và sự phổ biến rộng rãi của Facebook, việc này không chỉ giúp chúng ta hiểu rõ hơn cách ứng dụng lưu trữ dữ liệu trong các thư mục và tệp, mà còn cung cấp những ví dụ thực tiễn về tối ưu hóa dữ liệu trên thiết bị di động Việc nghiên cứu này cũng mang lại hiểu biết sâu sắc về cách các ứng dụng lớn khác có thể xử lý dữ liệu người dùng mà đảm bảo hiệu suất cao Facebook là một ví dụ phù hợp cho việc này.
2.6.1 Thông tin chi tiết của ứng dụng Facebook
● Tổng số thư mục:365 (có thể lớn hơn dựa vào thời gian sử dụng ứng dụng).
● Dung lượng lưu trữ: 420 MB (có thể lớn hơn dựa vào thời gian sử dụng ứng dụng).
● Đường dẫn:/data/data/com.facebook/katana.
Hình 2.6.1 Thông tin chi tiết của ứng dụng Facebook
2.6.2 Thông tin chi tiết các thư mục của ứng dụng Facebook
Thư mục gồm 65 thư mục con và 960 tệp với dung lượng 80.97 MB Đây là thư mục chứa các tệp tạm thời của ứng dụng để phục vụ truy cập được nhanh hơn.
Chi tiết về quyền (permissions) của thư mục:
● Chủ sở hữu có quyền đọc, ghi, và thực thi thư mục này.
● Nhóm sở hữu có quyền đọc, ghi, và thực thi thư mục này, với bit setgid được thiết lập (cho phép các tệp tin mới được tạo ra thuộc nhóm này).
● Người dùng thuộc nhóm khác chỉ có quyền thực thi thư mục này.
Hình 2.6.2.1.1 Thông tin chi tiết của thư mục cache
Bên trong thư mục cache có các thư mục text chứa các thông tin về các sự kiện diễn ra bên trong ứng dụng.
Hình 2.6.2.1.2 Bên trong thư mục cache
Thư mục gồm 41 tệp với dung lượng 3.64 MB Thư mục được dùng để lưu dữ liệu của người dùng khi thao tác với ứng dụng.
Chi tiết về quyền (permissions) của thư mục:
● Chủ sở hữu có quyền đọc, ghi và thực thi thư mục này.
● Nhóm sở hữu có quyền đọc, ghi và thực thi thư mục này.
Hình 2.6.2.2.1 Thông tin chi tiết của thư mục dữ liệu người dùng
Bên trong thư mục dữ liệu người dùng gồm các tệp db, tệp wal, tệp dat và tệp shm phục vụ thống kê cho các cơ sở dữ liệu.
Hình 2.6.2.2.2 Bên trong thư mục dữ liệu người dùng
Thư mục dex gồm 3 thư mục con và 11 tệp với dung lượng 119 MB Thư mục được dùng để biên dịch và thực thi ứng dụng trên nền tảng Android.
Chi tiết về quyền (permissions) của thư mục:
● Chủ sở hữu có quyền đọc, ghi và thực thi thư mục này.
● Nhóm sở hữu không có quyền.
● Người dùng thuộc nhóm khác không có quyền.
Hình 2.6.2.3.1 Thông tin chi tiết của thư mục dex
Bên trong thư mục dex chứa các tệp art, odex, vdex, và tệp checksum.
Hình 2.6.2.3.2 Bên trong thư mục dex
Hình 2.6.2.3.3 Bên trong thư mục dex
Thư mục files gồm 157 thư mục con và 698 tệp với dung lượng 11.18 MB Đây là thư mục dùng để chứa các tài nguyên hệ thống của ứng dụng.
Chi tiết về quyền (permissions) của thư mục:
● Chủ sở hữu thư mục được quyền đọc, ghi, chỉnh sửa.
● Nhóm sở hữu thư mục có quyền đọc, ghi, chỉnh sửa.
● Người dùng thuộc nhóm khác chỉ có quyền thực thi thư mục.
Bên trong thư mục files bao gồm các thư mục hệ thống của ứng dụng và các tệp store, lock,…
Hình 2.6.2.4.2 Bên trong thư mục files
Hình 2.6.2.4.3 Bên trong thư mục files
Thư mục lib-compressed gồm 1 thư mục con và 584 tệp với dung lượng 98.13
MB Đây là thư mục chứa các file so, là các thư viện được dùng cho ứng dụng.
Chi tiết về quyền (permissions) của thư mục:
● Chủ sở hữu thư mục có quyền đọc và thực thi thư mục.
● Nhóm sở hữu thư mục không có quyền.
● Người dùng thuộc nhóm khác không có quyền.
Hình 2.6.2.5.1 Thông tin chi tiết của thư mục lib-compressed
Bên trong thư mục lib-compressed chứa các tệp so là các thư viện của ứng dụng.
Hình 2.6.2.5.2 Bên trong thư mục lib-compressed
Thư mục shared_prefs chứa 1 thư mục con và 15 tệp với dung lượng 9.75 kB. Đây là thư mục chứa các tệp xml, nơi lưu trữ các dữ liệu cục bộ của ứng dụng.
Chi tiết về quyền (permissions) của thư mục:
● Chủ sở hữu có quyền đọc, ghi và thực thi thư mục.
● Nhóm sở hữu có quyền đọc, ghi và thực thi thư mục.
● Người dùng thuộc nhóm khác chỉ có quyền thực thi thư mục.
Hình 2.6.2.6.1 Thông tin chi tiết của thư mục shared_prefs
Bên trong tệp shared_prefs chứa các file xml.
Hình 2.6.2.6.2 Bên trong thư mục shared_prefs
2.6.3 Hệ thống cơ sở dữ liệu của ứng dụng Facebook
Hệ thống cơ sở dữ liệu của ứng dụng Facebook được lưu trữ trong thư mục databases và đều sử dụng SQLite để quản lý dữ liệu Một số cơ sở dữ liệu được sử dụng cho ứng dụng bao gồm:
● Contact (liên hệ): Chứa các thông tin liên lạc của bạn bè của người dùng trongFacebook, bao gồm internal_id, contact_id, fbit, first_name, last_name,…
Hình 2.6.3.2 Dữ liệu first_name, last_name, và display_name
● Newsfeed (nguồn cấp tin tức): Chứa các thông tin liên quan đến các bản tin được hiển thị trong ứng dụng.
● Time_in_app (thời gian trong ứng dụng): Chứa các thông tin liên quan đến các sự kiện xảy ra trong ứng dụng.
Hình 2.6.3.4 Dữ liệu time_in_app
● Savedvideos (các video được lưu): chứa các thông tin liên quan đến các videos đã được lưu trong ứng dụng.
TỔNG KẾT
Trong tổng quan, đề tài "Nghiên cứu các thư mục, tập tin dữ liệu của ứng dụng khi cài trên điện thoại Android" tập trung vào việc khám phá và nghiên cứu các tập tin dữ liệu mà các ứng dụng tạo ra và sử dụng trên hệ điều hành Android Nghiên cứu này mang lại những kiến thức quan trọng về cách các ứng dụng hoạt động và tương tác với dữ liệu, góp phần phát triển các công cụ phân tích và nghiên cứu bảo mật.
Quá trình nghiên cứu các tập tin dữ liệu của ứng dụng Android đòi hỏi sự phân tích kỹ lưỡng Việc nghiên cứu cấu trúc thư mục của các ứng dụng, phân tích các tập tin lưu trữ dữ liệu và xác định thông tin quan trọng đều đóng vai trò quan trọng trong quá trình này Kết quả từ nghiên cứu có thể cung cấp thông tin giá trị về hoạt động của các ứng dụng và tạo nền tảng cho việc xây dựng các công cụ phân tích mạnh mẽ.