ืžื—ืคืฉ ื ืงื•ื“ื•ืช ืชื•ืจืคื” ื‘ื“ืคื“ืคืŸ UC

ืžื—ืคืฉ ื ืงื•ื“ื•ืช ืชื•ืจืคื” ื‘ื“ืคื“ืคืŸ UC

ืžื‘ื•ื

ื‘ืกื•ืฃ ืžืจืฅ ืื ื—ื ื• ื“ื™ื•ื•ื—, ืฉื”ื ื’ื™ืœื• ื™ื›ื•ืœืช ื ืกืชืจืช ืœื˜ืขื•ืŸ ื•ืœื”ืจื™ืฅ ืงื•ื“ ืœื ืžืื•ืžืช ื‘ื“ืคื“ืคืŸ UC. ื”ื™ื•ื ื ื‘ื—ืŸ ื‘ืคื™ืจื•ื˜ ื›ื™ืฆื“ ื”ื•ืจื“ื” ื–ื• ืžืชืจื—ืฉืช ื•ื›ื™ืฆื“ ื”ืืงืจื™ื ื™ื›ื•ืœื™ื ืœื”ืฉืชืžืฉ ื‘ื” ืœืžื˜ืจื•ืชื™ื”ื.

ืœืคื ื™ ื–ืžืŸ ืžื”, UC Browser ืคื•ืจืกื ื•ื”ื•ืคืฅ ื‘ืฆื•ืจื” ืžืื•ื“ ืื’ืจืกื™ื‘ื™ืช: ื”ื•ื ื”ื•ืชืงืŸ ืขืœ ืžื›ืฉื™ืจื™ ื”ืžืฉืชืžืฉื™ื ื‘ืืžืฆืขื•ืช ืชื•ื›ื ื•ืช ื–ื“ื•ื ื™ื•ืช, ืฉื”ื•ืคืฅ ืžืืชืจื™ื ืฉื•ื ื™ื ื‘ืžืกื•ื•ื” ืฉืœ ืงื‘ืฆื™ ื•ื™ื“ืื• (ื›ืœื•ืžืจ, ืžืฉืชืžืฉื™ื ื—ืฉื‘ื• ืฉื”ื ืžื•ืจื™ื“ื™ื, ืœืžืฉืœ, ืกืจื˜ื•ืŸ ืคื•ืจื ื•, ืื‘ืœ ื‘ืžืงื•ื ื–ืืช ืงื™ื‘ืœ APK ืขื ื”ื“ืคื“ืคืŸ ื”ื–ื”), ื”ืฉืชืžืฉ ื‘ืื ืจื™ื ืžืคื—ื™ื“ื™ื ืขื ื”ื•ื“ืขื•ืช ืฉื”ื“ืคื“ืคืŸ ืžื™ื•ืฉืŸ, ืคื’ื™ืข ื•ื“ื‘ืจื™ื ื›ืืœื”. ื‘ืงื‘ื•ืฆืช ื”ื“ืคื“ืคื ื™ื ื”ืจืฉืžื™ืช ืฉืœ UC ื‘-VK ื™ืฉ ื ื•ืฉื, ืฉื‘ื• ืžืฉืชืžืฉื™ื ื™ื›ื•ืœื™ื ืœื”ืชืœื•ื ืŸ ืขืœ ืคืจืกื•ื ืœื ื”ื•ื’ืŸ, ื™ืฉ ืฉื ื“ื•ื’ืžืื•ืช ืจื‘ื•ืช. ื‘-2016 ื”ื™ื” ืืคื™ืœื• ืคืจืกื•ื ื•ื™ื“ืื• ื‘ืจื•ืกื™ืช (ื›ืŸ, ืคืจืกื•ื ืœื“ืคื“ืคืŸ ื—ื•ืกื ืคืจืกื•ืžื•ืช).

ื‘ื–ืžืŸ ื”ื›ืชื™ื‘ื”, ืœ-UC Browser ื™ืฉ ื™ื•ืชืจ ืž-500 ื”ืชืงื ื•ืช ื‘-Google Play. ื–ื” ืžืจืฉื™ื - ืจืง ืœื’ื•ื’ืœ ื›ืจื•ื ื™ืฉ ื™ื•ืชืจ. ื‘ื™ืŸ ื”ื‘ื™ืงื•ืจื•ืช ื ื™ืชืŸ ืœืจืื•ืช ืœื ืžืขื˜ ืชืœื•ื ื•ืช ืขืœ ืคืจืกื•ื ื•ื”ืคื ื™ื•ืช ืœื—ืœืง ืžื”ืืคืœื™ืงืฆื™ื•ืช ื‘-Google Play. ื–ื• ื”ื™ื™ืชื” ื”ืกื™ื‘ื” ืœืžื—ืงืจ ืฉืœื ื•: ื”ื—ืœื˜ื ื• ืœืจืื•ืช ืื UC Browser ืขื•ืฉื” ืžืฉื”ื• ืจืข. ื•ื”ืชื‘ืจืจ ืฉื›ืŸ!

ื‘ืงื•ื“ ื”ืืคืœื™ืงืฆื™ื”, ื”ืชื’ืœืชื” ื”ื™ื›ื•ืœืช ืœื”ื•ืจื™ื“ ื•ืœื”ืคืขื™ืœ ืงื•ื“ ื”ืคืขืœื”, ื“ื‘ืจ ื”ืžื ื•ื’ื“ ืœื›ืœืœื™ ืคืจืกื•ื ื‘ืงืฉื•ืช ื‘-Google Play. ื‘ื ื•ืกืฃ ืœืขื•ื‘ื“ื” ืฉ-UC Browser ืžื•ืจื™ื“ ืงื•ื“ ื”ืคืขืœื”, ื”ื•ื ืขื•ืฉื” ื–ืืช ื‘ืฆื•ืจื” ืœื ืžืื•ื‘ื˜ื—ืช, ืฉื‘ืืžืฆืขื•ืชื” ื ื™ืชืŸ ืœื‘ืฆืข ืžืชืงืคืช MitM. ื‘ื•ื ื ืจืื” ืื โ€‹โ€‹ื ื•ื›ืœ ืœื‘ืฆืข ืคื™ื’ื•ืข ื›ื–ื”.

