- Nếu ai đó cài đặt ứng dụng android (tập tin apk), có kiểm tra nào được thực hiện tại thời điểm khởi chạy để đảm bảo tính toàn vẹn của ứng dụng không bị xâm phạm không? Theo tôi hiểu không có kiểm tra nào được thực hiện tại thời điểm khởi chạy và tôi đang cố thực hiện các thao tác sau:
- Tôi đang cố gắng tính toán các thông báo SHA-1 của các ứng dụng đã cài đặt (tệp APK). Tôi biết rằng tệp APK giống như tệp zip. Nó bao gồm các tập tin khác. Tuy nhiên, tôi đang xử lý nó như bất kỳ tệp nào khác (chỉ là một luồng byte) và cố gắng tính toán các thông báo SHA-1 của tất cả các tệp APK. Có bất kỳ vấn đề với cách tiếp cận này? Các mã sau đây tiếp tục đưa ra ngoại lệ null:
byte tĩnh tin [] getSHA1FromFileContent (String filename) {Android - Ứng dụng đã cài đặt - kiểm tra tính toàn vẹn
try
{
MessageDigest digest = MessageDigest.getInstance("SHA-1");
//byte[] buffer = new byte[65536]; //created at start.
final FileInputStream fis = new FileInputStream(filename);
int n = 0;
byte[] buffer = null;
while (n != -1)
{
n = fis.read(buffer);
if (n > 0)
{
digest.update(buffer, 0, n);
}
}
byte[] digestResult = digest.digest();
return digestResult;
}
catch (Exception e)
{
return null;
}
}
Là một thay thế khi tôi đã cố gắng để lấy lại file từ các tập tin apk và lưu các tập tin cá nhân như sau, tôi một lần nữa giữ trên ngoại lệ null
public void unzip()
{
try
{
FileInputStream fin = new FileInputStream(_zipFile);
ZipInputStream zin = new ZipInputStream(fin);
ZipEntry ze = null;
while ((ze = zin.getNextEntry()) != null)
{
Log.v("Decompress", "Unzipping " + ze.getName());
if(ze.isDirectory()) {
_dirChecker(ze.getName());
} else {
File dstfile = new File(_location + ze.getName());
dstfile.createNewFile();
FileOutputStream fout = new FileOutputStream(dstfile.getPath());
//OutputStream out = openFileOutput(_location + ze.getName(), Context.MODE_PRIVATE);
for (int c = zin.read(); c != -1; c = zin.read()) {
fout.write(c);
}
zin.closeEntry();
fout.close();
}
}
zin.close();
}
catch(Exception e)
{
Log.e("Decompress", "unzip", e);
}
}
- Tôi cũng đang xác minh cấu hình ứng dụng bằng cách - PreferencesManager.getDefaultSharedPreferences gọi cung cấp tên gói của ứng dụng làm tham số đầu vào
- Để xác minh tính toàn vẹn của ứng dụng đã cài đặt, việc kiểm tra ở trên có đủ không?
Một thiết bị cài đặt ứng dụng "thực" có thể phát hiện nỗ lực nâng cấp "imposter" bằng cách thay đổi chữ ký và phản hồi bằng cách xóa các tệp dữ liệu riêng tư ban đầu để ngăn chúng rơi vào bàn tay của kẻ mạo danh. –
Bạn có liên kết đến việc triển khai thuật toán của mình không? Tôi đã nhìn thấy nó thảo luận vào dịp nhưng chưa bao giờ thấy một thực hiện. Hãy nhớ rằng nó sẽ không hoạt động cho Amazon AppStore hoặc bất kỳ thị trường nào khác ký lại APK. – CommonsWare
nếu điều đó đã được gửi đến cho tôi, thay đổi xóa trên chữ ký là một tính năng của chính nền tảng Android, hiển thị trong nhật ký. IIRC amazon cung cấp tùy chọn của nhà phát triển ký gói ứng dụng đã hoàn tất, mặc dù đây không phải là lựa chọn duy nhất của họ. –