Có thể bạn muốn xem mã nguồn của một ứng dụng nào đó để tham
khảo, thực tập bằng cách chỉnh sửa cho ứng dụng chạy theo ý mình... Sau
đây là cách thực hiện, từ việc lượm lặt file apk của ứng dụng trên
Google Play đến việc dịch ngược, chỉnh sửa rồi “built” lại...
1. Lấy file APK của ứng dụng
Các ứng dụng cài đặt chạy trên Android là những file có đuôi apk, bạn có
thể tìm và tải chúng từ nhiều nguồn trên mạng, thậm chí một số nguồn
còn cho phép tải về file apk, sau đó đem cài đặt trực tiếp lên điện
thoại. Nguồn ứng dụng dồi dào và phong phú nhất phải kể tới là cửa hàng
Google Play (play.google.com), tuy nhiên, Google Play chỉ cho phép bạn
tải ứng dụng về từ thiết bị Android chứ không cung cấp trực tiếp file
apk. Để làm việc này, giải pháp là sử dụng công cụ Real APK Leecher. Để
chạy Real APK Leecher, máy tính của bạn phải có Java SE Runtime
Environment (tải về tại đây hoặc tại đây). Bạn có thể tải Real APK Leecher từ địa chỉ tại đây. Sau khi tải về và giải nén, bạn chạy file Real APK Leecher.exe.
Đầu tiên, một hộp thoại xuất hiện. Bạn cần điền thông tin đăng nhập của
mình tại phần General Info. Tại mục Device ID, để lấy mã Device ID trên
thiết bị của mình, bạn sử dụng tính năng gọi điện của điện thoại
Android, nhập vào mã *#*#8255#*#*. Một trang thông tin sẽ tự động xuất
hiện, cho biết các thông tin thiết bị, trong đó có thông tin về Device
ID.
Đơn giản hơn, bạn có thể sử dụng ứng dụng Device ID trên Google Play (tại đây)
để lấy Device ID của thiết bị của mình. Trở lại hộp thoại, chọn ngôn
ngữ tại Default language/country, tại phần Choose default folder to save
downloaded apps, bạn chọn đường dẫn để lưu file apk của ứng dụng khi
tải về. Xong, bấm Save để vào cửa số chính. Nếu có thông báo lỗi xuất
hiện, bạn bấm OK để bỏ qua. Tại giao diện chính, chưa có ứng dụng nào
xuất hiện. Để tìm, bạn gõ tên ứng dụng mong muốn vào khung tìm kiếm phía
trên, bên phải, và chúng sẽ xuất hiện. Để tải về, bạn phải bấm chuột
chọn ứng dụng muốn tải, sau đó bấm chuột phải và chọn Download this app.
Sau khi quá trình tải về hoàn tất, bạn tìm đến thư mục chứa file apk
được chỉ định trong hộp thoại lúc nãy để lấy file.
Cách này chỉ giúp bạn tải các ứng dụng miễn phí, đối với các ứng dụng có
thu phí, bạn vẫn có thể tải sau khi trả phí hệt như tải về trên thiết
bị Android, chỉ khác là với công cụ này, bạn có thể lấy được trực tiếp
file apk của ứng dụng từ Google Play.
2. Dịch ngược ứng dụng với mục đích tham khảo mã nguồn
Bản chất file apk là một dạng file đóng gói, bạn có thể giải nén bằng 7zip (tại đây)
và thu được những file đóng gói có dạng đã được dịch để dùng, không thể
đọc được mã nguồn. Bây giờ, bạn cần dịch ngược file apk sang jar (Java
Archive), là một dạng đóng gói của Java. Để làm điều này, bạn tải công
cụ dex2jar về tại tại đây.
Sau khi tải về, giải nén dex2jar. Để thuận tiện, bạn copy file .apk vào
cùng thư mục của dex2jar. Trong ví dụ này, file .apk được sử dụng là
iDict.apk, và thư mục dex2jar-0.0.9.15 giải nén xong được đổi tên là
dex2jar, lưu theo đường dẫn C:\dex2jar\.
Bạn vào cửa sổ Command Prompt (Start > Run > cmd), gõ theo cú pháp
cd <đường dẫn thư mục dex2jar>, trong ví dụ này là cd C:\dex2jar.
Sau đó, bạn gõ theo cú pháp dex2jar.bat <đường dẫn tuyệt đối của file
.apk>, ở đây là dex2jar.bat iDict.apk (vì ở đây file iDict.apk đã
nằm sẵn trong thư mục dex2jar). Sau khi làm xong, chương trình sẽ báo vị
trí file dịch ngược. File dịch ngược sẽ nằm trong thư mục chứa file
apk, được đặt tên theo cú pháp [tên file .apk]_ dex2jar.jar, ví dụ ở đây
là iDict_dex2jar.jar.
File jar xuất ra là file gồm các bytes code nhị phân của Java, rất khó
đọc trực tiếp, bạn cần sử dụng công cụ jd-gui (http://java.decompiler.
free.fr/?q=jdgui) để đọc file này. Sau khi tải, vào File > Open để mở
file jar. Với jd-gui, file jar dịch ngược dễ đọc hơn so với việc đọc
trực tiếp rất nhiều.
Đối với những nhà lập trình, để tránh bị dịch ngược ứng dụng của mình,
họ có thể sử dụng các kỹ thuật như obfuscate code, anti-reverse, hoặc mã
hóa bất đối xứng... làm cho một số thông tin của các hàm, biến bị xóa
khỏi ứng dụng. Vì vậy đối với một số ứng dụng, khi dịch ngược xong, khi
xem bạn sẽ thấy các file a, b, c, d... với mục đích làm cho sản phẩm trở
nên khó đọc.
Việc dịch ngược này cũng không đảm bảo toàn vẹn code, có nghĩa là bạn
dịch ngược xong, mang vào NetBean hay Eclipse không phải lúc nào cũng
build ra được. Chúng ta sử dụng cách này để tham khảo mã nguồn, cấu trúc
chương trình, phục vụ cho việc học là chính.
3. Dịch ngược, sửa đổi ứng dụng
Với việc dịch ngược sau đó sửa đổi và đóng gói lại ứng dụng, bạn có thể
Việt hóa ứng dụng Android hoặc thậm chí hiệu chỉnh ứng dụng (kể cả ứng
dụng hệ thống), chạy theo ý mình. Để làm việc này, trên máy tính, bạn
cần chuẩn bị các công cụ: Java SE Runtime Environment (đã được giới
thiệu lúc nãy), Java SE Development Kit (tại đây). Bạn tải về Apktool & baksmali/smali tại tại đây (đối với Windows 7 hoặc 8, bạn có thể thử tải tại tại đây).
Ngoài ra, nên trang bị WinRAR hoặc 7zip và cài đặt thêm Notepad++
(http://notepad-plus-plus.org/download) để hiệu chỉnh code dễ dàng hơn.
Trên thiết bị Android, bạn cần cài đặt ứng dụng duyệt file, ví dụ như
Explorer (tạ đây), để truy xuất vào các file của hệ thống (có thể yêu cầu root).
Sau khi tải Apktool & baksmali/smali về, bạn giải nén và đặt ở vị
trí ổ C: để dễ thao tác. Bạn cũng nên đổi tên thư mục Apktool &
baksmali/ smali thành apktool như ví dụ trong bài viết này. Trên thiết
bị Android, bạn dùng ứng dụng duyệt file đi vào đường dẫn
/system/framework/, chép file framework-res.apk từ thiết bị Android vào
máy tính. Lưu ý bạn chỉ chép chứ không di chuyển hay can thiệp gì thêm
vì có thể ảnh hưởng tới hệ thống. Nếu muốn dịch ngược các file ứng dụng
của hệ thống Android như Contacts.apk, Phone.apk. MusicPlayer.apk...
(lưu trong /system/app/), bạn cần chép thêm file twframework-res.apk.
Bạn đem file framework-res.apk, cùng với file apk của ứng dụng cần dịch
ngược (ví dụ ở đây là iDict.apk), vào cùng thư mục apktool. Sau đó,
trong thư mục apktool, mở file Command Prompt.bat. Tại đây, bạn tiến
hành dịch ngược file apk bằng cách gõ theo cú pháp:
apktool if framework-res.apk
apktool d
Ví dụ ở đây là
apktool if framework-res.apk
apktool d iDict.apk
Đối với các ứng dụng hệ thống (Contacs.apk, Phone.apk, Camera.apk, Settings.apk...), bạn sử dụng cú pháp:
apktool if framework-res.apk
apktool if twframework-res.apk
apktool d
Sau khi thực hiện xong, bạn sẽ thấy xuất hiện một thư mục có tên của ứng
dụng cần dịch ngược ngay trong thư mục apktool. Trong thư mục đó, có
thể hiệu chỉnh lại các file png, dùng Notepad++ để hiệu chỉnh các file
xml, smali... chính là các file dữ liệu lập trình của ứng dụng.
Sau khi hiệu chỉnh xong, bước tiếp theo là biên dịch lại (recompile)
file apk. Trong cửa sổ Command Prompt lúc nãy, bạn nhập theo cú pháp:
apktool b -f -d
Ví dụ ở đây là:
apktool b -f -d iDict
Khi làm xong, bạn vào thư mục chứa các file của ứng dụng lúc nãy, sẽ
thấy có thêm thư mục dist chứa file apk đã sửa đổi, có thể mở bằng
WinRAR hoặc 7zip. Sau đó, quay trở lại file apk gốc chưa sửa đổi (ở thư
mục apktool), bạn cũng mở bằng WinRAR hay 7zip. Như vậy, bạn đang mở hai
cửa sổ WinRAR hoặc 7zip, một là của file apk gốc (chứa trong thư mục
apktool), một là của file apk đã sửa đổi (chứa trong thư mục dist). Hãy
nhìn vào cửa sổ file apk gốc, nếu thấy có các thư mục META-INF, lib và
file android.manifest. xml (nếu bạn không chỉnh sửa gì file này) mà cửa
sổ file apk đã hiệu chỉnh không có, bạn chọn hết, sau đó kéo và thả vào
cửa sổ file apk đã sửa đổi.
Hãy chọn OK nếu có thông báo xác nhận. Đến đây, có thể chép file apk đã
hiệu chỉnh vào thiết bị Android để sử dụng, tuy nhiên, bạn nên tiến hành
“zipalign” ứng dụng đó trước. Zipalign là một tiện ích tối ưu hóa một
ứng dụng Android (apk) được đóng gói, cho phép Android tương tác với ứng
dụng hiệu quả hơn, và khi làm như vậy, nó có khả năng để làm cho các
ứng dụng và toàn bộ hệ thống Android nhanh hơn nhiều. Ứng dụng đã được
zipalign sẽ hoạt động nhanh hơn, và sử dụng ít bộ nhớ RAM.
Để zipalign, bạn cần tải và cài đặt Android SDK (http://goo.gl/pLS9Up)
trên máy nếu chưa có, sau đó, vào đường dẫn C:\Program Files\Android\
android-sdk\tools, tìm và chép 2 file zipalign.exe và draw9patch.bat dán
vào thư mục C:\Windows\here. Tiếp theo, bạn gõ trong Commander Prompt
cú pháp:
zipalign -fv 4 <đường dẫn kèm tên file .apk cần zipalign> <đường dẫn kèm tên file .apk thành phẩm đã zipalign>
4. Một số ví dụ can thiệp ứng dụng hệ thống
Bằng cách trên, bạn có thể sửa đổi rất nhiều ứng dụng, thậm chí thay đổi
vào sâu bên trong tùy khả năng của mình, đơn giản nhất là có thể Việt
hóa giao diện ứng dụng đó. Sau đây là một số ví dụ về việc hiệu chỉnh
ứng dụng khi đã dịch ngược được đề cập ở trên. Các ví dụ này là các ví
dụ can thiệp vào ứng dụng hệ thống Android, vì vậy khi làm bạn phải thật
cẩn thận và sao lưu hệ thống trước. Sau khi hiệu chỉnh xong và đóng gói
lại theo các bước hướng dẫn ở trên, bạn chép file hiệu chỉnh đè lên
file cũ của hệ thống.
Thay đổi hình nền cho menu sổ xuống của thanh trạng thái hoạt động:
- File cần dịch ngược: framework-res.apk (/system/ framework/).
- Áp dụng cho: ICS, Jelly Bean.
Sau khi dịch ngược, bạn vào thư mục framework-res và theo đường dẫn
/res/drawable-hdpi (hoặc mdpi/ xhdpi), tìm các file có đuôi png có tên
sau:
ab_bottom_solid_dark_holo.9.png
ab_solid_dark_holo.9.png
ab_stacked_transparent_light_holo.9.png
ab_transparent_dark_holo.9.png
ab_transparent_light_holo.9.png
Bạn thay thế các file hình ảnh này bằng các file hình ảnh mong muốn (ghi
đè lên), nên lấy độ phân giải 720x100 nếu là thư mục xhdpi, sau đó,
dịch lại và chép vào hệ thống Android.
Nếu muốn thay đổi các biểu tượng ở menu này, bạn có thể dịch ngược file
Settings.apk (\system\app\) rồi sau đó vào đường dẫn
settings/res/drawable-***dpi, sửa đổi file ic_launcher_settings.png rồi
dịch lại.
Thay đổi hình nền trong menu cài đặt nhanh:
- File cần dịch ngược: SystemUI.apk (/system/ framework/)
- Áp dụng cho: CyanogenMod 10.1
Sau khi dịch ngược, bạn vào đường dẫn SystemUI\ res\drawable, dùng
Notepad++ mở file qs_tile_ background.xml, tìm và đổi đoạn mã sau:
xmlns:android=”http://schemas.android.com/apk/ res/android”>
thành
xmlns:android=”http://schemas.android.com/apk/ res/android”>
Sau đó, bạn chọn 2 file hình nền có đuôi png, đặt tên qs_
tile_background_pressed.png và qs_tile_background_ normal.png cho vào
thư mục drawable-xxxxdpi (bạn có thể chọn bất cứ hình ảnh nào, kể cả
hình trong suốt) rồi dịch lại.
Chỉnh sửa thông báo pin:
- File cần dịch ngược: systemUI.apk
Bạn vào đường dẫn \systemUI\res\values-vi (với tiếng Việt) hoặc
\systemUI\res\values (với tiếng Anh), mở file strings.xml bằng Notepad++
rồi thay đổi theo ý muốn. Bạn lưu ý trong đó ký hiệu %d%% là ký hiệu số
phần trăm của pin còn lại.
Sau khi sửa đổi và dịch lại xong, bạn mở file systemUI. apk lúc nãy lên
bằng WinRAR/7zip, copy 2 file META-INF và AndroidManifest.xml vào thư
mục SystemUI\build\apk. Sau khi copy xong, bạn vào lại cửa sổ Command
Prompt, gõ apktool b systemUI. File SystemUI.apk thành phẩm sẽ nằm trong
thư mục systemUI\dist.
nguồn http://www.muntilmedia.com/2014/02/dich-nguoc-ung-dung-android-e-tham-khao.html
0 nhận xét:
Đăng nhận xét