ื›ืœ ืžื” ืฉื ื›ืชื‘ ืœื”ืœืŸ ืจืœื•ื•ื ื˜ื™ ืœื’ืจืกื” ืฉืœ ื“ืคื“ืคืŸ 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 ืืœ puds.ucweb.com/upgrade/index.xhtml, ืฉื ื™ืชืŸ ืœืจืื•ืช ื‘ืคืงืง ื–ืžืŸ ืžื” ืœืื—ืจ ื”ื”ืชื—ืœื”. ื‘ืชื’ื•ื‘ื”, ื”ื•ื ืขืฉื•ื™ ืœืงื‘ืœ ืคืงื•ื“ื” ืœื”ื•ืจื™ื“ ืขื“ื›ื•ืŸ ื›ืœืฉื”ื• ืื• ืžื•ื“ื•ืœ ื—ื“ืฉ. ื‘ืžื”ืœืš ื”ื ื™ืชื•ื—, ื”ืฉืจืช ืœื ื ืชืŸ ืคืงื•ื“ื•ืช ื›ืืœื”, ืืš ืฉืžื ื• ืœื‘ ืฉื›ืืฉืจ ืื ื• ืžื ืกื™ื ืœืคืชื•ื— ืงื•ื‘ืฅ PDF ื‘ื“ืคื“ืคืŸ, ื”ื•ื ืžื‘ืฆืข ื‘ืงืฉื” ืฉื ื™ื™ื” ืœื›ืชื•ื‘ืช ืฉืฆื•ื™ื ื” ืœืžืขืœื”, ื•ืœืื—ืจ ืžื›ืŸ ื”ื•ื ืžื•ืจื™ื“ ืืช ื”ืกืคืจื™ื™ื” ื”ืžืงื•ืจื™ืช. ื›ื“ื™ ืœื‘ืฆืข ืืช ื”ืžืชืงืคื”, ื”ื—ืœื˜ื ื• ืœื”ืฉืชืžืฉ ื‘ืชื›ื•ื ื” ื–ื• ืฉืœ ื“ืคื“ืคืŸ UC: ื”ื™ื›ื•ืœืช ืœืคืชื•ื— PDF ื‘ืืžืฆืขื•ืช ืกืคืจื™ื™ื” ืžืงื•ืจื™ืช, ืฉืื™ื ื” ื‘-APK ื•ืืฉืจ ื”ื™ื ืžื•ืจื™ื“ื” ืžื”ืื™ื ื˜ืจื ื˜ ื‘ืžื™ื“ืช ื”ืฆื•ืจืš. ืจืื•ื™ ืœืฆื™ื™ืŸ ื›ื™ ื‘ืื•ืคืŸ ืชื™ืื•ืจื˜ื™, ื ื™ืชืŸ ืœืืœืฅ ืืช UC Browser ืœื”ื•ืจื™ื“ ืžืฉื”ื• ืœืœื ืื™ื ื˜ืจืืงืฆื™ื” ืฉืœ ื”ืžืฉืชืžืฉ - ืื ืชืกืคืง ืชื’ื•ื‘ื” ืžืขื•ืฆื‘ืช ื”ื™ื˜ื‘ ืœื‘ืงืฉื” ืฉืžืชื‘ืฆืขืช ืœืื—ืจ ื”ืคืขืœืช ื”ื“ืคื“ืคืŸ. ืื‘ืœ ื›ื“ื™ ืœืขืฉื•ืช ื–ืืช, ืขืœื™ื ื• ืœืœืžื•ื“ ืืช ืคืจื•ื˜ื•ืงื•ืœ ื”ืื™ื ื˜ืจืืงืฆื™ื” ืขื ื”ืฉืจืช ื‘ื™ืชืจ ืคื™ืจื•ื˜, ืื– ื”ื—ืœื˜ื ื• ืฉื™ื”ื™ื” ืงืœ ื™ื•ืชืจ ืœืขืจื•ืš ืืช ื”ืชื’ื•ื‘ื” ื”ืžื™ื™ืจื˜ืช ื•ืœื”ื—ืœื™ืฃ ืืช ื”ืกืคืจื™ื™ื” ืœืขื‘ื•ื“ื” ืขื PDF.

ืœื›ืŸ, ื›ืืฉืจ ืžืฉืชืžืฉ ืจื•ืฆื” ืœืคืชื•ื— ืงื•ื‘ืฅ PDF ื™ืฉื™ืจื•ืช ื‘ื“ืคื“ืคืŸ, ื ื™ืชืŸ ืœืจืื•ืช ืืช ื”ื‘ืงืฉื•ืช ื”ื‘ืื•ืช ื‘ืชื ื•ืขื”:

ืžื—ืคืฉ ื ืงื•ื“ื•ืช ืชื•ืจืคื” ื‘ื“ืคื“ืคืŸ UC

ืจืืฉื™ืช ื™ืฉ ื‘ืงืฉืช POST ืœ puds.ucweb.com/upgrade/index.xhtmlืื–
ื”ื•ืจื“ื” ืฉืœ ืืจื›ื™ื•ืŸ ืขื ืกืคืจื™ื™ื” ืœืฆืคื™ื™ื” ื‘ืคื•ืจืžื˜ื™ื ืฉืœ PDF ื•-Office. ื”ื’ื™ื•ื ื™ ืœื”ื ื™ื— ืฉื”ื‘ืงืฉื” ื”ืจืืฉื•ื ื” ืžืขื‘ื™ืจื” ืžื™ื“ืข ืขืœ ื”ืžืขืจื›ืช (ืœืคื—ื•ืช ื”ืืจื›ื™ื˜ืงื˜ื•ืจื” ืœืกืคืง ืืช ื”ืกืคืจื™ื™ื” ื”ื ื“ืจืฉืช), ื•ื‘ืชื’ื•ื‘ื” ืœื” ื”ื“ืคื“ืคืŸ ืžืงื‘ืœ ืžื™ื“ืข ืžืกื•ื™ื ืขืœ ื”ืกืคืจื™ื™ื” ืฉืฆืจื™ืš ืœื”ื•ืจื™ื“: ื”ื›ืชื•ื‘ืช ื•ืืคืฉืจ , ืžืฉื”ื• ืื—ืจ. ื”ื‘ืขื™ื” ื”ื™ื ืฉื”ื‘ืงืฉื” ื”ื–ื• ืžื•ืฆืคื ืช.

ื‘ืงืฉ ืงื˜ืข

ืงื˜ืข ืชืฉื•ื‘ื”

ืžื—ืคืฉ ื ืงื•ื“ื•ืช ืชื•ืจืคื” ื‘ื“ืคื“ืคืŸ UC

ืžื—ืคืฉ ื ืงื•ื“ื•ืช ืชื•ืจืคื” ื‘ื“ืคื“ืคืŸ UC

ื”ืกืคืจื™ื™ื” ืขืฆืžื” ืืจื•ื–ื” ื‘-ZIP ื•ืื™ื ื” ืžื•ืฆืคื ืช.

ืžื—ืคืฉ ื ืงื•ื“ื•ืช ืชื•ืจืคื” ื‘ื“ืคื“ืคืŸ UC

ื—ืคืฉ ืงื•ื“ ืคืขื ื•ื— ืชืขื‘ื•ืจื”

ื‘ื•ืื• ื ื ืกื” ืœืคืขื ื— ืืช ืชื’ื•ื‘ืช ื”ืฉืจืช. ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ ืงื•ื“ ื”ื›ื™ืชื” 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", ืœืžืฉืœ), ื™ืฉ ืœืงืจื•ื ื›ืืŸ ืฉื™ื˜ื” ืฉืชืคืขื ื— ืืช ืชื’ื•ื‘ืช ื”ืฉืจืช.
ื ืขื‘ื•ืจ ืœืฉื™ื˜ื” gj. ืฉื™ืžื• ืœื‘ ืฉื”ืืจื’ื•ืžื ื˜ ื”ืจืืฉื•ืŸ ื”ื•ื ื”-byte ื‘-offset 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, ืžืฆื™ื™ืŸ ืื—ืช ืžืฉืœื•ืฉ ืืคืฉืจื•ื™ื•ืช ืืคืฉืจื™ื•ืช.

ืื ื• ืžืžืฉื™ื›ื™ื ืœื ืชื— ืืช ื”ืงื•ื“. ืื—ืจื™ ื›ืžื” ืงืคื™ืฆื•ืช ืื ื—ื ื• ืžื•ืฆืื™ื ืืช ืขืฆืžื ื• ื‘ืฉื™ื˜ื” ืขื ืฉื ืžื•ื‘ืŸ ืžืืœื™ื• decryptBytesByKey.

ื›ืืŸ ืžื•ืคืจื“ื™ื ืฉื ื™ ื‘ืชื™ื ื ื•ืกืคื™ื ืžื”ืชื’ื•ื‘ื” ืฉืœื ื•, ื•ืžืชืงื‘ืœืช ืžื”ื ืžื—ืจื•ื–ืช. ื‘ืจื•ืจ ืฉื‘ืื•ืคืŸ ื–ื” ื ื‘ื—ืจ ื”ืžืคืชื— ืœืคืขื ื•ื— ื”ื”ื•ื“ืขื”.

    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, ืืœื .ืฆื ืฆื ืช. ื”ืฉื™ื˜ื” ืฉืื ื• ืžืขื•ื ื™ื™ื ื™ื ื‘ื” ืžื™ื•ืฉืžืช ื‘ืื•ืคืŸ ื”ื‘ื:

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 - ื–ื” ื›ื ืจืื” ืžืกืคืจ ื”ืคืงื•ื“ื”.

ืœืื—ืจ ืฉืจืฉืจืช ื”ืžืขื‘ืจื™ื ื”ื‘ืื” ืื ื• ืžื•ืฆืื™ื ืžื—ืœืงื” ื”ืžื™ื™ืฉืžืช ืืช ื”ืžืžืฉืง IRouterComponent ื•ืฉื™ื˜ื” 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);
}
}

ื•ื’ื ื›ื™ืชื” JNICLibrary, ืฉื‘ื• ืžื•ืฆื”ืจืช ื”ืฉื™ื˜ื” ื”ืžืงื•ืจื™ืช doCommandNative:

