แจแแกแแแแแ
แแแ แขแแก แแแแแก แฉแแแ
แ แแแแแแแแ แฎแแแก แฌแแ UC Browser-แแก แ แแแแแแแ แแแ แแ แแแแ แชแแแแแ แซแแแแแ แแแ แแกแแฃแแแ แแแแฎแแ แชแแแแแ: แแก แแแแแกแขแแแแ แแแฃแแ แแงแ แแแแฎแแแ แแแแแแแก แแแฌแงแแแแแแแแแแ แแแแแ แแ แแแ แแแแแแก แแแแแงแแแแแแ, แแแแ แชแแแแ แกแฎแแแแแกแฎแแ แกแแแขแแแแแแ แแแแแ แคแแแแแแแก แกแแคแแ แฅแแแจ (แแแฃ แแแแฎแแแ แแแแแแ แคแแฅแ แแแแแแ, แ แแ แฉแแแแขแแแ แแแแแแแ, แแแแแแแแแ, แแแ แแ แแแแแแก, แแแแ แแ แแแแก แแแชแแแแ, แแแแฆแ APK แแ แแ แแฃแแแ แแ), แแแแแแงแแแ แกแแจแแแแแ แแแแแ แแแ แจแแขแงแแแแแแแแแแ, แ แแ แแ แแฃแแแ แ แแแซแแแแแแฃแแแ, แแแฃแชแแแแ แแ แแกแแแแกแ แ แแ. แแคแแชแแแแฃแ แ UC Browser แฏแแฃแคแจแ VK แแ แแก
แฌแแ แแก แแ แแก, UC Browser-แก แแฅแแก 500-แแ แแแขแ แแแกแขแแแแชแแ Google Play-แแ. แแก แจแแแแแแญแแแแแ - แแฎแแแแ Google Chrome-แก แแฅแแก แแแขแ. แแแแแฎแแแแแแก แจแแ แแก แจแแแแซแแแแ แแฎแแแแ แกแแแแแแ แแแแ แ แแ แแขแแแแแ แ แแแแแแแกแแแ แแแแแแจแแ แแแแ แแ แแแแแแแกแแแแ แแแแ แแแแแแ แ แแแแแแแชแแแจแ Google Play-แแ. แแก แแงแ แฉแแแแ แแแแแแแก แแแแแแ: แแแแแแฌแงแแแขแแ แแแแแแแ, แแแแแแแแ แแฃ แแ แ UC Browser แ แแแแ แชแฃแแก. แแ แแฆแแแฉแแแ, แ แแ แแก แแแแแแแก!
แแแแแแแชแแแก แแแแจแ แแฆแแแแฉแแแแก แจแแกแ แฃแแแแแแ แแแแแก แฉแแแแขแแแ แแแแกแ แแ แแแจแแแแแก แจแแกแแซแแแแแแแ,
แฅแแแแแ แแแงแแแแแแ แงแแแแแคแแ แ แจแแกแแแแแแกแแ UC แแ แแฃแแแ แแก แแแ แกแแแกแแแแก, แ แแแแแแช แฎแแแแแกแแฌแแแแแ แแงแ Google Play-แแ แแแแแแแก แแ แแก:
package: com.UCMobile.intl
versionName: 12.10.8.1172
versionCode: 10598
sha1 APK-ัะฐะนะปะฐ: f5edb2243413c777172f6362876041eb0c3a928c
แจแแขแแแแก แแแฅแขแแ แ
UC แแ แแฃแแแ แแก แแแแแคแแกแขแจแ แจแแแแซแแแแ แแแแแแ แกแแ แแแกแ แแแแแแฎแกแแแแ แกแแฎแแแแ com.uc.deployment.UpgradeDeployService.
<service android_exported="false" android_name="com.uc.deployment.UpgradeDeployService" android_process=":deploy" />
แ แแแแกแแช แแก แกแแ แแแกแ แแฌแงแแแ, แแ แแฃแแแ แ แแแแแแแก POST แแแแฎแแแแแก
แแกแ แ แแ, แ แแแแกแแช แแแแฎแแแ แแแแแก แกแฃแ แก PDF-แแก แแแฎแกแแ แแแ แแแแแ แแ แแฃแแแ แจแ, แจแแแแแแ แแแแฎแแแแแแ แฉแแแก แขแ แแคแแแจแ:
แฏแแ แแ แแก POST แแแแฎแแแแ
แฉแแแแขแแแ แแฃแแแ แแ แฅแแแ แแแแแแแแแแแ PDF แแ แกแแแคแแกแ แคแแ แแแขแแแแก แกแแแแฎแแแแ. แแแแแแฃแ แแ แแแแแ แแฃแแแ, แ แแ แแแ แแแแ แแแแฎแแแแ แแแแแกแชแแแก แแแคแแ แแแชแแแก แกแแกแขแแแแก แจแแกแแฎแแ (แแแแแแฃแ แแ แฅแแขแแฅแขแฃแ แ แกแแญแแ แ แแแแแแแแแแแก แฃแแ แฃแแแแแกแแงแแคแแ) แแ แแแแก แกแแแแกแฃแฎแแ แแ แแฃแแแ แ แแฆแแแก แแแ แแแแฃแ แแแคแแ แแแชแแแก แแแแแแแแแแแก แจแแกแแฎแแ, แ แแแแแแช แฃแแแ แฉแแแแขแแแ แแแ: แแแกแแแแ แแก แแ, แจแแกแแซแแแ, , แแแแแ แ แแฆแแช. แแ แแแแแแ แแก แแ แแก, แ แแ แแก แแแแฎแแแแ แแแจแแคแ แฃแแแ.
แแแแแฎแแแแ แคแ แแแแแแขแ
แแแกแฃแฎแแก แคแ แแแแแแขแ
แแแแแ แแแแแแแแแแ แจแแคแฃแแฃแแแ ZIP-แจแ แแ แแ แแ แแก แแแจแแคแ แฃแแ.
แแแซแแแแแ แขแ แแคแแแแก แแแจแแคแแ แแก แแแแ
แแชแแแแ แกแแ แแแ แแก แแแกแฃแฎแแก แแแจแแคแแ แ. แแแแแ แจแแแฎแแแแ แแแแกแแก แแแแก com.uc.deployment.UpgradeDeployService: แแแแแแแแแ onStartCommand แฌแแแ com.uc.deployment.bx, แแ แแแกแแแ com.uc.browser.core.dcfe:
public final void e(l arg9) {
int v4_5;
String v3_1;
byte[] v3;
byte[] v1 = null;
if(arg9 == null) {
v3 = v1;
}
else {
v3_1 = arg9.iGX.ipR;
StringBuilder v4 = new StringBuilder("[");
v4.append(v3_1);
v4.append("]product:");
v4.append(arg9.iGX.ipR);
v4 = new StringBuilder("[");
v4.append(v3_1);
v4.append("]version:");
v4.append(arg9.iGX.iEn);
v4 = new StringBuilder("[");
v4.append(v3_1);
v4.append("]upgrade_type:");
v4.append(arg9.iGX.mMode);
v4 = new StringBuilder("[");
v4.append(v3_1);
v4.append("]force_flag:");
v4.append(arg9.iGX.iEo);
v4 = new StringBuilder("[");
v4.append(v3_1);
v4.append("]silent_mode:");
v4.append(arg9.iGX.iDQ);
v4 = new StringBuilder("[");
v4.append(v3_1);
v4.append("]silent_type:");
v4.append(arg9.iGX.iEr);
v4 = new StringBuilder("[");
v4.append(v3_1);
v4.append("]silent_state:");
v4.append(arg9.iGX.iEp);
v4 = new StringBuilder("[");
v4.append(v3_1);
v4.append("]silent_file:");
v4.append(arg9.iGX.iEq);
v4 = new StringBuilder("[");
v4.append(v3_1);
v4.append("]apk_md5:");
v4.append(arg9.iGX.iEl);
v4 = new StringBuilder("[");
v4.append(v3_1);
v4.append("]download_type:");
v4.append(arg9.mDownloadType);
v4 = new StringBuilder("[");
v4.append(v3_1);
v4.append("]download_group:");
v4.append(arg9.mDownloadGroup);
v4 = new StringBuilder("[");
v4.append(v3_1);
v4.append("]download_path:");
v4.append(arg9.iGH);
v4 = new StringBuilder("[");
v4.append(v3_1);
v4.append("]apollo_child_version:");
v4.append(arg9.iGX.iEx);
v4 = new StringBuilder("[");
v4.append(v3_1);
v4.append("]apollo_series:");
v4.append(arg9.iGX.iEw);
v4 = new StringBuilder("[");
v4.append(v3_1);
v4.append("]apollo_cpu_arch:");
v4.append(arg9.iGX.iEt);
v4 = new StringBuilder("[");
v4.append(v3_1);
v4.append("]apollo_cpu_vfp3:");
v4.append(arg9.iGX.iEv);
v4 = new StringBuilder("[");
v4.append(v3_1);
v4.append("]apollo_cpu_vfp:");
v4.append(arg9.iGX.iEu);
ArrayList v3_2 = arg9.iGX.iEz;
if(v3_2 != null && v3_2.size() != 0) {
Iterator v3_3 = v3_2.iterator();
while(v3_3.hasNext()) {
Object v4_1 = v3_3.next();
StringBuilder v5 = new StringBuilder("[");
v5.append(((au)v4_1).getName());
v5.append("]component_name:");
v5.append(((au)v4_1).getName());
v5 = new StringBuilder("[");
v5.append(((au)v4_1).getName());
v5.append("]component_ver_name:");
v5.append(((au)v4_1).aDA());
v5 = new StringBuilder("[");
v5.append(((au)v4_1).getName());
v5.append("]component_ver_code:");
v5.append(((au)v4_1).gBl);
v5 = new StringBuilder("[");
v5.append(((au)v4_1).getName());
v5.append("]component_req_type:");
v5.append(((au)v4_1).gBq);
}
}
j v3_4 = new j();
m.b(v3_4);
h v4_2 = new h();
m.b(v4_2);
ay v5_1 = new ay();
v3_4.hS("");
v3_4.setImsi("");
v3_4.hV("");
v5_1.bPQ = v3_4;
v5_1.bPP = v4_2;
v5_1.yr(arg9.iGX.ipR);
v5_1.gBF = arg9.iGX.mMode;
v5_1.gBI = arg9.iGX.iEz;
v3_2 = v5_1.gAr;
c.aBh();
v3_2.add(g.fs("os_ver", c.getRomInfo()));
v3_2.add(g.fs("processor_arch", com.uc.b.a.a.c.getCpuArch()));
v3_2.add(g.fs("cpu_arch", com.uc.b.a.a.c.Pb()));
String v4_3 = com.uc.b.a.a.c.Pd();
v3_2.add(g.fs("cpu_vfp", v4_3));
v3_2.add(g.fs("net_type", String.valueOf(com.uc.base.system.a.Jo())));
v3_2.add(g.fs("fromhost", arg9.iGX.iEm));
v3_2.add(g.fs("plugin_ver", arg9.iGX.iEn));
v3_2.add(g.fs("target_lang", arg9.iGX.iEs));
v3_2.add(g.fs("vitamio_cpu_arch", arg9.iGX.iEt));
v3_2.add(g.fs("vitamio_vfp", arg9.iGX.iEu));
v3_2.add(g.fs("vitamio_vfp3", arg9.iGX.iEv));
v3_2.add(g.fs("plugin_child_ver", arg9.iGX.iEx));
v3_2.add(g.fs("ver_series", arg9.iGX.iEw));
v3_2.add(g.fs("child_ver", r.aVw()));
v3_2.add(g.fs("cur_ver_md5", arg9.iGX.iEl));
v3_2.add(g.fs("cur_ver_signature", SystemHelper.getUCMSignature()));
v3_2.add(g.fs("upgrade_log", i.bjt()));
v3_2.add(g.fs("silent_install", String.valueOf(arg9.iGX.iDQ)));
v3_2.add(g.fs("silent_state", String.valueOf(arg9.iGX.iEp)));
v3_2.add(g.fs("silent_file", arg9.iGX.iEq));
v3_2.add(g.fs("silent_type", String.valueOf(arg9.iGX.iEr)));
v3_2.add(g.fs("cpu_archit", com.uc.b.a.a.c.Pc()));
v3_2.add(g.fs("cpu_set", SystemHelper.getCpuInstruction()));
boolean v4_4 = v4_3 == null || !v4_3.contains("neon") ? false : true;
v3_2.add(g.fs("neon", String.valueOf(v4_4)));
v3_2.add(g.fs("cpu_cores", String.valueOf(com.uc.b.a.a.c.Jl())));
v3_2.add(g.fs("ram_1", String.valueOf(com.uc.b.a.a.h.Po())));
v3_2.add(g.fs("totalram", String.valueOf(com.uc.b.a.a.h.OL())));
c.aBh();
v3_2.add(g.fs("rom_1", c.getRomInfo()));
v4_5 = e.getScreenWidth();
int v6 = e.getScreenHeight();
StringBuilder v7 = new StringBuilder();
v7.append(v4_5);
v7.append("*");
v7.append(v6);
v3_2.add(g.fs("ss", v7.toString()));
v3_2.add(g.fs("api_level", String.valueOf(Build$VERSION.SDK_INT)));
v3_2.add(g.fs("uc_apk_list", SystemHelper.getUCMobileApks()));
Iterator v4_6 = arg9.iGX.iEA.entrySet().iterator();
while(v4_6.hasNext()) {
Object v6_1 = v4_6.next();
v3_2.add(g.fs(((Map$Entry)v6_1).getKey(), ((Map$Entry)v6_1).getValue()));
}
v3 = v5_1.toByteArray();
}
if(v3 == null) {
this.iGY.iGI.a(arg9, "up_encode", "yes", "fail");
return;
}
v4_5 = this.iGY.iGw ? 0x1F : 0;
if(v3 == null) {
}
else {
v3 = g.i(v4_5, v3);
if(v3 == null) {
}
else {
v1 = new byte[v3.length + 16];
byte[] v6_2 = new byte[16];
Arrays.fill(v6_2, 0);
v6_2[0] = 0x5F;
v6_2[1] = 0;
v6_2[2] = ((byte)v4_5);
v6_2[3] = -50;
System.arraycopy(v6_2, 0, v1, 0, 16);
System.arraycopy(v3, 0, v1, 16, v3.length);
}
}
if(v1 == null) {
this.iGY.iGI.a(arg9, "up_encrypt", "yes", "fail");
return;
}
if(TextUtils.isEmpty(this.iGY.mUpgradeUrl)) {
this.iGY.iGI.a(arg9, "up_url", "yes", "fail");
return;
}
StringBuilder v0 = new StringBuilder("[");
v0.append(arg9.iGX.ipR);
v0.append("]url:");
v0.append(this.iGY.mUpgradeUrl);
com.uc.browser.core.d.c.i v0_1 = this.iGY.iGI;
v3_1 = this.iGY.mUpgradeUrl;
com.uc.base.net.e v0_2 = new com.uc.base.net.e(new com.uc.browser.core.d.c.i$a(v0_1, arg9));
v3_1 = v3_1.contains("?") ? v3_1 + "&dataver=pb" : v3_1 + "?dataver=pb";
n v3_5 = v0_2.uc(v3_1);
m.b(v3_5, false);
v3_5.setMethod("POST");
v3_5.setBodyProvider(v1);
v0_2.b(v3_5);
this.iGY.iGI.a(arg9, "up_null", "yes", "success");
this.iGY.iGI.b(arg9);
}
แฉแแแ แแฎแแแแแ POST แแแแฎแแแแแก แคแแ แแแ แแแแก แแฅ. แงแฃแ แแแฆแแแแก แแแฅแชแแแ 16 แแแแขแแแแ แแแกแแแแก แจแแฅแแแแก แแ แแแก แจแแแกแแแแก: 0x5F, 0, 0x1F, -50 (=0xCE). แแแแฎแแแแ แแแแก, แ แแช แแแแฎแแ แแแแแ แแแแฎแแแแแจแ.
แแแแแ แแแแกแจแ แจแแแแซแแแแ แแฎแแแแ แฉแแกแแฃแแ แแแแกแ, แ แแแแแกแแช แแฅแแก แแแแแ แแ แแ แกแแแแขแแ แแกแ แแแแแแ:
public final void a(l arg10, byte[] arg11) {
f v0 = this.iGQ;
StringBuilder v1 = new StringBuilder("[");
v1.append(arg10.iGX.ipR);
v1.append("]:UpgradeSuccess");
byte[] v1_1 = null;
if(arg11 == null) {
}
else if(arg11.length < 16) {
}
else {
if(arg11[0] != 0x60 && arg11[3] != 0xFFFFFFD0) {
goto label_57;
}
int v3 = 1;
int v5 = arg11[1] == 1 ? 1 : 0;
if(arg11[2] != 1 && arg11[2] != 11) {
if(arg11[2] == 0x1F) {
}
else {
v3 = 0;
}
}
byte[] v7 = new byte[arg11.length - 16];
System.arraycopy(arg11, 16, v7, 0, v7.length);
if(v3 != 0) {
v7 = g.j(arg11[2], v7);
}
if(v7 == null) {
goto label_57;
}
if(v5 != 0) {
v1_1 = g.P(v7);
goto label_57;
}
v1_1 = v7;
}
label_57:
if(v1_1 == null) {
v0.iGY.iGI.a(arg10, "up_decrypt", "yes", "fail");
return;
}
q v11 = g.b(arg10, v1_1);
if(v11 == null) {
v0.iGY.iGI.a(arg10, "up_decode", "yes", "fail");
return;
}
if(v0.iGY.iGt) {
v0.d(arg10);
}
if(v0.iGY.iGo != null) {
v0.iGY.iGo.a(0, ((o)v11));
}
if(v0.iGY.iGs) {
v0.iGY.a(((o)v11));
v0.iGY.iGI.a(v11, "up_silent", "yes", "success");
v0.iGY.iGI.a(v11);
return;
}
v0.iGY.iGI.a(v11, "up_silent", "no", "success");
}
}
แแแแแแ แแฆแแแก แแแแขแแแแก แแแกแแแก แจแแงแแแแแ แแ แแแแฌแแแแก, แ แแ แแฃแแแแแแ แแแแขแ แแ แแก 0x60 แแ แแแกแแแ แแแแขแ แแ แแก 0xD0, แฎแแแ แแแแ แ แแแแขแ แแ แแก 1, 11 แแ 0x1F. แฉแแแ แแฃแงแฃแ แแแ แกแแ แแแ แแก แแแกแฃแฎแก: แแฃแแแแแแ แแแแขแ แแ แแก 0x60, แแแแ แ แแ แแก 0x1F, แแแกแแแ แแ แแก 0x60. แแฆแแ แก แแก, แ แแช แฉแแแ แแแญแแ แแแแ. แแฃ แแแแกแฏแแแแแ แฎแแแแแแ (แแแแแแแแแ, "up_decrypt", แแฅ แฃแแแ แแแแแแซแแฎแแ แแแแแแ, แ แแแแแแช แแแจแแคแแ แแแก แกแแ แแแ แแก แแแกแฃแฎแก.
แแแแแแแแแ แแแแแแแ แฏ. แแแแแแแแแกแฌแแแแ, แ แแ แแแ แแแแ แแ แแฃแแแแขแ แแ แแก แแแแขแ แแคแกแแขแแ 2 (แแแฃ 0x1F แฉแแแแก แจแแแแฎแแแแแจแ), แฎแแแ แแแแ แ แแ แแก แกแแ แแแ แแก แแแกแฃแฎแ แแแ แแจแ
แแแ แแแแ 16 แแแแขแ.
public static byte[] j(int arg1, byte[] arg2) {
if(arg1 == 1) {
arg2 = c.c(arg2, c.adu);
}
else if(arg1 == 11) {
arg2 = m.aF(arg2);
}
else if(arg1 != 0x1F) {
}
else {
arg2 = EncryptHelper.decrypt(arg2);
}
return arg2;
}
แชแฎแแแแ, แแฅ แฉแแแ แแแ แฉแแแ แแแจแแคแแ แแก แแแแแ แแแแก แแ แแแแแ แแแแขแก, แ แแช แฉแแแแกแจแแ
แจแแแแฎแแแแ แขแแแแ 0x1F, แแฆแแแจแแแแก แกแแแ แจแแกแแซแแ แแแ แแแแขแแแแ แแ แ-แแ แแก.
แฉแแแ แแแแ แซแแแแแ แแแแแก แแแแแแแก. แ แแแแแแแแ แแแฎแขแแแแก แจแแแแแ แฉแแแ แแฆแแแแฉแแแแแแ แแแแแแจแ, แ แแแแแกแแช แแฎแกแแ-แแแแแแ แขแแแ แแฅแแก แแแจแแคแแ แBytesByKey.
แแฅ แแแแแ แแ แ โโแแแแขแ แแแแแงแแคแแแแ แฉแแแแ แแแกแฃแฎแแกแแแ แแ แแแแแแ แแแแฆแแแ แกแขแ แแฅแแแ. แแแกแแแแแแ, แ แแ แแ แแแแ แจแแแ แฉแแแ แจแแขแงแแแแแแแแก แแแจแแคแแ แแก แแแกแแฆแแแ.
private static byte[] decryptBytesByKey(byte[] bytes) {
byte[] v0 = null;
if(bytes != null) {
try {
if(bytes.length < EncryptHelper.PREFIX_BYTES_SIZE) {
}
else if(bytes.length == EncryptHelper.PREFIX_BYTES_SIZE) {
return v0;
}
else {
byte[] prefix = new byte[EncryptHelper.PREFIX_BYTES_SIZE]; // 2 ะฑะฐะนัะฐ
System.arraycopy(bytes, 0, prefix, 0, prefix.length);
String keyId = c.ayR().d(ByteBuffer.wrap(prefix).getShort()); // ะัะฑะพั ะบะปััะฐ
if(keyId == null) {
return v0;
}
else {
a v2 = EncryptHelper.ayL();
if(v2 == null) {
return v0;
}
else {
byte[] enrypted = new byte[bytes.length - EncryptHelper.PREFIX_BYTES_SIZE];
System.arraycopy(bytes, EncryptHelper.PREFIX_BYTES_SIZE, enrypted, 0, enrypted.length);
return v2.l(keyId, enrypted);
}
}
}
}
catch(SecException v7_1) {
EncryptHelper.handleDecryptException(((Throwable)v7_1), v7_1.getErrorCode());
return v0;
}
catch(Throwable v7) {
EncryptHelper.handleDecryptException(v7, 2);
return v0;
}
}
return v0;
}
แฌแแ แ แแ แแฃแงแฃแ แแแ, แแฆแแแแจแแแแ, แ แแ แแ แแขแแแแ แฉแแแ แฏแแ แแ แแแฆแแแ แแแกแแฆแแแก, แแ แแแแ แแฎแแแแ แแแก โแแแแแขแแคแแแแขแแ แกโ. แแแกแแฆแแแแก แแแฆแแแ แชแแขแ แฃแคแ แ แ แแฃแแแ.
แจแแแแแ แแแแแแจแ แแ แกแแแฃแแก แแแแขแแแ แแแแแ แแ แ โโแแแ แแแแขแ แ, แ แแก แจแแแแแแแแช แแแฎแ แฎแแแแ: แฏแแแแกแแฃแ แ แแแแแ แ 16, แแแกแแฆแแแแก แแแแแขแแคแแแแขแแ แ, แแแจแแคแ แฃแแ แแแแแชแแแแแ แแ แแแฃแแแแแ แ แกแขแ แแฅแแแ (แฉแแแแก แจแแแแฎแแแแแจแ, แชแแ แแแแ).
public final byte[] l(String keyId, byte[] encrypted) throws SecException {
return this.ayJ().staticBinarySafeDecryptNoB64(16, keyId, encrypted, "");
}
แแแแแกแแแแแแก แกแแ แแแก แจแแแแแ แแแแแแแแ แ แแแแแแแ staticBinarySafeDecryptNoB64 แแแขแแ แคแแแกแ com.alibaba.wireless.security.open.staticdataencrypt.IStaticDataEncryptComponent. แแแแแแแชแแแก แแแแแแ แแแแจแ แแ แแ แแก แแแแกแแแ, แ แแแแแแแช แแฎแแ แชแแแแแแแ แแ แแแขแแ แคแแแกแก. แคแแแแจแ แแ แแก แแกแแแ แแแแกแ lib/armeabi-v7a/libsgmain.so, แ แแแแแแช แกแแแแแแแแแแจแ แแ แแ แแก .so, แแ แแแแ .jar. แแแแแแ, แ แแแแแแช แฉแแแ แแแแแแขแแ แแกแแแก, แฎแแ แชแแแแแแแ แจแแแแแแแแแ แแ:
package com.alibaba.wireless.security.a.i;
// ...
public class a implements IStaticDataEncryptComponent {
private ISecurityGuardPlugin a;
// ...
private byte[] a(int mode, int magicInt, int xzInt, String keyId, byte[] encrypted, String magicString) {
return this.a.getRouter().doCommand(10601, new Object[]{Integer.valueOf(mode), Integer.valueOf(magicInt), Integer.valueOf(xzInt), keyId, encrypted, magicString});
}
// ...
private byte[] b(int magicInt, String keyId, byte[] encrypted, String magicString) {
return this.a(2, magicInt, 0, keyId, encrypted, magicString);
}
// ...
public byte[] staticBinarySafeDecryptNoB64(int magicInt, String keyId, byte[] encrypted, String magicString) throws SecException {
if(keyId != null && keyId.length() > 0 && magicInt >= 0 && magicInt < 19 && encrypted != null && encrypted.length > 0) {
return this.b(magicInt, keyId, encrypted, magicString);
}
throw new SecException("", 301);
}
//...
}
แแฅ แฉแแแแ แแแ แแแแขแ แแแแก แกแแ แแแแแขแแแฃแแแ แแแแแ แแ แ โโแแแแแ แ แแชแฎแแแ: 2 แแ 0. แแแแกแฏแแแแแ
แงแแแแแคแแ แ, 2 แแแจแแแแก แแแจแแคแแ แแก, แ แแแแ แช แแแแแแจแ doFinal แกแแกแขแแแแก แแแแกแ javax.crypto.Cipher. แแ แแก แงแแแแแคแแ แ แแแแแแชแแแ แแแ แแแแฃแ แ แแฃแขแแ แก แแแแ แแ 10601 - แแก แแจแแแ แแ แแ แซแแแแแแก แแแแแ แแ.
แแแแแกแแแแแแก แจแแแแแแ แฏแแญแแแก แจแแแแแ แแแแฃแแแแ แแแแกแก, แ แแแแแแช แแฎแแ แชแแแแแแก แแแขแแ แคแแแกแก IRouterแแแแแแแแแขแ แแ แแแแแแ doCommand:
package com.alibaba.wireless.security.mainplugin;
import com.alibaba.wireless.security.framework.IRouterComponent;
import com.taobao.wireless.security.adapter.JNICLibrary;
public class a implements IRouterComponent {
public a() {
super();
}
public Object doCommand(int arg2, Object[] arg3) {
return JNICLibrary.doCommandNative(arg2, arg3);
}
}
แแ แแกแแแ แแแแกแ JNICL แแแแแแแแแแ, แ แแแแแจแแช แแแแแแ แแ แแแฃแแแ แแจแแแแแฃแ แ แแแแแแ doCommandNative:
package com.taobao.wireless.security.adapter;
public class JNICLibrary {
public static native Object doCommandNative(int arg0, Object[] arg1);
}
แแก แแแจแแแแก, แ แแ แฉแแแ แฃแแแ แแแแแแแ แแแแแแ แแจแแแแแฃแ แแแแจแ doCommandNative. แแ แกแฌแแ แแ แแฅ แแฌแงแแแ แแแ แแแแ.
แแแแฅแแแแก แแแแแก แแแแแแแแ
แคแแแแจแ libsgmain.แแกแ (แ แแแแแแช แ แแแแฃแ แแ แแ แแก .jar แแ แ แแแแแจแแช แแฆแแแแแฉแแแแ แแแจแแคแแ แแกแแแ แแแแแแจแแ แแแฃแแ แแแแแแ แแ แแแขแแ แคแแแกแแก แแแแแ แแแ แแแแแ) แแ แแก แแ แแ แแจแแแแแฃแ แ แแแแแแแแแแ: libsgmainso-6.4.36.so. แฉแแแ แแฎแกแแแ แแแก IDA-แจแ แแ แแแฆแแแ แฃแแแ แแ แแแแแแแฃแ แคแแแฏแแ แแก แจแแชแแแแแแแ. แแ แแแแแแ แแก แแ แแก, แ แแ แกแแฅแชแแแก แกแแแแฃแ แแก แชแฎแ แแแ แแ แแกแฌแแ แแ. แแก แแแแแแแ แแแแแแแแแแ แแฃแแแ, แ แแแ แแแแ แแฃแแแก แแแแแแแ.
แแแแ แแ แแก แแ แแ แแก แกแแญแแ แ: ELF แคแแแแแก แกแฌแแ แแ แฉแแขแแแ แแแแกแ แแ แแแกแ แแแแแแแแกแแแแก แกแแแแแ แแกแแ แแ แแแ แแแแก แกแแแแฃแ แแก แชแฎแ แแแ. แแแแขแแ, แฉแแแ แฃแแ แแแแ แแจแแแ แแแแงแแคแแแแแแก แชแฎแ แแแก, แกแแแแฃแ แจแ แจแแกแแแแแแกแ แแแแแแแก แแฃแแแแแ.
แแแแแ แแแฎแกแแแแ แคแแแแ IDA-แจแ.
แแ แกแแแแแก แแ แ แแแ, แ แแ แแฃแแฎแ แแ Java-แก แแแ แขแฃแแแฃแ แแแแฅแแแแก, แแฃ แกแแ แแแแแแ แแแแก แแฃแกแขแแ แแจแแแแแฃแ แแแแแแแแแแแจแ แฏแแแแก แแแแจแ แแแแแชแฎแแแแแฃแแ แแแแแแแก แแแแแแแแแขแแชแแ, แ แแแแ แช แแจแแแแแฃแ แ. แแแ แแแแ แแ แแก แแแกแแแแก แกแแฎแแแแแก แกแแฎแแแแก แแแชแแแ Java_package_name_ClassName_MethodName.
แแแแ แ แแ แแก แแแกแ แ แแแแกแขแ แแชแแ แแแแแแแแแแแก แฉแแขแแแ แแแแกแแก (แคแฃแแฅแชแแแจแ JNI_OnLoad)
แคแฃแแฅแชแแแก แแแ แแก แแแแแงแแแแแแ แ แแแแกแขแ แแชแแ Natives.
แฉแแแแก แจแแแแฎแแแแแจแ, แแฃ แแแ แแแ แแแแแแก แแแแแแแงแแแแแ, แกแแฎแแแ แแกแแแ แฃแแแ แแงแแก: Java_com_taobao_wireless_security_adapter_JNICLlibrary_doCommandNative.
แแฅแกแแแ แขแแ แแแฃแ แคแฃแแฅแชแแแแก แจแแ แแก แแกแแแ แคแฃแแฅแชแแ แแ แแ แแก, แ แแช แแแจแแแแก, แ แแ แแฅแแแ แฃแแแ แแแซแแแแแ แแแ แ แ แแแแกแขแ แแชแแ Natives.
แแแแแ แแแแแแแแแ แคแฃแแฅแชแแแแ JNI_OnLoad แแ แฉแแแ แแฎแแแแแ แแ แกแฃแ แแแก:
แฒ แ แฎแแแแ แแฅ? แแ แแ แจแแฎแแแแแ, แคแฃแแฅแชแแแก แแแกแแฌแงแแกแ แแ แแแกแแกแ แฃแแ แขแแแแฃแ แแ ARM แแ แฅแแขแแฅแขแฃแ แแกแแแแก. แแแกแขแแแ แแแ แแแแ แแแกแขแ แฃแฅแชแแ แแแแฎแแแก แ แแแแกแขแ แแแแก แจแแแแแแกแก, แ แแแแแกแแช แคแฃแแฅแชแแ แแแแแแงแแแแแก แแแแแก แคแฃแแฅแชแแแแแ แแแแจแ (แแ แจแแแแฎแแแแแจแ, R0, R1 แแ R2), แแกแแแ LR แ แแแแกแขแ แแก แจแแแแแแกแก, แ แแแแแแช แจแแแชแแแก แคแฃแแฅแชแแแแแ แแแแ แฃแแแแฃแ แแแกแแแแ แแก. . แแแแ แแแกแขแ แฃแฅแชแแ แแฆแแแแแแก แจแแแแฎแฃแ แ แแแแกแขแ แแแก แแ แแแแ แฃแแแแแก แแแกแแแแ แแ แแแจแแแแ แแแแแแกแแแฃแแแ แแแแแแฃแขแแ แแก แ แแแกแขแ แจแ - แ แแแแช แแ แฃแแแแแ แคแฃแแฅแชแแแแแ. แแแแ แแ แแฃ แแแ แแแ แแแแแแแ แแแแแ, แจแแแแฉแแแแ, แ แแ แแแแ แแแกแขแ แฃแฅแชแแ แชแแแแก แกแขแแแแ แจแแแแฎแฃแ แแแแ แฃแแแแแก แแแกแแแแ แแก. แแแแแ แแแแแแแแแแแ แ แแแแ แ แแฅแแแแ แจแแแแแ
แแแแแก แจแแกแ แฃแแแแ. แแแ แแแแฃแแ แแแกแแแแ แแ 1xB0 แแขแแแ แแแแ R130-แจแ, แแแก แแแแแแแ 5, แจแแแแแ แแแแแแแก R0-แแ แแ แแแแขแแแ 0x10. แแแแแแแก 0xB13B. แแแ แแแแ, IDA แแแแแก, แ แแ แแแแ แแแกแขแ แฃแฅแชแแ แแ แแก แแแ แแแแฃแ แ แคแฃแแฅแชแแแก แแแแ แฃแแแแ, แแแแ แแ แกแแแแแแแแแแจแ แแก แแแแแก แแแแแแแแแ แแแกแแแแ แแแ 0xB13B.
แแฅ แฃแแแ แแแแแฎแกแแแแ, แ แแ ARM แแ แแชแแกแแ แแแก แแฅแแ แแ แ แ แแแแแ แแ แแแกแขแ แฃแฅแชแแแแแก แแ แ แแแแ แแแ: ARM แแ Thumb. แแแกแแแแ แแแก แงแแแแแแ แแแแแแแแ แแแแจแแแแแแแแแ แแแฌแแแ แแฃแแแแแ แแ แแชแแกแแ แก, แ แแแแแ แแแกแขแ แฃแฅแชแแแแแก แแแแ แแแ แแแแแแงแแแแแ. แแแฃ แแแกแแแแ แแ แ แแแแฃแ แแ แแ แแก 0xB13A แแ แงแแแแแแ แแแแแแแแ แแแแจแแแแแแแแแ แแแขแแแแ แแ แแ แแแฃแแแแแแก Thumb แ แแแแแจแ.
แแกแแแแกแ โแแแแแขแแ แโ แแแแแแขแ แแ แแแแแแแแแแแก แแแแแแฃแแ แคแฃแแฅแชแแแก แแแกแแฌแงแแกแจแ แแ
แแแแแแก แแแแ. แฉแแแ แแแแแ แแแขแแแฃแ แแ แแฆแแ แแแกแแฃแแ แแแ - แฃแแ แแแแ แแแแฎแกแแแก
แ แแ แแแแฅแแแก แงแแแแ แคแฃแแฅแชแแแก แ แแแแฃแ แ แแแกแแฌแงแแกแ แชแแขแ แแแจแแ แแแแ แแ แแก.
แแแแแแแแ แแแแ แแจแแแ แแ แแ แแแแแแแก 0xB13A-แแ, แแแแแ IDA-แ แแ แแฆแแแ แ, แ แแ แแแแ แแแแแแ แแแแแ แแ แแแแแแแก. แแแแแ แแแแแแแ, แแก แแ แชแแแแก แแแแแแแแแแแจแ แแ แกแแแฃแแ แแแแแก แฃแแแขแแกแแแแก แแแแแ, แ แแช แแแ แแแแฃแแฌแแแแ แแ แแฃแแแแก แแแแแแแก. แฉแแแ แแแฃแแแแแแ IDA-แก, แ แแ แแก แแ แแก แแแแ แแ แแกแ แฎแแแแ:
แชแฎแ แแแ แแจแแแ แแ แแฌแงแแแ 0xB144-แแแ. แ แ แแ แแก sub_494C-แจแ?
แแ แคแฃแแฅแชแแแก LR แ แแแกแขแ แจแ แแแแแซแแฎแแแแกแแก แแแฆแแแ แแแ แ แแฆแแแจแแฃแแ แชแฎแ แแแแก แแแกแแแแ แแก (0xB144). R0-แจแ - แแแแแฅแกแ แแ แชแฎแ แแแจแ. แแแฃ แแแแจแแแแแแแ แแฆแแแฃแแแ แชแฎแ แแแแแแ, แแแแขแแแ LR-แก แแ แจแแแแแ แแ แแก
แแแกแแแแ แแ, แ แแแแแแแช แฃแแแ แฌแแฎแแแแ. แจแแแแชแแแแ แแแแแแแแแแแ: 0xB144 + [0xB144 + 8* 4] = 0xB144 + 0x120 = 0xB264. แฉแแแ แแแแแแแแ แ แแแฆแแแฃแ แแแกแแแแ แแแ แแ แแแแฎแแแ แกแแขแงแแแกแแขแงแแแ แ แแแแแแแแ แกแแกแแ แแแแแ แแแกแขแ แฃแฅแชแแแก แแ แแแแแ แแแแแแแแแแ แ 0xB140-แแ:
แแฎแแ แแฅแแแแ แแคแกแแขแแ แแแแแกแแแ แชแฎแ แแแแแแ 0x20 แแแแแฅแกแแ.
แชแฎแ แแแแก แแแแแ แแฃ แแแแกแฏแแแแแ, แแแแจแ แแแแ แ แแกแแแ แแแแแกแแแแแ แแฅแแแแ. แฉแแแแแ แแแแฎแแ, แแ แแก แแฃ แแ แ แจแแกแแซแแแแแแ แแ แกแแแแแฎแแก แแแแแญแ แ แฃแคแ แ แแแขแแแแขแฃแ แแ, แแแกแแแแ แแแแแก แฎแแแแ แแแแแแแ แแจแแแแก แแแ แแจแ. แแ แกแแ แแแขแแแ แแ IDA-แจแ แแแแแก แแแงแแแแแแก แจแแกแแซแแแแแแแ แแแแฎแแแ แแแ:
def put_unconditional_branch(source, destination):
offset = (destination - source - 4) >> 1
if offset > 2097151 or offset < -2097152:
raise RuntimeError("Invalid offset")
if offset > 1023 or offset < -1024:
instruction1 = 0xf000 | ((offset >> 11) & 0x7ff)
instruction2 = 0xb800 | (offset & 0x7ff)
patch_word(source, instruction1)
patch_word(source + 2, instruction2)
else:
instruction = 0xe000 | (offset & 0x7ff)
patch_word(source, instruction)
ea = here()
if get_wide_word(ea) == 0xb503: #PUSH {R0,R1,LR}
ea1 = ea + 2
if get_wide_word(ea1) == 0xbf00: #NOP
ea1 += 2
if get_operand_type(ea1, 0) == 1 and get_operand_value(ea1, 0) == 0 and get_operand_type(ea1, 1) == 2:
index = get_wide_dword(get_operand_value(ea1, 1))
print "index =", hex(index)
ea1 += 2
if get_operand_type(ea1, 0) == 7:
table = get_operand_value(ea1, 0) + 4
elif get_operand_type(ea1, 1) == 2:
table = get_operand_value(ea1, 1) + 4
else:
print "Wrong operand type on", hex(ea1), "-", get_operand_type(ea1, 0), get_operand_type(ea1, 1)
table = None
if table is None:
print "Unable to find table"
else:
print "table =", hex(table)
offset = get_wide_dword(table + (index << 2))
put_unconditional_branch(ea, table + offset)
else:
print "Unknown code", get_operand_type(ea1, 0), get_operand_value(ea1, 0), get_operand_type(ea1, 1) == 2
else:
print "Unable to detect first instruction"
แแแแแแแกแแ แแฃแ แกแแ แ 0xB26A แฎแแแแ, แแแฃแจแแแ แกแแ แแแขแ แแ แแแฎแแ แแแแแกแแแ 0xB4B0-แแ:
IDA-แ แแแแแ แแ แแฆแแแ แ แแก แขแแ แแขแแ แแ แแแแแ. แฉแแแ แแแฎแแแ แแแแ แแแก แแ แแแแฎแแแ แกแฎแแ แแแแแแแก แแฅ:
BLX-แแก แจแแแแแ แแแกแขแ แฃแฅแชแแแแก, แ แแแแ แช แฉแแแก, แแ แแฅแแก แแแ แ, แแก แฃแคแ แ แ แแฆแแช แแแแแแแแแแแแแก แฐแแแแก. แแแแแ แจแแแฎแแแแ sub_4964:
แแ แแแ แแแแช, แแฅ แแแแ แแ แแฆแแแฃแแแ LR-แจแ แแแแแแ แ แแแกแแแแ แแแ, แแแแขแแแ แแ แแแกแแแแ แแก, แ แแก แจแแแแแแแช แแแฆแแแฃแแ แแแกแแแแ แแแก แแแแจแแแแแแแ แแฆแแแฃแแแ แแ แแแแแ แกแขแแแแ. แแกแแแ, 4 แแแแขแแแ LR-แก แแกแ, แ แแ แคแฃแแฅแชแแแแแ แแแแ แฃแแแแแก แจแแแแแ แแแแแ แแคแกแแขแ แแแแแขแแแแแฃแแแ. แ แแก แจแแแแแแแช POP {R1} แแ แซแแแแแ แแฆแแแก แแแฆแแแฃแ แแแแจแแแแแแแแก แแแกแขแแแแ. แแฃ แแแแแแแ แแแแแ แ แ แแแแแแ แแแแก แแแกแแแแ แแแ 0xB4BA + 0xEA = 0xB5A4, แแแฎแแแ แแแกแแแแ แแแแแก แชแฎแ แแแแก แแกแแแแกแก:
แแ แแแแแแแแก แแแกแแงแแแแแแแ, แแฅแแแ แฃแแแ แแแแฆแแ แแแแแแแ แแ แ แแแ แแแแขแ แ: แแคแกแแขแ แแ แ แแแกแขแ แแก แแแแแ แ, แ แแแแแจแแช แแกแฃแ แ แจแแแแแแก แฉแแกแแ. แแแแแแฃแแ แจแแกแแซแแ แ แแแกแขแ แแกแแแแก, แแฅแแแ แแแแแฌแแแ แฌแแแแกแฌแแ แแแแแแแแแ แแแแ.
patches = {}
patches[0] = (0x00, 0xbf, 0x01, 0x48, 0x00, 0x68, 0x02, 0xe0)
patches[1] = (0x00, 0xbf, 0x01, 0x49, 0x09, 0x68, 0x02, 0xe0)
patches[2] = (0x00, 0xbf, 0x01, 0x4a, 0x12, 0x68, 0x02, 0xe0)
patches[3] = (0x00, 0xbf, 0x01, 0x4b, 0x1b, 0x68, 0x02, 0xe0)
patches[4] = (0x00, 0xbf, 0x01, 0x4c, 0x24, 0x68, 0x02, 0xe0)
patches[5] = (0x00, 0xbf, 0x01, 0x4d, 0x2d, 0x68, 0x02, 0xe0)
patches[8] = (0x00, 0xbf, 0xdf, 0xf8, 0x06, 0x80, 0xd8, 0xf8, 0x00, 0x80, 0x01, 0xe0)
patches[9] = (0x00, 0xbf, 0xdf, 0xf8, 0x06, 0x90, 0xd9, 0xf8, 0x00, 0x90, 0x01, 0xe0)
patches[10] = (0x00, 0xbf, 0xdf, 0xf8, 0x06, 0xa0, 0xda, 0xf8, 0x00, 0xa0, 0x01, 0xe0)
patches[11] = (0x00, 0xbf, 0xdf, 0xf8, 0x06, 0xb0, 0xdb, 0xf8, 0x00, 0xb0, 0x01, 0xe0)
ea = here()
if (get_wide_word(ea) == 0xb082 #SUB SP, SP, #8
and get_wide_word(ea + 2) == 0xb503): #PUSH {R0,R1,LR}
if get_operand_type(ea + 4, 0) == 7:
pop = get_bytes(ea + 12, 4, 0)
if pop[1] == 'xbc':
register = -1
r = get_wide_byte(ea + 12)
for i in range(8):
if r == (1 << i):
register = i
break
if register == -1:
print "Unable to detect register"
else:
address = get_wide_dword(ea + 8) + ea + 8
for b in patches[register]:
patch_byte(ea, b)
ea += 1
if ea % 4 != 0:
ea += 2
patch_dword(ea, address)
elif pop[:3] == 'x5dxf8x04':
register = ord(pop[3]) >> 4
if register in patches:
address = get_wide_dword(ea + 8) + ea + 8
for b in patches[register]:
patch_byte(ea, b)
ea += 1
patch_dword(ea, address)
else:
print "POP instruction not found"
else:
print "Wrong operand type on +4:", get_operand_type(ea + 4, 0)
else:
print "Unable to detect first instructions"
แฉแแแ แแแแแแกแแแ แแฃแ แกแแ แก แกแขแ แฃแฅแขแฃแ แแก แแแกแแฌแงแแกแจแ, แ แแแแแก แจแแชแแแแช แแแแแแ - 0xB4B2 - แแ แแแฌแแ แแแแแ แกแแ แแแขแก:
แแแ แแ แแแแแ แแฆแแแจแแฃแแ แกแขแ แฃแฅแขแฃแ แแแแกแ, แแแแ แจแแแชแแแก แจแแแแแแก:
แ แแแแ แช แฌแแแ แจแแแแฎแแแแแจแ, BLX แแแกแขแ แฃแฅแชแแแก แจแแแแแ แฎแแแแ แแคแกแแขแฃแ แ:
แฉแแแ แแแฆแแแ แแคแกแแขแก LR-แแแ แแแกแแแแ แแแ, แแแแแขแแแ LR-แก แแ แแแแแแแแ แ แแฅ. 0x72044 + 0xC = 0x72050. แแ แแแแแแแแก แกแแ แแแขแ แกแแแแแแ แแแ แขแแแแ:
def put_unconditional_branch(source, destination):
offset = (destination - source - 4) >> 1
if offset > 2097151 or offset < -2097152:
raise RuntimeError("Invalid offset")
if offset > 1023 or offset < -1024:
instruction1 = 0xf000 | ((offset >> 11) & 0x7ff)
instruction2 = 0xb800 | (offset & 0x7ff)
patch_word(source, instruction1)
patch_word(source + 2, instruction2)
else:
instruction = 0xe000 | (offset & 0x7ff)
patch_word(source, instruction)
ea = here()
if get_wide_word(ea) == 0xb503: #PUSH {R0,R1,LR}
ea1 = ea + 6
if get_wide_word(ea + 2) == 0xbf00: #NOP
ea1 += 2
offset = get_wide_dword(ea1)
put_unconditional_branch(ea, (ea1 + offset) & 0xffffffff)
else:
print "Unable to detect first instruction"
แกแแ แแแขแแก แจแแกแ แฃแแแแแก แจแแแแแ:
แแแก แจแแแแแ, แ แแช แงแแแแแคแแ แ แแแงแแแแแฃแแแ แคแฃแแฅแชแแแจแ, แจแแแแซแแแแ แแแฃแแแแแ IDA แแแก แ แแแแฃแ แกแแฌแงแแกแแ. แแก แแแ แแแแแแแก แงแแแแ แคแฃแแฅแชแแแก แแแแก แแ แแแกแ แแแแแแแแแแ แแแ แจแแกแแซแแแแแแแ HexRays-แแก แแแแแงแแแแแแ.
แกแแแแแแก แแแแแแแ แแแ
แฉแแแ แแแกแฌแแแแแ แแแแแแแแแแแจแ แแแแฅแแแฃแ แ แแแแแก แแแแแแแแแกแแแ แแแแแแแแแแ libsgmainso-6.4.36.so UC แแ แแฃแแแ แแแแ แแ แแแแฆแ แคแฃแแฅแชแแแก แแแแ JNI_OnLoad.
int __fastcall real_JNI_OnLoad(JavaVM *vm)
{
int result; // r0
jclass clazz; // r0 MAPDST
int v4; // r0
JNIEnv *env; // r4
int v6; // [sp-40h] [bp-5Ch]
int v7; // [sp+Ch] [bp-10h]
v7 = *(_DWORD *)off_8AC00;
if ( !vm )
goto LABEL_39;
sub_7C4F4();
env = (JNIEnv *)sub_7C5B0(0);
if ( !env )
goto LABEL_39;
v4 = sub_72CCC();
sub_73634(v4);
sub_73E24(&unk_83EA6, &v6, 49);
clazz = (jclass)((int (__fastcall *)(JNIEnv *, int *))(*env)->FindClass)(env, &v6);
if ( clazz
&& (sub_9EE4(),
sub_71D68(env),
sub_E7DC(env) >= 0
&& sub_69D68(env) >= 0
&& sub_197B4(env, clazz) >= 0
&& sub_E240(env, clazz) >= 0
&& sub_B8B0(env, clazz) >= 0
&& sub_5F0F4(env, clazz) >= 0
&& sub_70640(env, clazz) >= 0
&& sub_11F3C(env) >= 0
&& sub_21C3C(env, clazz) >= 0
&& sub_2148C(env, clazz) >= 0
&& sub_210E0(env, clazz) >= 0
&& sub_41B58(env, clazz) >= 0
&& sub_27920(env, clazz) >= 0
&& sub_293E8(env, clazz) >= 0
&& sub_208F4(env, clazz) >= 0) )
{
result = (sub_B7B0(env, clazz) >> 31) | 0x10004;
}
else
{
LABEL_39:
result = -1;
}
return result;
}
แแแแแ แฃแคแ แ แแฎแแแก แแแแฎแแแแ แจแแแแแ แกแขแ แแฅแแแแแก:
sub_73E24(&unk_83EA6, &v6, 49);
clazz = (jclass)((int (__fastcall *)(JNIEnv *, int *))(*env)->FindClass)(env, &v6);
แคแฃแแฅแชแแแจแ sub_73E24 แแแแกแแก แกแแฎแแแ แแจแแแ แแ แแแจแแคแ แฃแแแ. แแ แคแฃแแฅแชแแแก แแแ แแแแขแ แแแแ, แแแแแชแแแฃแแแ แแแจแแคแ แฃแแ แแแแแชแแแแแแก แแกแแแแกแ แแแแแชแแแแแแก แแแฉแแแแแแแแ, แแแ แแแแฃแแ แแฃแคแแ แ แแ แ แแชแฎแแ. แชแฎแแแแ, แคแฃแแฅแชแแแก แแแแแซแแฎแแแแก แจแแแแแ แแฃแคแแ แจแ แแฅแแแแ แแแจแแคแ แฃแแ แฎแแแ, แ แแแแแ แแก แแแแแแแก แคแฃแแฅแชแแแแ FindClass, แ แแแแแแช แแฆแแแก แแแแกแแก แกแแฎแแแก แแแแ แ แแแ แแแแขแ แแ. แแฅแแแแ แแแแแแแแแแ แ, แ แแชแฎแแ แแ แแก แแฃแคแแ แแก แแแแ แแ แฎแแแแก แกแแแ แซแ. แแชแแแแ แแแแกแแก แกแแฎแแแแก แแแจแแคแแ แ, แแแ แฃแแแ แแแแแฎแ แแก, แแแแแแแแ แ แแฃ แแ แ แกแฌแแ แ แแแแแ แแฃแแแแแ. แแแแแ, แฃแคแ แ แแฎแแแก แแแแฎแแแแ แ แ แฎแแแแ แแแกแจแ sub_73E24.
int __fastcall sub_73E56(unsigned __int8 *in, unsigned __int8 *out, size_t size)
{
int v4; // r6
int v7; // r11
int v8; // r9
int v9; // r4
size_t v10; // r5
int v11; // r0
struc_1 v13; // [sp+0h] [bp-30h]
int v14; // [sp+1Ch] [bp-14h]
int v15; // [sp+20h] [bp-10h]
v4 = 0;
v15 = *(_DWORD *)off_8AC00;
v14 = 0;
v7 = sub_7AF78(17);
v8 = sub_7AF78(size);
if ( !v7 )
{
v9 = 0;
goto LABEL_12;
}
(*(void (__fastcall **)(int, const char *, int))(v7 + 12))(v7, "DcO/lcK+h?m3c*q@", 16);
if ( !v8 )
{
LABEL_9:
v4 = 0;
goto LABEL_10;
}
v4 = 0;
if ( !in )
{
LABEL_10:
v9 = 0;
goto LABEL_11;
}
v9 = 0;
if ( out )
{
memset(out, 0, size);
v10 = size - 1;
(*(void (__fastcall **)(int, unsigned __int8 *, size_t))(v8 + 12))(v8, in, v10);
memset(&v13, 0, 0x14u);
v13.field_4 = 3;
v13.field_10 = v7;
v13.field_14 = v8;
v11 = sub_6115C(&v13, &v14);
v9 = v11;
if ( v11 )
{
if ( *(_DWORD *)(v11 + 4) == v10 )
{
qmemcpy(out, *(const void **)v11, v10);
v4 = *(_DWORD *)(v9 + 4);
}
else
{
v4 = 0;
}
goto LABEL_11;
}
goto LABEL_9;
}
LABEL_11:
sub_7B148(v7);
LABEL_12:
if ( v8 )
sub_7B148(v8);
if ( v9 )
sub_7B148(v9);
return v4;
}
แคแฃแแฅแชแแ sub_7AF78 แฅแแแแก แแแแขแแแแแ แแก แแแแแแแแก แแแแแแแแฃแแ แแแแแก แแแแขแแก แแแกแแแแแแกแแแแก (แแ แแแแขแแแแแ แแแแ แแแขแแแฃแ แแ แแ แแแกแแฃแแ แแแ). แแฅ แแ แ แแกแแแ แแแแขแแแแแ แ แแฅแแแแแ: แแ แแ แจแแแชแแแก แฎแแแก "DcO/lcK+h?m3c*q@" (แแแแแแ แแแกแแฎแแแแ แแ, แ แแ แแก แแแกแแฆแแแแ), แแแแ แ แจแแแชแแแก แแแจแแคแ แฃแ แแแแแชแแแแแก. แจแแแแแแ, แแ แแแ แแแแแฅแขแ แแแแแแกแแแฃแแแ แแแ แแแแฃแ แกแขแ แฃแฅแขแฃแ แแจแ, แ แแแแแแช แแแแแแชแแแ แคแฃแแฅแชแแแก sub_6115C. แแแแ, แแ แกแขแ แฃแฅแขแฃแ แแจแ แแกแแแ แแแแแจแแแ แแแแ 3 แแแแจแแแแแแแแ. แแแแฎแแ, แ แ แแแฃแแ แแ แกแขแ แฃแฅแขแฃแ แแก แจแแแแแ.
int __fastcall sub_611B4(struc_1 *a1, _DWORD *a2)
{
int v3; // lr
unsigned int v4; // r1
int v5; // r0
int v6; // r1
int result; // r0
int v8; // r0
*a2 = 820000;
if ( a1 )
{
v3 = a1->field_14;
if ( v3 )
{
v4 = a1->field_4;
if ( v4 < 0x19 )
{
switch ( v4 )
{
case 0u:
v8 = sub_6419C(a1->field_0, a1->field_10, v3);
goto LABEL_17;
case 3u:
v8 = sub_6364C(a1->field_0, a1->field_10, v3);
goto LABEL_17;
case 0x10u:
case 0x11u:
case 0x12u:
v8 = sub_612F4(
a1->field_0,
v4,
*(_QWORD *)&a1->field_8,
*(_QWORD *)&a1->field_8 >> 32,
a1->field_10,
v3,
a2);
goto LABEL_17;
case 0x14u:
v8 = sub_63A28(a1->field_0, v3);
goto LABEL_17;
case 0x15u:
sub_61A60(a1->field_0, v3, a2);
return result;
case 0x16u:
v8 = sub_62440(a1->field_14);
goto LABEL_17;
case 0x17u:
v8 = sub_6226C(a1->field_10, v3);
goto LABEL_17;
case 0x18u:
v8 = sub_63530(a1->field_14);
LABEL_17:
v6 = 0;
if ( v8 )
{
*a2 = 0;
v6 = v8;
}
return v6;
default:
LOWORD(v5) = 28032;
goto LABEL_5;
}
}
}
}
LOWORD(v5) = -27504;
LABEL_5:
HIWORD(v5) = 13;
v6 = 0;
*a2 = v5;
return v6;
}
แแแแแ แแแแก แแแ แแแแขแ แ แแ แแก แกแขแ แฃแฅแขแฃแ แแก แแแแ, แ แแแแแกแแช แแแ แ แแแแแแญแ แแแแจแแแแแแแ 3. แจแแฎแแแแ แจแแแแฎแแแแแก 3: แคแฃแแฅแชแแแก sub_6364C แแแ แแแแขแ แแแ แแแแแแชแแแ แกแขแ แฃแฅแขแฃแ แแแแ, แ แแแแแแช แแแแแขแแแฃแแแ แแฅ แฌแแแ แคแฃแแฅแชแแแจแ, แแแฃ แแแกแแฆแแแ แแ แแแจแแคแ แฃแแ แแแแแชแแแแแ. แแฃ แแแ แแแ แแแแแแแ แแแแแ sub_6364Cแแแกแจแ แจแแแแซแแแแ แแแแแชแแแ RC4 แแแแแ แแแแ.
แฉแแแ แแแแฅแแก แแแแแ แแแแ แแ แแแกแแฆแแแ. แแชแแแแ แแแแกแแก แกแแฎแแแแก แแแจแแคแแ แ. แแ แ แ แแแฎแแ: com/taobao/wireless/security/adapter/JNICLlibrary. แแแแ! แฉแแแ แกแฌแแ แแแแแ แแแ แ.
แแ แซแแแแแแก แฎแ
แแฎแแ แฉแแแ แฃแแแ แแแแแแแ แแแแแฌแแแแ แ แแแแกแขแ แแชแแ Natives, แ แแแแแแช แแแแแแแแจแแแแก แคแฃแแฅแชแแแแ doCommandNative. แแแแแ แจแแแฎแแแแ แแแแแซแแฎแแแฃแ แคแฃแแฅแชแแแแก JNI_OnLoad, แแ แฉแแแ แแแกแจแ แแแแฃแแแแ sub_B7B0:
int __fastcall sub_B7F6(JNIEnv *env, jclass clazz)
{
char signature[41]; // [sp+7h] [bp-55h]
char name[16]; // [sp+30h] [bp-2Ch]
JNINativeMethod method; // [sp+40h] [bp-1Ch]
int v8; // [sp+4Ch] [bp-10h]
v8 = *(_DWORD *)off_8AC00;
decryptString((unsigned __int8 *)&unk_83ED9, (unsigned __int8 *)name, 0x10u);// doCommandNative
decryptString((unsigned __int8 *)&unk_83EEA, (unsigned __int8 *)signature, 0x29u);// (I[Ljava/lang/Object;)Ljava/lang/Object;
method.name = name;
method.signature = signature;
method.fnPtr = sub_B69C;
return ((int (__fastcall *)(JNIEnv *, jclass, JNINativeMethod *, int))(*env)->RegisterNatives)(env, clazz, &method, 1) >> 31;
}
แแ แแแ แแแแช, แแฅ แ แแแแกแขแ แแ แแแฃแแแ แแจแแแแแฃแ แ แแแแแแ แกแแฎแแแแ doCommandNative. แแฎแแ แฉแแแ แแแชแแ แแแกแ แแแกแแแแ แแ. แแแแฎแแ แ แแก แแแแแแแก.
int __fastcall doCommandNative(JNIEnv *env, jobject obj, int command, jarray args)
{
int v5; // r5
struc_2 *a5; // r6
int v9; // r1
int v11; // [sp+Ch] [bp-14h]
int v12; // [sp+10h] [bp-10h]
v5 = 0;
v12 = *(_DWORD *)off_8AC00;
v11 = 0;
a5 = (struc_2 *)malloc(0x14u);
if ( a5 )
{
a5->field_0 = 0;
a5->field_4 = 0;
a5->field_8 = 0;
a5->field_C = 0;
v9 = command % 10000 / 100;
a5->field_0 = command / 10000;
a5->field_4 = v9;
a5->field_8 = command % 100;
a5->field_C = env;
a5->field_10 = args;
v5 = sub_9D60(command / 10000, v9, command % 100, 1, (int)a5, &v11);
}
free(a5);
if ( !v5 && v11 )
sub_7CF34(env, v11, &byte_83ED7);
return v5;
}
แกแแฎแแแแ แจแแแแซแแแแ แแแแแแชแแแ, แ แแ แแฅ แแ แแก แงแแแแ แคแฃแแฅแชแแแก แจแแกแแแแก แฌแแ แขแแแ, แ แแแแแแช แแแแแแแแแ แแแแ แแแแแฌแงแแแขแแก แแจแแแแแฃแ แแแแแแแแแแแจแ แแแแแขแแแ. แฉแแแ แแแแแแขแแ แแกแแแก แคแฃแแฅแชแแแก แแแแแ แ 10601.
แแแแแแแ แฎแแแแแ, แ แแ แแ แซแแแแแแก แแแแแ แ แแฌแแ แแแแแก แกแแ แ แแชแฎแแก: แแ แซแแแแแ/10000, แแ แซแแแแแ % 10000/100 ะธ แแ แซแแแแแ % 10, แแแฃ แฉแแแแก แจแแแแฎแแแแแจแ, 1, 6 แแ 1. แแก แกแแแ แ แแชแฎแแ, แแกแแแ แ แแแแ แช แแแฉแแแแแแแแ JNIEnv แแ แคแฃแแฅแชแแแแ แแแแแชแแแฃแแ แแ แแฃแแแแขแแแ แแแแขแแแ แกแขแ แฃแฅแขแฃแ แแก แแ แแแแแแชแแแ. แแแฆแแแฃแแ แกแแแ แ แแชแฎแแแก แแแแแงแแแแแแ (แแฆแแแแจแแแ แแกแแแ N1, N2 แแ N3) แแแแแฃแแแ แแ แซแแแแแแก แฎแ.
แฒ แแฆแแช แแกแแแแกแ:
แฎแ แแแกแแแ แแแแแแแฃแ แแ JNI_OnLoad.
แฎแแจแ แแแแก แกแแแ แ แแชแฎแแ แจแแคแ แแแก. แฎแแก แงแแแแแ แคแฃแ แชแแแ แจแแแชแแแก แจแแกแแแแแแกแ แคแฃแแฅแชแแแก แแแกแแแแ แแก. แแแกแแฆแแแ แแ แแก แแจแแแแแก แแแแแซแจแ. แแแแจแ แแ แแแแแแแก แแแแแ, แกแแแแช แฉแแแแแแแก แกแแญแแ แ แคแฃแแฅแชแแ แแแแขแแแ แฎแแก, แแ แแ แแก แ แแฃแแ, แแฃ แแแกแแแ แแแแแงแแแแแฃแแ แงแแแแ แกแขแ แฃแฅแขแฃแ แ (แฉแแแ แแ แแฆแแฌแแ แ แแแ แแกแ, แ แแ แแ แแแแคแฃแญแแ แฃแแแ แกแแแแแแ แแแแ แกแขแแขแแ).
แแแขแ แแแแแแฃแแแแ
แฉแแแ แแแแแฆแแ แคแฃแแฅแชแแแก แแแกแแแแ แแ, แ แแแแแแแช แฃแแแ แแแจแแคแ แแก แขแ แแคแแแ: 0x5F1AC. แแแแ แแ แฏแแ แแแ แแ แแแฎแแ แแแ: UC Browser-แแก แแแแแแแแแ แแแแ แแแ แแแ แกแแฃแ แแ แแแ แแแแแแแแแก แฉแแแแแแแก.
แแแ แแแแขแ แแแแก แแแฆแแแแก แจแแแแแ แแแกแแแแแแ, แ แแแแแแช แฉแแแแงแแแแแแ Java แแแแจแ, แแแฆแแแ
แคแฃแแฅแชแแแก แแแกแแแแ แแแ 0x4D070. แแ แแฅ แกแฎแแ แขแแแแก แแแแแก แแแแแแแแ แแแแแแแแแ.
แฉแแแ แแแงแแแแแ แแ แแแแแฅแกแก R7 แแ R4-แจแ:
แฉแแแ แแแแแแแขแแแ แแแ แแแ แแแแแฅแกแก R11-แแ:
แชแฎแ แแแแแแ แแแกแแแแ แแแก แแแกแแฆแแแแ แแแแแแงแแแแ แแแแแฅแกแ:
แแแ แแแ แแแกแแแแ แแแ แแแแแกแแแแก แจแแแแแ แแแแแแงแแแแแ แแแแ แ แแแแแฅแกแ, แ แแแแแแช แแ แแก R4-แจแ. แชแฎแ แแแจแ 230 แแแแแแแขแแ.
แ แ แฃแแแ แแแแแแแแก แแแแแ? แแฅแแแ แจแแแแซแแแแ แฃแแฎแ แแ IDA-แก, แ แแ แแก แแ แแก แแแแแแ แแแแแ: Edit -> Other -> Specify switch idiom.
แจแแแแแแ แแแฆแแแฃแแ แแแแ แกแแจแแแแแแ. แแแแ แแ, แแแก แฏแฃแแแแแแจแ แแแแแแกแแก, แแฅแแแ แจแแแแฉแแแแ แฉแแแแแแแก แฃแแแ แแแชแแแ แคแฃแแฅแชแแแแ แแแ แก sub_6115C:
แแงแ แฉแแแ แแแแแ, แ แแแแแจแแช แแ-3 แจแแแแฎแแแแแจแ แแแฎแแ แแแจแแคแแ แ RC4 แแแแแ แแแแแก แแแแแงแแแแแแ. แแ แแ แจแแแแฎแแแแแจแ, แคแฃแแฅแชแแแแ แแแแแชแแแฃแแ แกแขแ แฃแฅแขแฃแ แ แแแกแแแ แแแแแชแแแฃแแ แแแ แแแแขแ แแแแแแ doCommandNative. แแแแแฎแกแแแแ แ แ แแแฅแแแแ แแฅ magicInt แแแแจแแแแแแแแ 16. แแฃแงแฃแ แแแ แจแแกแแแแแแก แจแแแแฎแแแแแก - แแ แ แแแแแแแแ แแแแแกแแแแก แจแแแแแ แแแแฃแแแแ แแแแก, แ แแแแแแแช แจแแกแแซแแแแแแแ แแแแแ แแแแแก แแแแแขแแคแแชแแ แแแ.
แแก แแ แแก AES!
แแแแแ แแแแ แแ แกแแแแแก, แ แฉแแแ แแฎแแแแ แแแกแ แแแ แแแแขแ แแแแก แแแฆแแแ: แ แแแแแ, แแแกแแฆแแแ แแ, แจแแกแแซแแแ, แแแแชแแแแแแแชแแแก แแแฅแขแแ แ (แแแกแ แแ แกแแแแแ แแแแแแแแแแฃแแแ AES แแแแแ แแแแแก แแฃแจแแแแแก แ แแแแแแ). แแแแแแ แกแขแ แฃแฅแขแฃแ แ แกแแแฆแแช แคแฃแแฅแชแแแก แแแแแซแแฎแแแแแแ แฃแแแ แฉแแแแงแแแแแแแก sub_6115C, แแแแ แแ แแแแแก แแก แแแฌแแแ แแแแกแแแฃแแ แแแแ แแแ แแแ แแ แแก แแฃแแแแแแแ, แแแแขแแ แฉแแแแแ แแแแ แแแแแก แแแงแแแแแ แแกแ, แ แแ แแแจแแคแแ แแก แคแฃแแฅแชแแแก แงแแแแ แแแ แแแแขแ แ แแแแแแขแแแแก แคแแแแจแ.
แแแขแฉแ
แแแแกแแแแแก, แ แแ แแ แแแฌแแ แแ แงแแแแ แแแขแฉแ แแกแแแแแแแก แแแแแ แฎแแแแ, แจแแแแซแแแแ แแแฃแจแแแ Android Studio, แแแฌแแ แแ แคแฃแแฅแชแแ, แ แแแแแแช แแแแฆแแแก แแแแแ แจแแงแแแแแก แแแ แแแแขแ แแแก, แ แแแแ แช แฉแแแแ แแแจแแคแแ แแก แคแฃแแฅแชแแแก แแ แฌแแ แก แคแแแแจแ, แจแแแแแ แแแแแแแแ แแ แแ แฉแแกแแแ แแแแ, แ แแแแแกแแช แแแแแแแแ แ แแแแแแแแแก. แแแแแ แแ แแแ.
แฉแแแแ แแแแแแ แแแ UC Browser-แแก แแฃแแแแแแ แแกแแแ แแ แฃแแแแแแแ แแแแแก แแแแแขแแแแก แแแฎแแ แฎแแแฃแแแแแแ. แจแแแแฎแกแแแแแ, แ แแ แงแแแแแ แคแฃแแฅแชแแแก แแแกแแฌแงแแกแจแ แแแแฅแแก แแแแแแก แแแแ, แ แแแแแแช แแแแแแแ แจแแแซแแแแ แจแแแชแแแแแก แแแแแกแแแแ แ แกแฎแแ. แซแแแแแ แแแกแแฎแแ แฎแแแแแแ ๐ แแฃแแชแ, แกแแแแแแ แคแฃแแฅแชแแแก แแแกแแฌแงแแกแจแ แแ แแ แแก แกแแแแแ แแกแ แแแแแแ แแแแแกแแแแก, แ แแแแแแช แแแแฎแแแก แงแแแแ แแแ แแแแขแ แก แคแแแแจแ. แแแแแฌแแ แแแกแ แแแฌแแแแแแ แแแงแแคแ แแ แแแแแแแแ แคแฃแแฅแชแแแแแก แแแแแแก แแแแแแแแก แแแแแงแแแแแ. แกแฃแ แแแฎแ แแแฌแแแ แแงแ.
แแแ แแแแ แแแฌแแแ:
ARM แแ แฅแแขแแฅแขแฃแ แแจแ แแแ แแแแ แแแฎแ แคแฃแแฅแชแแแก แแแ แแแแขแ แ แแแแแแชแแแ แ แแแแกแขแ แแแจแ R0-R3, แแแแแ แฉแแแ, แแกแแแแก แแ แกแแแแแแก แจแแแแฎแแแแแจแ, แแแแแแแก แกแขแแแแก แแแจแแแแแแ. LR แ แแแกแขแ แ แจแแแชแแแก แแแแ แฃแแแแแก แแแกแแแแ แแก. แแก แงแแแแแคแแ แ แฃแแแ แแงแแก แจแแแแฎแฃแแ, แ แแแ แคแฃแแฅแชแแแ แแแฃแจแแแก แแแก แจแแแแแ, แ แแช แฉแแแ แแแแแแแแแแแ แแแก แแแ แแแแขแ แแแก. แฉแแแ แแกแแแ แฃแแแ แจแแแแแแฎแแ แงแแแแ แ แแแแกแขแ แ, แ แแแแแกแแช แแแแแแแงแแแแแ แแ แแชแแกแจแ, แแแแขแแ แแแแแแแแ PUSH.W {R0-R10,LR}. R7-แจแ แแแฆแแแ แกแขแแแแก แแแจแแแแแแ แคแฃแแฅแชแแแแ แแแแแชแแแฃแแ แแแ แแแแขแ แแแแก แกแแแก แแแกแแแแ แแก.
แคแฃแแฅแชแแแก แแแแแงแแแแแแ แแแจแแแแ แแแแฎแกแแแ แคแแแแ /data/local/tmp/aes "แแ" แ แแแแแจแ
แแแฃ แแแกแแแแขแแแแแ. R0-แจแ แแขแแแ แแแแ แคแแแแแก แกแแฎแแแแก แแแกแแแแ แแก, R1-แจแ - แ แแแแแแก แแฆแแแแจแแแแแ แฎแแแแก แแแกแแแแ แแ. แแ แแฅ แแแแแแก แแแแ แแแแแ แแแแ, แแแแขแแ แแแแแแแแแแ แ แจแแแแแ แคแฃแแฅแชแแแแ. แแแแกแแแแก, แ แแ แแแ แแแแแ แซแแแแก แแฃแจแแแแ, แแแแแแแ แแแแแแกแแแ แคแฃแแฅแชแแแก แ แแแแฃแ แแแแแ แแแแแกแแแแก แแแแแแก แแแแ แแแก แแแแแ แแ แแแแแแก แแแชแแแแ แแแแแขแแแ แแแฉแแก แแแแ แซแแแแแแก.
แ แแแแแก แแแจแแแแ.
แคแฃแแฅแชแแแก แแแ แแแแ แกแแแ แแแ แแแแขแ แ Aes แแฅแแก แขแแแ int. แแแแแแแแ แ แแแแกแขแ แแแ แแแแแแแแแ แจแแแแแแฎแแ แกแขแแแจแ, แจแแแแแซแแแ แฃแแ แแแแ แแแแแแแขแแแแ แคแฃแแฅแชแแ แแแฌแแ แ แแแแ แแแกแแแแ แแแแ แแแกแขแแแ.
แจแแแแแแ, แฉแแแ แแแแฅแแก แกแแแ แกแขแ แฃแฅแขแฃแ แ, แ แแแแแแช แจแแแชแแแก แแแแแชแแแแ แแแแแก แแ แแแแแแแแฃแ แแแแแชแแแแแก แแแกแแฆแแแแกแแแแก, แแแแชแแแแแแแชแแแก แแแฅแขแแ แแกแแแแก แแ แแแจแแคแ แฃแแ แแแแแชแแแแแแกแแแแก.
แแแกแแกแ แฃแแก, แแแฎแฃแ แแ แคแแแแ, แแฆแแแแแแแ แ แแแแกแขแ แแแ แแ แแแแแแขแแแแ แแแแขแ แแแ แ แแแแฃแ แคแฃแแฅแชแแแแ Aes.
แฉแแแ แแแแ แแแแแ APK-แก แแแงแแแแแฃแแ แแแแแแแแแแแ, แฎแแแก แแแฌแแ แ แแแก, แแขแแแ แแแแ แแแฌแงแแแแแแแแแ/แแแฃแแแขแแ แแ แแ แแแแฃแจแแแ. แฉแแแ แแฎแแแแแ, แ แแ แฉแแแแ แแแแแแกแแงแ แแแ แแฅแแแแแ แแ แแฅ แฃแแแ แแแ แแแแแชแแแ แแฌแแ แแแ. แแ แแฃแแแ แ แแงแแแแแก แแแจแแคแแ แแก แแ แ แแฎแแแแ แขแ แแคแแแแกแแแแก, แแ แงแแแแ แแแจแแคแแ แ แแแแแก แแแชแแแฃแ แคแฃแแฅแชแแแแ. แแแแ แแ แ แแขแแแฆแแช แกแแญแแ แ แแแแแชแแแแแ แแ แแ แแก แแ แกแแญแแ แ แแแแฎแแแแ แแ แฉแแแก แขแ แแคแแแจแ. แแแแกแแแแแก, แ แแ แแ แแแแแแแแแ UC Browser-แแก แแแแ แกแแญแแ แ แแแแฎแแแแแก แแแแกแแฎแแ แชแแแแแแแแ, แแแแฆแแ แแแจแแคแ แฃแแ แแแกแฃแฎแ แแแ แ แแแฆแแแฃแแ แกแแ แแแ แแแแ แแ แแแแแ แแแแแงแแแแ แแแแแแแชแแ: แแแแแแแขแแ แแแจแแคแแ แ onCreate-แแ แแแแแแ แ แแฅแขแแแแแ.
const/16 v1, 0x62
new-array v1, v1, [B
fill-array-data v1, :encrypted_data
const/16 v0, 0x1f
invoke-static {v0, v1}, Lcom/uc/browser/core/d/c/g;->j(I[B)[B
move-result-object v1
array-length v2, v1
invoke-static {v2}, Ljava/lang/String;->valueOf(I)Ljava/lang/String;
move-result-object v2
const-string v0, "ololo"
invoke-static {v0, v2}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
แแแฌแงแแแ, แแแฌแแ แ แฎแแแก, แแแงแแแแแ, แแแแฃแจแแแ. แฉแแแ แแแฆแแแ NullPointerException, แ แแแแแ แแแแแแแ แแแแแ แฃแแ null.
แแแแแก แจแแแแแแแ แแแแแแแแก แแ แแก แแฆแแแฉแแแ แคแฃแแฅแชแแ, แ แแแแแแช แแแจแแคแ แแแก แกแแแแขแแ แแกแ แฎแแแแแก: โMETA-INF/โ แแ โ.RSAโ. แ แแแแ แช แฉแแแก, แแแแแแแชแแ แแแแฌแแแแก แแแแแก แกแแ แขแแคแแแแขแก. แแ แแฃแแแแช แแแกแแแ แแแแแแจแแแแก แแแแแ แแ แแแแก. แแ แแแแแแแแแ แแ แแกแฃแ แก แจแแแแฎแ แแแแก, แ แแช แฎแแแแ แกแแ แแแคแแแแขแแแ แแแแแแจแแ แแแแ, แแกแ แ แแ, แฉแแแ แแแก แแฎแแแแ แกแฌแแ แกแแ แแแคแแแแขแก แแแแแแชแแแ. แแแแแ แแแแแงแแแแ แแแจแแคแ แฃแแ แฎแแแ แแกแ, แ แแ "META-INF/"-แแก แแแชแแแแ แแแแแฆแแ "BLABLINF/", แจแแแฅแแแแ แกแแฅแแฆแแแแ แแ แกแแฎแแแแ APK-แจแ แแ แแแแแแแขแแ squirrel แแ แแฃแแแ แแก แกแแ แขแแคแแแแขแ.
แแแฌแงแแแ, แแแฌแแ แ แฎแแแก, แแแงแแแแแ, แแแแฃแจแแแ. แแแแแ! แฉแแแ แแแแฅแแก แแแกแแฆแแแ!
MitM
แแแแแฆแแ แแแกแแฆแแแ แแ แแแกแแฆแแแแก แขแแแ แแแแชแแแแแแแชแแแก แแแฅแขแแ แ. แจแแแแชแแแแ แกแแ แแแ แแก แแแกแฃแฎแแก แแแจแแคแแ แ CBC แ แแแแแจแ.
แฉแแแ แแฎแแแแแ แแ แฅแแแแก URL-แก, MD5-แแก แแกแแแแกแก, โextract_unzipsizeโ แแ แ แแชแฎแแก. แฉแแแ แแแแแฌแแแแ: แแ แฅแแแแก MD5 แแแแแแ, แจแแฃแคแฃแแแแ แแแแแแแแแแแก แแแแ แแแแแแ. แฉแแแ แแชแแแแแแ แแแแแงแแแแ แแก แแแแแแแแแแ แแ แแแแชแแ แแแ แแ แแฃแแแ แก. แแแแก แกแแฉแแแแแแแแ, แ แแ แฉแแแแ แแแงแแแแแฃแแ แแแแแแแแแแ แฉแแขแแแ แแฃแแแ, แฉแแแ แแแแฃแจแแแ SMS-แแก แจแแฅแแแแก แแแแแ แแฎแแ แขแแฅแกแขแแ โPWNED!โ แฉแแแ แจแแแชแแแแ แกแแ แแแ แแก แแ แแแกแฃแฎแก:
แแ แแฃแแแ แ แ แแแแแแฏแแ แแ แชแแแแแแก แแ แฅแแแแก แฉแแแแขแแแ แแแแก, แ แแก แจแแแแแแแช แจแแชแแแแแก แฃแจแแแแก. แแจแแแ แแ แ แแฆแแช
แแแก แแ แแแกแฌแแแก. แแ แแฃแแแแแแแ แคแแ แแแขแแก แแแแแแแแแแแแก แจแแแแแแ, แแฆแแแฉแแแ, แ แแ แกแแ แแแ แ แแกแแแ แแแแแกแชแแแก แแ แฅแแแแก แแแแแก:
แแก แแแจแแคแ แฃแแแ LEB128-แจแ. แแแขแฉแแก แจแแแแแ, แแแแแแแแแแแก แแ แฅแแแแก แแแแ แแแแแ แจแแแชแแแแ, แแแแขแแ แแ แแฃแแแ แแ แฉแแแแแแ, แ แแ แแ แฅแแแ แแ แแกแฌแแ แแ แแงแ แแแแแแฌแแ แแแ แแ แ แแแแแแแแ แแชแแแแแแแก แจแแแแแ แแแ แจแแชแแแแ แแแฃแจแแ.
แแแกแฌแแ แแแ แแ แฅแแแแก แแแแแก... แแ โ แแแแแ แฏแแแแ! ๐ แจแแแแแ แแ แแก แแแแแแจแ.
แจแแแแแแแ แแ แแแแแแแแแ แแก แ แแแฅแชแแ
แแแแแแแแฃแ แแ, แฐแแแแ แแแก แจแแฃแซแแแแ แแแแแแงแแแแ UC Browser-แแก แแแฃแชแแแแ แคแฃแแฅแชแแ แแแแแ แแแแแแแแแแแแแก แแแกแแแ แชแแแแแแแ แแ แแแกแแจแแแแแ. แแก แแแแแแแแแแแแ แแแฃแจแแแแแก แแ แแฃแแแ แแก แแแแขแแฅแกแขแจแ, แแแแขแแ แแกแแแ แแแแฆแแแแ แแแก แงแแแแ แกแแกแขแแแแก แแแแแ แแแแก. แจแแแแแแ, แคแแจแแแแแก แคแแแฏแ แแแแก แฉแแแแแแแก แจแแกแแซแแแแแแแ, แแกแแแ แคแแ แแแฎแแแก แฉแแแฃแ แ แชแแงแแแก แกแแแฃแจแแ แคแแแแแแแ แฌแแแแแ, แแแ แจแแ แแก แแแแแแ, แแแ แแแแแ แแ แแแแแชแแแแ แแแแแจแ แจแแแแฎแฃแแ แฅแฃแฅแแแแ.
แฉแแแ แแแแฃแแแแจแแ แแแ UC Browser-แแก แแแแแแแแแ แแแก แแ แแแชแแแแแ แฉแแแแก แแแแ แแฆแแแฉแแแแแ แแ แแแแแแแก แจแแกแแฎแแ, แแชแแแแ แแฆแแแแจแแแ แแแฃแชแแแแแแแแ แแ แแแก แกแแจแแจแ แแแแแแ, แแแแ แแ แแแ แฉแแแแแแ แแ แแคแแ แ แแแแแฎแแแแก. แแแแแแ แแฃแแแ, แแ แแฃแแแ แ แแแ แซแแแแแแ แแแแแกแ แกแแฎแแคแแแ แคแฃแแฅแชแแแก แแจแแแ แ แฎแแแแแก. แแแแ แแ แแแก แจแแแแแ แ แแช แฉแแแ แแแแแแแฆแแแแแ แแแฃแชแแแแแแแก แแแขแแแแแ, แฃแแแ แจแแฃแซแแแแแแ แแงแ แแแกแ แแแแแ แแ แแแ, แ แแแแ แช แแแ แ. 27 แแแ แขแ แแงแ
แแแแแแแแ UC Browser 12.10.9.1193-แแก แแฎแแแ แแแ แกแแ, แ แแแแแแช แกแแ แแแ แแ แจแแแแแแ HTTPS-แแก แกแแจแฃแแแแแแ:
แแแ แแ แแแแกแ, โแจแแกแฌแแ แแแแกโ แจแแแแแ แแ แแ แกแขแแขแแแก แแแฌแแ แแแแ, แแ แแฃแแแ แจแ PDF-แแก แแแฎแกแแแก แแชแแแแแแแ แแแแแแฌแแแ แจแแชแแแแแก แจแแขแงแแแแแแแ แขแแฅแกแขแแ โแแฃ, แ แแฆแแช แแ แแกแฌแแ แแ แแแฎแแ!โ แกแแ แแแ แแ แแแแฎแแแแ แแ แแแแแแแแฃแแ PDF-แแก แแแฎแกแแแก แแชแแแแแแแกแแก, แแแแ แแ แแแแฎแแแแ แแแแแแแ แแ แแฃแแแ แแก แแแจแแแแแกแแก, แ แแช แแแฃแแแแแแก แจแแกแ แฃแแแแแแ แแแแแก แฉแแแแขแแแ แแแแก แแฃแแแแ แฃแแแ แแ Google Play-แก แฌแแกแแแแก แแแ แฆแแแแแ.
แฌแงแแ แ: www.habr.com