master-20221109063121-8fdfc5e: Merge pull request #101 from nelenkov/renovate/gradle-7.x
chore(deps): update dependency gradle to v7.5
master-20221009063057-8fdfc5e: Merge pull request #101 from nelenkov/renovate/gradle-7.x
chore(deps): update dependency gradle to v7.5
master-20220909063044-8fdfc5e: Merge pull request #101 from nelenkov/renovate/gradle-7.x
chore(deps): update dependency gradle to v7.5
master-20220809063558-8fdfc5e: Merge pull request #101 from nelenkov/renovate/gradle-7.x
chore(deps): update dependency gradle to v7.5
master-20220809062938-33a2f6c: Merge pull request #99 from nelenkov/renovate/github-codeql-action-2.x
chore(deps): update github/codeql-action action to v2
master-20220709062836-33a2f6c: Merge pull request #99 from nelenkov/renovate/github-codeql-action-2.x
chore(deps): update github/codeql-action action to v2
master-20220609062817-33a2f6c: Merge pull request #99 from nelenkov/renovate/github-codeql-action-2.x
chore(deps): update github/codeql-action action to v2
master-20220517081023-33a2f6c: Merge pull request #99 from nelenkov/renovate/github-codeql-action-2.x
chore(deps): update github/codeql-action action to v2
master-20220509062753-07bb660: Merge pull request #98 from nelenkov/renovate/gradle-7.x
chore(deps): update dependency gradle to v7.4.2
master-20220409062712-07bb660: Merge pull request #98 from nelenkov/renovate/gradle-7.x
chore(deps): update dependency gradle to v7.4.2
License
Apache License V2.0
Bidlogix provide auction software to auction houses around the globe.
We offer timed auction software, webcast auction software along with an optional invoicing management system.
Our software is embedded on your site with fully customisable styling.
Based in Brighton, UK Bidlogix started providing auction software in 2013. Our 2 in-house development teams are constantly evolving the product with in excess of 10 auctions per day being run using our software.
Our software can cater for the largest of auctions, all in real-time and can support multiple languages.
User Ratings
4.9
out of 5 stars
★★★★★
★★★★
★★★
★★
★
ease
1 of 5
2 of 5
3 of 5
4 of 5
5 of 5
4 / 5
features
1 of 5
2 of 5
3 of 5
4 of 5
5 of 5
4 / 5
design
1 of 5
2 of 5
3 of 5
4 of 5
5 of 5
4 / 5
support
1 of 5
2 of 5
3 of 5
4 of 5
5 of 5
4 / 5
User Reviews
- All
- ★★★★★
- ★★★★
- ★★★
- ★★
- ★
-
Great project — thanks so much for posting it — works perfectly.
-
Very good program. One remark though, please make sure users do not need to provide their passwords in the command line, which makes it visible to everybody…
Read more reviews >
Additional Project Details
User Interface
Console/Terminal, Command-line
Programming Language
Unix Shell, Perl, Java
Utility to extract and repack Android backups created with adb backup
(ICS+). Largely based on BackupManagerService.java
from AOSP.
Requires Java 11. Handling encrypted backups requires the JCE unlimited strength jurisdiction policy (not needed if using current Java 9 release).
With Eclipse:
Download the latest version of Bouncy Castle Provider jar (bcprov-jdk15on-*.jar
) from here:
Drop the latest Bouncy Castle jar in lib/
, import in Eclipse and adjust build path if necessary. Use the abe
script to start the utility.
With Maven (requires at least JDK11):
To create a self-executable all-in-one jar: mvn clean package
and then:
java -jar target/abe.jar pack|unpack|pack-kk ...
With Ant:
Use the bundled Ant script to create an all-in-one jar and run with: (you still need to put the Bouncy Castle jar in lib/; modify the bcprov.jar
property accordingly)
java -jar abe.jar pack|unpack|pack-kk ...
(Thanks to Jan Peter Stotz for contributing the build.xml file)
With Gradle:
Use gradle to create an all-in-one jar: ./gradlew
and then:
java -jar build/libs/abe-all.jar pack|unpack|pack-kk ...
Syntax:
- unpack:
abe unpack <backup.ab> <backup.tar> [password]
- pack:
abe pack <backup.tar> <backup.ab> [password]
- pack for 4.4:
abe pack-kk <backup.tar> <backup.ab> [password]
(creates version 2 backups, compatible with Android 4.4.3)
If the filename is -
, then data is read from standard input or written to standard output.
If the password is not given on the command line, then the environment variable ABE_PASSWD
is tried. If you don’t specify a password the backup archive won’t be encrypted but only compressed.
Packing tar archives
- Android is very particular about the order of files in the tar archive. The format is described here.
- Incompatible tar archives lead to errors or even system crashes.
- Apps with the
allowBackup
flag set tofalse
are not backed up nor restored.- (you can try restoring manually via
adb push
andadb shell
)
- (you can try restoring manually via
- Errors are only printed to logcat, look out for
BackupManagerService
.
The safest way to pack a tar archive is to get the list of files from the original backup.tar file:
tar tf backup.tar | grep -F "com.package.name" > package.list
And then use that list to build the tar file. In the extracted backup directory:
tar cf restore.tar -T package.list
You can now pack restore.tar
and try adb restore restore.ab
Я выполнял резервное копирование своего Nexus 7 с помощью adb backup
резервного копирования всех файлов в зашифрованную резервную копию. Я вижу, что вы можете восстановить из резервной копии с помощью adb restore
, но это сотрет все мои существующие данные на устройстве.
Как именно я могу извлечь данные одного приложения из этого зашифрованного файла резервной копии?
Ответы:
Просто для справки других, вот некоторые сведения о формате файла .ab.
Файл Android Backup (* .ab) представляет собой сжатый файл TAR . Он сжимается с использованием алгоритма DEFLATE . Кроме того, может быть использовано шифрование AES . Это определяется при создании резервной копии, если вы вводите пароль, то резервная копия шифруется, в противном случае; нет шифрования, оно только сжато.
ЗАГОЛОВОК файла немного отличается от обычного архива DEFLATE. Он содержит информацию о резервной копии и выглядит следующим образом:
ANDROID BACKUP
1
1
none
Первая строка — это «Волшебная» строка . Следующая строка — версия формата файла Android Backup. Следующая строка — логическое значение (true или false, 1 или 0), указывающее, сжат ли файл. Последняя строка — это тип шифрования. Этот пример не использует шифрование. Если был пароль, в строке было бы написано «AES-256». После этого идет шифрование. Если пароля нет, то запускается «архив» DEFLATE.
Он сжимается с помощью Java Deflater . Что, с точки зрения разработчика, вызывает проблемы, если вы хотите использовать что-то кроме Java для его извлечения. Я не смог найти ничего, что могло бы спустить это с помощью того же алгоритма, хотя все, что я нашел (например, C #), должно следовать «SPEC».
С учетом вышесказанного , существует проект с открытым исходным кодом под лицензией Apache 2.0, написанный Николаем Еленковым , который позволит вам извлечь .ab в файл tar.
Использование:
java -jar abe.jar unpack <backup.ab> <backup.tar> <password>
Если вы не уверены, как на самом деле использовать это (что выходит за рамки этого ответа), следующая версия Droid Explorer v0.8.8.7 ( доступна здесь ) позволит вам сделать именно это, и даже больше, прямо из Explorer. Вы можете прочитать больше о функциях в моем блоге (да, я знаю, бесстыдный плагин. Я делаю это, когда это соответствует вопросу)
Или с одним вкладышем:
( printf "x1fx8bx08x00x00x00x00x00" ; tail -c +25 backup.ab ) | tar xfvz -
Еще один вариант заключается в использовании bash
, cat
и gunzip
( gzip
).
Полный процесс может быть таким ( с незашифрованной резервной копией ):
-
резервное копирование данных одного приложения (например, « Переопределить DNS для KitKat »):
$ adb backup -f net.mx17.overridedns.ab -noapk net.mx17.overridedns Now unlock your device and confirm the backup operation.
-
извлечь сжатые данные
$ dd if=net.mx17.overridedns.ab bs=1 skip=24 > compressed-data 1285+0 records in 1285+0 records out 1285 bytes (1,3 kB) copied, 0,00745877 s, 172 kB/s
-
распаковать сжатые данные
$ printf "x1fx8bx08x00x00x00x00x00" | cat - compressed-data | gunzip -c > decompressed-data.tar gzip: stdin: unexpected end of file
-
«распаковать» файл tar
$ tar xf decompressed-data.tar
Другой вариант — использование Perl AdbBackupRoutines из этого потока XDA . У них есть несколько требований, хотя: Perl , очевидно, плюс libterm-readkey-perl
, libcrypt-cbc-perl
и libcrypt-pbkdf2-perl
(если ваши резервные копии в незашифрованном виде, вы можете пропустить последнюю зависимость просто закомментировать строки 103 , backupdecrypt.pl
где он включен — работал нормально для меня).
Использование довольно просто:
./backupdecrypt.pl [options] <backupfile.ab> <outfile.tar>
Полученный .tar
файл затем может быть исследован, как и любой другой архив. Его структура весьма интересна, по крайней мере, в одном аспекте: она не отражает реальные пути, откуда были взяты файлы (например, нет /data/data/com.app.name/databases/whatever.db
, но вместо этого apps/com.app.name/db/whatever.db
), что указывает на то, что резервная копия приложения на одном устройстве / ПЗУ может быть восстановлена в Любое другое устройство / ПЗУ без проблем, так как сам adb restore
должен выяснить реальные пути.
Основываясь на информации, полученной от других, теперь я знаю, что файл резервной копии является просто потоком с префиксом Deflated (GZip), на основе этой информации эта простая программа может распаковать его для вас:
import java.io.*;
import java.util.zip.*;
/** Run: javac unab.java && java unab backupfile.ab */
public class unab {
private static final int BACKUP_HEADER_LENGTH = 24;
public static void main(String[] args) throws IOException {
InputStream in = new FileInputStream(args[0]);
try {
OutputStream out = new FileOutputStream(args[0] + ".tar");
try {
if (in.skip(BACKUP_HEADER_LENGTH) != BACKUP_HEADER_LENGTH) {
throw new IOException("Unexpected end of file while skipping backup header.");
}
byte[] buffer = new byte[100 * 1024];
int count;
InputStream zip = new InflaterInputStream(in);
while ((count = zip.read(buffer)) > 0) {
out.write(buffer, 0, count);
}
} finally {
out.close();
}
} finally {
in.close();
}
}
}
Я написал это, потому что у меня нет ни одного из инструментов Unix, упомянутых выше, и это было проще, чем установить Cygwin или другие инструменты.
Преимущества :
- кросс-платформенный
- простой (без эзотерических параметров)
- нет необходимости в инструментах для обвязки
Недостатки :
- нужен JDK (который у вас, вероятно, уже есть, потому что вы возитесь с Android SDK)
- нет поддержки зашифрованных резервных копий
- нужно что-то, чтобы извлечь полученный файл tar (я использую Total Commander)
Для этого создайте инструмент командной строки unab.bat
с содержимым: java -cp "%~dp0." unab %*
и каталогом PATH
.
25 August 2017
Following on from last weeks post, this post is going to look
at extracting backup files using dd and Android backup
extractor.
Using dd for unencrypted backups
If the file is not encrypted dd
can and be used to extract the data. You can
quickly verify if the file is encrypted by checking the header. The header of
unencrypted files will look similar to the following:
ANDROID BACKUP
1
1
none
The first line indicates the file is an Android backup, the second line is the
backup format version, the third line indicates if the backup is compressed,
and finally the last line is the type of encryption used. As long as the last
line is none
and not AES-256
the following steps should work:
-
Extract the data from the backup using
dd
:dd if=backup.ab bs=1 skip=24 of=data
-
If the file was compressed use
openssl
to decompress the data:openssl zlib -d -in data -out data.tar
Note: if you don’t have
openssl
installed, or if it was not
compiled withzlib
support, gzip can be used instead:printf "x1fx8bx08x00x00x00x00x00" | cat - data | gzip -dc > data.tar
Alternatively you can use the
zlib
module in Python:python -c "import zlib;open('data.tar','wb').write(zlib.decompress(open('data', 'rb').read()))"
-
Finally the files in the backup can be extracted using tar:
tar xvf data.tar
The steps above can be run in one go with a command similar to the following:
dd if=backup.ab bs=1 skip=24 | openssl zlib -d | tar xvf -
Android backup extractor
More recent versions of Android use encryption when creating backups. As a
result the method above using dd
doesn’t work. There is however a tool called
Android backup extractor which can be used
to unpack encrypted backups.
Installation
Android backup extractor can be installed with the following steps:
-
Install
java
,ant
andgit
, on CentOS this can be done withyum
:sudo yum install -y java ant git
-
Clone the source from GitHub:
git clone https://github.com/nelenkov/android-backup-extractor.git
-
Switch to the
android-backup-extractor
directory:cd android-backup-extractor
-
Download the latest version of the Bouncy Castle
library:curl -L https://www.bouncycastle.org/download/bcprov-jdk15on-158.jar -o lib/bcprov-jdk15on-158.jar
-
Update
build.xml
to use the correct version of the Bouncy Castle library:sed -i 's/bcprov-jdk15on-150.jar/bcprov-jdk15on-158.jar/' build.xml
-
Run
ant
to build the source code:ant
If everything went well the output of
ant
should look similar to the following:$ ant Buildfile: /home/user/android-backup-extractor/build.xml build: [javac] Compiling 2 source files to /home/user/android-backup-extractor/build [javac] warning: [options] bootstrap class path not set in conjunction with -source 1.7 [javac] 1 warning jar: [jar] Building jar: /home/hmm/android-backup-extractor/abe.jar all: BUILD SUCCESSFUL Total time: 3 seconds
Unpacking files
Once Android backup extractor is installed, backup files can be unpacked with
the following command:
abe unpack <backup.ab> <backup.tar> [password]
This will write the data to a tar file and produce output similar to the
following:
$ ./abe unpack backup.ab output.tar secret_password
Calculated MK checksum (use UTF-8: true): E612441F07EABF08AA761C3EC0C75EB102E3D36B8CC1ED54CC7F5E56A049C838
0% 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% 37% 38% 39% 40% 41% 42% 43% 44% 45% 46% 47% 48% 49% 50% 51% 52% 53% 54% 55% 56% 57% 58% 59% 60% 61% 62% 63% 64% 65% 66% 67% 68% 69% 70% 71% 72% 73% 74% 75% 76% 77% 78% 79% 80% 81% 82% 83% 84% 85% 86% 87% 88% 89% 90% 91% 92% 93% 94% 95% 96% 97% 98% 99% 100%
1730560 bytes written to output.tar.
Note: you can also run abe
indirectly using java
and the -jar
option:
java -jar abe.jar unpack backup.ab output.tar secret_password