package com.taobao.wireless.security.adapter;
public class JNICLibrary {
public static native Object doCommandNative(int arg0, Object[] arg1);
}

ื–ื” ืื•ืžืจ ืฉืื ื—ื ื• ืฆืจื™ื›ื™ื ืœืžืฆื•ื ืฉื™ื˜ื” ื‘ืงื•ื“ ื”ืžืงื•ืจื™ doCommandNative. ื•ื›ืืŸ ืžืชื—ื™ืœ ื”ื›ื™ืฃ.

ืขืจืคื•ืœ ืฉืœ ืงื•ื“ ืžื›ื•ื ื”

ื‘ืงื•ื‘ืฅ libsgmain.so (ืฉื”ื•ื ืœืžืขืฉื” jar. ื•ื‘ื• ืžืฆืื ื• ื™ื™ืฉื•ื ืฉืœ ื›ืžื” ืžืžืฉืงื™ื ื”ืงืฉื•ืจื™ื ืœื”ืฆืคื ื” ืžืžืฉ ืœืžืขืœื”) ื™ืฉ ืกืคืจื™ื™ื” ืžืงื•ืจื™ืช ืื—ืช: libsgmainso-6.4.36.so. ืื ื• ืคื•ืชื—ื™ื ืื•ืชื• ื‘-IDA ื•ืžืงื‘ืœื™ื ื—ื‘ื•ืจื” ืฉืœ ืชื™ื‘ื•ืช ื“ื•-ืฉื™ื— ืขื ืฉื’ื™ืื•ืช. ื”ื‘ืขื™ื” ื”ื™ื ืฉื˜ื‘ืœืช ื›ื•ืชืจื•ืช ื”ืกืขื™ืคื™ื ืื™ื ื” ื—ื•ืงื™ืช. ื–ื” ื ืขืฉื” ื‘ื›ื•ื•ื ื” ื›ื“ื™ ืœืกื‘ืš ืืช ื”ื ื™ืชื•ื—.

ืžื—ืคืฉ ื ืงื•ื“ื•ืช ืชื•ืจืคื” ื‘ื“ืคื“ืคืŸ UC

ืื‘ืœ ื–ื” ืœื ื ื—ื•ืฅ: ื›ื“ื™ ืœื˜ืขื•ืŸ ื ื›ื•ืŸ ืงื•ื‘ืฅ ELF ื•ืœื ืชื— ืื•ืชื•, ืžืกืคื™ืงื” ื˜ื‘ืœืช ื›ื•ืชืจื•ืช ืฉืœ ืชื•ื›ื ื™ืช. ืœื›ืŸ, ืื ื• ืคืฉื•ื˜ ืžื•ื—ืงื™ื ืืช ื˜ื‘ืœืช ื”ืกืขื™ืคื™ื, ื•ืžืืคืกื™ื ืืช ื”ืฉื“ื•ืช ื”ืžืชืื™ืžื™ื ื‘ื›ื•ืชืจืช.

ืžื—ืคืฉ ื ืงื•ื“ื•ืช ืชื•ืจืคื” ื‘ื“ืคื“ืคืŸ UC

ืคืชื— ืฉื•ื‘ ืืช ื”ืงื•ื‘ืฅ ื‘-IDA.

ื™ืฉื ืŸ ืฉืชื™ ื“ืจื›ื™ื ืœื•ืžืจ ืœืžื›ื•ื ื” ื”ื•ื™ืจื˜ื•ืืœื™ืช ืฉืœ Java ื”ื™ื›ืŸ ื‘ื“ื™ื•ืง ื‘ืกืคืจื™ื™ื” ื”ืžืงื•ืจื™ืช ื ืžืฆื ื”ื™ื™ืฉื•ื ืฉืœ ืฉื™ื˜ื” ื”ืžื•ืฆื”ืจืช ื‘ืงื•ื“ Java ื›-native. ื”ืจืืฉื•ืŸ ื”ื•ื ืœืชืช ืœื• ืฉื ืžื™ืŸ Java_package_name_ClassName_MethodName.

ื”ืฉื ื™ ื”ื•ื ืœืจืฉื•ื ืื•ืชื• ื‘ืขืช ื˜ืขื™ื ืช ื”ืกืคืจื™ื™ื” (ื‘ืคื•ื ืงืฆื™ื” JNI_OnLoad)
ื‘ืืžืฆืขื•ืช ืงืจื™ืืช ืคื•ื ืงืฆื™ื” RegisterNatives.

ื‘ืžืงืจื” ืฉืœื ื•, ืื ื ืฉืชืžืฉ ื‘ืฉื™ื˜ื” ื”ืจืืฉื•ื ื”, ื”ืฉื ืฆืจื™ืš ืœื”ื™ื•ืช ื›ืš: Java_com_taobao_wireless_security_adapter_JNICLibrary_doCommandNative.

ืื™ืŸ ืคื•ื ืงืฆื™ื” ื›ื–ื• ื‘ื™ืŸ ื”ืคื•ื ืงืฆื™ื•ืช ื”ืžื™ื•ืฆืื•ืช, ืžื” ืฉืื•ืžืจ ืฉืืชื” ืฆืจื™ืš ืœื—ืคืฉ ืฉื™ื—ื” RegisterNatives.
ื‘ื•ื ื ืœืš ืœืคื•ื ืงืฆื™ื” JNI_OnLoad ื•ืื ื—ื ื• ืจื•ืื™ื ืืช ื”ืชืžื•ื ื” ื”ื–ื•:

ืžื—ืคืฉ ื ืงื•ื“ื•ืช ืชื•ืจืคื” ื‘ื“ืคื“ืคืŸ UC

ืžื” ืงื•ืจื” ืคื”? ื‘ืžื‘ื˜ ืจืืฉื•ืŸ, ื”ื”ืชื—ืœื” ื•ื”ืกื•ืฃ ืฉืœ ื”ืคื•ื ืงืฆื™ื” ืื•ืคื™ื™ื ื™ื™ื ืœืืจื›ื™ื˜ืงื˜ื•ืจืช ARM. ื”ื”ื•ืจืื” ื”ืจืืฉื•ื ื” ืขืœ ื”ืžื—ืกื ื™ืช ืžืื—ืกื ืช ืืช ืชื•ื›ืŸ ื”ืื•ื’ืจื™ื ืฉื”ืคื•ื ืงืฆื™ื” ืชืฉืชืžืฉ ื‘ื”ื ื‘ืคืขื•ืœืชื” (ื‘ืžืงืจื” ื–ื”, R0, R1 ื•-R2), ื•ื›ืŸ ืืช ื”ืชื•ื›ืŸ ืฉืœ ืื•ื’ืจ LR, ื”ืžื›ื™ืœ ืืช ื›ืชื•ื‘ืช ื”ื”ื—ื–ืจื” ืžื”ืคื•ื ืงืฆื™ื”. . ื”ื”ื•ืจืื” ื”ืื—ืจื•ื ื” ืžืฉื—ื–ืจืช ืืช ื”ืื•ื’ืจื™ื ื”ืฉืžื•ืจื™ื, ื•ื›ืชื•ื‘ืช ื”ื”ื—ื–ืจื” ืžืžื•ืงืžืช ืžื™ื“ ื‘ืคื ืงืก ื”-PC - ื•ื‘ื›ืš ื—ื•ื–ืจืช ืžื”ืคื•ื ืงืฆื™ื”. ืื‘ืœ ืื ืชืกืชื›ืœื• ื”ื™ื˜ื‘, ืชื‘ื—ื™ื ื• ืฉื”ื”ื•ืจืื” ื”ืœืคื ื™ ืื—ืจื•ื ื” ืžืฉื ื” ืืช ื›ืชื•ื‘ืช ื”ื”ื—ื–ืจื” ื”ืžืื•ื—ืกื ืช ื‘ืขืจื™ืžื”. ื‘ื•ืื• ืœื—ืฉื‘ ืื™ืš ื–ื” ื™ื”ื™ื” ืื—ืจื™
ื‘ื™ืฆื•ืข ืงื•ื“. ื›ืชื•ื‘ืช ืžืกื•ื™ืžืช 1xB0 ื ื˜ืขื ืช ืœืชื•ืš R130, 5 ืžื•ืคื—ืช ืžืžื ื”, ื•ืื– ื”ื™ื ืžื•ืขื‘ืจืช ืœ-R0 ื•-0x10 ืžืชื•ื•ืกืฃ ืœื”. ืžืกืชื‘ืจ 0xB13B. ืœืคื™ื›ืš, IDA ื—ื•ืฉื‘ ืฉื”ื”ื•ืจืื” ื”ืื—ืจื•ื ื” ื”ื™ื ื”ื—ื–ืจืช ืคื•ื ืงืฆื™ื” ืจื’ื™ืœื”, ืืš ืœืžืขืฉื” ื”ื™ื ื”ื•ืœื›ืช ืœื›ืชื•ื‘ืช ื”ืžื—ื•ืฉื‘ืช 0xB13B.

