hưởng đến tính riêng tư của người dùng như thông tin vị trí, danh bạ, thông tin thiết bị đang sử dụng, truy cập Internet, truy xuất bộ nhớ, gởi tin nhắn sms, tự động tải các thông tin nà
Trang 1ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
Lê Đức Thịnh
NGHIÊN C ỨU, ĐÁNH GIÁ AN TOÀN THÔNG TIN MÃ NGUỒN
H Ệ ĐIỀU HÀNH ANDROID TÙY BIẾN
Trang 2L ỜI CẢM ƠN
Để hoàn thành khóa luận tốt nghiệp này, dựa trên những cố gắng của tôi, nhưng
Đặc biệt tôi xin gởi lời cảm ơn sâu sắc nhất đến Tiến sĩ Phạm Văn Hậu, người
Đồng nghiệp, bạn bè, các bạn sinh viên đã chia sẻ kinh nghiệm, kiến thức quí
như tinh thần cho chúng tôi học tập và nghiên cứu
gia đình những lời chúc tốt đẹp, thành công trong công việc và cuộc sống
Lê Đức Thịnh
Trang 3L ỜI CAM ĐOAN
được chú thích và liệt kê rõ ràng thành các tài liệu tham khảo
cáo
Lê Đức Thịnh
Trang 4M ỤC LỤC
LỜI CẢM ƠN 1
LỜI CAM ĐOAN 2
MỤC LỤC 3
DANH MỤC KÝ HIỆU VÀ CHỮ VIẾT TẮT 6
DANH MỤC BẢNG 7
DANH MỤC CÁC SƠ ĐỒ 8
DANH MỤC HÌNH 9
MỞ ĐẦU 10
CHƯƠNG 1 - TỔNG QUAN 16
1.1 Tình hình nghiên cứu trong nước 16
1.2 Tình hình nghiên cứu ở nước ngoài 17
1.3 Kết luận 20
CHƯƠNG 2 – HIỂU VỀ KIẾN TRÚC, MÃ NGUỒN ANDROID (AOSP) 21
2.1 Kiến trúc Android 21
2.2 Bảo mật Android 24
2.3 Bảo mật kernel 26
2.4 Các lời gọi hệ thống (System calls) 26
2.5 Tương tác với mã nguồn Android (AOSP) 27
2.6 Hiểu về cấu trúc cơ bản mã nguồn Android 31
2.7 Hiểu về cấu trúc cơ bản kernel Android 38
2.8 Kết luận 43
CHƯƠNG 3 – CÁC PHƯƠNG PHÁP SO SÁNH MÃ NGUỒN 44
3.1 Các công cụ thương mại 44
Trang 5https://www.devart.com/codecompare/ 44
Công cụ Beyond Compare: https://www.scootersoftware.com/ 47
3.2 Các công cụ mã nguồn mở, miễn phí 50
GNU Diffutils: https://www.gnu.org/software/diffutils/ 50
KDiff3: http://kdiff3.sourceforge.net/ 52
3.3 Kết luận 57
CHƯƠNG 4 – CÁC KỊCH BẢN CHỈNH SỬA MÃ NGUỒN AOSP CHO VIỆC THỬ NGHIỆM PHƯƠNG PHÁP ĐÁNH GIÁ 58
4.1 Tổng quan 58
4.2 Chỉnh sửa trong Activity 59
Kịch bản 1: chỉnh sửa trong Activity lấy IMEI điện thoại gởi qua SMS 61 4.3 Chỉnh sửa trong Services 62
Kịch bản 2: Lấy thông tin vị trí gởi qua sms từ Services 64
4.4 Kết luận 65
CHƯƠNG 5 – ĐỀ XUẤT PHƯƠNG PHÁP ĐÁNH GIÁ MÃ NGUỒN ANDROID DỰA TRÊN PHÂN TÍCH TĨNH 66
5.1 Tập dữ liệu sử dụng trong phương pháp phân tích tĩnh trong Android 66
5.2 Hướng tiếp cận và phạm vi 68
5.3 Phương pháp đề xuất 69
Module General 71
Module Compare 72
5.3.2.1 Thử nghiệm trên Beyond Compare 73
5.3.2.2 Thử nghiệm trên diffutils (thử nghiệm trên linux) 76
Module Analysis 78
5.4 Cài đặt và thử nghiệm 82
Trang 6Cài đặt môi trường và thiết lập cấu hình 82
Thử nghiệm kịch bản 1 (được trình bài ở 4.2.1) 83
Thử nghiệm kịch bản 1 và 2 (được trình bày ở 4.2.1 và 4.3.1) 85
5.5 Kết luận 87
CHƯƠNG 6 – KẾT LUẬN, KHUYẾN NGHỊ VÀ HƯỚNG PHÁT TRIỂN 88
6.1 Kết luận 88
6.2 Hướng phát triển 89
TÀI LIỆU THAM KHẢO 90
Trang 7DANH M ỤC KÝ HIỆU VÀ CHỮ VIẾT TẮT
Ch ữ viết tắt N ội dung chi tiết
Trang 8DANH M ỤC BẢNG
Bảng 1: Thị phần các nền tảng di động đến quý 1/2017 10
Bảng 2: Các thành phần của AOSP 35
Bảng 3: Bảng chi tiết frameworks/base 38
Bảng 4: Các thành phần của kernel Android Goldfish 3.18 42
Bảng 5: Bảng tóm tắt các công cụ so sánh mã nguồn 57
Bảng 6: Phân nhóm Source Sink [10] 68
Trang 9DANH M ỤC CÁC SƠ ĐỒ
Sơ đồ 1: Android System Services Pattern 63
Sơ đồ 2: Lớp service trong frameworks/base 64
Sơ đồ 3: Sơ đồ tổng quan giải pháp đánh giá mã nguồn Android 70
Sơ đồ 4: Sơ đồ hoạt động của của module Compare 72
Sơ đồ 5: Sơ đồ hoạt động của module Analysis 79
Sơ đồ 6: Sơ đồ kỹ thuật phân tích luồng dữ liệu nhạy cảm 81
Trang 10DANH M ỤC HÌNH
Hình 1: Phân phối các firmware Android độc hại 19
Hình 2: Kiến trúc Android [23] 22
Hình 3: Điểm khác biệt giữa Linux truyền thống và Android [25] 27
Hình 4: Cấu trúc thư mục mã nguồn nguồn AOSP 30
Hình 5: Cấu trúc thư mục kernel Android goldfish-3.18 31
Hình 6: Kiến trúc Android ánh xạ với AOSP [26] 36
Hình 7: Cấu trúc kernel Android Goldfish 3.18 39
Hình 8: Kết quả so sánh 2 thư mục với công cụ Code Compare (theo thứ tự từ trên xuống tập tin bị chỉnh sửa, được thêm mới, bị xóa đi) 46
Hình 9: Kết quả so sánh 2 file với Code Compare 47
Hình 10: So sánh thư mục với Beyond Compare 48
Hình 11: So sánh tập tin với Beyond Compare 48
Hình 12: Xuất báo cáo so sánh với Beyond Compare 49
Hình 13: Hướng dẫn sử dụng công cụ diff 50
Hình 14: Kết quả so sánh tập tin với công cụ diff 52
Hình 15: Giao diện công cụ Kdiff3 53
Hình 16: Kết quả tổng quát so sánh 2 mã nguồn trong thư mục frameworks với Kdiff3 54
Hình 17: Kết quả chi tiết so sánh 2 mã nguồn trong thư mục frameworks với Kdiff3 55 Hình 18: Các thành phần chính của ứng dụng Android 59
Hình 19: Vòng đời của một Activity 60
Hình 20: Cơ chế hoạt động của SuSi 67
Hình 21: So sánh 2 thư mục trên Beyond Compare 73
Hình 22: Tóm tắt thông tin báo cáo so sánh trên Beyond Compare 74
Hình 23: Xuất báo cáo trên Beyond Compare 75
Hình 24: Định dạng báo cáo kết quả so sánh của Beyond Compare 76
Hình 25: Script thực thi diffutils 76
Hình 26: Thời gian thực hiện so sánh của công cụ diffutils 77
Hình 27: Định dạng báo cáo của công cụ diffutils 77
Hình 28: Cấu trúc công cụ đánh giá được đề xuất 82
Trang 11M Ở ĐẦU
con người ngày càng mang tính di động cao, chính vì thế các thiết bị di động (điện thoại
nhau như iOS, Android, Windows Mobile, FireFox OS, BlackBerry OS, … Trong số
Trang 12hưởng đến tính riêng tư của người dùng như thông tin vị trí, danh bạ, thông tin thiết bị đang sử dụng, truy cập Internet, truy xuất bộ nhớ, gởi tin nhắn (sms), tự động tải các
thông tin này ra bên ngoài mà không được sự đồng ý của người dùng hoặc người dùng
đánh dấu trước đó với tỉ lệ phát hiện sai sót thấp, tuy nhiên, công cụ này chỉ có khả năng
soát được các URI của các ứng dụng; công cụ Amandroid [5] phát hiện được rò rỉ thông
(call graph) để phân tích ứng dụng, …
có đến 99.6% có chứa lỗ hỏng giúp cho việc leo thang đặc quyền Java, 7.8% chứa mã độc theo dõi người dùng Bên cạnh đó, nghiên cứu [8] đã bước đầu tiếp xúc và đánh giá
Trang 13hình là phương pháp phân tích tĩnh và phương pháp phân tích động Phương pháp phân
đòi hỏi phải thực thi mã lệnh mà chỉ đọc và phân tích mã ban đầu Phân tích động dựa
hành vi này truy ngược lại đoạn mã tương ứng, từ đó tiếp tục phân tích mở rộng Ngoài
ra, để khắc phục các yếu điểm của từng phương pháp trên, hiện nay nhiều công trình sử
pháp phân tích tĩnh Chúng tôi sử dụng phương pháp phân tích tĩnh bởi vì đối tượng
điều hành Android tùy biến, sử dụng các công cụ phân tích để tìm ra các đoạn mã khác
Trang 14Tính khoa h ọc và tính mới của đề tài:
nguy cơ an toàn thông tin người dùng hay không Các công trình đánh giá an toàn của
đánh giá và khuyến cáo người dùng về nguy cơ bảo mật trên mã nguồn ban đầu (text)
Đề tài này sẽ tập trung vào việc nghiên cứu và đề xuất một phương pháp đánh
M ục tiêu, đối tượng và phạm vi nghiên cứu:
để đánh giá an toàn của mã nguồn hệ điều hành Android tùy biến, trong đó chú trọng
đến việc thất thoát thông tin
Đối tượng: mã nguồn hệ điều hành Android, bảo mật trên Android, các công cụ
- An toàn thông tin là một khái niệm rộng, theo Luật an toàn thông tin mạng của
Trang 15Việt Nam, an toàn thông tin là sự bảo vệ thông tin, hệ thống thông tin trên mạng tránh
bị truy nhập, sử dụng, tiết lộ, gián đoạn, sửa đổi hoặc phá hoại trái phép nhằm bảo đảm tính nguyên vẹn, tính bảo mật và tính khả dụng của thông tin Hướng tiếp cận của đề tài này, tính an toàn thông tin bị vi phạm khi có thông tin người dùng bị rò rỉ ra bên ngoài
mà không được sự cho phép của người dùng Cụ thể, hành vi đọc thông tin từ 1 điểm (source) và thông tin này được gởi đến 1 điểm để gởi ra bên ngoài (sink) Hay nói cách khác, nếu tồn tại luồng thông tin đi từ source đến sink thì mã nguồn mất an toàn thông tin.4
- Đối với việc phân tích mã nguồn cả hệ điều hành Android là một đề tài rất rộng, trong phạm vi nghiên cứu này tập trung so sánh hai mã nguồn Android mà ta đã biết trước kết quả để đánh giá kết quả của phương pháp đề xuất Giả sử rằng, mã nguồn hệ điều hành Android do Google trực tiếp phân phối đã đạt chuẩn về an toàn thông tin, dựa vào đó đề tài có sự so sánh với mã nguồn khác và đưa ra các đánh giá Chúng tôi sẽ tải
bộ mã nguồn hệ điều hành Android được bản mã nguồn thứ nhất, chỉnh sửa mã nguồn trên, thêm vào một vài lỗ hỏng bảo mật để được mã nguồn thứ hai Áp dụng và đánh
giá phương pháp đề xuất ở những điểm cốt lõi, những khác biệt trên mã nguồn này
- Trước mắt, chúng tôi đề xuất phương pháp áp dụng trên ngôn ngữ Java và các đoạn mã độc nằm trên cùng một tập tin mã nguồn
Bước mở rộng của đề tài có thể được tiếp tục phát triển hơn dành cho nghiên cứu trong tương lai là đánh giá an toàn trên toàn bộ ngôn ngữ, đánh giá các đoạn mã nằm ở
C ấu trúc luận văn
Chương 1: trình bày tổng quan về tình hình nghiên cứu trong và ngoài nước liên quan đến chủ đề mà đề tài đang đề cập đến để tạo cơ sở nền tảng ban đầu, từ đó nêu ra
4https://blogs.uni-paderborn.de/sse/tools/susi/
Trang 16được sử dụng trong Android, bảo mật mã nguồn AOSP, cách tương tác với mã nguồn
Chương 3: sẽ nói việc tìm hiểu, nghiên cứu các công cụ so sánh mã nguồn để tiến
Chương 4: chương này trình bày một số kịch bản chỉnh sửa mã nguồn căn cứ vào
Chương 5: sẽ dựa trên kết quả nghiên cứu từ các chương trước đặc biệt là chương 3
và chương 4 để giới hạn phạm vi của dữ liệu đầu vào cho phương pháp đánh giá được
đề xuất ngay sau đây Mã nguồn của AOSP rất lớn nếu không được giới hạn sẽ ảnh hưởng rất lớn đến hiệu suất đánh giá dẫn đến phương pháp đề xuất không hiệu quả Nội
đề xuất với dữ liệu đầu vào là mã nguồn AOSP do Google cung cấp và mã nguồn tùy
Chương 6: chương này sẽ đưa ra kết luận về phương pháp đề xuất, thảo luận hướng
Trang 17CHƯƠNG 1 - TỔNG QUAN
Chương này tập trung trình bày tổng quan về tình hình nghiên cứu trong và ngoài nước liên quan đến chủ đề mà đề tài đang đề cập đến để tạo cơ sở nền tảng ban đầu, từ
đó nêu ra các phương án thực hiện một cách khái quát làm tiền đề cho quá trình nghiên
1.1 Tình hình nghiên c ứu trong nước
Ở Việt Nam, hiện tại, chưa có công trình nghiên cứu nào về phân tích, đánh giá độ
phân tích mã độc trên các ứng dụng trên Android, chưa phân tích cả hệ điều hành Chẳng
đề tài “Detecting privilege escalation attacks on android device” [11] nghiên cứu về phương pháp phân tích tĩnh trong phát hiện loại tấn công dựa vào các đặc quyền được
pháp đánh giá tính bảo mật của ứng dụng Android dựa trên phân tích CFG (Control
thông tin android application framework” [10], nhóm tác giả đã tách riêng phần
đạt chuẩn về an toàn thông tin, từ đó tác giả chỉnh sửa bản ROM đó tạo ra phiên bản không an toàn và đây là 02 dữ liệu đầu vào của công cụ, kết quả của công trình đã tạo
kernel android d ựa trên phương pháp phân tích tĩnh” [9] đã tập trung đánh giá Kernel
Trang 18các phương pháp hiện tại và kết quả phân tích rất khả quan phát hiện được những điểm
có nguy cơ mất an toàn trong bản kernel Android đã được chỉnh sửa
ch ế phát hiện rò rĩ thông tin bằng phương pháp kết hợp phân tích tĩnh và động trên Android” [13] đã dựa trên 2 công cụ chính DidFail [14] và SmartDroid [15] xây dựng
1.2 Tình hình nghiên c ứu ở nước ngoài
vào đơn ứng dụng, đa ứng dụng Tham khảo các chủ đề và những công trình nghiên cứu
tích tĩnh trong lĩnh vực an toàn/bảo mật phần mềm như Model Checking, Control-flow analysis, Data-flow analysis, Symbolic analysis, Information-flow analysis Các công
Abstract Syntax Tree (AST); GraphMath hướng đến việc tạo ra System Dependence
Trang 19tính chính xác, độ bảo mật, hiệu năng, khả năng tái sử dụng, cũng như đơn giản hóa source code giúp cho người khác dễ dàng hơn trong việc đọc hiểu source code Công
thông tin người dùng
đã có nhiều công cụ hỗ trợ, có thể tham khảo danh sách tại [18] Mã nguồn Android bao
ảnh hưởng đến tính an toàn, bảo mật của kernel Các tác giả so sánh hai công cụ dựa
đánh giá trên mã nguồn ban đầu (text) của kernel Android
tích tĩnh và phân tích động để phân tích cả tầng ứng dụng và tầng hệ thống của bản ROM Công trình đánh giá một firmware ở hai mức đó là mức ứng dụng được cài đặt
5http://developer.android.com/tools/help/lint.html
Trang 20đặc quyền trên bản ROM Tuy nhiên, quá trình đánh giá còn khá đơn giản như dựa trên
để hạ giá thành của sản phẩm, đây là một khuyến cáo đáng quan tâm đối với những người dùng sản phẩm có giá thành rẻ hơn so với những thiết bị có cùng cấu hình, thể
Đối với cách tiếp cận của đề tài là so sánh mã nguồn, công trình so sánh mã nguồn
Đóng góp chính của công trình này là xây dựng một framework mở rộng phù hợp và
(class hierarchies)
Trang 21WinMerge, diffutils, …
1.3 K ết luận
Chương đã trình bày khái quát về các công trình nghiên cứu liên quan đến hướng
đơn lẻ chưa áp dụng vào phân tích một bộ mã nguồn thuần túy (dạng text) một cách
được build, không phải là mã nguồn thuần túy ban đầu (Java, C, C++) Bởi vì, khi dịch ngược trở về mã nguồn ban đầu (Java, C, C++) sẽ cho kết quả không chuẩn
phương pháp đề xuất với các bước trình bày ở cuối phần mở đầu có tính khả thi để thực
Trang 22CHƯƠNG 2 – HIỂU VỀ KIẾN TRÚC, MÃ NGUỒN ANDROID (AOSP)
Đây là bước đầu tiên trong giải pháp đề xuất để đánh giá những điểm quan trọng
AOSP, cách tương tác với mã nguồn AOSP, mã nguồn kernel Android, phân tích cấu trúc thư mục và mô tả chức năng các thành phần trong mã nguồn Android do Google
2.1 Ki ến trúc Android
6https://source.android.com/source/
Trang 23Linux-kỳ loại thiết bị phần cứng nào
Các đóng góp của Google cho Linux kernel tập trung ở sửa lỗi, thêm phần
cứng mới, cải thiện quản lý năng lượng, cải thiện báo lỗi, cải thiện hiệu năng,
cải thiện bảo mật
HAL: HAL cho phép hệ thống tương tác với phần cứng thông qua một giao
diện giao tiếp bên trong cụ thể Với cách tiếp cận này, hệ thống Android không biết và cũng không cần biết phần cứng được truy cập hay được quản
lý như thế nào HAL như là một lớp trung gian giữa phần cứng và hệ thống,
nó được phát triển bằng C/C++ thuần và các share libraries Không có sự hạn
Trang 24chế nào từ Google về cách chúng ta cần implement HAL và các trình điều khiển thiết bị (device drivers) của chúng ta
Libraries: là một tập các thư viện được tạo dành riêng để làm việc trên
Android, cho phép và làm việc với các thành hệ thống và việc phát triển ứng
dụng Quan trọng nhất là các thư viện
o SQLite: là một việc thực thi SQL rút gọn (tiny SQL implementation) được nhúng vào hệ thống và nó cung cấp các chuẩn để truy cập vào dữ liệu công khai được tạo bởi content providers hoặc cơ sở dữ liệu SQL được
tạo bởi người dùng
o SSL: cung cấp môi trường bảo mật chuẩn cho giao tiếp mạng
o OpenGL: các thư viện OpenGL được liên kết giữa Java (C/C++) và OpenGL/ES 3D graphics rendering API
o SGL: cung cấp cách truy xuất 2D rendering engine
o Media framework: cung cấp các codecs for rendering, recording, và playback cho các định dạng đa phương tiện phổ biến nhất
o Webkit: là một HTML rendering engine phổ biến
o Libc: là một BSD-derived implementation của thư viện C chuẩn, được
chỉnh sửa riêng để thực thi tốt nhất trên các thiết bị nhúng trên nền tảng Linux
Application framework: đây là cốt lõi của hệ sinh thái phần mềm Android
Nó cung cấp rất nhiều các manager thuận tiện cho các tác vụ phổ biến nhất
của các nhà phát triển Android và cho chính hệ thống Android Các thành
phần quan trọng nhất trong lớp này là:
o Activity manager: cung cấp việc điều hướng và quản lý vòng đời các Activity Android
o Resource manager: cung cấp việc truy cập đến các tài nguyên không phải
mã code chứa trong ứng dụng như graphics, localized string, styles, và colors
o Location manager: cung cấp thông tin chính xác nhất về thông tin vị trí,
sử dụng dữ liệu được thu thập từ cảm biến GPS, tháp di động và mạng không dây lân cận
Trang 25o Notification manager: thông báo các cảnh báo trên thanh trạng thái
o Content providers: cung cấp cách tiếp cận phổ biến để chia sẻ dữ liệu giữa các ứng dụng khác nhau
o Views and widgets: bao gồm phần lõi giao diện người dùng (UI core) của Android
Binder IPC: Binder Inter-Process Communication (IPC) là một lớp ẩn, nó tạo
kênh giao tiếp trong suốt giữa Android API bậc cao, có thể truy xuất thông qua Android SDK và hệ thống Android thực
Applications: tất cả các ứng dụng được tạo bởi bên thứ ba, như các nhà sản
xuất smartphone, các lập trình viên Android, …
2.2 B ảo mật Android 7
đó, nó đòi hỏi một kiến trúc bảo mật mạnh mẽ và các chương trình bảo mật nghiêm
SandBox: mọi ứng dụng Android đều chạy trong một chế độ gọi là Application Sandbox Cũng giống như nằm trong một chiếc hộp chứa, bất kỳ ứng dụng nào đều được chứa bên trong một Sandbox ảo để giữ nó tách biệt với bất kỳ thứ nào khác bên
N ền tảng chính của Android được xây dựng thành các khối:
• Phần cứng thiết bị (Device Hardware): Android chạy trên một mảng các cấu hình thiết bị bao gồm smart phones, tablets, and set-top-boxes
7https://source.android.com/security/
Trang 26• Hệ điều hành Android (Android Operating System): nhân của HĐH được dựng trên Linux Kernel Tất cả tài nguyên của thiết bị như chức năng camera, dữ liệu GPS, Bluetooth, điện thoại, kết nối mạng, … được truy cập thông qua hệ điều hành
• Môi trường thực thi ứng dụng Android (Android Application Runtime): các ứng
dụng Android hầu hết được viết bằng ngôn ngữ Java và chạy trong Android Runtime (ART) Tuy nhiên, nhiều ứng dụng, bao gồm cả dịch vụ lõi Android và các ứng dụng dành riêng (native applications) hoặc bao gồm các thư viện dành riêng (native libraries) Cả ART và các ứng dụng gốc chạy trong cùng một môi trường bảo mật chứa trong phạm vi ứng dụng SandBox
Các ứng dụng Android được mở rộng từ lõi của HĐH Android Có 2 mã nguồn ứng
d ụng chính:
• Pre-Installed Applications (các ứng dụng được cài đặt sẵn): Android bao gồm
một tập các ứng dụng được cài đặt sẵn như Phone, Email, Calendar, Web browser, Contacts, Đây là một phần của nền tảng Android hoặc chúng có thể được phát triển bởi một nhà sản xuất thiết bị cho một thiết bị cụ thể
• User-Installed Applications (các ứng dụng do người dùng cài đặt): Google cung
cấp nền tảng phát triển mở hỗ trợ cho bất kỳ ứng dụng của bên thứ ba nào
Ki ến trúc nền tảng bảo mật
Android tìm được một hệ điều hành bảo mật nhất và có thể sử dụng nhất cho hầu
• Bảo vệ dữ liệu người dùng
• Bảo vệ tài nguyên hệ thống (bao gồm cả tài nguyên mạng)
Trang 27• Ứng dụng Sandbox bắt buộc đối với tất cả các ứng dụng
• Bảo mật giao tiếp liên tiến trình
• Ký vào ứng dụng
• Các quyền ứng dụng được định rõ và người dùng đạt được
2.3 B ảo mật kernel 8
Như đã trình bày ở trên, kernel được xem như “trái tim” của Android Tất cả
chính như module các quyền dựa trên người dùng, cô lập các tiến trình, cơ chế mở
Lời gọi hệ thống (System call) là rất quan trọng, giúp cho người dùng truy cập tài nguyên của hệ thống, nó là một tập các hàm giúp cho người dùng giao tiếp trực
tiếp với nhân (kernel) của hệ điều hành nhằm yêu cầu hệ thống cung cấp cho người dùng các tính năng cơ bản Chẳng hạn như đọc/ghi tập tin, kết nối mạng với socket, truy suất thư mục, khởi chạy một chuơng trình khác
8https://source.android.com/security/overview/kernel-security
Trang 282.5 Tương tác với mã nguồn Android (AOSP)
Mã nguồn của Android được Google cung cấp chính thức tất cả các phiên
bản tại https://source.android.com/source/ và hướng dẫn chi tiết cách thức để tương tác và tải mã nguồn này về, có thể tóm tắt như sau:
Trang 29• Cài đặt các gói thư viện (Ubuntu 14.04)
sudo apt-get install git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev gcc-multilib g++-multilib libc6-dev-i386
lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z-dev ccache libgl1-mesa-dev libxml2-utils xsltproc unzip
Download 10 : AOSP được lưu trữ trên Git và để dễ dàng tương tác với bộ
mã nguồn này, Google cung cấp một công cụ đó là Repo
• Cài đặt repo:
o Tạo thư mục /bin trong thư mục /home
mkdir ~/bin PATH=~/bin:$PATH
o Tải công cụ Repo
curl downloads/repo > ~/bin/repo
https://storage.googleapis.com/git-repo-chmod a+x ~/bin/repo
• Thi ết lập cho Repo truy cập được vào nơi lưu trữ AOSP trên Git:
o Tạo thư mục lưu trữ bộ mã nguồn
mkdir WORKING_DIRECTORY
cd WORKING_DIRECTORY
o Cấu hình Git
git config global user.name "Your Name"
git config global user.email "you@example.com"
o Cập nhật các phiên bản mới nhất
9https://source.android.com/source/initializing
10https://source.android.com/source/downloading
Trang 30android-• Tải về
repo sync
lượng hơn 40 GB, có cấu trúc thư mục chi tiết như sau:
11https://source.android.com/source/build-numbers#source-code-tags-and-builds
Trang 31• Trong bộ AOSP trên không bao gồm mã nguồn Kernel Android, chúng được cung cấp riêng tại https://android.googlesource.com/kernel Với
từng thiết bị cụ thể, chúng ta lựa chọn mã nguồn phù hợp để sử dụng Ví
dụ, chúng ta tải mã nguồn Kernel chạy trên máy ảo (emulator) như sau
git clone https://android.googlesource.com/kernel/goldfish
Hoặc vào trực tiếp đường dẫn trên bằng trình duyệt để tải file nén của
mã nguồn Kernel
Trang 322.6 Hi ểu về cấu trúc cơ bản mã nguồn Android
Một số lệnh cơ bản tương tác với mã nguồn AOSP
- Kiểm tra phiên bản Android của mã nguồn AOSP: xem tập tin /aosp/build/core/version_defaults.mk trong mã nguồn AOSP
- Kiểm tra phiên bản của kernel Android: vào thư mục chứa mã nguồn kernel gõ
lệnh make kernelversion
- Tìm kiếm trong mã nguồn: sử dụng lệnh build/envsetup.sh trước khi sử
Trang 33dụng các lệnh tìm kiếm (nếu chưa thực hiện được các lệnh tìm kiếm thì thực
hiện tiếp lệnh make modules hoặc tiến hành build mã nguồn sau đó thực hiện
o godir: di chuyển tới một thư mục chứa tập tin, khi chạy lệnh này, nó sẽ thực
hiện index mã nguồn trước
o printconfig: in ra cấu hình hiện tại
- Android SDK Search: là 1 Extension trên Google Chrome: https://chrome.google.com/webstore/detail/android-sdk-
search/hgcbffeicehlpmgmnhnkjbjoldkfhoin
Bên trong mã nguồn AOSP gồm có [24, 26]:
Lưu ý: kích thước mỗi thư mục chỉ mang tính tương đối, tùy thuộc vào thời điểm
(Android 6.0)
art
được sử dụng từ phiên bản Android 5.0 thay thế cho Dakvin VM cũ dựa trên Just-In-Time (JIT) ART
18.7
bionic
và bionic là license, glibc được phân phối với GPL
18.2
Trang 34bootable
được sử dụng bởi tất cả bootloader Android và ảnh
5.08
build
đó, nó chứa tập tin envsetup.sh, một đoạn script cho
Android
11.7
cts
đến người dùng Bộ CTS do Google phát triển và
460
dalvik
ứng dụng Android được thực thi trên máy ảo này
5.74
device
• Common: chứa các thông tin xác thực về GPS và các đoạn script cho phép trích xuất các phần nhị phân liên quan đến một thiết bị cụ thể để đưa vào image build
• Generic: chứa cấu hình của thiết bị chung được
gọi là “goldfish” và được sử dụng để build image cho máy ảo (emulator)
• Google: chứa các mã nguồn Accessory Development Kit (ADK) Nó chứa một DEMOKIT Android App cho phép chúng ta điều khiển ADK board ADK là một thực thi tham chiếu (reference implementation) cho các nhà
sản xuất phần cứng, đây có thể là điểm bắt đầu cho việc làm các phụ kiện Android (Android accessories)
• Sample: chứa các ví dụ mẫu hoàn chỉnh cho cách
105
12https://source.android.com/compatibility/cts/
Trang 35viết thư viện chia sẻ riêng của người phát triển cho Android mà không cần chỉnh sửa Android Framework Nó cũng chỉ cách để viết JNI code được bao gồm trong thư viện và một ứng dụng client sử dụng như một thư viện
docs
thư mục con source.android.com, nơi đây chứa tất
tĩnh, chúng ta có thể xem kết quả của quá trình build
tại http://source.android.com
27.2
external
frameworks
Thư mục rất quan trọng, bởi vì nó chứa mã nguồn
Activity, Services, …
Ở đây cũng chứa các mapping giữa mã C, C++ và
mã Java
1.19 GB
hardware
mà thông qua các HAL modules, các thư viện chia
94.4
libcore
39.8
libnativehelper
134 KB
ndk
out
thư mục này sẽ chứa các file image sẵn sàng cho
13http://harmony.apache.org/
Trang 36các thư mục con như out/product/generic/ cho
emulator image, thư mục out/host/linux-x86/ chứa
zipalign, dexdump, …
packages
Camera, Calculator, Dialer, Launcher, Settings, …
tương ứng với lớp Ứng dụng trong mô hình kiến trúc Android
303
pdk
506 KB
system
Đây được xem là lõi linux nhúng vào “trái tim” của Android Đây là hệ thống Linux thu nhỏ quản lý việc
23.9
vender
AOSP Thư mục này tương quan và tương ứng với thư mục ~aosp/device/
60.7
Để có cái nhìn tổng quan về ánh xạ các thư mục trên đến mô hình kiến trúc Android, ta xem xét hình 6:
Trang 37Như vậy, ta có thể thấy rằng, trong cấu trúc các thư mục của AOSP chứa rất
Trang 38Các thư mục khác là những bộ công cụ, thư viện hỗ trợ cho phát triển, build mã
Kích thước (~MB) (Android 6.0)
obex
trao đổi dữ liệu giữa các thiết bị dùng cổng giao tiếp
261 KB
packages
InputDevice, SystemUI (status bar, navigation bar,
…), Wallpaper, …
17.7
Trang 39tools
Language), …
59.5
2.7 Hi ểu về cấu trúc cơ bản kernel Android
Như đã trình bày ở trên, kernel Android không được cung cấp chung với bộ
https://android.googlesource.com/kernel/, có thể vì các lý do như:
kernel Android
14 Building Kernels: https://source.android.com/source/building-kernels
15 Mã nguồn kernel goldfish: https://android.googlesource.com/kernel/goldfish
Trang 40arch
89
block
969 KB