Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 55 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
55
Dung lượng
4,82 MB
Nội dung
HỌC VIỆN CƠNG NGHỆ BƯU CHÍNH VIỄN THƠNG KHOA CƠNG NGHỆ THÔNG TIN I - - BÁO CÁO CUỐI KÌ MƠN: AN TỒN MẠNG Chủ đề: Cơng cụ Apktool Kali Linux Giảng viên hướng dẫn: TS Đặng Minh Tuấn Sinh viên thực hiện: Đỗ Văn Hà Mã sinh viên: B18DCAT065 Nhóm mơn học: 02 HÀ NỘI - 12/2021 MỤC LỤC DANH MỤC CÁC TỪ VIẾT TẮT .i DANH MỤC HÌNH ẢNH ii LỜI MỞ ĐẦU CHƯƠNG 1: GIỚI THIỆU VỀ FILE APK CỦA HỆ ĐIỀU HÀNH ANDROID 1.1 Cấu trúc file APK 1.2 Quá trình xử lý tạo file APK .7 CHƯƠNG 2: TÌM HIỂU VỀ APKTOOL 11 2.1 Giới thiệu 11 2.2 Chức 11 2.3 Quá trình phát triển qua phiên 14 CHƯƠNG 3: HƯỚNG DẪN CÀI ĐẶT VÀ SỬ DỤNG APKTOOL TRÊN HỆ ĐIỀU HÀNH KALI LINUX .17 3.1 Hướng dẫn cài đặt 17 Thực tự động qua quản lý tool Kali Linux 17 Thực thủ công 18 3.2 Hướng dẫn sử dụng 21 Các tham số Apktool câu lệnh terminal 21 Hướng dẫn sử dụng Apktool để thực số chức 24 CHƯƠNG 4: MỘT SỐ LAB VỀ SỬ DỤNG APKTOOL 31 4.1 Sử dụng Apktool để crack ứng dụng trả phí 31 Giới thiệu 31 Các bước thực 32 4.2 Sử dụng Apktool để chèn liệu độc hại vào ứng dụng thông thường.39 Giới thiệu 39 Quá trình thực 40 4.3 Sử dụng Apktool để giải mã đóng gói ứng dụng phụ thuộc framework bên 44 KẾT LUẬN 48 TÀI LIỆU THAM KHẢO 49 DANH MỤC CÁC TỪ VIẾT TẮT Từ viết tắt Nghĩa tiếng Anh Nghĩa tiếng Việt APK Android Package Kit Gói ứng dụng Android DEX Dalvik Executable Thực thi theo mã Dalvik AAR Android Archive Kho lưu trữ Android AAPT Android Asset Packaging Tool Cơng cụ đóng gói tài ngun Android AOSP Android Open Source Project Dự án mã nguồn mở Android i DANH MỤC HÌNH ẢNH Hình 1.1: Ví dụ cấu tạo file APK Hình 1.2: Ví dụ thư mục assets .3 Hình 1.3: Ví dụ nội dung file MANIFEST.MF quy tắc định dạng .4 Hình 1.4: Ví dụ nội dung file CERT.SF .5 Hình 1.5: Ví dụ file AndroidManifest.xml Hình 1.6: Q trình đóng gói để tạo file APK Hình 2.1: Nội dung file AndroidManifest.xml mở cách giải nén file APK 12 Hình 2.2: Nội dung file AndroidManifest.xml dịch ngược Apktool 13 Hình 2.3: Tất thay đổi phiên v.2.0.0 Apktool .16 Hình 3.1: Thực cài Apktool Kali Linux 17 Hình 3.2: Cài đặt thành công Apktool theo cách .18 Hình 3.3: Giao diện trang download Apktool 19 Hình 3.4: file apktool apktool.jar thư mục /usr/local/bin 20 Hình 3.5: Apktool v.2.6.0 cài đặt thành công theo cách .21 Hình 3.6: Ví dụ decode file APK ứng dụng Facebook Lite Android 24 Hình 3.7: Sử dụng Apktool để giải mã file JAR .25 Hình 3.8: Sử dụng tham số -o dịch ngược file APK Apktool .25 Hình 3.9: Sử dụng Apktool để đóng gói thư mục thành file APK 26 Hình 3.10: Sử dụng Apktool để đóng gói thư mục thành file JAR 27 Hình 3.11: File framework tiêu chuẩn Apktool 28 Hình 3.12: Cài đặt framework tên lge-res.apk vào Apktool .28 Hình 3.13: Danh sách framework cài thư mục mặc định 29 Hình 3.14: Khơng có framework cài thư mục /home/kali 29 Hình 3.15: Xóa framework 1.apk Apktool .29 Hình 3.16: Sử dụng tham số force để buộc xóa thư mục 30 Hình 4.1: Thơng tin huyệt hiển thị không đầy đủ 32 ii Hình 4.2: Thơng báo mua cao cấp xem huyệt phía lưng 32 Hình 4.3: Decode file APK ứng dụng “Huyệt vị kinh lạc” 33 Hình 4.4: Nội dung thư mục sau dịch ngược file APK .33 Hình 4.5: Code Java User.class mã nguồn 34 Hình 4.6: Code smali User.class .35 Hình 4.7: Thay đổi dòng 33 .35 Hình 4.8: Chỉnh sửa method init() 36 Hình 4.9: Đóng gói ứng dụng sau chỉnh sửa 36 Hình 4.10: Ký thành cơng file APK jarsigner 37 Hình 4.11: Banner yêu cầu mua cao cấp ẩn, thông tin 38 Hình 4.12: Ta xem huyệt mạch phía sau lưng 39 Hình 4.13: Thơng tin huyệt mạch phía sau lưng hiển thị đầy đủ 39 Hình 4.14: Giao diện ứng dụng calculator 40 Hình 4.15: Dịch ngược thành công file calculator.apk .40 Hình 4.16: File AndroidManifest.xml ban đầu .41 Hình 4.17: File AndroidManifest.xml sau sửa 41 Hình 4.18: Nội dung RunTrojan.java 42 Hình 4.19: Một phần nội dung file RunTrojan.smali 42 Hình 4.20: File RunTrojan.smali file Smali khác 43 Hình 4.21: Đóng gói thư mục calculator 43 Hình 4.22: Danh bạ trước khởi động lại máy 44 Hình 4.23: Danh bạ sau khởi động lại máy .44 Hình 4.24: Khơng thể hồn tất q trình dịch ngược file lg_phone.apk 45 Hình 4.25: Thư mục tên sinh giải mã lỗi .46 Hình 4.26: Cài đặt thành công framework LG 46 Hình 4.27: Quá trình giải mã file APK sử dụng framework .47 Hình 4.28: Thư mục thu sau giải mã 47 iii LỜI MỞ ĐẦU Thiết bị di động ngày trở nên phổ biến thời đại ngày này, đặc biệt thiết bị di động thông minh (smartphone) ngày khó thay Nó đáp ứng nhiều nhu cầu hàng ngày người dùng từ việc giải trí, làm việc đến cập nhật tin tức, quản lý sức khỏe, … Hệ điều hành Android hệ điều hành phổ biến smartphone ngày khẳng định điều qua số thống kê cụ thể kiện Google I/O, thế, nhu cầu làm việc với ứng dụng Android tăng theo Android sử dụng file định dạng APK để thực cài đặt, phân phối ứng dụng Nhu cầu cần có tool cho phép tháo dời, phân tích, chỉnh sửa, lắp ghép tệp tin APK điều hiển nhiên người phát triển Apktool công cụ dịch ngược cho phép thực chức cịn làm nhiều Trong báo cáo cuối kỳ này, em xin phép tìm hiểu cơng cụ Apktool nói chung hệ điều hành Kali Linux nói riêng để thầy người hiểu rõ công cụ CHƯƠNG 1: GIỚI THIỆU VỀ FILE APK CỦA HỆ ĐIỀU HÀNH ANDROID 1.1 Cấu trúc file APK APK viết tắt cụm từ Android Package Kit (hoặc Android Application Package), định dạng file thức hệ điều hành Android sử dụng để phân phối cài đặt ứng dụng thiết bị di động Xét chức loại file tương tự file exe Windows Phần đuôi mở rộng file APK apk Ngoài việc tải trực tiếp ứng dụng từ cửa hàng ứng dụng thức Google Play Store, hệ điều hành Android cho phép người dùng cài ứng dụng bên cách cài đặt thủ công file APK Đối với người dùng tải ứng dụng từ Google Play Store thường khơng nhận file cài đặt APK việc cài đặt ứng dụng Android thực Về chất, file APK loại file nén, tương tự định dạng zip Chính xác file APK tệp JAR đặc biệt, tệp JAR thực chất lại file nén zip nên tóm lại, APK file nén Ta hồn tồn đổi phần mở rộng file APK từ apk thành zip giải nén file zip khác để xem bao gồm Ta hồn tồn đọc nội dung file APK trực tiếp không cần giải nén thông qua Android Studio - IDE thức Google dùng để phát triển ứng dụng cho hệ điều hành Android Hình 1.1: Ví dụ cấu tạo file APK Một file APK thường bao gồm thành phần sau đây: - assests: Thư mục lưu trữ tài nguyên mà ứng dụng sử dụng Ví dụ: file ảnh video, file HTML, file JSON/XML, file font chữ, … Hơn nữa, số framework sử dụng thư mục để lưu trữ code liệu, kể đến ứng dụng Cordova React-native lưu trữ đoạn code JavaScript thư mục này, ứng dụng Xamarin lưu trữ file DLL thư mục Assemblies, … Hình 1.2: Ví dụ thư mục assets - resources.arsc: bao gồm tài nguyên biên dịch trước, bao gồm String, layout, … Các giá trị String, Int, Array, … thấy trực tiếp giá trị - res: thư mục chứa tài nguyên ứng dụng tài nguyên không biên dịch thành resources.arsc, phân cấp thành thư mục bé res/layout, res/drawable, res/font, res/xml, … Thư mục giữ nguyên thư mục res project code, ngoại trừ res/value bỏ - META-INF: thư mục chứa thông tin dùng để xác minh thông tin file APK, thường tạo trình ký file APK Ký file APK trình tạo “dấu vân tay” riêng biệt cho file APK đó, q trình nhằm đảm bảo phát thay đổi với file APK Nếu có thay đổi thực chữ ký file APK khơng cập nhật hệ điều hành từ chối cho phép cài đặt ứng dụng Thư mục thường bao gồm file: • MANIFEST.MF: tệp văn dùng để xác minh nội dung file APK Nó chứa tên tất tệp file APK mã băm SHA-256 SHA-1 tương ứng, nhằm xác minh tính hợp lệ tệp file APK, phục vụ việc phát thay đổi file APK nói Hơn nữa, chứa nhiều thông tin sử dụng Java run-time load file JAR class để chạy file JAR, phiên package, số dựng, người tạo package, sách bảo mật quyền ứng dụng, … File có lưu ý định dạng cho phép tối đa 70 kí tự/dịng Hình 1.3: Ví dụ nội dung file MANIFEST.MF quy tắc định dạng tối đa 70 kí tự/dịng • CERT.SF (hoặc *.SF): nhằm xác minh file MANIFEST.MF Ở đầu file chứa thông tin mã băm cho file MANIFEST.MF phiên ký file APK dùng (V1, V2 V3) Tiếp đó, chứa danh sách tên tất tệp Hình 4.6: Code smali User.class Ta tiến hành chỉnh sửa file Đầu tiên, để thay đổi giá trị khởi tạo purchase thành true, ta sửa dòng 33 thành const/4 v0, 0x1 Hình 4.7: Thay đổi dịng 33 Tiếp theo, để thay đổi method init(), xóa hết từ dịng 77 đến 104 code smali Q trình sửa code smali hoàn tất, nhấn Ctrl + S để lưu lại file 35 Hình 4.8: Chỉnh sửa method init() + Bước 4: Sử dụng Apktool để tiến hành rebuild lại thành file APK mới, thu file APK sau chỉnh sửa thư mục /dist: Hình 4.9: Đóng gói ứng dụng sau chỉnh sửa Tuy nhiên, file APK chưa thể cài đặt thiết bị di động để sử dụng chưa ký + Bước 5: Ký file APK vừa tạo File APK ký jarsigner Mở terminal /dist, thực lệnh sau để ký file APK: 36 keytool -genkeypair -v -keystore key.keystore -alias publishingdoc -keyalg RSA keysize 2048 -validity 10000 jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore /key.keystore com.tamnguyen.huyetvikinhlac.apk publishingdoc Hình 4.10: Ký thành cơng file APK jarsigner 37 Sau hồn tất q trình ký file, file APK /dist dùng để cài đặt thiết bị Android Đây tệp kết sau thực crack + Bước 6: Cài thử nghiệm Tiến hành cài file APK vừa có lên thiết bị Android, ta thấy ứng dụng cho phép ta hoạt động người dùng mua cao cấp: thông báo mua cao cấp ẩn đi, thông tin huyệt mạch hiển thị đầy đủ, ta xem huyệt phía mặt sau lưng bên hơng Những điều chứng ta crack thành công ứng dụng Kết thể qua ảnh sau: Hình 4.11: Banner yêu cầu mua cao cấp ẩn, thông tin huyệt mạch hiển đầy đủ 38 Hình 4.12: Ta xem Hình 4.13: Thơng tin huyệt mạch phía huyệt mạch phía sau lưng sau lưng hiển thị đầy đủ 4.2 Sử dụng Apktool để chèn liệu độc hại vào ứng dụng thơng thường Giới thiệu Chúng ta có ứng dụng máy tính cầm tay hồn tồn bình thường, sẽ, file APK tên “calculator.apk” Ta tiến hành sửa ứng dụng này, biến thành ứng dụng độc hại Dữ liệu độc hại chèn vào thực xóa toàn danh bạ người dùng thiết bị sau người dùng khởi động lại máy Để thực việc này, ý tưởng ta tạo class sử dụng Broadcast Receiver Android để lắng nghe kiện khởi động lại máy, class 39 thực nhiệm vụ xóa tồn danh bạ người dùng Hình 4.14: Giao diện ứng dụng calculator Quá trình thực + Bước 1: Tiến hành decode file APK ứng dụng calculator Hình 4.15: Dịch ngược thành công file calculator.apk + Bước 2: Sửa đổi file AndroidManifest.xml 40 Tìm file manifest ứng dụng calculator đường dẫn /AndroidManifest.xml, thực sửa file sau: Hình 4.16: File AndroidManifest.xml ban đầu Hình 4.17: File AndroidManifest.xml sau sửa Ở đây, thực khai báo thêm quyền liên quan đến đọc ghi danh bạ quyền lắng nghe kiện khởi động lại máy Class Broadcast Receiver có tên RunTrojan khai báo thêm file + Bước 3: Chèn thêm class RunTrojan vào mã nguồn ứng dụng Trước hết, ta viết class Java thông thường, nội dung class RunTrojan thể hình Về bản, đoạn code xóa danh bạ người dùng thơng qua vịng lặp while khơng cịn danh bạ 41 Hình 4.18: Nội dung RunTrojan.java Tiếp đến, ta tiến hành biên dịch class code Smali Hiện có nhiều cách để chuyển trực tiếp từ mã Java sang mã Smali, ta sử dụng cách dùng plugin có tên Java2Smali cài đặt trực tiếp Android Studio Giả sử sau biên dịch, ta thu file RunTrojan.smali: Hình 4.19: Một phần nội dung file RunTrojan.smali + Bước 4: Chèn code Smali nói vào thư mục /smali: Vì class RunTrojan, ta khai báo thuộc package net.tecnotopia.SimpleCalculator, ta cần chèn RunTrojan.smali vào thư mục package này, cụ thể /smali/net/tecnotopia/SimpleCalculator/ 42 Hình 4.20: File RunTrojan.smali file Smali khác + Bước 5: Thực đóng gói thư mục calculator sau sửa, ký file APK sinh /dist tương tự lab 4.1 Kết ta thu file APK có chứa mã độc mong muốn Hình 4.21: Đóng gói thư mục calculator + Bước 6: Cài đặt thử nghiệm Tiến hành cài đặt file APK vừa thu máy ảo, ta thấy ứng dụng ban đầu, người dùng thơng thường khó nhận bị chèn nội dung độc hại Tiến hành khởi động lại máy ta thấy toàn danh bạ máy bị xóa, điều chứng tỏ ta thực thành cơng 43 Hình 4.22: Danh bạ trước khởi Hình 4.23: Danh bạ sau khởi động động lại máy lại máy 4.3 Sử dụng Apktool để giải mã đóng gói ứng dụng phụ thuộc framework bên ngồi Trong lab này, ta có ứng dụng gọi điện thoại mặc định thiết bị di động LG, file APK tên “lg_phone.apk” Ta thử tiến hành decompile file APK Apktool theo cách thông thường, nhận thấy Apktool báo lỗi thiếu framework, khơng thể hồn tất q trình dịch ngược: 44 Hình 4.24: Khơng thể hồn tất q trình dịch ngược file lg_phone.apk Lý việc ứng dụng gọi điện mặc định thiết bị di động LG việc sử dụng AOSP Android (chính framework tiêu chuẩn 1.apk 45 Apktool) cịn sử dụng thêm framework bên ngồi LG thiết kế, có tên lge-res.apk Vì Apktool không cài đặt framework nên xảy lỗi biên dịch thành phần phụ thuộc vào framework Tuy trình giải mã bị lỗi thư mục tên sinh ra, chứa thành phần APK giải mã framework tiêu chuẩn: Hình 4.25: Thư mục tên sinh giải mã lỗi Để khắc phục vấn đề trên, ta tiến hành cài đặt framework lge-res.apk LG, thực lệnh apktool if lge-res.apk Hình 4.26: Cài đặt thành cơng framework LG Cài đặt thành công, framework lưu thư mục mặc định chứa framework /home/kali/.local/share/apktool/framework/, tên 2.apk Thực giải mã lại file APK ứng dụng gọi điện mặc định LG ta thấy kết giải mã thành công việc giải mã dùng framework: 46 Hình 4.27: Quá trình giải mã file APK sử dụng framework Hình 4.28: Thư mục thu sau giải mã 47 KẾT LUẬN Apktool công cụ mạnh mẽ để làm việc với file APK Nó cung cấp hàng loạt tính bật dịch ngược giải mã, đóng gói file ứng dụng APK, cho phép cài framework bên ngoài, … Cùng với đóng góp từ tất người, dự án mở Apktool ngày hoàn thiện vượt trội Với mạnh mẽ đó, cơng cụ khó thay việc dịch ngược, phân tích nghiên cứu file APK Em xin chân thành cảm ơn thầy cho em hội nghiên cứu tìm hiểu đề tài thú vị Qua việc nghiên cứu chủ đề giúp em có thêm nhiều kiến thức đặc biệt hữu ích Việc tạo điều kiện thầy trình làm động lực to lớn để em hoàn thành báo cáo Bài báo cáo cịn nhiều chỗ thiếu sót kiến thức hạn hẹp, em mong nhận góp ý từ thầy để báo cáo hoàn thiện 48 TÀI LIỆU THAM KHẢO [1] Google, “Configure your build.” https://developer.android.com/studio/build (accessed Dec 05, 2021) [2] Google, “zipalign.” https://developer.android.com/studio/command- line/zipalign (accessed Dec 06, 2021) [3] T Connor, “A tool for reverse engineering Android apk files.” https://ibotpeaches.github.io/Apktool/ (accessed Dec 07, 2021) [4] Google, “Android Open Source Project.” https://source.android.com/ (accessed Dec 09, 2021) [5] T Connor, “Documentation.” https://ibotpeaches.github.io/Apktool/documentation/ (accessed Dec 11, 2021) 49 ... file AndroidManifest.xml 40 Tìm file manifest ứng dụng calculator đường dẫn /AndroidManifest.xml, thực sửa file sau: Hình 4.16: File AndroidManifest.xml ban đầu Hình 4.17: File AndroidManifest.xml... File AndroidManifest.xml ban đầu .41 Hình 4.17: File AndroidManifest.xml sau sửa 41 Hình 4.18: Nội dung RunTrojan.java 42 Hình 4.19: Một phần nội dung file RunTrojan.smali... tích ứng dụng kích thước file APK lớn, họ quan tâm file AndroidManifest nên tham số giúp giảm đáng kể thời gian xử lý • keep-broken-res: giải mã file APK có phiên Android phiên Apktool hỗ trợ, file