আমি এই কাজ শুরু। আমি এখানে এতক্ষণে আমার ফলাফলগুলি "সম্প্রদায়ের উইকি" উত্তর হিসাবে দু'টি কারণে পোস্ট করছি: প্রথমত, অন্য কেউ যদি এতে যোগ দিতে চায় তবে কথা বলার জায়গা আছে; দ্বিতীয়ত, যদি আমি এই প্রকল্প থেকে সরে আসি তবে অন্য কারও পক্ষে কাজ শুরু করার ইঙ্গিত পাওয়া যাবে।
হোস্টের ব্যাকআপ যুক্তিটি সম্পূর্ণরূপে নামের ফাংশনে https://github.com/android/platform_system_core/blob/master/adb/commandline.cpp এর মধ্যে রয়েছে backup
। ফাংশনটি খুব সহজ: এটি কমান্ড লাইন বিকল্পগুলি যাচাই করে, ফোনে অ্যাডাব ডেমনকে কমান্ডটি বেশিরভাগের মতো প্রেরণ করে এবং ফোনের ফোনের আউটপুটটি লিখে দেয়। এমনকি ত্রুটি-চেক করাও নেই: উদাহরণস্বরূপ, আপনি যদি ফোনে ব্যাকআপটি প্রত্যাখ্যান করেন, adb
কেবল একটি খালি ফাইল লিখুন।
ফোনে, ব্যাকআপ যুক্তিবিজ্ঞান মধ্যে শুরু হয় service_to_fd()
এ https://github.com/android/platform_system_core/blob/master/adb/services.cpp । ফাংশনটি সনাক্ত করে যে হোস্টের কাছ থেকে প্রাপ্ত আদেশটি "backup"
, এবং আনপার্সড কমান্ডটি পাস করে /system/bin/bu
যা একটি নতুন অ্যান্ড্রয়েড অ্যাপ্লিকেশন প্রক্রিয়ার মূল শ্রেণি হিসাবে চালু করার জন্য একটি তুচ্ছ শেল স্ক্রিপ্টcom.android.commands.bu.Backup
। কল ServiceManager.getService("backup")
একটি যেমন ব্যাকআপ সেবা পেতে IBackupManager
, এবং কলের IBackupManager.fullBackup()
এটি এখনও-অব্যবহৃত ফাইল বর্ণনাকারী ক্ষণস্থায়ী, (খুব পরোক্ষভাবে) এ সংযুক্ত backup.ab
হোস্ট ফাইল।
কন্ট্রোল হাতে থাকে fullBackup()
মধ্যে com.android.server.backup.BackupManagerService , যা GUI নিশ্চিত করতে ব্যবহারকারীকে জিজ্ঞাসা / ব্যাকআপ প্রত্যাখ্যান পপ আপ। যখন ব্যবহারকারী এটি করেন, acknowledgeFullBackupOrRestore()
(একই ফাইল) কল করা হয়। যদি ব্যবহারকারী এই অনুরোধটি অনুমোদন করে acknowledgeFullBackupOrRestore()
তবে ব্যাকআপটি এনক্রিপ্ট করা হয়েছে কিনা তা নির্ধারণ করে এবং BackupHandler
(একই ফাইলটি) একটি বার্তা পাঠায় BackupHandler
তবে তা ইনস্ট্যান্ট করে একটি PerformAdbBackupTask
( একই ফাইল, লেখার সময়কালে 4004 লাইন ) কেটে দেয়
আমরা অবশেষে PerformAdbBackupTask.run()
4151 লাইন এবং 4330 লাইনের মধ্যে আউটপুট উত্পাদন শুরু করি ।
প্রথমে run()
একটি শিরোলেখ লিখেছে, যার মধ্যে 4 বা 9 ASCII লাইন রয়েছে:
"ANDROID BACKUP"
- ব্যাকআপ বিন্যাস সংস্করণ: বর্তমানে
"4"
- হয়
"0"
যদি ব্যাকআপটি সঙ্কুচিত হয় বা "1"
হয়
- এনক্রিপশন পদ্ধতি: বর্তমানে পারেন
"none"
বা"AES-256"
- (যদি এনক্রিপ্ট করা থাকে), "ব্যবহারকারী পাসওয়ার্ড লবণ" হেক্সে এনকোড হয়েছে, সমস্ত ক্যাপ
- (যদি এনক্রিপ্ট করা থাকে), "মাস্টার কী চেকসাম লবণ" হেক্সে এনকোড করা হয়েছে, সমস্ত ক্যাপ
- (যদি এনক্রিপ্ট করা থাকে), দশমিক সংখ্যা হিসাবে "ব্যবহৃত PBKDF2 রাউন্ডগুলির সংখ্যা": বর্তমানে
"10000"
- (যদি এনক্রিপ্ট করা থাকে), "ব্যবহারকারী কী এর আইভি" হেক্সে এনকোড করা আছে, সমস্ত ক্যাপ
- (যদি এনক্রিপ্ট করা থাকে), "মাস্টার চতুর্থ + কী ব্লব, ব্যবহারকারী কী দ্বারা এনক্রিপ্ট করা" হেক্সে এনকোড করা আছে, সমস্ত ক্যাপ
প্রকৃত ব্যাকআপ তথ্য হিসাবে (কম্প্রেশন এবং এনক্রিপশন উপর নির্ভর করে), অনুসরণ পারেন tar
, deflate(tar)
, encrypt(tar)
, অথবা encrypt(deflate(tar))
।
ট্ডো : কোড আউটপুটটি টার আউটপুট উত্পন্ন করে লিখুন - এন্ট্রিগুলি যথাযথ ক্রমে যতক্ষণ থাকে ততক্ষণ আপনি নীচে ব্যবহার করতে পারেন (নীচে দেখুন)।
টার সংরক্ষণাগার বিন্যাস
অ্যাপ্লিকেশন ডেটা অ্যাপ্লিকেশন / ডিরেক্টরিতে সংরক্ষণ করা হয়, _ ম্যানিফেস্ট ফাইল দিয়ে শুরু করে, এপিএকে (যদি অনুরোধ করা হয়) এফ /, অ্যাপ্লিকেশন ফাইলগুলিতে ডি / / এ ডেটাবেজে এবং এসপি / তে ভাগ করা পছন্দসমূহ। আপনি যদি বাহ্যিক স্টোরেজ ব্যাকআপের জন্য অনুরোধ করেন (-সম্পাদিত বিকল্পটি ব্যবহার করে), বাহ্যিক স্টোরেজ ফাইলগুলি সংরক্ষণাগারটিতে একটি ভাগ / ডিরেক্টরি থাকবে।
$ tar tvf mybackup.tar
-rw------- 1000/1000 1019 2012-06-04 16:44 apps/org.myapp/_manifest
-rw-r--r-- 1000/1000 1412208 2012-06-02 23:53 apps/org.myapp/a/org.myapp-1.apk
-rw-rw---- 10091/10091 231 2012-06-02 23:41 apps/org.myapp/f/share_history.xml
-rw-rw---- 10091/10091 0 2012-06-02 23:41 apps/org.myapp/db/myapp.db-journal
-rw-rw---- 10091/10091 5120 2012-06-02 23:41 apps/org.myapp/db/myapp.db
-rw-rw---- 10091/10091 1110 2012-06-03 01:29 apps/org.myapp/sp/org.myapp_preferences.xml
এনক্রিপশন বিশদ
- একটি এইএস 256 কী এলোমেলোভাবে উত্পাদিত 512 বিট লবণের সাথে পিবিকেডিএফ 2 এর 10000 রাউন্ড ব্যবহার করে ব্যাকআপ এনক্রিপশন পাসওয়ার্ড থেকে নেওয়া হয়।
- একটি এইএস 256 মাস্টার কী এলোমেলোভাবে উত্পন্ন হয়
- একটি নতুন এলোমেলোভাবে উত্পাদিত 512 বিট লবণের সাথে পিবিকেডিএফ 2 এর 10000 রাউন্ডের মাধ্যমে মাস্টার কী চালিয়ে একটি মাস্টার কী 'চেকসাম' তৈরি করা হয়।
- একটি এলোমেলো ব্যাকআপ এনক্রিপশন IV উত্পন্ন হয়।
- চতুর্থ, মাস্টার কী এবং চেকসামটি 1 এ প্রাপ্ত কীটির সাথে একত্রিত হয়ে এবং এনক্রিপ্ট করা হয়েছে যার ফলে ফলকটি একটি শিরোনামের মতো একটি শিরোনামে সংরক্ষণ করা হয়।
- আসল ব্যাকআপ ডেটা মাস্টার কী দিয়ে এনক্রিপ্ট করা হয় এবং ফাইলটির শেষে যুক্ত হয়।
নমুনা প্যাক / আনপ্যাক কোড প্রয়োগকরণ (উত্পাদন / ব্যবহার) টার সংরক্ষণাগারগুলি: https://github.com/nelenkov/android-backup-extractor
আরও কিছু বিশদ এখানে: http://nelenkov.blogspot.com/2012/06/unpacking-android-backups.html
ভাঙা সংরক্ষণাগারগুলি প্যাকিং / আনপ্যাকিং এবং ফিক্সিংয়ের জন্য পার্ল স্ক্রিপ্টগুলি:
http://forum.xda-developers.com/showthread.php?p=27840175#post27840175