ื›ื“ืื™ ืœื–ื›ื•ืจ ื›ืืŸ ืฉืœืžืขื‘ื“ื™ ARM ื™ืฉ ืฉื ื™ ืžืฆื‘ื™ื ื•ืฉืชื™ ืงื‘ื•ืฆื•ืช ืฉืœ ื”ื•ืจืื•ืช: ARM ื•-Thumb. ื”ื—ืœืง ื”ืคื—ื•ืช ืžืฉืžืขื•ืชื™ ื‘ื›ืชื•ื‘ืช ืื•ืžืจ ืœืžืขื‘ื“ ื‘ืื™ื–ื• ืขืจื›ืช ื”ื•ืจืื•ืช ืžืฉืชืžืฉื™ื. ื›ืœื•ืžืจ, ื”ื›ืชื•ื‘ืช ื”ื™ื ืœืžืขืฉื” 0xB13A, ื•ืื—ืช ื‘ืกื™ื‘ื™ืช ื”ืคื—ื•ืช ืžืฉืžืขื•ืชื™ืช ืžืฆื™ื™ื ืช ืืช ืžืฆื‘ Thumb.

"ืžืชืื" ื“ื•ืžื” ื ื•ืกืฃ ื‘ืชื—ื™ืœืช ื›ืœ ืคื•ื ืงืฆื™ื” ื‘ืกืคืจื™ื™ื” ื–ื• ื•
ืงื•ื“ ื–ื‘ืœ. ืœื ื ืชืขื›ื‘ ืขืœื™ื”ื ื™ื•ืชืจ ื‘ืคื™ืจื•ื˜ - ืื ื—ื ื• ืจืง ื–ื•ื›ืจื™ื
ืฉื”ื”ืชื—ืœื” ื”ืืžื™ืชื™ืช ืฉืœ ื›ืžืขื˜ ื›ืœ ื”ืคื•ื ืงืฆื™ื•ืช ื”ื™ื ืงืฆืช ื™ื•ืชืจ ืจื—ื•ืงื”.

ืžื›ื™ื•ื•ืŸ ืฉื”ืงื•ื“ ืื™ื ื• ืงื•ืคืฅ ื‘ืžืคื•ืจืฉ ืœ-0xB13A, IDA ืขืฆืžื• ืœื ื–ื™ื”ื” ืฉื”ืงื•ื“ ื ืžืฆื ื‘ืžื™ืงื•ื ื–ื”. ืžืื•ืชื” ืกื™ื‘ื”, ื”ื•ื ืื™ื ื• ืžื–ื”ื” ืืช ืจื•ื‘ ื”ืงื•ื“ ื‘ืกืคืจื™ื™ื” ื›ืงื•ื“, ืžื” ืฉืžืงืฉื” ื‘ืžืงืฆืช ืขืœ ื”ื ื™ืชื•ื—. ืื ื—ื ื• ืื•ืžืจื™ื ืœ-IDA ืฉื–ื” ื”ืงื•ื“, ื•ื–ื” ืžื” ืฉืงื•ืจื”:

ืžื—ืคืฉ ื ืงื•ื“ื•ืช ืชื•ืจืคื” ื‘ื“ืคื“ืคืŸ UC

ื”ื˜ื‘ืœื” ืžืชื—ื™ืœื” ื‘ื‘ื™ืจื•ืจ ื‘-0xB144. ืžื” ื™ืฉ ื‘-sub_494C?

ืžื—ืคืฉ ื ืงื•ื“ื•ืช ืชื•ืจืคื” ื‘ื“ืคื“ืคืŸ UC

ื›ืืฉืจ ืงื•ืจืื™ื ืœืคื•ื ืงืฆื™ื” ื–ื• ื‘ืื•ื’ืจ LR, ืื ื• ืžืงื‘ืœื™ื ืืช ื”ื›ืชื•ื‘ืช ืฉืœ ื”ื˜ื‘ืœื” ืฉื”ื•ื–ื›ืจื” ืงื•ื“ื ืœื›ืŸ (0xB144). ื‘-R0 - ืื™ื ื“ืงืก ื‘ื˜ื‘ืœื” ื–ื•. ื›ืœื•ืžืจ, ื”ืขืจืš ื ืœืงื— ืžื”ื˜ื‘ืœื”, ืžืชื•ื•ืกืฃ ืœ-LR ื•ื”ืชื•ืฆืื” ื”ื™ื
ื”ื›ืชื•ื‘ืช ืฉืืœื™ื” ื™ืฉ ืœืคื ื•ืช. ื‘ื•ืื• ื ื ืกื” ืœื—ืฉื‘ ืืช ื–ื”: 0xB144 + [0xB144 + 8* 4] = 0xB144 + 0x120 = 0xB264. ืื ื—ื ื• ื”ื•ืœื›ื™ื ืœื›ืชื•ื‘ืช ืฉื”ืชืงื‘ืœื” ื•ืจื•ืื™ื ืžืžืฉ ื›ืžื” ื”ื•ืจืื•ืช ืฉื™ืžื•ืฉื™ื•ืช ื•ืฉื•ื‘ ืขื•ื‘ืจื™ื ืืœ 0xB140:

ืžื—ืคืฉ ื ืงื•ื“ื•ืช ืชื•ืจืคื” ื‘ื“ืคื“ืคืŸ UC

ื›ืขืช ื™ื”ื™ื” ืžืขื‘ืจ ื‘ื”ื™ืกื˜ ืขื ืื™ื ื“ืงืก 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:

ืžื—ืคืฉ ื ืงื•ื“ื•ืช ืชื•ืจืคื” ื‘ื“ืคื“ืคืŸ UC

IDA ืฉื•ื‘ ืœื ื–ื™ื”ื” ืื–ื•ืจ ื–ื” ื›ืงื•ื“. ืื ื—ื ื• ืขื•ื–ืจื™ื ืœื” ื•ืจื•ืื™ื ืฉื ืขื™ืฆื•ื‘ ื ื•ืกืฃ:

ืžื—ืคืฉ ื ืงื•ื“ื•ืช ืชื•ืจืคื” ื‘ื“ืคื“ืคืŸ UC

ื ืจืื” ืฉื”ื”ื•ืจืื•ืช ืื—ืจื™ BLX ืœื ืžืžืฉ ื”ื’ื™ื•ื ื™ื•ืช, ื–ื” ื™ื•ืชืจ ื›ืžื• ืกื•ื’ ืฉืœ ืชื–ื•ื–ื”. ื‘ื•ืื• ื ืกืชื›ืœ ืขืœ sub_4964:

ืžื—ืคืฉ ื ืงื•ื“ื•ืช ืชื•ืจืคื” ื‘ื“ืคื“ืคืŸ UC

