рдореБрдЭреЗ рдПрдВрдбреНрд░реЙрдЗрдб рд╕реБрд░рдХреНрд╖рд╛ рдореЗрдВ рдИрд╕реНрдЯрд░ рдЕрдВрдбреЗ рдХреИрд╕реЗ рдорд┐рд▓рд╛ рдФрд░ Google рдкрд░ рдиреМрдХрд░реА рдирд╣реАрдВ рдорд┐рд▓реА

Google рдХреЛ рдИрд╕реНрдЯрд░ рдЕрдВрдбреЗ рдкрд╕рдВрдж рд╣реИрдВред рд╡рд╣ рдЗрддрдирд╛ рдкреНрдпрд╛рд░ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЙрдиреНрд╣реЗрдВ рдХрдВрдкрдиреА рдХреЗ рд▓рдЧрднрдЧ рд╣рд░ рдЙрддреНрдкрд╛рдж рдореЗрдВ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред рдПрдВрдбреНрд░реЙрдЗрдб рдореЗрдВ рдИрд╕реНрдЯрд░ рдЕрдВрдбреЗ рдХреА рдкрд░рдВрдкрд░рд╛ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдгреЛрдВ рд╕реЗ рдлреИрд▓рддреА рд╣реИ (рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рд░ рдХреЛрдИ рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдЕрдЧрд░ рдЖрдк рд╕реЗрдЯрд┐рдВрдЧ рдореЗрдВ рдХрдИ рдмрд╛рд░ рдПрдВрдбреНрд░реЙрдЗрдб рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╕рд╛рде рд▓рд╛рдЗрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдХреНрдпрд╛ рд╣реЛрдЧрд╛)ред

рд▓реЗрдХрд┐рди рдпрд╣ рднреА рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдИрд╕реНрдЯрд░ рдЕрдВрдбреЗ рд╕рдмрд╕реЗ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд╕реНрдерд╛рдиреЛрдВ рдореЗрдВ рдкрд╛рдП рдЬрд╛рддреЗ рд╣реИрдВред рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдРрд╕реА рдХрд┐рдВрд╡рджрдВрддреА рднреА рд╣реИ: рдПрдХ рдмрд╛рд░ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ google "mutex рд▓реЙрдХ", рдФрд░ рдЦреЛрдЬ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЗ рдмрдЬрд╛рдп, foo.bar рдкреЗрдЬ рдкрд░ рдЧрдпрд╛, рд╕рднреА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рдФрд░ Google рдкрд░ рдиреМрдХрд░реА рдкреНрд░рд╛рдкреНрдд рдХреАред

рдШрдЯрдирд╛рдУрдВ рдХрд╛ рдкреБрдирд░реНрдирд┐рд░реНрдорд╛рдг
рдЫрд╡рд┐

рдпрд╣рд╛рдБ рдПрдХ рд╣реА рдЕрджреНрднреБрдд рдХрд╣рд╛рдиреА рд╣реИ (рдХреЗрд╡рд▓ рдПрдХ рд╕реБрдЦрдж рдЕрдВрдд рдХреЗ рдмрд┐рдирд╛) рдореЗрд░реЗ рд╕рд╛рде рд╣реБрдЖред рдЫрд┐рдкреЗ рд╣реБрдП рд╕рдВрджреЗрд╢ рдЬрд╣рд╛рдВ рд╡реЗ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд╛рд╡рд╛ рдХреЛрдб рдФрд░ рджреЗрд╢реА рдкреБрд╕реНрддрдХрд╛рд▓рдп, рдПрдХ рдЧреБрдкреНрдд рдЖрднрд╛рд╕реА рдорд╢реАрди, Google рдкрд░ рдПрдХ рд╕рд╛рдХреНрд╖рд╛рддреНрдХрд╛рд░ - рдХрдЯ рдХреЗ рддрд╣рдд рдпрд╣ рд╕рдмред

DroidGuard


