У меня возникла необходимость перенести сторонние ключи из Яндекс.Ключ в другое приложение.
Какой наиболее простой способ это сделать? Тех. поддрежка Яндекса говорит, что только из/в Яндекс.Ключ через backup в облако по номеру.
Сложный вариант, который я использовал:
1. Поднять эмулятор Андройда (я использовал LDPlay)
2. Включить ROOT
3. С помощью ADB (есть в эмуляторе) залить frida-server
4. Создать Python venv и pip install frida-tools
5. Скачать с Frida CodeShare realgam3/dynamichooks
6. Настроить Hook'и:
hook("com.yandex.auth.authenticator.storage.Vault.string", {
logLevel: 1,
arguments: ['java.lang.String'],
stackTrace: false,
callOriginal: false,
});
hook("com.yandex.auth.authenticator.storage.Vault.int", {
logLevel: 1,
arguments: ['java.lang.String'],
stackTrace: false,
callOriginal: false,
stringifyResult: function (arg, ctx) {
return arg.toString();
}
});
hook("com.yandex.auth.authenticator.storage.Vault.long", {
logLevel: 1,
arguments: ['java.lang.String'],
stackTrace: false,
callOriginal: false,
stringifyResult: function (arg, ctx) {
return arg.toString();
}
});
7. На хосте запустить: (.venv-frida) PS C:\Temp\frida> frida -U -l .\dynamic-hooks.js -f ru.yandex.key > log.txt
8. В эмуляторе в Яндекс.Ключе восстановить данные из облака
В результате в логе будут пачки из строчек вида:
VERSION.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"],"result":"1"}
TYPE.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"],"result":"RFC"}
SECRET.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"],"result":"vvvvvvvvvvvvvvvvv"}
PIN.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"],"result":null}
ALGORITHM.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"],"result":"SHA1"}
PERIOD.xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"],"result":"30000"}
где 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx' это UUID записи из /data/ru.yandex.key/files/account:
[
{
"type": "com.yandex.auth.authenticator.serializing.entities.Account.Regular",
"id": {
"value": "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
},
"login": {
"value": "UserName"
},
"issuer": {
"value": "example.com"
},
"otpLength": {
"type": "com.yandex.auth.authenticator.models.OtpLength.Default"
}
}
]
Не уж то нет способа попроще, чтобы вытащить свои данные из приложения, которые сам же туда и добавил?