ื•ืืžื ื, ื›ืืŸ ืœื•ืงื—ื™ื ื“ื‘ื•ืจื” ื‘ื›ืชื•ื‘ืช ื”ืžื•ื ื—ืช ื‘-LR, ืžืชื•ื•ืกืคืช ืœื›ืชื•ื‘ืช ื–ื•, ื•ืœืื—ืจ ืžื›ืŸ ืœื•ืงื—ื™ื ืืช ื”ืขืจืš ื‘ื›ืชื•ื‘ืช ื”ืžืชืงื‘ืœืช ื•ืžืขืœื™ื ืื•ืชื” ืขืœ ื”ืขืจื™ืžื”. ื›ืžื• ื›ืŸ, 4 ืžืชื•ื•ืกืฃ ืœ-LR ื›ืš ืฉืื—ืจื™ ื”ื—ื–ืจื” ืžื”ืคื•ื ืงืฆื™ื”, ืื•ืชื• ื”ื™ืกื˜ ื™ื“ืœื’. ืœืื—ืจ ืžื›ืŸ ื”ืคืงื•ื“ื” POP {R1} ืœื•ืงื—ืช ืืช ื”ืขืจืš ื”ืžืชืงื‘ืœ ืžื”ืžื—ืกื ื™ืช. ืื ืชืกืชื›ืœ ืขืœ ืžื” ืฉื ืžืฆื ื‘ื›ืชื•ื‘ืช 0xB4BA + 0xEA = 0xB5A4, ืชืจืื” ืžืฉื”ื• ื“ื•ืžื” ืœื˜ื‘ืœืช ื›ืชื•ื‘ื•ืช:

ืžื—ืคืฉ ื ืงื•ื“ื•ืช ืชื•ืจืคื” ื‘ื“ืคื“ืคืŸ UC

ื›ื“ื™ ืœืชืงืŸ ืืช ื”ืขื™ืฆื•ื‘ ื”ื–ื”, ืชืฆื˜ืจืš ืœืงื‘ืœ ืฉื ื™ ืคืจืžื˜ืจื™ื ืžื”ืงื•ื“: ื”ื”ื™ืกื˜ ื•ืžืกืคืจ ื”ืื•ื’ืจ ืฉื‘ื• ืืชื” ืจื•ืฆื” ืœืฉื™ื ืืช ื”ืชื•ืฆืื”. ืขื‘ื•ืจ ื›ืœ ืจื™ืฉื•ื ืืคืฉืจื™, ืชืฆื˜ืจื›ื• ืœื”ื›ื™ืŸ ืคื™ืกืช ืงื•ื“ ืžืจืืฉ.

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 - ื•ื ืคืขื™ืœ ืืช ื”ืกืงืจื™ืคื˜:

ืžื—ืคืฉ ื ืงื•ื“ื•ืช ืชื•ืจืคื” ื‘ื“ืคื“ืคืŸ UC

ื‘ื ื•ืกืฃ ืœืžื‘ื ื™ื ืฉื”ื•ื–ื›ืจื• ื›ื‘ืจ, ื”ืงื•ื“ ืžื›ื™ืœ ื’ื ืืช ื”ื“ื‘ืจื™ื ื”ื‘ืื™ื:

ืžื—ืคืฉ ื ืงื•ื“ื•ืช ืชื•ืจืคื” ื‘ื“ืคื“ืคืŸ UC

ื›ืžื• ื‘ืžืงืจื” ื”ืงื•ื“ื, ืœืื—ืจ ื”ื•ืจืืช BLX ื™ืฉ ื”ื™ืกื˜:

ืžื—ืคืฉ ื ืงื•ื“ื•ืช ืชื•ืจืคื” ื‘ื“ืคื“ืคืŸ UC

ืื ื—ื ื• ืœื•ืงื—ื™ื ืืช ื”ืงื™ื–ื•ื– ืœื›ืชื•ื‘ืช ืž-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"

ืชื•ืฆืื” ืฉืœ ื‘ื™ืฆื•ืข ืกืงืจื™ืคื˜:

ืžื—ืคืฉ ื ืงื•ื“ื•ืช ืชื•ืจืคื” ื‘ื“ืคื“ืคืŸ UC

ื‘ืจื’ืข ืฉื”ื›ืœ ืชื•ืงืŸ ื‘ืคื•ื ืงืฆื™ื”, ืืชื” ื™ื›ื•ืœ ืœื”ืคื ื•ืช ืืช 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/JNICLibrary. ื’ื“ื•ืœ! ืื ื—ื ื• ื‘ื“ืจืš ื”ื ื›ื•ื ื”.

ืขืฅ ืคืงื•ื“ื•ืช

ืขื›ืฉื™ื• ืื ื—ื ื• ืฆืจื™ื›ื™ื ืœืžืฆื•ื ืืชื’ืจ RegisterNatives, ืฉื™ื›ื•ื•ืŸ ืื•ืชื ื• ืœืคื•ื ืงืฆื™ื” 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), ื ื‘ื ื” ืขืฅ ืคืงื•ื“ื•ืช.

ืžืฉื”ื• ื›ื–ื”:

ืžื—ืคืฉ ื ืงื•ื“ื•ืช ืชื•ืจืคื” ื‘ื“ืคื“ืคืŸ UC

ื”ืขืฅ ืžืชืžืœื ื‘ืื•ืคืŸ ื“ื™ื ืžื™ JNI_OnLoad.
ืฉืœื•ืฉื” ืžืกืคืจื™ื ืžืงื•ื“ื“ื™ื ืืช ื”ื ืชื™ื‘ ื‘ืขืฅ. ื›ืœ ืขืœื” ืฉืœ ื”ืขืฅ ืžื›ื™ืœ ืืช ื”ื›ืชื•ื‘ืช ื”ืžื—ื•ืจืจืช ืฉืœ ื”ืคื•ื ืงืฆื™ื” ื”ืžืชืื™ืžื”. ื”ืžืคืชื— ื ืžืฆื ื‘ืฆื•ืžืช ื”ืื‘. ืœืžืฆื•ื ืืช ื”ืžืงื•ื ื‘ืงื•ื“ ืฉื‘ื• ื”ืคื•ื ืงืฆื™ื” ืฉืื ื—ื ื• ืฆืจื™ื›ื™ื ืžืชื•ื•ืกืคืช ืœืขืฅ ืœื ืงืฉื” ืื ืืชื” ืžื‘ื™ืŸ ืืช ื›ืœ ื”ืžื‘ื ื™ื ืฉื‘ื”ื ื ืขืฉื” ืฉื™ืžื•ืฉ (ืื ื—ื ื• ืœื ืžืชืืจื™ื ืื•ืชื ื›ื“ื™ ืœื ืœื ืคื— ืžืืžืจ ื›ื‘ืจ ื“ื™ ื’ื“ื•ืœ).

ืขื•ื“ ืขืจืคื•ืœ

ืงื™ื‘ืœื ื• ืืช ื”ื›ืชื•ื‘ืช ืฉืœ ื”ืคื•ื ืงืฆื™ื” ืฉืืžื•ืจื” ืœืคืขื ื— ืืช ื”ืชืขื‘ื•ืจื”: 0x5F1AC. ืื‘ืœ ืขื•ื“ ืžื•ืงื“ื ืœืฉืžื•ื—: ืžืคืชื—ื™ UC Browser ื”ื›ื™ื ื• ืœื ื• ื”ืคืชืขื” ื ื•ืกืคืช.

ืœืื—ืจ ืงื‘ืœืช ื”ืคืจืžื˜ืจื™ื ืžื”ืžืขืจืš ืฉื ื•ืฆืจ ื‘ืงื•ื“ ื”-Java, ืื ื• ืžืงื‘ืœื™ื
ืœืคื•ื ืงืฆื™ื” ื‘ื›ืชื•ื‘ืช 0x4D070. ื•ื”ื ื” ืขื•ื“ ืกื•ื’ ืฉืœ ืขืจืคื•ืœ ืงื•ื“ ืžื—ื›ื” ืœื ื•.

ืฉืžื ื• ืฉื ื™ ืžื“ื“ื™ื ื‘-R7 ื•-R4:

ืžื—ืคืฉ ื ืงื•ื“ื•ืช ืชื•ืจืคื” ื‘ื“ืคื“ืคืŸ UC

ืื ื• ืžืขื‘ื™ืจื™ื ืืช ื”ืžื“ื“ ื”ืจืืฉื•ืŸ ืœ-R11:

ืžื—ืคืฉ ื ืงื•ื“ื•ืช ืชื•ืจืคื” ื‘ื“ืคื“ืคืŸ UC

ื›ื“ื™ ืœืงื‘ืœ ื›ืชื•ื‘ืช ืžื˜ื‘ืœื”, ื”ืฉืชืžืฉ ื‘ืื™ื ื“ืงืก:

