Dịch Ngược Mã Nguồn Apk

Reverse Engineering (hay điện thoại tư vấn tắt là RE) là một mảng mà hầu hết các giải CTF Jeopardy hầu hết có. Trong các bài RE họ thường thấy 1 số ít loại file như exe, elf, những file code,... Và cả file apk.

Bạn đang xem: Dịch ngược mã nguồn apk

Do bài toán làm hẳn 1 tiện ích android, lại buộc phải để lại trong các số ấy những thiếu sót về bảo mật thông tin để fan chơi khai thác, kiếm tìm flag bắt buộc tốn nhiều thời hạn và công sức của con người hơn, yêu cầu dạng file apk không xuất hiện nhiều trong những cuộc thi CTF. Mặc dù nhiên, xét về độ khó và sự độc đáo thì dạng bài xích reverse file apk cũng không hề kém gì những dạng file khác.

Trong bài này, họ sẽ cùng khám phá về dạng bài bác RE Android qua một bài CTF đối kháng giản: bài Droids3 vào picoCTF 2019.

Link tải: Droids3

Tools

Các cơ chế cơ phiên bản mà chúng ta cần để gia công 1 bài xích CTF reverse app android gồm:

ADB: khí cụ giúp kết nối với máy ảo Android, tất cả sẵn trong thư mục tools của genymotion, băng thông mặc định bên trên windows là C:/Program Files/Genymobile/Genymotion/tools.

Cài đặt

Sau khi thiết đặt đầy đủ các tools, họ khởi đụng Genymotion, sinh sản 1 thiết bị apk bất kỳ. Mình hay tạo những thiết bị Google Pixel, các thiết bị này chạy tương đối mượt.

Khi phần lớn thứ đã gồm đủ với giả lập app android đã bật, chúng ta sẽ tiến hành thiết lập file app android vào giả lập nhằm chạy:

Copy file three.apk vào cùng thư mục với adb để tiến hành cài đặt.Chạy lệnh thiết đặt ứng dụng vào lắp thêm ảo: adb install three.apk

Sau khi thiết đặt thành công, trong trang bị giả lập đã có thêm ứng dụng PicoCTF

*

Tìm đọc ứng dụng

Giao diện áp dụng có các công dụng cơ bản: 1 trường input, 1 button với 2 đoạn text.

Khi click vào button vẫn hiện text "don"t wanna", cùng hint là "make this tiện ích your own".

Tìm flag

Mở file three.apk bằng Bytecode Viewer bạn có thể thấy tương đối nhiều file và folder. Làm sao từ trong lô file này tìm kiếm được file có công dụng giúp họ lấy được flag thì chủ yếu dựa vào kinh nghiệm. Cách của mình là thử xem hết các file xem có khai thác được gì không.

Tất nhiên cũng cần yếu tìm mà không có hướng gì cả. Các file code bao gồm của áp dụng thường ở trong đường dẫn dạng com/abc/xyz/. Với bài bác này thì chúng ta thấy 1 tệp tin có cái brand name đáng ngờ nằm tại com/hellocmu/picoctf/FlagstaffHill.class

*

Ở đây họ để ý thấy bao gồm 2 hàm nope() cùng yep(). Hàm getFlag() lại trả về công dụng của hàm nope - "don"t wanna". Vậy thì cái chúng ta cần ở đấy là getFlag cần return yep. Để có tác dụng được điều đó chúng ta cần áp dụng kỹ thuật patch file apk.

Xem thêm: Huỳnh Vy Giải Cứu Tiểu Thư 6, Diễn Viên Huỳnh Nhi Trong Phim Giải Cứu Tiểu Thư

Trước khi giới thiệu về nghệ thuật patch thì mình sẽ cốt truyện về cấu trúc của tệp tin apk. Tệp tin apk thực tế là một dạng tệp zip đã được nén như zip, rar, v..v.. Họ hoàn toàn có thể rename three.apk thành three.zip cùng giải nén ra bình thường. Vớ nhiên các file sau khi giải nén ra không thể xem trực tiếp được luôn