рдПрдХ рдЙрдмрд╛рдК рд╢рд╛рдо, рдореИрдВрдиреЗ рдПрдХ рдХрд╛рд░рдЦрд╛рдирд╛ рд░реАрд╕реЗрдЯ рдХрд┐рдпрд╛ рдФрд░ рд╕реНрдорд╛рд░реНрдЯрдлреЛрди рдХреЛ рдлрд┐рд░ рд╕реЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рддрд╛рдЬрд╛ рдПрдВрдбреНрд░реЙрдЗрдб рдиреЗ рдореБрдЭреЗ рдЕрдкрдирд╛ Google рдЦрд╛рддрд╛ рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ред "рджрд┐рд▓рдЪрд╕реНрдк рд╣реИ, рд▓реЗрдХрд┐рди рдПрдВрдбреНрд░реЙрдЗрдб рдореЗрдВ рдкрдВрдЬреАрдХрд░рдг рдФрд░ рд▓реЙрдЧрд┐рди рдХреИрд╕реЗ рд╣реЛрддрд╛ рд╣реИ?" рдореИрдВрдиреЗ рд╕реЛрдЪрд╛ред рд╢рд╛рдо рдврд▓ рдЧрдИред

рдпрд╛рддрд╛рдпрд╛рдд рдХреЛ рдмрд╛рдзрд┐рдд рдХрд░рдиреЗ рдФрд░ рдЙрд╕рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рдкреЛрд░реНрдЯрд╕реНрд╡рд┐рдЧрд░ рд╕реЗ рдмрд░реНрдк рд╕реВрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдПрдХ рдореБрдХреНрдд рд╕рд╛рдореБрджрд╛рдпрд┐рдХ рд╕рдВрд╕реНрдХрд░рдг рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ред рддрд╛рдХрд┐ рд╣рдо https рдЕрдиреБрд░реЛрдз рджреЗрдЦ рд╕рдХреЗрдВ, рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЖрдкрдХреЛ рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдкреЛрд░реНрдЯрд╕реНрд╡рд┐рдЧрд░ рд╕реЗ рдПрдХ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд▓рд┐рдП, рдореЗрд░реЗ рдбрд┐рдмреНрдмреЗ рдореЗрдВ рдореБрдЭреЗ рдПрдХ рдЖрда рд╕рд╛рд▓ рдХрд╛ рд╕реИрдорд╕рдВрдЧ рдЧреИрд▓реЗрдХреНрд╕реА рдПрд╕ рдорд┐рд▓рд╛, рдЬрд┐рд╕рдореЗрдВ рдПрдВрдбреНрд░реЙрдЗрдб 4.4 рдерд╛ред рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреБрдЫ рдлреНрд░реЗрд╢рд░ рд╣реИ, рддреЛ рдЖрдкрдХреЛ https: рд╕рд░реНрдЯрд┐рдлрд┐рдХреЗрдЯ рдкрд┐рдирд┐рдВрдЧ рдФрд░ рд╡рд╣ рд╕рдм рдХреБрдЫ рдХреА рд╕рдорд╕реНрдпрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред

рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, Google API рддрдХ рдкрд╣реБрдБрдЪрдиреЗ рдореЗрдВ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдХреБрдЫ рднреА рдирд╣реАрдВ рд╣реИред рдбрд┐рд╡рд╛рдЗрд╕ рд╕реНрд╡рдпрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдбреЗрдЯрд╛ рднреЗрдЬрддрд╛ рд╣реИ, рдмрджрд▓реЗ рдореЗрдВ рдЯреЛрдХрди рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ ... рдХреЗрд╡рд▓ рдЕрддреБрд▓рдиреАрдп рдХреНрд╖рдг рдПрдВрдЯреА-рджреБрд░реБрдкрдпреЛрдЧ рд╕реЗрд╡рд╛ рдХреЗ рд▓рд┐рдП POST рдЕрдиреБрд░реЛрдз рд╣реИред