ืžื—ืคืฉ ื ืงื•ื“ื•ืช ืชื•ืจืคื” ื‘ื“ืคื“ืคืŸ UC

ืœืื—ืจ ืžืขื‘ืจ ืœื›ืชื•ื‘ืช ื”ืจืืฉื•ื ื”, ื ืขืฉื” ืฉื™ืžื•ืฉ ื‘ืื™ื ื“ืงืก ื”ืฉื ื™, ืฉื”ื•ื ื‘-R4. ื™ืฉ 230 ืืœืžื ื˜ื™ื ื‘ื˜ื‘ืœื”.

ืžื” ืœืขืฉื•ืช ื‘ื ื™ื“ื•ืŸ? ืืชื” ื™ื›ื•ืœ ืœื”ื’ื™ื“ ืœ-IDA ืฉื–ื”ื• ืžืชื’: ืขืจื•ืš -> ืื—ืจ -> ืฆื™ื™ืŸ ืœืฉื•ืŸ ืžืชื’.

ืžื—ืคืฉ ื ืงื•ื“ื•ืช ืชื•ืจืคื” ื‘ื“ืคื“ืคืŸ UC

ื”ืงื•ื“ ืฉื ื•ืฆืจ ืžืคื—ื™ื“. ืื‘ืœ ื›ืฉืืชื” ืขื•ืฉื” ืืช ื“ืจื›ืš ื‘ื’'ื•ื ื’ืœ ืฉืœื•, ืืชื” ื™ื›ื•ืœ ืœื”ื‘ื—ื™ืŸ ื‘ืงืจื™ืื” ืœืคื•ื ืงืฆื™ื” ืฉื›ื‘ืจ ืžื•ื›ืจืช ืœื ื• sub_6115C:

ืžื—ืคืฉ ื ืงื•ื“ื•ืช ืชื•ืจืคื” ื‘ื“ืคื“ืคืŸ UC

ื”ื™ื” ืžืชื’ ืฉื‘ื• ื‘ืžืงืจื” 3 ื”ื™ื” ืคืขื ื•ื— ื‘ืืžืฆืขื•ืช ืืœื’ื•ืจื™ืชื RC4. ื•ื‘ืžืงืจื” ื–ื”, ื”ืžื‘ื ื” ื”ืžื•ืขื‘ืจ ืœืคื•ื ืงืฆื™ื” ืžืชืžืœื ืžื”ืคืจืžื˜ืจื™ื ืฉื”ื•ืขื‘ืจื• ืืœื™ื• doCommandNative. ื‘ื•ืื• ื ื–ื›ื•ืจ ืžื” ื”ื™ื” ืœื ื• ืฉื magicInt ืขื ื”ืขืจืš 16. ืื ื• ืžืกืชื›ืœื™ื ืขืœ ื”ืžืงืจื” ื”ืžืชืื™ื - ื•ืœืื—ืจ ืžืกืคืจ ืžืขื‘ืจื™ื ืื ื• ืžื•ืฆืื™ื ืืช ื”ืงื•ื“ ืฉื‘ืืžืฆืขื•ืชื• ื ื™ืชืŸ ืœื–ื”ื•ืช ืืช ื”ืืœื’ื•ืจื™ืชื.

ืžื—ืคืฉ ื ืงื•ื“ื•ืช ืชื•ืจืคื” ื‘ื“ืคื“ืคืŸ UC

ื–ื” AES!

ื”ืืœื’ื•ืจื™ืชื ืงื™ื™ื, ื›ืœ ืฉื ื•ืชืจ ื”ื•ื ืœื”ืฉื™ื’ ืืช ื”ืคืจืžื˜ืจื™ื ืฉืœื•: ืžืฆื‘, ืžืคืชื— ื•ืื•ืœื™ ื’ื ื•ืงื˜ื•ืจ ื”ืืชื—ื•ืœ (ื ื•ื›ื—ื•ืชื• ืชืœื•ื™ื” ื‘ืžืฆื‘ ื”ืคืขื•ืœื” ืฉืœ ืืœื’ื•ืจื™ืชื AES). ื”ืžื‘ื ื” ืื™ืชื ื—ื™ื™ื‘ ืœื”ื™ื•ื•ืฆืจ ืื™ืคืฉื”ื• ืœืคื ื™ ืงืจื™ืืช ื”ืคื•ื ืงืฆื™ื” sub_6115C, ืื‘ืœ ื”ื—ืœืง ื”ื–ื” ืฉืœ ื”ืงื•ื“ ืžืขื•ืจืคืœ ื”ื™ื˜ื‘, ื•ืœื›ืŸ ืขื•ืœื” ื”ืจืขื™ื•ืŸ ืœืชืงืŸ ืืช ื”ืงื•ื“ ื›ืš ืฉื›ืœ ื”ืคืจืžื˜ืจื™ื ืฉืœ ืคื•ื ืงืฆื™ื™ืช ื”ืคืขื ื•ื— ื™ื™ื–ืจืงื• ืœืงื•ื‘ืฅ.

ืชื™ืงื•ืŸ

ื›ื“ื™ ืœื ืœื›ืชื•ื‘ ืืช ื›ืœ ืงื•ื“ ื”ืชื™ืงื•ืŸ ื‘ืฉืคืช assembly ื‘ืื•ืคืŸ ื™ื“ื ื™, ืืคืฉืจ ืœื”ืคืขื™ืœ ืืช Android Studio, ืœื›ืชื•ื‘ ืฉื ืคื•ื ืงืฆื™ื” ืฉืžืงื‘ืœืช ืืช ืื•ืชื ืคืจืžื˜ืจื™ ืงืœื˜ ื›ืžื• ืคื•ื ืงืฆื™ื™ืช ื”ืคืขื ื•ื— ืฉืœื ื• ื•ื›ื•ืชื‘ืช ืœืงื•ื‘ืฅ, ื•ืื– ืœื”ืขืชื™ืง ื•ืœื”ื“ื‘ื™ืง ืืช ื”ืงื•ื“ ืฉื”ืงื•ืžืคื™ื™ืœืจ ื™ืขืฉื”. ืœึดื™ืฆื•ึนืจ.

ื—ื‘ืจื™ื ื• ืžืฆื•ื•ืช ื“ืคื“ืคืŸ UC ื“ืื’ื• ื’ื ื”ื ืœื ื•ื—ื•ืช ืฉืœ ื”ื•ืกืคืช ืงื•ื“. ื‘ื•ืื• ื ื–ื›ื•ืจ ืฉื‘ืชื—ื™ืœืช ื›ืœ ืคื•ื ืงืฆื™ื” ื™ืฉ ืœื ื• ืงื•ื“ ื–ื‘ืœ ืฉื ื™ืชืŸ ืœื”ื—ืœื™ืฃ ื‘ืงืœื•ืช ื‘ื›ืœ ืงื•ื“ ืื—ืจ. ื ื•ื— ืžืื•ื“ ๐Ÿ™‚ ืขื ื–ืืช, ื‘ืชื—ื™ืœืช ืคื•ื ืงืฆื™ื™ืช ื”ืžื˜ืจื” ืื™ืŸ ืžืกืคื™ืง ืžืงื•ื ืœืงื•ื“ ืฉืฉื•ืžืจ ืืช ื›ืœ ื”ืคืจืžื˜ืจื™ื ืœืงื•ื‘ืฅ. ื ืืœืฆืชื™ ืœืคืฆืœ ืื•ืชื• ืœื—ืœืงื™ื ื•ืœื”ืฉืชืžืฉ ื‘ืœื•ืงื™ ืืฉืคื” ืžืคื•ื ืงืฆื™ื•ืช ืฉื›ื ื•ืช. ื”ื™ื• ืืจื‘ืขื” ื—ืœืงื™ื ื‘ืกืš ื”ื›ืœ.

ั‡ะฐัั‚ัŒ ะŸะตั€ะฒะฐั:

ืžื—ืคืฉ ื ืงื•ื“ื•ืช ืชื•ืจืคื” ื‘ื“ืคื“ืคืŸ UC

