Cách lấy code từ file apk

Hướng dẫn chèn code vào đoạn mã smali của file apk.


I. Mở đầu
_ Ứng dụng Android thường được viết bằng Java và thực thi trên Virtual Machine, byte code chạy trên Dalvik Virtual Machine [DVM] được chuyển đổi từ JVM byte code truyền thống sang dex-format[.dex file] bởi convertion tool dx [lưu trữ tại android-sdk/platforms/android-X/tools/lib/ với các phiên bản trước đây, ở phiên bản Android SDK mới nhất được lưu tại android-sdk/platform-tools/lib/].
_ Mã code thực thi trên DVM được gọi là mã Smali, có tập lệnh phức tạp giống như Assembly trên Windows. Để đọc và hiểu mã Smali là một việc không hề dễ dàng.
_ Việc chèn code java vào một ứng dụng Android có sẵn khá phức tạp do cấu trúc ngôn ngữ java khi decompile sẽ không được bảo toàn nguyên vẹn, khó có thể re-build lại ứng dụng để hoạt động bình thường.
_ Tuy nhiên, chèn code smali vào ứng dụng là một việc khả thi, ta hoàn toàn có thể re-build lại ứng dụng để chạy bình thường. Đây là cách thông dụng khi cần mod ứng dụng, ROM,
_ Các hacker hoặc những người có ý đồ xấu hoàn toàn có thể chèn code smali vào ứng dụng nào đó nhằm thực hiện một hành vi độc hại nào đó.
II. Yêu cầu:
· Android SDK, virtual emulator hoặc 1 device thật
· JAVA SDK
· NotePad ++
· Nắm được kiến thức cơ bản về Android, cấu trúc file apk, tập lệnh smali
//pallergabor.uw.hu/androidblog/dalvik_opcodes.html
Click to expand...
· Apktool & baksmali/smali + Signer for all GB/ICS/JB/KK ROM v3 [4.4 Kitkat support/optimized] [
//drive.google.com/folderview...xKR3BSU0JYcTBDaGV2MDNDVjg2c29QV3c&usp=sharing
Click to expand...
]

III. Các bước thực hiện

1. Dùng apktool hoặc công cụ baksmali disassemble file apk thành các file smali.

2. Phân tích code smali để biết cách hoạt động của ứng dụng


3. Chèn code vào file smali.


4. Thực hiện Reassemble file apk và zip/ sign apk.









IV.
Minh họa

_ Chèn code vào ứng dụng Mobile Defender một ứng dụng antivirus giả mạo, điều hướng người sử dụng đến trang web //pdblprotect.com
_ Mình sử dụng apktool thay cho công cụ smali/ backsmali đơn thuần vì nó decompile file apk thành các file smali, resource, AndroidManifest nên rất thuận tiện cho việc phân tích code smali.

1. Decompile file apk

_ Download bộ công cụ Recompile & Decompile ở trên, giải nén, copy file apk vào thư mục apktool.
_ Mở cmd tại thư mục apktool, chạy dòng lệnh :



Code:
apktool d [apk_name].apk
Click to expand...
_Thu được thư mục:



_Cấu trúc thư mục:




2. Phân tích ứng dụng
_Phân tích AndroidManifest.xml để nắm được các permission, receiver, MainActivity .. của ứng dụng.
_Các file smali cần phân tích nằm trong thư mục smali:




_ Dựa vào AndroidManifest ta xác định được MainActivity :
" smalicomexampleandroiddefender2MainActivity.smali"
Click to expand...

_Phân tích AndroidManifest ta chú ý đến permission :
"android.permission.INTERNET"
Click to expand...
_Qua khảo sát một số activity của ứng dụng, phát hiện trong PayFormActivity.smali có sử dụng đối tượng lớp WebView dẫn người sử dụng truy cập đến một trang web nào đó




_Ta sẽ chèn code vào trong file smali này để bắt được đoạn link mà ứng dụng sử dụng.
3. Chèn code

Ta sẽ chèn đoạn một code vào trong đoạn code smali ở trên nhằm hiện một AlertDialog thông báo đường link mà ứng dụng truy cập.

Code:
.const/4 v6, 0x0
.local v4, "link":Ljava/lang/String;
new-instance v5, Landroid/app/AlertDialog$Builder;

invoke-direct {v5, p0},Landroid/app/AlertDialog$Builder;>[Landroid/content/Context; ]V

.local v5, "buidler":Landroid/app/AlertDialog$Builder;

const-string v7, "Cu1ea3nh bu00e1o"

invoke-virtual {v5, v7}, Landroid/app/AlertDialog$Builder;>setTitle[Ljava/lang/CharSequence; ]Landroid/app/AlertDialog$Builder;

invoke-virtual {v5, v4}, Landroid/app/AlertDialog$Builder;>setMessage[Ljava/lang/CharSequence
Landroid/app/AlertDialog$Builder;

invoke-virtual {v5, v6}, Landroid/app/AlertDialog$Builder;>setCancelable[Z]Landroid/app/AlertDialog$Builder;

move-result-object v5

const-string v7, "ok"

invoke-virtual {v5, v7, v6}, Landroid/app/AlertDialog$Builder;>setPositiveButton[Ljava/lang/CharSequence;Landroid/content/DialogInterface$OnClickListener
Landroid/app/AlertDialog$Builder;

invoke-virtual {v5},Landroid/app/AlertDialog$Builder;->create[]Landroid/app/AlertDialog;

move-result-object v5
invoke-virtual {v5}, Landroid/app/AlertDialog;->show[]V
Click to expand...

_vị trí cần chèn




++Chú ý:
_Để tránh việc khi rebuild lại ứng dụng không chạy được, cần đọc qua từng lệnh smali trong code gốc để có cách sử dụng hợp lý các biến cục bộ [số biến cục bộ được khai báo trong thân từng hàm].
_Để tạo code smali, cách đơn giản nhất bạn hãy dùng một IDE như Eclipse hoặc Android Studio, build một đoạn code với nội dung mong muốn, rồi decompile file apk để lấy code smali tương ứng!

4. Recompile file apk
_Sau khi chèn code vào file smali, chạy apktool để rebuild file apk:
Code:
apktool b -f -d [folder_decompiled_name]
Click to expand...




_ File apk thu được nằm trong đường dẫn :
" fake_avdistfake_av.apk"
Click to expand...
5. Sign apk
Sign apk để đảm bảo mỗi ứng dụng Android có một chữ kí riêng biệt, trước khi có thể cài đặt vào thiết bị.
Code:

java -jar SignApk.jar testkey.x509.pem testkey.pk8 [apk_name].apk [apk_name_signed].apk
Click to expand...
_ Copy file apk thu được từ bước 4 để vào folder Sign & Zipalign tool đã giải nén ở trên



_Ta thu được file fake_av_s.apk


6. Zipalign file apk
Zipalign nhằm nén và tối ưu hóa cấu trúc file apk.
Code:
zipalign -fv 4 [apk_name_signed].apk [apk_name_zip].apk
Click to expand...





_ Đưa file apk fake_av_z.apk thu được vào smartphone hoặc emulator để xem kết quả.


Kết quả


_Ứng dụng Mobile Defender khi chưa chèn code smali



_ Ứng dụng đã được chèn một đoạn AlertDialog cảnh báo url link mà ứng dụng đang truy cập.



Cám ơn các bạn đã theo dõi bài viết.

Video liên quan

Chủ Đề