рдЗрд╕ рдЕрдиреБрд░реЛрдз рдХреЗ рдмрд╛рдж, рдЕрдЪреВрдХ рдорд╛рдкрджрдВрдбреЛрдВ рдХреЗ рдмреАрдЪ, рдПрдХ рд░рд╣рд╕реНрдпрдордп рдПрдХ рдкреНрд░рдХрдЯ рд╣реЛрддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ droidguard_result рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдмрд╣реБрдд рд▓рдВрдмрд╛ рдмреЗрд╕ 64 рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реИ:



DroidGuard рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрдкрдХрд░рдгреЛрдВ рд╕реЗ рдмреЙрдЯ рдФрд░ рдПрдореБрд▓реЗрдЯрд░ рдХреЛ рдЕрд▓рдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ Google рддрдВрддреНрд░ рд╣реИред рд╕реЗрдлреНрдЯреАрдиреЗрдЯ рдЕрдкрдиреЗ рдХрд╛рдо рдореЗрдВ DroidGuard рдХреЗ рдбреЗрдЯрд╛ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд▓рд┐рдП Google рдХреА рдПрдХ рд╕рдорд╛рди рдЪреАрдЬ рд╣реИ - рдмреЙрдЯрдЧрд╛рд░реНрдбред

рд▓реЗрдХрд┐рди рдлрд┐рд░ рднреА, рдпрд╣ рдбреЗрдЯрд╛ рдХреНрдпрд╛ рд╣реИ, рдЗрд╕рдореЗрдВ рдХреНрдпрд╛ рд╕рдВрдЪрд░рд┐рдд рд╣реИ? рдЕрдм рд╣рдо рд╕рдордЭреЗрдВрдЧреЗред

рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдмрдлрд╝рд░реНрд╕


Www.googleapis.com/androidantiabuse/v1/x/create?alt=PROTO&key=AIzaSyBofcZsgLSS7BOnBjZPEkk4wYwzOIz-lTI рд▓рд┐рдВрдХ рдХрд╣рд╛рдВ рд╕реЗ рдЖрддрд╛ рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдВрдбреНрд░реЙрдЗрдб рд╕рд┐рд╕реНрдЯрдо рдкрд░ рдпрд╣ рдЕрдиреБрд░реЛрдз рдХреМрди рдХрд░рддрд╛ рд╣реИ? рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐ рдпрд╣ рд▓рд┐рдВрдХ рд╕реАрдзреЗ Google Play Services рдХрдХреНрд╖рд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдореЗрдВ рдЗрд╕ рд░реВрдк рдореЗрдВ рд╕рдВрдЧреНрд░рд╣реАрдд рд╣реИ:

public bdd(Context var1, bdh var2) {
  this(var1, "https://www.googleapis.com/androidantiabuse/v1/x/create?alt=PROTO&key=AIzaSyBofcZsgLSS7BOnBjZPEkk4rYwzOIz-lTI", var2);
}

Burp, Content-Type POST тАФ application/x-protobuf (Google Protocol Buffers, Google). json, тАФ , .

protocol buffers :

  • .proto
  • .proto , protoc ( Android Java)

protobuf . тАФ - protobuf .proto . тАФ protoc- Google Play Services. .

apk Google Play Services , ( , apk ). dex2jar .dex .jar . Fernflower JetBrains. IntelliJ IDEA ( Android Studio), Android Studio . proguard , Java protobuf .

, protobuf Build.* (, ):

...
var3.a("4.0.33 (910055-30)");
a(var3, "BOARD", Build.BOARD);
a(var3, "BOOTLOADER", Build.BOOTLOADER);
a(var3, "BRAND", Build.BRAND);
a(var3, "CPU_ABI", Build.CPU_ABI);
a(var3, "CPU_ABI2", Build.CPU_ABI2);
a(var3, "DEVICE", Build.DEVICE);
...