*

Trong các file giải nén ra có 1 file class.dex, file này chứa các class trong code java. Những lập trình viên vẫn thường code app apk bằng java/kotlin. Lúc compile thì các file class sẽ được nén lại thành 1 tệp tin dex.

*

Khi tiến hành reverse file game android thì họ sẽ không nhận được những file code bằng java đâu, thay vào đó chúng ta sẽ nhận được những file smali code. Từ các file smali này, decompiler sẽ chuyển sang code java để họ đọc, tuy nhiên sẽ không chính xác hoàn toàn, và sẽ có sự biệt lập khi sử dụng những decompiler không giống nhau. Thứ có độ tin cậy cao nhất khi thực hiện reverse ứng dụng là smali code (smali code trong reverse android có phương châm như assembly code vào reverse exe, elf vậy).

Mình chỉ trình làng sơ qua do vậy thôi. Giờ thì bọn họ sẽ bắt tay vào bài toán path lại app.

Đầu tiên bọn họ sẽ decompile file game android bằng apktool

Để file app android và apktool cùng thư mục cùng chạy lệnh: java -jar apktool_2.4.1.jar d three.apk

Kết quả vẫn được folder three với các sub folder, file

*

Tiếp theo chúng ta sẽ tiến hành sửa code

Mở file three/smali/com/hellocmu/picoctf/FlagstaffHill.smali

Mình sử dụng VScode thiết lập thêm extension smali để dễ nhìn hơn, luôn tiện cho câu hỏi sửa code.

*

Chúng ta sẽ chăm chú vào hàm getFlag, nơi mình gạch men chân ->nope khớp ứng với return nope vào code java. Bây chừ cùng xem xét lại code java:

Thứ nhất: chúng ta cần hàm getFlag nên return yep thay bởi vì return nopeThứ hai: cả nhị hàm yep cùng nope đều sở hữu cùng argument

=> Vậy, để getFlag return yep thì bọn họ chỉ bắt buộc đổi ->nope thành ->yep, kế tiếp save lại file.

Bước 3: build lại thành file android mới

Khi đang sửa được code theo ý muốn, bọn họ cần từ các file đó build ra file game android mới. Apktool cũng có thể có chức năng cho phép build ra tệp tin apk sau khi sửa code, chỉ cần chạy lệnh: java -jar apktool_2.4.1.jar b three

*

File app android mới nằm ở vị trí thư mục three/dist. Xóa app cũ trong giả lập đi và thiết lập lại tiện ích mới thôi chứ liệu có còn gì khác nữa đúng không?

*

File three.apk mới này không cài được ngay lập tức đâu, họ cần làm cho tiếp cách cuối cùng.

Sign apk

Các các bạn hãy copy 2 câu lệnh sau vào file text:

keytool -genkeypair -v -keystore key.keystore -alias publishingdoc -keyalg RSA -keysize 2048 -validity 10000jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ./key.keystore %1 publishingdocĐổi tên file thành sign-apk.bat tiếp đến chạy lệnh cmd: sign-apk.bat .apk

Lần lượt điền keystore và các thông tin, các bạn muốn điền gì cũng được, mình nhằm "123123" hết. Lệnh thứ nhất sẽ tạo ra key.keystore, lệnh thứ 2 sẽ sign game android bằng key vừa tạo.

*

*

Như vậy là bọn họ đã sign thành công file game android patched. Giờ chỉ cần xóa ứng dụng cũ trong giả lập, cài vận dụng mới sẽ patch vào và bấm nút để thừa nhận flag.

*

Flag: picoCTFtis.but.a.scratch

Qua nội dung bài viết thì chắc chắn hẳn các bạn đều gắng được những kiến thức và kỹ năng cơ bạn dạng để làm các bài CTF reverse android rồi đúng không? giả dụ có bất kể thắc mắc gì, hãy bình luận ở phía dưới bài viết để chúng ta có thể cùng luận bàn nhé.