In lạiTác giả: qq735679552Thời gian cập nhật: 28-09-2022 22:32:09254
CFSDN nhấn mạnh vào giá trị tạo ra nguồn mở và chúng tôi cam kết xây dựng nền tảng chia sẻ tài nguyên để mọi nhân viên CNTT có thể tìm thấy thế giới tuyệt vời của bạn tại đây.
Bài viết blog CFSDN này sưu tầm và ký lại các phương pháp cho các chương trình APK Android của tác giả. Nếu bạn quan tâm đến bài viết này thì nhớ like nhé.
Signapk.jar được biên dịch bằng mã nguồn Android của công cụ chữ ký có thể dùng để ký cả apk và rom. Định dạng sử dụng:
?
1
java –jar signapk.jar [-w] publickey.x509[.pem] privatekey.pk8 đầu vào.jar đầu ra.jar
-w đề cập đến tham số cần sử dụng khi ký ROM
publickey.x509[.pem] là tệp khóa chung
Privatekey.pk8 đề cập đến tệp khóa riêng
apk hoặc rom input.jar cần được ký
out.jar apk hoặc rom được tạo sau khi ký
signapk.java 。
1) Hàm chính Hàm chính tạo đối tượng khóa chung và đối tượng khóa riêng, đồng thời gọi hàm addDigestsToManifest để tạo đối tượng tệp kê khai Bản kê khai, sau đó gọi signFile để ký.
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
công cộngtĩnhvô hiệumain(String[] args) {
//...
BooleansignWholeFile = SAI;
số nguyênđối số khởi động = 0;
/*Nếu bạn muốn ký vào ROM, bạn cần truyền tham số -w*/
nếu (args[0].equals("-w")) {
signWholeFile = đúng;
đối số = 1;
}
// ...
thử {
Tệp publicKeyFile = new File(args[argstart+0]);
X509Certificate khóa công khai = readPublicKey(publicKeyFile);
2) addDigestsToManifest Trước tiên chúng ta phải hiểu cấu trúc của tệp Manifest. Tệp Manifest được chia thành nhiều phân đoạn với các dòng trống. Mỗi phân đoạn bao gồm nhiều thuộc tính của phân đoạn đầu tiên được gọi là tập thuộc tính chính. các phân đoạn khác được gọi là bộ sưu tập thuộc tính thông thường thường có thuộc tính Tên, là tên của phân đoạn chứa bộ sưu tập thuộc tính. Tệp kê khai của Android sẽ tạo một phân đoạn cho mỗi tệp trong zip. Giá trị của thuộc tính Tên của phân đoạn này là đường dẫn + tên tệp của tệp. Ngoài ra còn có thuộc tính SHA1-Digest. thông báo của tập tin Một chuỗi được mã hóa bằng base64. Ví dụ kê khai:
Phân đoạn chứa thuộc tính Manifest-Version và Created-By là tập thuộc tính chính và các tập thuộc tính khác là tập thuộc tính thông thường. Các tập thuộc tính thông thường này có thuộc tính Tên làm tên của phân đoạn. mã nguồn addDigestsToManifest:
// Một lỗi trong việc triển khai java.util.jar của nền tảng Android
// lên đến phiên bản 1.6 sẽ gây ra lỗi IOException không mong muốn
// nếu độ dài của tệp chữ ký là bội số của 1024 byte.
// Để giải quyết vấn đề này, hãy thêm CRLF bổ sung trong trường hợp này.
nếu như((cout. kích thước() % 1024) == 0) {
cout.write('\r');
cout.write('\N');
}
}
5) writeSignatureBlock sử dụng thuật toán SHA1withRSA để tính toán bản tóm tắt CERT.SF và mã hóa nó để lấy chữ ký số. Khóa riêng được sử dụng là khóa riêng, sau đó chữ ký số và khóa chung được lưu trữ trong CERT.RSA. Thư viện mã nguồn mở bouncycastle được sử dụng ở đây để ký.
Sử dụng dòng lệnh để ký lại APK Trên thực tế, có cách đơn giản nhất để ký lại apk, đó là tải xuống công cụ ký lại re-sign.jar, kéo apk vào cửa sổ của công cụ này. để tạo apk được ký lại. Bây giờ hãy để tôi nói về phương pháp ký lại phức tạp: sử dụng phương pháp dòng lệnh. 1. Để định cấu hình môi trường, bạn cần cài đặt jdk và sdk 2. Tìm tệp jarsigner.exe trong thư mục jdk đã được cài đặt thành công. Thư mục của máy này như sau: C:\Program Files\Java\jdk1. .8.0_20\bin 3. Chuẩn bị xóa Chữ ký của chính apk đã ký lại (fantongyo.apk) Mở apk ở chế độ Winrar, xóa thư mục META-INF và sao chép tệp Apk vào thư mục C:\Program Files\Java\jdk1.8.0_20\bin. 1.Thư mục META-INF: lưu trữ các tệp CERT và MANIFEST đã ký, được sử dụng để xác định thông tin chữ ký và phiên bản của phần mềm 2. thư mục còn lại: lưu trữ nhiều tài nguyên gốc của Android, bao gồm: hoạt hình, hình ảnh có thể vẽ, bố cục, menu, xml, 3. Tệp mô tả dự án Android được mã hóa bởi AndroidManifest.xml, bao gồm tên, giới hạn phiên bản và nhóm chương trình của dự án Android Mô tả tệp, v.v. 4. Sau khi Class.dex được biên dịch, Lớp được chương trình dx chuyển đổi thành tệp mã byte thực thi của máy ảo Dalvik 5. Resources.arsc là sản phẩm được biên dịch của tất cả các tài nguyên văn bản, chứa chuỗi tài nguyên tương ứng với từng Vị trí 4 Phương pháp 1 ký lại tệp Apk: Tạo lại chứng chỉ ký gói AndroidApk thông qua lệnh và sau đó ký lại tệp Apk 1. Chuyển sang thư mục bin của jdk trong cmd: cd C:\Program Files\Java\jdk1.8.0_20\bin Nhấn Enter 2. Sau đó nhập lệnh sau:
?
1
2
3
4
5
6
7
8
Công cụ khóa -genkey -bí danhfantongyo.keystore -keyalg RSA -giá trị 20000 -keystore fantongyo.keystore
/*Giải thích: Công cụ keytool là công cụ chứng chỉ đi kèm với Java JDK
Tham số -genkey cho biết: để tạo chứng chỉ (chứng chỉ bảo mật để nhận dạng bản quyền và danh tính)
-bí danhBiểu diễn tham số: Chứng chỉ có bí danh, -bí danhfantongyo.keystore chỉ ra rằng bí danh chứng chỉ là: fantongyo
-keyalg RSA cho biết loại mã hóa, RSA cho biết cần mã hóa để ngăn chặn người khác lấy cắp
-validity 20000 nghĩa là thời gian hiệu lực là 20000 ngày (K3
-keystore fantongyo.keystore chỉ ra rằng tên của chứng chỉ được tạo là fantongyo
*/
Sau khi gõ và nhấn Enter, màn hình hiển thị: Nhập mật khẩu kho khóa: [Mật khẩu không được lặp lại] (Thông thường nên sử dụng 20 chữ số, tốt nhất nên ghi lại và sử dụng sau) Nhập lại mật khẩu mới: [ Mật khẩu không được lặp lại](o' ^$ _( F( K& I0 Họ và tên của bạn là gì? [Không xác định]: fantongyo Tên đơn vị tổ chức của bạn là gì? [Không xác định]: fantong Tên tổ chức của bạn là gì ? [Không rõ]: cuộc sống Tên thành phố hoặc vùng của bạn là gì? ) L# V' |. E0 f; { [Không xác định]: Thâm Quyến Tên tiểu bang hoặc tỉnh của bạn là gì? [Không xác định]: guangdong Mã quốc gia gồm hai chữ cái là gì? đơn vị này? [Không xác định]: CN CN=fantongyo, U=fantong, O=đội fantong, L=shenzhen, ST=guangdong, C=CN đúng không? Mật khẩu chính của Mine.keystore> (nếu giống với mật khẩu kho khóa, hãy nhấn Enter): Kiểm tra thư mục C:\Program Files\Java\jdk1.8.0_20\bin để tạo tệp chứng chỉ fantongyo.keystore 3. Để ký lại tệp Apk, hãy nhập vào cmd: jarsigner –verbose –keystore fantongyo.keystore –signedjar fantongyo_signed.apk fantongyo.apk fantongyo.keystore /*Giải thích: * ^, {& k1 Z. M* P/ M+ K5 n5 hjarsigner là một công cụ chữ ký Java# K8 ~% s# Y. @6 Tham số P -verbose có nghĩa: hiển thị chi tiết chữ ký- nghĩa là kho khóa sử dụng tệp chứng chỉ ký fantongyo.keystore trong thư mục hiện tại -signedjar fantongyo_signed.apk có nghĩa là tên APK được tạo sau khi ký, % v a7 e2 v4 W#! ]; Gfantongyo.apk đại diện cho phần mềm APK Android chưa được ký, fantongyo.keystore đại diện cho bí danh */ Sau khi nhập key, màn hình hiển thị: jar đã được ký.
Tệp fantongyo_signed.apk đã được tạo lại trong thư mục C:\Program Files\Java\jdk1.8.0_20\bin.
Phương pháp 2. Ký lại tệp Apk bằng debug.keystore đi kèm với android 1. Mở Eclipse, thanh menu Window—>Preferences—>Android—>Build—>Thư mục kho khóa gỡ lỗi mặc định (trình chỉnh sửa của tôi hiển thị: C:\Users \ Administrator\.android\debug.keystore) 2. Copy file debug.keystore vào C:\Program Files\Java\jdk1.8.0_20\bin thư mục 3. Chuyển sang thư mục bin của jdk trong cmd: cd C:\Program Files\Java\jdk1.8.0_20\bin và nhấn Enter 4. Nhập lệnh sau:
Đi vào
5. Tìm tệp zipalign trong sdk. Thư mục trên máy tính của tôi là: E:\SoftWare\adt-bundle-windows-x86-20140702\sdk\build-tools\android-4.4W
Trong cmd, chuyển sang thư mục chứa tệp zipalign.exe trong sdk:
6. Sau đó nhập: zipalign 4 fantongyo.apk fantongyo_signed.apk (fantongyo_signed.apk là file apk được ký lại).
Cuối cùng, bài viết này về phương pháp ký và ký lại chương trình APK Android kết thúc tại đây. Nếu bạn muốn biết thêm về phương pháp ký và ký lại chương trình APK Android, vui lòng tìm kiếm bài viết CFSDN hoặc tiếp tục Duyệt liên quan. bài viết, hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .
Tôi muốn hiểu cách hoạt động của phương thức Ruby(). Tôi đã thử tìm kiếm trên Google bằng "phương pháp Ruby" nhưng đó không phải là thứ tôi cần. Tôi cũng đã xem ruby-doc.org nhưng tôi không tìm thấy phương pháp này.
Phương thức Kiểm tra thực hiện tìm kiếm biểu thức chính quy trên chuỗi đã chỉ định và trả về giá trị Boolean cho biết liệu có tìm thấy mẫu phù hợp hay không. Đối tượng tham số object.Test(string) là bắt buộc. luôn luôn là một
Phương thức Thay thế thay thế văn bản được tìm thấy trong tìm kiếm biểu thức chính quy. Đối tượng tham số object.Replace(string1, string2) là bắt buộc. Luôn là tên của đối tượng RegExp.
Phương thức Thực thi thực hiện tìm kiếm biểu thức chính quy trên chuỗi đã chỉ định. Đối tượng tham số object.Execute(string) là bắt buộc. Luôn là tên của đối tượng RegExp. sợi dây
Phương thức Clear xóa tất cả các cài đặt thuộc tính của đối tượng Err. object. Đối tượng Clear phải là tên của đối tượng Err. Mô tả Sau khi xử lý lỗi, hãy sử dụng Clear để xóa rõ ràng đối tượng Err. cái này
Phương thức Sao chép sao chép tệp hoặc thư mục được chỉ định từ vị trí này sang vị trí khác. đối tượng tham số object.Copy đích [, ghi đè] là bắt buộc. Nên là Tệp hoặc F
Phương thức Close đóng tệp TextStream đang mở. Đối tượng object.Close phải là tên của đối tượng TextStream. Ví dụ sau minh họa cách sử dụng phương thức Close.
Phương thức BuildPath thêm tên vào đường dẫn hiện có. Đối tượng tham số object.BuildPath(path, name) là bắt buộc. Phải là tên của đối tượng FileSystemObject
Phương thức GetFolder trả về đối tượng Thư mục tương ứng với một thư mục trong đường dẫn đã chỉ định. Đối tượng tham số object.GetFolder(folderspec) là bắt buộc. Phải là FileSy
Phương thức GetFileName trả về tệp hoặc thư mục cuối cùng tại đường dẫn đã chỉ định (không phải một phần của đường dẫn ổ đĩa đã chỉ định). Đối tượng tham số object.GetFileName(pathspec) là bắt buộc. nên
Phương thức GetFile trả về một đối tượng File tương ứng với một tệp trong đường dẫn đã chỉ định. Đối tượng tham số object.GetFile(filespec) là bắt buộc. FileSystemObject dự kiến
Phương thức GetExtensionName trả về một chuỗi chứa tên phần mở rộng của thành phần cuối cùng của đường dẫn. Đối tượng tham số object.GetExtensionName(path) là bắt buộc. trả lời
Phương thức GetDriveName trả về một chuỗi chứa tên ổ đĩa trong đường dẫn đã chỉ định. Đối tượng tham số object.GetDriveName(path) là bắt buộc. Đối tượng hệ thống tệp dự kiến
Phương thức GetDrive trả về đối tượng Drive tương ứng với ổ đĩa trong đường dẫn đã chỉ định. object.GetDrive đối tượng tham số drivespec là bắt buộc. Hệ thống tệp dự kiếnO
Phương thức GetBaseName trả về một chuỗi chứa tên cơ sở của tệp (không có phần mở rộng) hoặc thư mục trong đặc tả đường dẫn được cung cấp. Đối tượng tham số object.GetBaseName(path) là bắt buộc
Phương thức GetAbsolutePathName trả về một đường dẫn đầy đủ và được xác định rõ ràng từ đường dẫn đã chỉ định được cung cấp. Đối tượng tham số object.GetAbsolutePathName(pathspec)
Phương thức FolderExists trả về True nếu thư mục được chỉ định tồn tại; nếu không nó sẽ trả về Sai. Cần có đối tượng tham số object.FolderExists(folderspec)
Phương thức FileExists trả về True nếu tệp được chỉ định tồn tại; nếu không nó sẽ trả về Sai. Đối tượng tham số object.FileExists(filespec) là bắt buộc. Phải là FileS
Tôi là một lập trình viên xuất sắc, rất giỏi!