Tìm hiểu về Reverse Engineering trong Android (Dịch ngược mã nguồn từ file APK)

1. Khái quát về Reverse Engineering Reverse Engineering là quá trình tách biệt một thứ gì đó riêng biệt để theo dõi cách hoạt động của chúng. Decompiling là một dạng của Reverse Engineering , nơi mà một đối tượng nào đó hay cụ thể là một ứng dụng mobile có thể được phân tích

1. Khái quát về Reverse Engineering

Reverse Engineering là quá trình tách biệt một thứ gì đó riêng biệt để theo dõi cách hoạt động của chúng. Decompiling là một dạng của Reverse Engineering ,
nơi mà một đối tượng nào đó hay cụ thể là một ứng dụng mobile có thể được phân tích ra thành source code của nó.

Một ứng dụng Android dạng nhị phân được gọi là APK (Android Package Kit) , nó chứa dữ liệu ở dạng Dalvik Executable (.DEX) được build từ DVM (Dalvik Virtual Machine – Một implementation của JVM)

2. Smali

Smali/BackSmali là một Assembler/Disassembler được dành cho .Dex format , được sử dụng bởi Dalvik.

Smali code , thứ mà chúng ta mong muốn có thể truy cập ,sửa đổi , có thể hiểu tương đương như những ngôn ngữ hợp ngữ hay ngôn ngữ C.
Để hiểu thêm về Smali code , chúng ta cùng xem qua quá trình biên dịch của một ứng dụng Android

Đây là sơ đồ chi tiết của quá trình biên dịch một chương trình Java và một ứng dụng Android

Chúng ta có thể thấy quá trình biên dịch ứng dụng Android có thêm một số bước so với một chương trình Java thông thường .
Sau khi được biên dịch ra JavaBytecode , chúng được chạy qua Dalvik Compiler. Sau đó Dalvik Bytecode (.Dex format) được sinh ra và DVM sẽ khởi chạy
chúng thành ứng dụng Android.

Như vậy , Smali tools giúp dịch ngược bytecode trong .Dex file thành smali code.

Tuy nhiên, mặc dù Smali là một ngôn ngữ hybrid, sử dụng opcodes và có thể đọc được nhưng để hiểu được chúng thì không hề đơn giản chút nào.

There are still challenges that remain despite smali being a hybrid language; using opcodes as well as semi-readable code.

Nó không hẳn là ngôn ngữ hợp ngữ như assembly , nhưng nó cũng không phải là “readable code” , nó là sự kết hợp của 2 ngôn ngữ này mà những nhà phân tích
bắt buộc phải đọc hiểu nó.

3. Tiến hành dịch ngược APK

Ở đây chúng ta có thể kể đến một vài tool hỗ trợ như dex2jar , jadx , JD , JAD , Procyon , CFR
Bây giờ chúng ta sẽ cùng thử dịch ngược APK với tool jadx:

Giao diện tool Jadx sau khi tải apk của một ứng dụng lên:

Đầu tiên chúng ta sẽ bắt đầu với việc phân tích file AndroidManifest. Đây là một phần rất quan trọng đối với một ứng dụng Android.
Nó cung cấp data về project structure, metadata , permission và các activity.

Ở đây chúng ta có thể thấy cấu trúc một file AndroidManifest như các permission , flags , theme ,activities,… được hiển thị giống y hệt trong source code.

Tiếp theo có thể xem qua một class model:

Class model Category đã được dịch ngược sang mã Java , hiển thị khá chi tiết các trường , method trong class và cấu trúc của nó ở thanh tab bên trái !

4. Tài liệu tham khảo:

https://www.nowsecure.com/blog/2020/02/26/what-to-look-for-when-reverse-engineering-android-apps/

https://mobsecguys.medium.com/smali-assembler-for-dalvik-e37c8eed22f9

https://mobile-security.gitbook.io/mobile-security-testing-guide/android-testing-guide/0x05c-reverse-engineering-and-tampering

Nguồn: viblo.asia

Bài viết liên quan

Sự Khác Nhau Giữa Domain và Hosting Là Gì?

Sự khác nhau giữa domain và hosting là gì? Bài này giải thích ngắn và dễ hiểu nh

Shared Hosting hay VPS Hosting: Lựa chọn nào dành cho bạn?

Bài viết giải thích rõ shared hosting và vps hosting là gì và hướng dẫn chọn lựa

Thay đổi Package Name của Android Studio dể dàng với plugin APR

Nếu bạn đang gặp khó khăn hoặc bế tắc trong việc thay đổi package name trong And

Lỗi không Update Meta_Value Khi thay thế hình ảnh cũ bằng hình ảnh mới trong WordPress

Mã dưới đây hoạt động tốt có 1 lỗi không update được postmeta ” meta_key=