, , protobuf . , . , :

if (!var7.d()) {
    throw new bdf("byteCode");
}
if (!var7.f()) {
    throw new bdf("vmUrl");
}
if (!var7.h()) {
    throw new bdf("vmChecksum");
}
if (!var7.j()) {
	throw new bdf("expiryTimeSecs");
}

, : byteCode, vmUrl, vmChecksum expiryTimeSecs. .

Google Play Services , , Build.* ( ). - , .

:
00:06:26.761 [main] INFO d.a.response.AntiabuseResponse тАФ byteCode size: 34446
00:06:26.761 [main] INFO d.a.response.AntiabuseResponse тАФ vmChecksum: C15E93CCFD9EF178293A2334A1C9F9B08F115993
00:06:26.761 [main] INFO d.a.response.AntiabuseResponse тАФ vmUrl: www.gstatic.com/droidguard/C15E93CCFD9EF178293A2334A1C9F9B08F115993
00:06:26.761 [main] INFO d.a.response.AntiabuseResponse тАФ expiryTimeSecs: 10

. , vmUrl.

apk


.apk , SHA-1 . apk тАФ 150 . : Android , 270 .



DroidGuardService, Google Play Services, , , .dex .so , reflection, com.google.ccc.abuse.droidguard.DroidGuard. - , DroidGuardService DroidGuard Droidguasso. Droidguasso тАФ .

, DroidGuard тАФ JNI .so . ABI , protobuf CPU_ABI: armeabi, x86, mips.

DroidGuardService - DroidGuard. DroidGuard, byteCode protobuf , , . droidguard_result.

, DroidGuard DroidGuardService ( apk, ). .dex APK, .jar . , DroidGuard . loadDroidGuardLibrary():

static
  {
    try
    {
      loadDroidGuardLibrary();
    }
    catch (Exception ex)
    {
      throw new RuntimeException(ex);
    }
  }

, loadDroidGuardLibrary() library.txt ( .apk ) System.load(String filename). , - apk, library.txt .so . .so lib System.loadLibrary(String libname).

. smali/baksmali тАФ / dex . classes.dex .smali . com.google.ccc.abuse.droidguard.DroidGuard , System.loadLibrary("droidguard") loadDroidGuardLibrary(). smali , :

.method static constructor <clinit>()V
    .locals 1
    const-string v0, "droidguard"
    invoke-static {v0}, Ljava/lang/System;->loadLibrary(Ljava/lang/String;)V
    return-void
.end method

baksmali .dex, .jar. jar , . , .

DroidGuard . тАФ , anti-abuse DroidGuard.

private fun runDroidguard() {
        var byteCode: ByteArray? = loadBytecode("bytecode.base64");
        byteCode?.let {
            val droidguard = DroidGuard(applicationContext, "addAccount", it)
            val params = mapOf("dg_email" to "test@gmail.com", "dg_gmsCoreVersion" to "910055-30",
                "dg_package" to "com.google.android.gms", "dg_androidId" to UUID.randomUUID().toString())
            droidguard.init()
            val result = droidguard.ss(params)
            droidguard.close()
        }
    }

Android Studio , DroidGuard.



initNative() java-: hasSystemFeature(), getMemoryInfo(), getPackageInfo()тАж -, . , , .so .

libdroidguard.so


, , .dex .jar . , Hex-Rays IDA arm x86, . arm, . , x86 .

, Hex-Rays IDA, - c-. Java_com_google_ccc_abuse_droidguard_DroidGuard_ssNative, :

__int64 __fastcall Java_com_google_ccc_abuse_droidguard_DroidGuard_initNative(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9)  
...
  v14 = (*(_DWORD *)v9 + 684))(v9, a5);  
  v15 = (*(_DWORD *)v9 + 736))(v9, a5, 0);
...

. , . JNI, Android NDK jni.h. , JNI тАФ JNIEnv* jobject (this). Java DroidGuard. , JNI :