ื‘ืืจื›ื™ื˜ืงื˜ื•ืจืช ARM, ืืจื‘ืขืช ื”ืคืจืžื˜ืจื™ื ื”ืจืืฉื•ื ื™ื ืฉืœ ื”ืคื•ื ืงืฆื™ื” ืžื•ืขื‘ืจื™ื ื“ืจืš ื”ืื•ื’ืจื™ื R0-R3, ื”ืฉืืจ, ืื ื‘ื›ืœืœ, ืžื•ืขื‘ืจื™ื ื“ืจืš ื”ืžื—ืกื ื™ืช. ืคื ืงืก LR ื ื•ืฉื ืืช ื›ืชื•ื‘ืช ื”ื”ื—ื–ืจื”. ื›ืœ ื–ื” ืฆืจื™ืš ืœื”ื™ืฉืžืจ ื›ื“ื™ ืฉื”ืคื•ื ืงืฆื™ื” ืชื•ื›ืœ ืœืขื‘ื•ื“ ืœืื—ืจ ืฉื ืฉืžื˜ ืืช ื”ืคืจืžื˜ืจื™ื ืฉืœื”. ืื ื—ื ื• ืฆืจื™ื›ื™ื ื’ื ืœืฉืžื•ืจ ืืช ื›ืœ ื”ืจื’ื™ืกื˜ืจื™ื ืฉื‘ื”ื ื ืฉืชืžืฉ ื‘ืชื”ืœื™ืš, ืื– ืื ื—ื ื• ืขื•ืฉื™ื PUSH.W {R0-R10,LR}. ื‘-R7 ื ืงื‘ืœ ืืช ื”ื›ืชื•ื‘ืช ืฉืœ ืจืฉื™ืžืช ื”ืคืจืžื˜ืจื™ื ื”ืžื•ืขื‘ืจื™ื ืœืคื•ื ืงืฆื™ื” ื“ืจืš ื”ืžื—ืกื ื™ืช.

ื‘ืืžืฆืขื•ืช ืคื•ื ืงืฆื™ื” ืคื•ืค ื‘ื•ืื• ื ืคืชื— ืืช ื”ืงื•ื‘ืฅ /data/local/tmp/aes ื‘ืžืฆื‘ "ab".
ื›ืœื•ืžืจ ืœืชื•ืกืคืช. ื‘-R0 ืื ื• ื˜ื•ืขื ื™ื ืืช ื”ื›ืชื•ื‘ืช ืฉืœ ืฉื ื”ืงื•ื‘ืฅ, ื‘-R1 - ื”ื›ืชื•ื‘ืช ืฉืœ ื”ืฉื•ืจื” ื”ืžืฆื™ื™ื ืช ืืช ื”ืžืฆื‘. ื•ื›ืืŸ ืžืกืชื™ื™ื ืงื•ื“ ื”ื–ื‘ืœ, ืื– ื ืขื‘ื•ืจ ืœืคื•ื ืงืฆื™ื” ื”ื‘ืื”. ื›ื“ื™ ืฉื–ื” ื™ืžืฉื™ืš ืœืขื‘ื•ื“, ืฉืžื ื• ื‘ื”ืชื—ืœื” ืืช ื”ืžืขื‘ืจ ืœืงื•ื“ ื”ืืžื™ืชื™ ืฉืœ ื”ืคื•ื ืงืฆื™ื”, ืขื•ืงืฃ ืืช ื”ื–ื‘ืœ, ื•ื‘ืžืงื•ื ื”ื–ื‘ืœ ืžื•ืกื™ืคื™ื ื”ืžืฉืš ืฉืœ ื”ืชื™ืงื•ืŸ.

ืžื—ืคืฉ ื ืงื•ื“ื•ืช ืชื•ืจืคื” ื‘ื“ืคื“ืคืŸ UC

ื™ึดืขื•ึผื“ ืคื•ืค.

ืฉืœื•ืฉืช ื”ืคืจืžื˜ืจื™ื ื”ืจืืฉื•ื ื™ื ืฉืœ ื”ืคื•ื ืงืฆื™ื” AES ื™ืฉ ืกื•ื’ int. ืžื›ื™ื•ื•ืŸ ืฉืฉืžืจื ื• ืืช ื”ืจืฉืžื™ื ืœืขืจื™ืžื” ื‘ื”ืชื—ืœื”, ืื ื—ื ื• ื™ื›ื•ืœื™ื ืคืฉื•ื˜ ืœื”ืขื‘ื™ืจ ืืช ื”ืคื•ื ืงืฆื™ื” ืœื›ืชื•ื‘ ื”ื›ืชื•ื‘ื•ืช ืฉืœื”ื ืขืœ ื”ืขืจื™ืžื”.

ืžื—ืคืฉ ื ืงื•ื“ื•ืช ืชื•ืจืคื” ื‘ื“ืคื“ืคืŸ UC

ืœืื—ืจ ืžื›ืŸ ื™ืฉ ืœื ื• ืฉืœื•ืฉื” ืžื‘ื ื™ื ื”ืžื›ื™ืœื™ื ืืช ื’ื•ื“ืœ ื”ื ืชื•ื ื™ื ื•ืžืฆื‘ื™ืข ืœื ืชื•ื ื™ื ืขื‘ื•ืจ ื”ืžืคืชื—, ื•ืงื˜ื•ืจ ื”ืืชื—ื•ืœ ื•ื ืชื•ื ื™ื ืžื•ืฆืคื ื™ื.

ืžื—ืคืฉ ื ืงื•ื“ื•ืช ืชื•ืจืคื” ื‘ื“ืคื“ืคืŸ UC

ื‘ืกื™ื•ื, ืกื’ื•ืจ ืืช ื”ืงื•ื‘ืฅ, ืฉื—ื–ืจ ืืช ื”ืื•ื’ืจื™ื ื•ื”ืขื‘ื™ืจ ืืช ื”ืฉืœื™ื˜ื” ืœืคื•ื ืงืฆื™ื” ื”ืืžื™ืชื™ืช 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 ื•ื ื•ืกื™ืฃ ืฉื ืืช ืชืขื•ื“ืช ื“ืคื“ืคืŸ ื”ืกื ืื™.

ืื ื—ื ื• ืžืจื›ื™ื‘ื™ื, ื—ื•ืชืžื™ื, ืžืชืงื™ื ื™ื, ืžืฉื™ืงื™ื. ื‘ื™ื ื’ื•! ื™ืฉ ืœื ื• ืืช ื”ืžืคืชื—!

MitM

ืงื™ื‘ืœื ื• ืžืคืชื— ื•ื•ืงื˜ื•ืจ ืืชื—ื•ืœ ื”ืฉื•ื•ื™ื ืœืžืคืชื—. ื‘ื•ืื• ื ื ืกื” ืœืคืขื ื— ืืช ืชื’ื•ื‘ืช ื”ืฉืจืช ื‘ืžืฆื‘ CBC.

ืžื—ืคืฉ ื ืงื•ื“ื•ืช ืชื•ืจืคื” ื‘ื“ืคื“ืคืŸ UC

ืื ื• ืจื•ืื™ื ืืช ื›ืชื•ื‘ืช ื”ืืชืจ ืฉืœ ื”ืืจื›ื™ื•ืŸ, ืžืฉื”ื• ื“ื•ืžื” ืœ-MD5, "extract_unzipsize" ื•ืžืกืคืจ. ืื ื—ื ื• ื‘ื•ื“ืงื™ื: ื”-MD5 ืฉืœ ื”ืืจื›ื™ื•ืŸ ื–ื”ื”, ื’ื•ื“ืœ ื”ืกืคืจื™ื™ื” ื”ืœื-ืืจื•ื–ื” ื–ื”ื”. ืื ื—ื ื• ืžื ืกื™ื ืœืชืงืŸ ืืช ื”ืกืคืจื™ื™ื” ื”ื–ื• ื•ืœืชืช ืื•ืชื” ืœื“ืคื“ืคืŸ. ื›ื“ื™ ืœื”ืจืื•ืช ืฉืกืคืจื™ื™ืช ื”ืชื™ืงื•ืŸ ืฉืœื ื• ื ื˜ืขื ื”, ื ืฉื™ืง ื›ื•ื•ื ื” ืœื™ืฆื™ืจืช SMS ืขื ื”ื˜ืงืกื˜ "PWNED!" ื ื—ืœื™ืฃ ืฉืชื™ ืชื’ื•ื‘ื•ืช ืžื”ืฉืจืช: puds.ucweb.com/upgrade/index.xhtml ื•ืœื”ื•ืจื“ืช ื”ืืจื›ื™ื•ืŸ. ื‘ืจืืฉื•ืŸ ืื ื• ืžื—ืœื™ืคื™ื MD5 (ื”ื’ื•ื“ืœ ืื™ื ื• ืžืฉืชื ื” ืœืื—ืจ ืคื™ืจื•ืง), ื‘ืฉื ื™ ืื ื• ื ื•ืชื ื™ื ืืช ื”ืืจื›ื™ื•ืŸ ืขื ืกืคืจื™ื™ืช ื”ืชื™ืงื•ืŸ.

