strict digraph "" { #"MainActivity->()V" [accessflags="public constructor", # classname="MainActivity", # descriptor="()V", # entrypoint=False, # external=False, # methodname=""]; #"Activity->()V" [classname="Activity", # descriptor="()V", # entrypoint=False, # external=True, # methodname=""]; #"MainActivity->onCreate(Bundle)V" [accessflags=protected, # classname="MainActivity", # descriptor="(Bundle)V", # entrypoint=False, # external=False, # methodname=onCreate]; "Main->main()V" [accessflags=public, classname="Main", descriptor="()V", entrypoint=False, external=False, methodname=main]; #"Activity->onCreate(Bundle)V" [classname="Activity", # descriptor="(Bundle)V", # entrypoint=False, # external=True, # methodname=onCreate]; #"Main->(Activity)V" [accessflags="public constructor", # classname="Main", # descriptor="(Activity)V", # entrypoint=False, # external=False, # methodname=""]; #"Log->i(String String Throwable)I" [classname="Log", # descriptor="(String String Throwable)I", # entrypoint=False, # external=True, # methodname=i]; "Method->invoke(Object [Object)Object" [classname="Method", descriptor="(Object [Object)Object", entrypoint=False, external=True, methodname=invoke]; "ClassLoader->loadClass(String)Class" [classname="ClassLoader", descriptor="(String)Class", entrypoint=False, external=True, methodname=loadClass]; "T->check_is_Malicious_send_data(Method)Z" [accessflags="public static final", classname="T", descriptor="(Method)Z", entrypoint=False, external=False, methodname=check_is_Malicious_send_data, style=filled, fillcolor=lightgrey]; "T->check_is_Malicious_get_data(Method)Z" [accessflags="public static final", classname="T", descriptor="(Method)Z", entrypoint=False, external=False, methodname=check_is_Malicious_get_data, style=filled, fillcolor=lightgrey]; "Class->getMethod(String [Class)Method" [classname="Class", descriptor="(String [Class)Method", entrypoint=False, external=True, methodname=getMethod]; "Main->decrypt(String)String" [accessflags=public, classname="Main", descriptor="(String)String", entrypoint=False, external=False, methodname=decrypt]; "Malicious->send_data(String Activity)String" [accessflags="public static", classname="Malicious", descriptor="(String Activity)String", entrypoint=False, external=False, methodname=send_data, style=filled, fillcolor=salmon]; "Malicious->get_data(String Activity)String" [accessflags="public static", classname="Malicious", descriptor="(String Activity)String", entrypoint=False, external=False, methodname=get_data, style=filled, fillcolor=salmon]; #"Object->()V" [classname="Object", # descriptor="()V", # entrypoint=False, # external=True, # methodname=""]; #"ByteBuffer->wrap([B)ByteBuffer" [classname="ByteBuffer", # descriptor="([B)ByteBuffer", # entrypoint=False, # external=True, # methodname=wrap]; #"Class->getClassLoader()ClassLoader" [classname="Class", # descriptor="()ClassLoader", # entrypoint=False, # external=True, # methodname=getClassLoader]; #"SecretKeySpec->([B String)V" [classname="SecretKeySpec", # descriptor="([B String)V", # entrypoint=False, # external=True, # methodname=""]; "Base64->decode(String I)[B" [classname="Base64", descriptor="(String I)[B", entrypoint=False, external=True, methodname=decode]; #"InMemoryDexClassLoader->(ByteBuffer ClassLoader)V" [classname="InMemoryDexClassLoader", # descriptor="(ByteBuffer ClassLoader)V", # entrypoint=False, # external=True, # methodname=""]; #"String->getBytes()[B" [classname="String", # descriptor="()[B", # entrypoint=False, # external=True, # methodname=getBytes]; #"Utils->()V" [accessflags="public constructor", # classname="Utils", # descriptor="()V", # entrypoint=False, # external=False, # methodname=""]; #"Utils->popup(Activity String String)V" [accessflags="public static", # classname="Utils", # descriptor="(Activity String String)V", # entrypoint=False, # external=False, # methodname=popup]; #"AlertDialog$Builder->setMessage(CharSequence)AlertDialog$Builder" [classname="AlertDialog$Builder", # descriptor="(CharSequence)AlertDialog$Builder", # entrypoint=False, # external=True, # methodname=setMessage]; #"AlertDialog$Builder->setTitle(CharSequence)AlertDialog$Builder" [classname="AlertDialog$Builder", # descriptor="(CharSequence)AlertDialog$Builder", # entrypoint=False, # external=True, # methodname=setTitle]; #"AlertDialog$Builder->create()AlertDialog;" [classname="AlertDialog$Builder", # descriptor="()AlertDialog;", # entrypoint=False, # external=True, # methodname=create]; #"AlertDialog$Builder->(Landroid/content/Context;)V" [classname="AlertDialog$Builder", # descriptor="(Landroid/content/Context;)V", # entrypoint=False, # external=True, # methodname=""]; #"AlertDialog;->show()V" [classname="AlertDialog;", # descriptor="()V", # entrypoint=False, # external=True, # methodname=show]; "Utils->sink(Activity String)V" [accessflags="public static", classname="Utils", descriptor="(Activity String)V", entrypoint=False, external=False, methodname=sink]; "Utils->source(String)String" [accessflags="public static", classname="Utils", descriptor="(String)String", entrypoint=False, external=False, methodname=source]; #"StringBuilder->append(String)StringBuilder" [classname="StringBuilder", # descriptor="(String)StringBuilder", # entrypoint=False, # external=True, # methodname=append]; #"StringBuilder->()V" [classname="StringBuilder", # descriptor="()V", # entrypoint=False, # external=True, # methodname=""]; #"StringBuilder->toString()String" [classname="StringBuilder", # descriptor="()String", # entrypoint=False, # external=True, # methodname=toString]; "String->([B)V" [classname="String", descriptor="([B)V", entrypoint=False, external=True, methodname=""]; "Cipher->doFinal([B)[B" [classname="Cipher", descriptor="([B)[B", entrypoint=False, external=True, methodname=doFinal]; "Cipher->init(I Key)V" [classname="Cipher", descriptor="(I Key)V", entrypoint=False, external=True, methodname=init]; "Cipher->getInstance(String)Cipher" [classname="Cipher", descriptor="(String)Cipher", entrypoint=False, external=True, methodname=getInstance]; #"Main->encrypt(String)String" [accessflags=public, # classname="Main", # descriptor="(String)String", # entrypoint=False, # external=False, # methodname=encrypt]; #"Base64->encodeToString([B I)String" [classname="Base64", # descriptor="([B I)String", # entrypoint=False, # external=True, # methodname=encodeToString]; #"Class->descriptorString()String" [classname="Class", # descriptor="()String", # entrypoint=False, # external=True, # methodname=descriptorString]; #"Method->getName()String" [classname="Method", # descriptor="()String", # entrypoint=False, # external=True, # methodname=getName]; #"String->equals(Object)Z" [classname="String", # descriptor="(Object)Z", # entrypoint=False, # external=True, # methodname=equals]; #"Method->getDeclaringClass()Class" [classname="Method", # descriptor="()Class", # entrypoint=False, # external=True, # methodname=getDeclaringClass]; #"Method->getParameterTypes()[Class" [classname="Method", # descriptor="()[Class", # entrypoint=False, # external=True, # methodname=getParameterTypes]; #"Method->getReturnType()Class" [classname="Method", # descriptor="()Class", # entrypoint=False, # external=True, # methodname=getReturnType]; #"Malicious->()V" [accessflags="public constructor", # classname="Malicious", # descriptor="()V", # entrypoint=False, # external=False, # methodname=""]; {rank = same; "Main->main()V"} {rank = same; "ClassLoader->loadClass(String)Class"; "Class->getMethod(String [Class)Method"; "Method->invoke(Object [Object)Object"; "Malicious->get_data(String Activity)String"} {rank = same; "Main->decrypt(String)String"; "T->check_is_Malicious_get_data(Method)Z"; "T->check_is_Malicious_send_data(Method)Z"; "Utils->source(String)String"; "Utils->sink(Activity String)V"} #"MainActivity->()V" -> "Activity->()V"; #"MainActivity->onCreate(Bundle)V" -> "Main->main()V"; #"MainActivity->onCreate(Bundle)V" -> "Activity->onCreate(Bundle)V"; #"MainActivity->onCreate(Bundle)V" -> "Main->(Activity)V"; #"MainActivity->onCreate(Bundle)V" -> "Log->i(String String Throwable)I"; "Main->main()V" -> "Main->decrypt(String)String"; "Main->main()V" -> "ClassLoader->loadClass(String)Class"; "Main->main()V" -> "Malicious->get_data(String Activity)String"; "Main->main()V" -> "Method->invoke(Object [Object)Object"; "Main->main()V" -> "Malicious->send_data(String Activity)String"; "Main->main()V" -> "T->check_is_Malicious_get_data(Method)Z"; "Main->main()V" -> "Class->getMethod(String [Class)Method"; "Main->main()V" -> "T->check_is_Malicious_send_data(Method)Z"; #"Main->(Activity)V" -> "Object->()V"; #"Main->(Activity)V" -> "ByteBuffer->wrap([B)ByteBuffer"; #"Main->(Activity)V" -> "Class->getClassLoader()ClassLoader"; #"Main->(Activity)V" -> "SecretKeySpec->([B String)V"; #"Main->(Activity)V" -> "Base64->decode(String I)[B"; #"Main->(Activity)V" -> "InMemoryDexClassLoader->(ByteBuffer ClassLoader)V"; #"Main->(Activity)V" -> "String->getBytes()[B"; #"Utils->()V" -> "Object->()V"; #"Utils->popup(Activity String String)V" -> "AlertDialog$Builder->setMessage(CharSequence)AlertDialog$Builder"; #"Utils->popup(Activity String String)V" -> "AlertDialog$Builder->setTitle(CharSequence)AlertDialog$Builder"; #"Utils->popup(Activity String String)V" -> "AlertDialog$Builder->create()AlertDialog;"; #"Utils->popup(Activity String String)V" -> "AlertDialog$Builder->(Landroid/content/Context;)V"; #"Utils->popup(Activity String String)V" -> "AlertDialog;->show()V"; #"Utils->sink(Activity String)V" -> "Utils->popup(Activity String String)V"; #"Utils->source(String)String" -> "StringBuilder->append(String)StringBuilder"; #"Utils->source(String)String" -> "StringBuilder->()V"; #"Utils->source(String)String" -> "StringBuilder->toString()String"; "Main->decrypt(String)String" -> "Base64->decode(String I)[B"; "Main->decrypt(String)String" -> "String->([B)V"; "Main->decrypt(String)String" -> "Cipher->doFinal([B)[B"; "Main->decrypt(String)String" -> "Cipher->init(I Key)V"; "Main->decrypt(String)String" -> "Cipher->getInstance(String)Cipher"; #"Main->encrypt(String)String" -> "String->getBytes()[B"; #"Main->encrypt(String)String" -> "Cipher->doFinal([B)[B"; #"Main->encrypt(String)String" -> "Cipher->init(I Key)V"; #"Main->encrypt(String)String" -> "Cipher->getInstance(String)Cipher"; #"Main->encrypt(String)String" -> "Base64->encodeToString([B I)String"; "Malicious->get_data(String Activity)String" -> "Utils->source(String)String"; "Malicious->send_data(String Activity)String" -> "Utils->sink(Activity String)V"; #"T->check_is_Malicious_get_data(Method)Z" -> "Class->descriptorString()String"; #"T->check_is_Malicious_get_data(Method)Z" -> "Method->getName()String"; #"T->check_is_Malicious_get_data(Method)Z" -> "String->equals(Object)Z"; #"T->check_is_Malicious_get_data(Method)Z" -> "Method->getDeclaringClass()Class"; #"T->check_is_Malicious_get_data(Method)Z" -> "Method->getParameterTypes()[Class"; #"T->check_is_Malicious_get_data(Method)Z" -> "Method->getReturnType()Class"; #"T->check_is_Malicious_send_data(Method)Z" -> "Class->descriptorString()String"; #"T->check_is_Malicious_send_data(Method)Z" -> "Method->getName()String"; #"T->check_is_Malicious_send_data(Method)Z" -> "String->equals(Object)Z"; #"T->check_is_Malicious_send_data(Method)Z" -> "Method->getDeclaringClass()Class"; #"T->check_is_Malicious_send_data(Method)Z" -> "Method->getParameterTypes()[Class"; #"T->check_is_Malicious_send_data(Method)Z" -> "Method->getReturnType()Class"; #"Malicious->()V" -> "Object->()V"; }