__int64 __fastcall Java_com_google_ccc_abuse_droidguard_DroidGuard_initNative(_JNIEnv *env, jobject thiz, jobject context, jstring flow, jbyteArray byteCode, jobject runtimeApi, jobject extras, jint loggingFd, int runningInAppSide)
{
...
  programLength = _env->functions->GetArrayLength)(_env, byteCode);  
  programBytes = (jbyte *)_env->functions->GetByteArrayElements)(_env, byteCode, 0);
...

, anti-abuse , . , ┬л ?┬╗ . -, тАФ . AES , - . тАФ , . , 70: int, byte, , java , , if-goto .

Wake up, Neo


- . : ( ) , . , Java.

- . , , dlsym . java 5 25 - anti-abuse . 26- -. , .
Virtual Machine command #26
Method invocation vm->vm_method_table[2 * 0x77]
Method vmMethod_readString
index is 0x9d
string length is 0x0066
(new key is generated)
encoded string bytes are EB 4E E6 DC 34 13 35 4A DD 55 B3 91 33 05 61 04 C0 54 FD 95 2F 18 72 04 C1 55 E1 92 28 11 66 04 DD 4F B3 94 33 04 35 0A C1 4E B2 DB 12 17 79 4F 92 55 FC DB 33 05 35 45 C6 01 F7 89 29 1F 71 43 C7 40 E1 9F 6B 1E 70 48 DE 4E B8 CD 75 44 23 14 85 14 A7 C2 7F 40 26 42 84 17 A2 BB 21 19 7A 43 DE 44 BD 98 29 1B
decoded string bytes are 59 6F 75 27 72 65 20 6E 6F 74 20 6A 75 73 74 20 72 75 6E 6E 69 6E 67 20 73 74 72 69 6E 67 73 20 6F 6E 20 6F 75 72 20 2E 73 6F 21 20 54 61 6C 6B 20 74 6F 20 75 73 20 61 74 20 64 72 6F 69 64 67 75 61 72 64 2D 68 65 6C 6C 6F 2B 36 33 32 36 30 37 35 34 39 39 36 33 66 36 36 31 40 67 6F 6F 67 6C 65 2E 63 6F 6D
decoded string value is (You're not just running strings on our .so! Talk to us at droidguard@google.com)

, . , , . , , anti-abuse -. 25-30 - . , . , , . ┬лdroidguard+tag@google.com┬╗: anti-abuse tag .
droidguard@google.com: Don't be a stranger!
You got in! Talk to us at droidguard@google.com
Greetings from droidguard@google.com intrepid traveller! Say hi!
Was it easy to find this? droidguard@google.com would like to know
The folks at droidguard@google.com would appreciate hearing from you!
What's all this gobbledygook? Ask droidguard@google.comтАж they'd know!
Hey! Fancy seeing you here. Have you spoken to droidguard@google.com yet?
You're not just running strings on our .so! Talk to us at droidguard@google.com

, ? , DroidGuard Google, .


. , . , - . , . , Hex-Rays IDA, . .

Java . jelf ( ELF ) Java_com_google_ccc_abuse_droidguard_DroidGuard_initNative , Capstone ( , , Java) .

, DroidGuard: anti-abuse , apk, , , , -. , Google. glassdoor . .

. DroidGuard : ┬л ?┬╗.



┬л┬╗ тАФ . Google , DroidGuard: Android ( !). DroidGuard. .


. DroidGuard . ? !

Google . , тАФ hr . .

Google . , Google Doc , . ┬л┬╗ coursera, hackerrank, тАж

. , тАФ . Google Doc IDE. , . , , 5 . тАФ . тАФ , . , тАж



тАж . , , . . Base64 . Base64. , Base64, Java.

Google
, , ! . , .

3 , , . Google .

DroidGuard , , . , . , : , .

, Google . , ( , ). .

Source: https://habr.com/ru/post/hi442872/


All Articles