ื”ื“ืคื“ืคืŸ ืžื ืกื” ืœื”ื•ืจื™ื“ ืืช ื”ืืจื›ื™ื•ืŸ ืžืกืคืจ ืคืขืžื™ื, ื•ืœืื—ืจ ืžื›ืŸ ื”ื•ื ื ื•ืชืŸ ืฉื’ื™ืื”. ื›ื ืจืื” ืžืฉื”ื•
ื”ื•ื ืœื ืื•ื”ื‘. ื›ืชื•ืฆืื” ืžื ื™ืชื•ื— ื”ืคื•ืจืžื˜ ื”ืขื›ื•ืจ ื”ื–ื”, ื”ืชื‘ืจืจ ืฉื”ืฉืจืช ืžืฉื“ืจ ื’ื ืืช ื’ื•ื“ืœ ื”ืืจื›ื™ื•ืŸ:

ืžื—ืคืฉ ื ืงื•ื“ื•ืช ืชื•ืจืคื” ื‘ื“ืคื“ืคืŸ UC

ื”ื•ื ืžืงื•ื“ื“ ื‘-LEB128. ืœืื—ืจ ื”ืชื™ืงื•ืŸ, ื’ื•ื“ืœ ื”ืืจื›ื™ื•ืŸ ืขื ื”ืกืคืจื™ื™ื” ื”ืฉืชื ื” ืžืขื˜, ื›ืš ืฉื”ื“ืคื“ืคืŸ ื—ืฉื‘ ืฉื”ืืจื›ื™ื•ืŸ ื”ื•ืจื“ ื‘ืฆื•ืจื” ืขืงื•ืžื”, ื•ืœืื—ืจ ืžืกืคืจ ื ื™ืกื™ื•ื ื•ืช ื”ื•ื ื–ืจืง ืฉื’ื™ืื”.

ืื ื—ื ื• ืžืชืื™ืžื™ื ืืช ื’ื•ื“ืœ ื”ืืจื›ื™ื•ืŸ... ื•ื’ื โ€“ ื ื™ืฆื—ื•ืŸ! ๐Ÿ™‚ ื”ืชื•ืฆืื” ื‘ืกืจื˜ื•ืŸ.

https://www.youtube.com/watch?v=Nfns7uH03J8

ื”ืฉืœื›ื•ืช ื•ืชื’ื•ื‘ืช ืžืคืชื—

ื‘ืื•ืชื• ืื•ืคืŸ, ื”ืืงืจื™ื ื™ื›ื•ืœื™ื ืœื”ืฉืชืžืฉ ื‘ืชื›ื•ื ื” ื”ืœื ืžืื•ื‘ื˜ื—ืช ืฉืœ ื“ืคื“ืคืŸ UC ื›ื“ื™ ืœื”ืคื™ืฅ ื•ืœื”ืคืขื™ืœ ืกืคืจื™ื•ืช ื–ื“ื•ื ื™ื•ืช. ืกืคืจื™ื•ืช ืืœื• ื™ืขื‘ื“ื• ื‘ื”ืงืฉืจ ืฉืœ ื”ื“ืคื“ืคืŸ, ื›ืš ืฉื”ืŸ ื™ืงื‘ืœื• ืืช ื›ืœ ื”ืจืฉืื•ืช ื”ืžืขืจื›ืช ืฉืœื•. ื›ืชื•ืฆืื” ืžื›ืš, ื”ื™ื›ื•ืœืช ืœื”ืฆื™ื’ ื—ืœื•ื ื•ืช ื“ื™ื•ื’, ื›ืžื• ื’ื ื’ื™ืฉื” ืœืงื‘ืฆื™ ื”ืขื‘ื•ื“ื” ืฉืœ ื”ืกื ืื™ ื”ืกื™ื ื™ ื”ื›ืชื•ื, ื›ื•ืœืœ ื›ื ื™ืกื•ืช, ืกื™ืกืžืื•ืช ื•ืขื•ื’ื™ื•ืช ื”ืžืื•ื—ืกื ื•ืช ื‘ืžืกื“ ื”ื ืชื•ื ื™ื.

ื™ืฆืจื ื• ืงืฉืจ ืขื ืžืคืชื—ื™ UC Browser ื•ื™ื™ื“ืขื ื• ืื•ืชื ืขืœ ื”ื‘ืขื™ื” ืฉืžืฆืื ื•, ื ื™ืกื™ื ื• ืœื”ืฆื‘ื™ืข ืขืœ ื”ืคื’ื™ืขื•ืช ื•ื”ืกื›ื ื” ืฉื‘ื”, ืืš ื”ื ืœื ื“ื ื• ืื™ืชื ื• ืขืœ ื“ื‘ืจ. ื‘ื™ื ืชื™ื™ื, ื”ื“ืคื“ืคืŸ ื”ืžืฉื™ืš ืœื”ืชื”ื“ืจ ื‘ืชื›ื•ื ื” ื”ืžืกื•ื›ื ืช ืฉืœื• ืœืขื™ืŸ. ืื‘ืœ ื‘ืจื’ืข ืฉื—ืฉืคื ื• ืืช ืคืจื˜ื™ ื”ืคื’ื™ืขื•ืช, ื›ื‘ืจ ืœื ื ื™ืชืŸ ื”ื™ื” ืœื”ืชืขืœื ืžืžื ื” ื›ืžื• ืงื•ื“ื. 27 ื‘ืžืจืฅ ื”ื™ื”
ืฉื•ื—ืจืจื” ื’ืจืกื” ื—ื“ืฉื” ืฉืœ UC Browser 12.10.9.1193, ืืฉืจ ื ื™ื’ืฉื” ืœืฉืจืช ื‘ืืžืฆืขื•ืช HTTPS: puds.ucweb.com/upgrade/index.xhtml.

ื‘ื ื•ืกืฃ, ืœืื—ืจ ื”"ืชื™ืงื•ืŸ" ื•ืขื“ ืœืžื•ืขื“ ื›ืชื™ื‘ืช ืžืืžืจ ื–ื”, ื ื™ืกื™ื•ืŸ ืœืคืชื•ื— ืงื•ื‘ืฅ PDF ื‘ื“ืคื“ืคืŸ ื”ื‘ื™ื ืœื”ื•ื“ืขืช ืฉื’ื™ืื” ืขื ื”ื˜ืงืกื˜ "ืื•ืคืก, ืžืฉื”ื• ื”ืฉืชื‘ืฉ!" ืœื ื”ื•ื’ืฉื” ื‘ืงืฉื” ืœืฉืจืช ื‘ืขืช ื ื™ืกื™ื•ืŸ ืœืคืชื•ื— ืงื•ื‘ืฅ PDF, ืืš ืขื ื”ืคืขืœืช ื”ื“ืคื“ืคืŸ ื”ื•ื’ืฉื” ื‘ืงืฉื”, ืžื” ืฉืžืจืžื– ืขืœ ื”ืžืฉืš ื”ื™ื›ื•ืœืช ืœื”ื•ืจื™ื“ ืงื•ื“ ื”ืคืขืœื” ื‘ื ื™ื’ื•ื“ ืœื›ืœืœื™ Google Play.

ืžืงื•ืจ: www.habr.com

ื”ื•ืกืคืช ืชื’ื•ื‘ื”