เบŠเบญเบเบซเบฒเบˆเบธเบ”เบญเปˆเบญเบ™เปƒเบ™ UC Browser

เบŠเบญเบเบซเบฒเบˆเบธเบ”เบญเปˆเบญเบ™เปƒเบ™ UC Browser

เบเบฒเบ™เบ™เปเบฒเบชเบฐเป€เบซเบ™เบต

เปƒเบ™เบ—เป‰เบฒเบเป€เบ”เบทเบญเบ™เบกเบตเบ™เบฒเบžเบงเบเป€เบฎเบปเบฒ เบฅเบฒเบเบ‡เบฒเบ™, เบงเปˆเบฒเบžเบงเบเป€เบ‚เบปเบฒเบ„เบปเป‰เบ™เบžเบปเบšเบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เบ—เบตเปˆเป€เบŠเบทเปˆเบญเบ‡เป„เบงเป‰เปƒเบ™เบเบฒเบ™เป‚เบซเบฅเบ”เปเบฅเบฐเปเบฅเปˆเบ™เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบขเบทเบ™เบขเบฑเบ™เปƒเบ™ UC Browser. เบกเบทเป‰เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบšเบดเปˆเบ‡เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบเปˆเบฝเบงเบเบฑเบšเบงเบดเบ—เบตเบเบฒเบ™เบ”เบฒเบงเป‚เบซเบฅเบ”เบ™เบตเป‰เป€เบเบตเบ”เบ‚เบทเป‰เบ™เปเบฅเบฐเบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเปเบฎเบเป€เบเบตเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เบกเบฑเบ™เป€เบžเบทเปˆเบญเบˆเบธเบ”เบ›เบฐเบชเบปเบ‡เบ‚เบญเบ‡เบ•เบปเบ™เป€เบญเบ‡.

เบšเบฒเบ‡เบ„เบฑเป‰เบ‡เบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰, UC Browser เป„เบ”เป‰เบ–เบทเบเป‚เบ„เบชเบฐเบ™เบฒเปเบฅเบฐเปเบˆเบเบขเบฒเบเบขเปˆเบฒเบ‡เป‚เบซเบ”เบฎเป‰เบฒเบ: เบกเบฑเบ™เบ–เบทเบเบ•เบดเบ”เบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เบญเบธเบ›เบฐเบเบญเบ™เบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰เป‚เบ”เบเปƒเบŠเป‰ malware, เปเบˆเบเบขเบฒเบเบˆเบฒเบเป€เบงเบฑเบšเป„เบŠเบ—เปŒเบ•เปˆเบฒเบ‡เป†เบžเบฒเบเปƒเบ•เป‰เบฎเบนเบšเปเบšเบšเบ‚เบญเบ‡เป„เบŸเบฅเปŒเบงเบดเบ”เบตเป‚เบญ (i. เปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป„เบ”เป‰เบฎเบฑเบš APK เบเบฑเบšเบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบšเบ™เบตเป‰), เปƒเบŠเป‰เบ›เป‰เบฒเบเป‚เบ„เบชเบฐเบ™เบฒเบ—เบตเปˆเบซเบ™เป‰เบฒเบขเป‰เบฒเบ™เบ—เบตเปˆเบกเบตเบ‚เปเป‰เบ„เบงเบฒเบกเบ—เบตเปˆเบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบšเบฅเป‰เบฒเบชเบฐเป„เบซเบก, เบกเบตเบ„เบงเบฒเบกเบชเปˆเบฝเบ‡, เปเบฅเบฐเบชเบดเปˆเบ‡เบ•เปˆเบฒเบ‡เป†เป€เบŠเบฑเปˆเบ™เบ™เบฑเป‰เบ™. เปƒเบ™เบเบธเปˆเบก UC Browser เบขเปˆเบฒเบ‡เป€เบ›เบฑเบ™เบ—เบฒเบ‡เบเบฒเบ™เปƒเบ™ VK เบกเบต เบซเบปเบงเบ‚เปเป‰, เปƒเบ™เบ—เบตเปˆเบœเบนเป‰เปƒเบŠเป‰เบชเบฒเบกเบฒเบ”เบˆเบปเปˆเบกเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เป‚เบ„เบชเบฐเบ™เบฒเบ—เบตเปˆเบšเปเปˆเบเบธเบ”เบ•เบดเบ—เปเบฒ, เบกเบตเบ•เบปเบงเบขเปˆเบฒเบ‡เบˆเปเบฒเบ™เบงเบ™เบซเบผเบฒเบเบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™. เปƒเบ™เบ›เบต 2016 เบกเบตเป€เบ–เบดเบ‡เปเบกเปˆเบ™เบงเปˆเบฒ เบเบฒเบ™เป‚เบ„เบชเบฐเบ™เบฒเบงเบดเบ”เบตเป‚เบญ เปƒเบ™เบžเบฒเบชเบฒเบฅเบฑเบ”เป€เบŠเบ (เปเบกเปˆเบ™เปเบฅเป‰เบง, เบเบฒเบ™เป‚เบ„เบชเบฐเบ™เบฒเบชเปเบฒเบฅเบฑเบšเบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบšเบชเบฐเบเบฑเบ”เบเบฒเบ™เป‚เบ„เบชเบฐเบ™เบฒ).

เปƒเบ™เป€เบงเบฅเบฒเบ‚เบฝเบ™, UC Browser เบกเบตเบเบฒเบ™เบ•เบดเบ”เบ•เบฑเป‰เบ‡เบซเบผเบฒเบเบเบงเปˆเบฒ 500 เปƒเบ™ Google Play. เบ™เบตเป‰เปเบกเปˆเบ™เบ›เบฐเบ—เบฑเบšเปƒเบˆ - เบžเบฝเบ‡เปเบ•เปˆ Google Chrome เบกเบตเบซเบผเบฒเบเบเบงเปˆเบฒเบ™เบฑเป‰เบ™. เปƒเบ™เบšเบฑเบ™เบ”เบฒเบเบฒเบ™เบ—เบปเบšเบ—เบงเบ™เบ„เบทเบ™เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบšเบดเปˆเบ‡เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบซเบผเบฒเบเบ‚เบญเบ‡เบเบฒเบ™เบฎเป‰เบญเบ‡เบ—เบธเบเบเปˆเบฝเบงเบเบฑเบšเบเบฒเบ™เป‚เบ„เบชเบฐเบ™เบฒเปเบฅเบฐเบเบฒเบ™เบ›เปˆเบฝเบ™เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เป„เบ›เบซเบฒเบšเบฒเบ‡เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบเปƒเบ™ Google Play. เบ™เบตเป‰เปเบกเปˆเบ™เป€เบซเบ”เบœเบปเบ™เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ„เบปเป‰เบ™เบ„เบงเป‰เบฒเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ: เบžเบงเบเป€เบฎเบปเบฒเบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเป€เบšเบดเปˆเบ‡เบงเปˆเบฒ UC Browser เบเปเบฒเบฅเบฑเบ‡เป€เบฎเบฑเบ”เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเบšเปเปˆเบ”เบต. เปเบฅเบฐเบกเบฑเบ™เป„เบ”เป‰เบซเบฑเบ™เบญเบญเบเบงเปˆเบฒเบฅเบฒเบงเป€เบฎเบฑเบ”!

เปƒเบ™เบฅเบฐเบซเบฑเบ”เบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ, เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบ”เบฒเบงเป‚เบซเบฅเบ”เปเบฅเบฐเปเบฅเปˆเบ™เบฅเบฐเบซเบฑเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เป„เบ”เป‰เบ–เบทเบเบ„เบปเป‰เบ™เบžเบปเบš, เป€เบŠเบดเปˆเบ‡เบ‚เบฑเบ”เบเบฑเบšเบเบปเบ”เบฅเบฐเบšเบฝเบšเบเบฒเบ™เป€เบœเบตเบเปเบœเปˆเบ„เปเบฒเบฎเป‰เบญเบ‡เบชเบฐเบซเบกเบฑเบ เปƒเบ™ Google Play. เบ™เบญเบเป€เบซเบ™เบทเบญเบˆเบฒเบเบ„เบงเบฒเบกเบˆเบดเบ‡เบ—เบตเปˆเบงเปˆเบฒ UC Browser เบ”เบฒเบงเป‚เบซเบฅเบ”เบฅเบฐเบซเบฑเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”, เบกเบฑเบ™เป€เบฎเบฑเบ”เปƒเบ™เบฅเบฑเบเบชเบฐเบ™เบฐเบ—เบตเปˆเบšเปเปˆเบ›เบญเบ”เป„เบž, เป€เบŠเบดเปˆเบ‡เบชเบฒเบกเบฒเบ”เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰เป€เบžเบทเปˆเบญเบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เป‚เบˆเบกเบ•เบต MitM. เบ‚เปเปƒเบซเป‰เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเบชเบฒเบกเบฒเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เบเบฒเบ™เป‚เบˆเบกเบ•เบตเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเป„เบ”เป‰.

เบ—เบธเบเบขเปˆเบฒเบ‡เบ—เบตเปˆเบ‚เบฝเบ™เบขเบนเปˆเบฅเบธเปˆเบกเบ™เบตเป‰เปเบกเปˆเบ™เบกเบตเบ„เบงเบฒเบกเบเปˆเบฝเบงเบ‚เป‰เบญเบ‡เบเบฑเบ™เบเบฑเบšเป€เบงเบตเบŠเบฑเบ™เบ‚เบญเบ‡ UC Browser เบ—เบตเปˆเบกเบตเบขเบนเปˆเปƒเบ™ Google Play เปƒเบ™เป€เบงเบฅเบฒเบชเบถเบเบชเบฒ:

package: com.UCMobile.intl
versionName: 12.10.8.1172
versionCode: 10598
sha1 APK-ั„ะฐะนะปะฐ: f5edb2243413c777172f6362876041eb0c3a928c

เบเบฒเบ™เป‚เบˆเบกเบ•เบต vector

เปƒเบ™ UC Browser manifest เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบŠเบญเบเบซเบฒเบšเปเบฅเบดเบเบฒเบ™เบ—เบตเปˆเบกเบตเบŠเบทเปˆเบญเบฐเบ—เบดเบšเบฒเบเบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡ 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 Browser: เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เป€เบ›เบตเบ” PDF เป‚เบ”เบเปƒเบŠเป‰เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบžเบทเป‰เบ™เป€เบกเบทเบญเบ‡, เป€เบŠเบดเปˆเบ‡เบšเปเปˆเบกเบตเบขเบนเปˆเปƒเบ™ APK เปเบฅเบฐเบกเบฑเบ™เบ”เบฒเบงเป‚เบซเบฅเบ”เบˆเบฒเบเบญเบดเบ™เป€เบ•เบตเป€เบ™เบฑเบ”เบ–เป‰เบฒเบˆเปเบฒเป€เบ›เบฑเบ™. เบกเบฑเบ™เป€เบ›เบฑเบ™เบกเบนเบ™เบ„เปˆเบฒเบ—เบตเปˆเบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒ, เบ—เบฒเบ‡เบ—เบดเบ”เบชเบฐเบ”เบต, UC Browser เบชเบฒเบกเบฒเบ”เบ–เบทเบเบšเบฑเบ‡เบ„เบฑเบšเปƒเบซเป‰เบ”เบฒเบงเป‚เบซเบฅเบ”เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบ‚เบญเบ‡เบœเบนเป‰เปƒเบŠเป‰ - เบ–เป‰เบฒเบ—เปˆเบฒเบ™เบชเบฐเบซเบ™เบญเบ‡เบเบฒเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบ—เบตเปˆเบกเบตเบฎเบนเบšเปเบšเบšเบ—เบตเปˆเบ”เบตเบ•เปเปˆเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ—เบตเปˆเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เบซเบผเบฑเบ‡เบˆเบฒเบเบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบšเบ–เบทเบเป€เบ›เบตเบ”เบ•เบปเบง. เปเบ•เปˆเป€เบžเบทเปˆเบญเป€เบฎเบฑเบ”เบชเบดเปˆเบ‡เบ™เบตเป‰, เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เป„เบ”เป‰เบชเบถเบเบชเบฒเป‚เบ›เป‚เบ•เบ„เบญเบ™เบ‚เบญเบ‡เบเบฒเบ™เป‚เบ•เป‰เบ•เบญเบšเบเบฑเบšเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเปƒเบ™เบฅเบฒเบเบฅเบฐเบญเบฝเบ”เป€เบžเบตเปˆเบกเป€เบ•เบตเบก, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบ•เบฑเบ”เบชเบดเบ™เปƒเบˆเบงเปˆเบฒเบกเบฑเบ™เบˆเบฐเบ‡เปˆเบฒเบเบ•เปเปˆเบเบฒเบ™เปเบเป‰เป„เบ‚เบเบฒเบ™เบ•เบญเบšเป‚เบ•เป‰เบ—เบตเปˆเบ–เบทเบเบ‚เบฑเบ”เบ‚เบงเบฒเบ‡เปเบฅเบฐเบ›เปˆเบฝเบ™เปเบ—เบ™เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบเบฑเบš PDF.

เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เป€เบกเบทเปˆเบญเบœเบนเป‰เปƒเบŠเป‰เบ•เป‰เบญเบ‡เบเบฒเบ™เป€เบ›เบตเบ” PDF เป‚เบ”เบเบเบปเบ‡เปƒเบ™เบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบš, เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ•เปเปˆเป„เบ›เบ™เบตเป‰เบชเบฒเบกเบฒเบ”เป€เบซเบฑเบ™เป„เบ”เป‰เปƒเบ™เบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™:

เบŠเบญเบเบซเบฒเบˆเบธเบ”เบญเปˆเบญเบ™เปƒเบ™ UC Browser

เบ—เปเบฒเบญเบดเบ”เบกเบตเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เป POST เบเบฑเบš puds.ucweb.com/upgrade/index.xhtml, เปเบฅเป‰เบง
เบ„เบฑเบ‡เป€เบเบฑเบšเบกเป‰เบฝเบ™เบ—เบตเปˆเบกเบตเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบšเบดเปˆเบ‡ PDF เปเบฅเบฐเบฎเบนเบšเปเบšเบšเบซเป‰เบญเบ‡เบเบฒเบ™เป„เบ”เป‰เบ–เบทเบเบ”เบฒเบงเป‚เบซเบผเบ”. เบกเบฑเบ™เบชเบปเบกเป€เบซเบ”เบชเบปเบกเบœเบปเบ™เบ—เบตเปˆเบˆเบฐเบชเบปเบกเบกเบธเบ”เบงเปˆเบฒเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ—เปเบฒเบญเบดเบ”เบชเบปเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™เบเปˆเบฝเบงเบเบฑเบšเบฅเบฐเบšเบปเบš (เบขเปˆเบฒเบ‡เบซเบ™เป‰เบญเบเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒเป€เบžเบทเปˆเบญเบชเบฐเบซเบ™เบญเบ‡เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™), เปเบฅเบฐเบเบฒเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบเบฑเบšเบกเบฑเบ™, เบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบšเป„เบ”เป‰เบฎเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบเปˆเบฝเบงเบเบฑเบšเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เบ”เบฒเบงเป‚เบซเบฅเบ”: เบ—เบตเปˆเบขเบนเปˆเปเบฅเบฐ, เบญเบฒเบ”เบˆเบฐ. , เบญเบฑเบ™โ€‹เบญเบทเปˆเบ™. เบšเบฑเบ™เบซเบฒเปเบกเปˆเบ™เบงเปˆเบฒเบ„เปเบฒเบฎเป‰เบญเบ‡เบ‚เปเบ™เบตเป‰เบ–เบทเบเป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”.

เบ‚เปเบŠเบดเป‰เบ™เบชเปˆเบงเบ™

เบžเบฒเบเบชเปˆเบงเบ™เบ•เบญเบš

เบŠเบญเบเบซเบฒเบˆเบธเบ”เบญเปˆเบญเบ™เปƒเบ™ UC Browser

เบŠเบญเบเบซเบฒเบˆเบธเบ”เบญเปˆเบญเบ™เปƒเบ™ UC Browser

เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ•เบปเบงเบกเบฑเบ™เป€เบญเบ‡เบ–เบทเบเบซเบธเป‰เบกเบซเปเปˆเบขเบนเปˆเปƒเบ™ ZIP เปเบฅเบฐเบšเปเปˆเป„เบ”เป‰เบ–เบทเบเป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”.

เบŠเบญเบเบซเบฒเบˆเบธเบ”เบญเปˆเบญเบ™เปƒเบ™ UC Browser

เบ„เบปเป‰เบ™เบซเบฒเบฅเบฐเบซเบฑเบ”เบเบฒเบ™เบ–เบญเบ”เบฅเบฐเบซเบฑเบ”เบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™

เบกเบฒเบฅเบญเบ‡เบ–เบญเบ”เบฅเบฐเบซเบฑเบ”เบเบฒเบ™เบ•เบญเบšเบชเบฐเปœเบญเบ‡เบ‚เบญเบ‡เป€เบŠเบตเบšเป€เบงเบต. เปƒเบซเป‰เป€เบšเบดเปˆเบ‡เบฅเบฐเบซเบฑเบ”เบซเป‰เบญเบ‡เบฎเบฝเบ™ 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 เบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰. เบžเบงเบเป€เบฎเบปเบฒเป€เบญเบปเบฒเปƒเบˆเปƒเบชเปˆเบเบฑเบšเบเบฒเบ™เบชเป‰เบฒเบ‡ array เบ‚เบญเบ‡ 16 bytes เปเบฅเบฐเบเบฒเบ™เบ•เบทเปˆเบกเบ‚เปเป‰เบกเบนเบ™เบ‚เบญเบ‡เบกเบฑเบ™: 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");
}
}

เบงเบดเบ—เบตเบเบฒเบ™เปƒเบŠเป‰ array เบ‚เบญเบ‡ bytes เป€เบ›เบฑเบ™ input เปเบฅเบฐเบเบงเบ”เป€เบšเบดเปˆเบ‡เบงเปˆเบฒเบชเบนเบ™ byte เปเบกเปˆเบ™ 0x60 เบซเบผเบท byte เบ—เบตเบชเบฒเบกเปเบกเปˆเบ™ 0xD0, เปเบฅเบฐ byte เบ—เบตเบชเบญเบ‡เปเบกเปˆเบ™ 1, 11 เบซเบผเบท 0x1F. เบžเบงเบเป€เบฎเบปเบฒเป€เบšเบดเปˆเบ‡เบเบฒเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบˆเบฒเบเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ: เบชเบนเบ™เป„เบšเบ•เปŒเปเบกเปˆเบ™ 0x60, เบ—เบตเบชเบญเบ‡เปเบกเปˆเบ™ 0x1F, เบ—เบตเบชเบฒเบกเปเบกเปˆเบ™ 0x60. เบŸเบฑเบ‡เบ„เบทเบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™. เบเบฒเบ™เบ•เบฑเบ”เบชเบดเบ™เป‚เบ”เบเบชเบฒเบ ("up_decrypt", เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบเบปเบเบ•เบปเบงเบขเปˆเบฒเบ‡), เบงเบดเบ—เบตเบเบฒเบ™เบ„เบงเบ™เบˆเบฐเบ–เบทเบเป€เบญเบตเป‰เบ™เบ—เบตเปˆเบ™เบตเป‰เบ—เบตเปˆเบˆเบฐเบ–เบญเบ”เบฅเบฐเบซเบฑเบ”เบเบฒเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ.
เปƒเบซเป‰เบเป‰เบฒเบงเป„เบ›เบชเบนเปˆเบงเบดเบ—เบตเบเบฒเบ™ gj. เปƒเบซเป‰เบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบ—เปเบฒเบญเบดเบ”เปเบกเปˆเบ™ byte เบขเบนเปˆ offset 2 (i. e. 0x1F เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ), เปเบฅเบฐเบ—เบตเบชเบญเบ‡เปเบกเปˆเบ™เบเบฒเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบ‚เบญเบ‡เป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเป‚เบ”เบเบšเปเปˆเบกเบตเบเบฒเบ™
16 bytes เบ—เปเบฒเบญเบดเบ”.

     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;
}

เปเบ™เปˆเบ™เบญเบ™, เปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเป€เบฅเบทเบญเบเบชเบนเบ”เบเบฒเบ™เบ–เบญเบ”เบฅเบฐเบซเบฑเบ”, เปเบฅเบฐ byte เบ”เบฝเบงเบเบฑเบ™เบ—เบตเปˆเบขเบนเปˆเปƒเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ
case เป€เบ—เบปเปˆเบฒเบเบฑเบš 0x1F, เบซเบกเบฒเบเป€เบ–เบดเบ‡เบซเบ™เบถเปˆเบ‡เปƒเบ™เบชเบฒเบกเบ—เบฒเบ‡เป€เบฅเบทเบญเบเบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰.

เบžเบงเบเป€เบฎเบปเบฒเบชเบทเบšเบ•เปเปˆเบงเบดเป€เบ„เบฒเบฐเบฅเบฐเบซเบฑเบ”. เบซเบผเบฑเบ‡เบˆเบฒเบเบ—เบตเปˆเบ„เบนเปˆเบ™เปˆเบถเบ‚เบญเบ‡เบเบฒเบ™เบเบฐเป‚เบ”เบ”เบžเบงเบเป€เบฎเบปเบฒเบžเบปเบšเป€เบซเบฑเบ™เบ•เบปเบงเป€เบญเบ‡เปƒเบ™เบงเบดเบ—เบตเบเบฒเบ™เบ—เบตเปˆเบกเบตเบŠเบทเปˆเบ„เปเบฒเบญเบฐเบ—เบดเบšเบฒเบเบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡ decryptBytesByKey.

เบ™เบตเป‰เปเบกเปˆเบ™เบชเบญเบ‡ bytes เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเปเบกเปˆเบ™เปเบเบเบญเบญเบเบˆเบฒเบเบเบฒเบ™เบ•เบญเบšเบชเบฐเบซเบ™เบญเบ‡เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เปเบฅเบฐ string เปเบกเปˆเบ™เป„เบ”เป‰เบฎเบฑเบšเบˆเบฒเบเบžเบงเบเบกเบฑเบ™. เบกเบฑเบ™เป€เบ›เบฑเบ™เบ—เบตเปˆเบŠเบฑเบ”เป€เบˆเบ™เบงเปˆเบฒเบ”เป‰เบงเบเบงเบดเบ—เบตเบ™เบตเป‰, เบฅเบฐเบซเบฑเบ”เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบ–เบญเบ”เบฅเบฐเบซเบฑเบ”เบ‚เปเป‰เบ„เบงเบฒเบกเป„เบ”เป‰เบ–เบทเบเป€เบฅเบทเบญเบ.

    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;
}

เป€เบšเบดเปˆเบ‡เป„เบ›เบ‚เป‰เบฒเบ‡เบซเบ™เป‰เบฒ, เบžเบงเบเป€เบฎเบปเบฒเบชเบฑเบ‡เป€เบเบ”เบงเปˆเบฒเปƒเบ™เบ‚เบฑเป‰เบ™เบ•เบญเบ™เบ™เบตเป‰เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เบšเปเปˆเป„เบ”เป‰เบฎเบฑเบšเบเบธเบ™เปเบˆ, เปเบ•เปˆเบงเปˆเบฒเบกเบตเบžเบฝเบ‡เปเบ•เปˆ "เบ•เบปเบงเบฅเบฐเบšเบธ" เบ‚เบญเบ‡เบกเบฑเบ™เป€เบ—เบปเปˆเบฒเบ™เบฑเป‰เบ™. เบเบฒเบ™เป€เบญเบปเบฒเบเบฐเปเบˆเปเบกเปˆเบ™เบชเบฑเบšเบชเบปเบ™เบเบงเปˆเบฒเป€เบฅเบฑเบเบ™เป‰เบญเบ.

เปƒเบ™เบงเบดเบ—เบตเบเบฒเบ™เบ•เปเปˆเป„เบ›, เบชเบญเบ‡เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบกเบˆเบฐเบ–เบทเบเป€เบžเบตเปˆเบกเปƒเบชเปˆเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ—เบตเปˆเบกเบตเบขเบนเปˆเปเบฅเป‰เบง, เป€เบฎเบฑเบ”เปƒเบซเป‰เบชเบตเปˆเบ‚เบญเบ‡เบžเบงเบเป€เบ‚เบปเบฒ: เป€เบฅเบ magic 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. เปเบฅเบฐเบ—เบฑเบ‡เบซเบกเบปเบ”เบ™เบตเป‰เบ–เบทเบเป‚เบญเบ™เป„เบ›เบซเบฒ Router เบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™เบ—เบตเปˆเบกเบตเบˆเปเบฒเบ™เบงเบ™ 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);
}
}

เปเบฅเบฐเบเบฑเบ‡เบซเป‰เบญเบ‡เบฎเบฝเบ™ 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 Browser

เปเบ•เปˆเบกเบฑเบ™เบšเปเปˆเบˆเปเบฒเป€เบ›เบฑเบ™: เป€เบžเบทเปˆเบญเป‚เบซเบฅเบ”เป„เบŸเบฅเปŒ ELF เปเบฅเบฐเบงเบดเป€เบ„เบฒเบฐเบกเบฑเบ™เบขเปˆเบฒเบ‡เบ–เบทเบเบ•เป‰เบญเบ‡, เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบซเบปเบงเบ‚เบญเบ‡เป‚เบ›เบฅเปเบเบฅเบกเปเบกเปˆเบ™เบžเบฝเบ‡เบžเป. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบžเบฝเบ‡เปเบ•เปˆเบฅเบถเบšเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบžเบฒเบ, เบเบปเบเป€เบฅเบตเบเบ‚เบปเบ‡เป€เบ‚เบ”เบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™เบขเบนเปˆเปƒเบ™เบชเปˆเบงเบ™เบซเบปเบง.

เบŠเบญเบเบซเบฒเบˆเบธเบ”เบญเปˆเบญเบ™เปƒเบ™ UC Browser

เป€เบ›เบตเบ”เป„เบŸเบฅเปŒเปƒเบ™ IDA เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡.

เบกเบตเบชเบญเบ‡เบงเบดเบ—เบตเบ—เบตเปˆเบˆเบฐเบšเบญเบ Java virtual machine เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡เปƒเบ™เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบžเบทเป‰เบ™เป€เบกเบทเบญเบ‡เบเบฒเบ™เบ›เบฐเบ•เบดเบšเบฑเบ”เบงเบดเบ—เบตเบเบฒเบ™เบ›เบฐเบเบฒเบ”เปƒเบ™เบฅเบฐเบซเบฑเบ” Java เป€เบ›เบฑเบ™ native เบ•เบฑเป‰เบ‡เบขเบนเปˆ. เบ—เปเบฒเบญเบดเบ”เปเบกเปˆเบ™เปƒเบซเป‰เบŠเบทเปˆเบŠเบฐเบ™เบดเบ”เบžเบฑเบ™ Java_package_name_ClassName_MethodName.

เบญเบฑเบ™เบ—เบตเบชเบญเบ‡เปเบกเปˆเบ™เบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เบกเบฑเบ™เป€เบกเบทเปˆเบญเป‚เบซเบฅเบ”เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ” (เปƒเบ™เบซเบ™เป‰เบฒเบ—เบตเปˆ JNI_OnLoad)
เปƒเบŠเป‰เบŸเบฑเบ‡เบŠเบฑเบ™เป‚เบ— เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เบ„เบปเบ™เบžเบทเป‰เบ™เป€เบกเบทเบญเบ‡.

เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, เบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒเปƒเบŠเป‰เบงเบดเบ—เบตเบ—เปเบฒเบญเบดเบ”, เบŠเบทเปˆเบ„เบงเบ™เบˆเบฐเป€เบ›เบฑเบ™เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰: Java_com_taobao_wireless_security_adapter_JNICLibrary_doCommandNative.

เบšเปเปˆเบกเบตเบซเบ™เป‰เบฒเบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเปƒเบ™เบšเบฑเบ™เบ”เบฒเบซเบ™เป‰เบฒเบ—เบตเปˆเบชเบปเปˆเบ‡เบญเบญเบ, เบŠเบถเปˆเบ‡เบซเบกเบฒเบเบ„เบงเบฒเบกเบงเปˆเบฒเบ—เปˆเบฒเบ™เบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบŠเบญเบเบซเบฒเบเบฒเบ™เป‚เบ— เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เบ„เบปเบ™เบžเบทเป‰เบ™เป€เบกเบทเบญเบ‡.
เปƒเบซเป‰เป„เบ›เบ—เบตเปˆเบซเบ™เป‰เบฒเบ—เบตเปˆ JNI_OnLoad เปเบฅเบฐเบžเบงเบเป€เบฎเบปเบฒเป€เบซเบฑเบ™เบฎเบนเบšเบ™เบตเป‰:

เบŠเบญเบเบซเบฒเบˆเบธเบ”เบญเปˆเบญเบ™เปƒเบ™ UC Browser

เป€เบเบตเบ”เบซเบเบฑเบ‡เบ‚เบถเป‰เบ™เบขเบนเปˆเบ™เบตเป‰? เบขเบนเปˆ glance เบ—เปเบฒเบญเบดเบ”, เบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปเบฅเบฐเบชเบดเป‰เบ™เบชเบธเบ”เบ‚เบญเบ‡เบŸเบฑเบ‡เบŠเบฑเบ™เปเบกเปˆเบ™เบ›เบปเบเบเบฐเบ•เบดเบชเปเบฒเบฅเบฑเบšเบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐ ARM. เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบ—เปเบฒเบญเบดเบ”เปƒเบ™ stack เป€เบเบฑเบšเบฎเบฑเบเบชเบฒเป€เบ™เบทเป‰เบญเปƒเบ™เบ‚เบญเบ‡เบ—เบฐเบšเบฝเบ™เบ—เบตเปˆเบŸเบฑเบ‡เบŠเบฑเบ™เบˆเบฐเปƒเบŠเป‰เปƒเบ™เบเบฒเบ™เบ”เปเบฒเป€เบ™เบตเบ™เบ‡เบฒเบ™เบ‚เบญเบ‡เบกเบฑเบ™ (เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, R0, R1 เปเบฅเบฐ R2), เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเป€เบ™เบทเป‰เบญเปƒเบ™เบ‚เบญเบ‡เบ—เบฐเบšเบฝเบ™ LR, เป€เบŠเบดเปˆเบ‡เบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบ—เบตเปˆเบขเบนเปˆเบเบฑเบšเบ„เบทเบ™เบˆเบฒเบเบŸเบฑเบ‡เบŠเบฑเบ™. . เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบชเบธเบ”เบ—เป‰เบฒเบเบŸเบทเป‰เบ™เบŸเบนเบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เบ—เบตเปˆเบšเบฑเบ™เบ—เบถเบเป„เบงเป‰, เปเบฅเบฐเบ—เบตเปˆเบขเบนเปˆเบเบฑเบšเบ„เบทเบ™เบˆเบฐเบ–เบทเบเบˆเบฑเบ”เปƒเบชเปˆเปƒเบ™เบ—เบฐเบšเบฝเบ™ PC เบ—เบฑเบ™เบ—เบต - เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบเบฒเบ™เบเบฑเบšเบ„เบทเบ™เบˆเบฒเบเบซเบ™เป‰เบฒเบ—เบตเปˆ. เปเบ•เปˆเบ–เป‰เบฒเบ—เปˆเบฒเบ™เป€เบšเบดเปˆเบ‡เบขเปˆเบฒเบ‡เปƒเบเป‰เบŠเบดเบ”, เบ—เปˆเบฒเบ™เบˆเบฐเบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เบงเปˆเบฒเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบชเบธเบ”เบ—เป‰เบฒเบเบˆเบฐเบ›เปˆเบฝเบ™เบ—เบตเปˆเบขเบนเปˆเบเบฑเบšเบ„เบทเบ™เบ—เบตเปˆเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™ stack. เบ‚เปเปƒเบซเป‰เบ„เบดเบ”เป„เบฅเปˆเบงเปˆเบฒเบกเบฑเบ™เบˆเบฐเป€เบ›เบฑเบ™เปเบ™เบงเปƒเบ”เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™
เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ”โ€‹เบฅเบฐโ€‹เบซเบฑเบ”โ€‹. เบ—เบตเปˆเบขเบนเปˆเบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™ 1xB0 เบ–เบทเบเป‚เบซเบฅเบ”เป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™ R130, 5 เบ–เบทเบเบซเบฑเบเบญเบญเบเบˆเบฒเบเบกเบฑเบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบกเบฑเบ™เบ–เบทเบเป‚เบญเบ™เป„เบ›เบซเบฒ R0 เปเบฅเบฐ 0x10 เบ–เบทเบเป€เบžเบตเปˆเบกเปƒเบชเปˆเบกเบฑเบ™. เบกเบฑเบ™เบ›เปˆเบฝเบ™เป€เบ›เบฑเบ™ 0xB13B. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, IDA เบ„เบดเบ”เบงเปˆเบฒเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบชเบธเบ”เบ—เป‰เบฒเบเปเบกเปˆเบ™เบเบฒเบ™เบเบฑเบšเบ„เบทเบ™เบซเบ™เป‰เบฒเบ—เบตเปˆเบ›เบปเบเบเบฐเบ•เบด, เปเบ•เปˆเบ„เบงเบฒเบกเบˆเบดเบ‡เปเบฅเป‰เบงเบกเบฑเบ™เบˆเบฐเป„เบ›เบซเบฒเบ—เบตเปˆเบขเบนเปˆเบ—เบตเปˆเบ„เบดเบ”เป„เบฅเปˆ 0xB13B.

เบกเบฑเบ™เบ„เบธเป‰เบกเบ„เปˆเบฒเบ—เบตเปˆเบˆเบฐเบˆเบทเปˆเบขเบนเปˆเบ—เบตเปˆเบ™เบตเป‰เบงเปˆเบฒเป‚เบ›เป€เบŠเบ”เป€เบŠเบต ARM เบกเบตเบชเบญเบ‡เป‚เบซเบกเบ”เปเบฅเบฐเบชเบญเบ‡เบŠเบธเบ”เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒ: ARM เปเบฅเบฐ Thumb. เบ—เบตเปˆเบขเบนเปˆ เบ—เบตเปˆเบขเบนเปˆเปœเป‰เบญเบเบ—เบตเปˆเบชเบธเบ”เบšเบญเบเป‚เบฎเบ‡เบ‡เบฒเบ™เบœเบฐเบฅเบดเบ”เบŠเบธเบ”เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบ—เบตเปˆเบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰. เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบ—เบตเปˆเบขเบนเปˆเบ•เบปเบงเบˆเบดเบ‡เปเบกเปˆเบ™ 0xB13A, เปเบฅเบฐเบซเบ™เบถเปˆเบ‡เปƒเบ™เบ™เป‰เบญเบเบ—เบตเปˆเบชเปเบฒเบ„เบฑเบ™เบŠเบตเป‰เปƒเบซเป‰เป€เบซเบฑเบ™เป€เบ–เบดเบ‡เป‚เบซเบกเบ” Thumb.

"เบญเบฐเปเบ”เบฑเบšเป€เบ•เบต" เบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เป„เบ”เป‰เบ–เบทเบเป€เบžเบตเปˆเบกเป€เบ‚เบปเป‰เบฒเปƒเบ™เบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ‚เบญเบ‡เปเบ•เปˆเบฅเบฐเบซเบ™เป‰เบฒเบ—เบตเปˆเบขเบนเปˆเปƒเบ™เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ™เบตเป‰เปเบฅเบฐ
เบฅเบฐเบซเบฑเบ”เบ‚เบตเป‰เป€เบซเบเบทเป‰เบญ. เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบˆเบฐโ€‹เบšเปเปˆโ€‹เบขเบนเปˆโ€‹เบเบฑเบšโ€‹เบžเบงเบโ€‹เป€เบ‚เบปเบฒโ€‹เปƒเบ™โ€‹เบฅเบฒเบโ€‹เบฅเบฐโ€‹เบญเบฝเบ”โ€‹เบ•เบทเปˆเบกโ€‹เบญเบตเบ - เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบžเบฝเบ‡โ€‹เปเบ•เปˆโ€‹เบˆเบทเปˆโ€‹เป„เบ”เป‰โ€‹
เบงเปˆเบฒเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡เบ‚เบญเบ‡เป€เบเบทเบญเบšเบ—เบธเบเบซเบ™เป‰เบฒเบ—เบตเปˆเปเบกเปˆเบ™เบขเบนเปˆเบซเปˆเบฒเบ‡เบญเบญเบเป„เบ›เป€เบฅเบฑเบเบ™เป‰เบญเบ.

เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบฅเบฐเบซเบฑเบ”เบšเปเปˆเป„เบ”เป‰เป‚เบ”เบ”เป„เบ›เบซเบฒ 0xB13A เบขเปˆเบฒเบ‡เบŠเบฑเบ”เป€เบˆเบ™, IDA เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เป€เบญเบ‡เบšเปเปˆเป„เบ”เป‰เบฎเบฑเบšเบฎเบนเป‰เบงเปˆเบฒเบฅเบฐเบซเบฑเบ”เปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเบ™เบตเป‰. เบชเปเบฒเบฅเบฑเบšเป€เบซเบ”เบœเบปเบ™เบ”เบฝเบงเบเบฑเบ™, เบกเบฑเบ™เบšเปเปˆเป„เบ”เป‰เบฎเบฑเบšเบฎเบนเป‰เบฅเบฐเบซเบฑเบ”เบชเปˆเบงเบ™เปƒเบซเบเปˆเปƒเบ™เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เป€เบ›เบฑเบ™เบฅเบฐเบซเบฑเบ”, เป€เบŠเบดเปˆเบ‡เป€เบฎเบฑเบ”เปƒเบซเป‰เบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบกเบตเบ„เบงเบฒเบกเบซเบเบธเป‰เบ‡เบเบฒเบเบšเบฒเบ‡เบขเปˆเบฒเบ‡. เบžเบงเบเป€เบฎเบปเบฒเบšเบญเบ IDA เบงเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบฅเบฐเบซเบฑเบ”, เปเบฅเบฐเบ™เบตเป‰เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบถเป‰เบ™:

เบŠเบญเบเบซเบฒเบˆเบธเบ”เบญเปˆเบญเบ™เปƒเบ™ UC Browser

เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบขเปˆเบฒเบ‡เบŠเบฑเบ”เป€เบˆเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ—เบตเปˆ 0xB144. เปเบกเปˆเบ™เบซเบเบฑเบ‡เบขเบนเปˆเปƒเบ™ sub_494C?

เบŠเบญเบเบซเบฒเบˆเบธเบ”เบญเปˆเบญเบ™เปƒเบ™ UC Browser

เป€เบกเบทเปˆเบญเป€เบญเบตเป‰เบ™เบŸเบฑเบ‡เบŠเบฑเบ™เบ™เบตเป‰เบขเบนเปˆเปƒเบ™เบ—เบฐเบšเบฝเบ™ LR, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบ—เบตเปˆเบขเบนเปˆเบ‚เบญเบ‡เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ—เบตเปˆเป„เบ”เป‰เบเปˆเบฒเบงเบกเบฒเบเปˆเบญเบ™เบซเบ™เป‰เบฒเบ™เบตเป‰ (0xB144). เปƒเบ™ R0 - เบ”เบฑเบ”เบชเบฐเบ™เบตเปƒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ™เบตเป‰. เบ™เบฑเป‰เบ™เปเบกเปˆเบ™, เบกเบนเบ™เบ„เปˆเบฒเปเบกเปˆเบ™เป€เบญเบปเบฒเบกเบฒเบˆเบฒเบเบ•เบฒเบ•เบฐเบฅเบฒเบ‡, เป€เบžเบตเปˆเบกเปƒเบชเปˆ LR เปเบฅเบฐเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเปเบกเปˆเบ™
เบ—เบตเปˆเบขเบนเปˆเบ—เบตเปˆเบˆเบฐเป„เบ›. เบˆเปˆ เบ‡เบป เบŠเบญเบเบซเบฒเบ„เปˆ เบฒ: 0xB144 + [0xB144 + 8* 4] = 0xB144 + 0x120 = 0xB264. เบžเบงเบเป€เบฎเบปเบฒเป„เบ›เบซเบฒเบ—เบตเปˆเบขเบนเปˆเบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบšเปเบฅเบฐเป€เบšเบดเปˆเบ‡เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบ—เบตเปˆเป€เบ›เบฑเบ™เบ›เบฐเป‚เบซเบเบ”เบชเบญเบ‡เบขเปˆเบฒเบ‡เปเบฅเบฐเบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡เป„เบ›เบ—เบตเปˆ 0xB140:

เบŠเบญเบเบซเบฒเบˆเบธเบ”เบญเปˆเบญเบ™เปƒเบ™ UC Browser

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบˆเบฐเบกเบตเบเบฒเบ™เบซเบฑเบ™เบ›เปˆเบฝเบ™เบ—เบตเปˆเบŠเบปเบ”เป€เบŠเบตเบเบเบฑเบšเบ”เบฑเบ”เบŠเบฐเบ™เบต 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 Browser

IDA เบญเบตเบเป€เบ—เบทเปˆเบญเบซเบ™เบถเปˆเบ‡เบšเปเปˆเป„เบ”เป‰เบฎเบฑเบšเบฎเบนเป‰เบžเบทเป‰เบ™เบ—เบตเปˆเบ™เบตเป‰เป€เบ›เบฑเบ™เบฅเบฐเบซเบฑเบ”. เบžเบงเบเป€เบฎเบปเบฒเบŠเปˆเบงเบเบฅเบฒเบงเปเบฅเบฐเป€เบšเบดเปˆเบ‡เบเบฒเบ™เบญเบญเบเปเบšเบšเบญเบทเปˆเบ™เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™:

เบŠเบญเบเบซเบฒเบˆเบธเบ”เบญเปˆเบญเบ™เปƒเบ™ UC Browser

เบ„เปเบฒเปเบ™เบฐเบ™เปเบฒเบซเบผเบฑเบ‡เบˆเบฒเบ BLX เป€เบšเบดเปˆเบ‡เบ„เบทเบงเปˆเบฒเบšเปเปˆเบกเบตเบ„เบงเบฒเบกเบซเบกเบฒเบเบซเบผเบฒเบ, เบกเบฑเบ™เบ„เป‰เบฒเบเบ„เบทเบเบฑเบšเบเบฒเบ™เบเป‰เบฒเบเบšเบฒเบ‡เบ›เบฐเป€เบžเบ”. เปƒเบซเป‰เป€เบšเบดเปˆเบ‡เบ—เบตเปˆ sub_4964:

เบŠเบญเบเบซเบฒเบˆเบธเบ”เบญเปˆเบญเบ™เปƒเบ™ UC Browser

เปเบฅเบฐเปเบ—เป‰เบˆเบดเบ‡เปเบฅเป‰เบง, เบ—เบตเปˆเบ™เบตเป‰ dword เป„เบ”เป‰เบ–เบทเบเป€เบญเบปเบฒเบขเบนเปˆเปƒเบ™เบ—เบตเปˆเบขเบนเปˆเบ—เบตเปˆเบ™เบญเบ™เบขเบนเปˆเปƒเบ™ LR, เป€เบžเบตเปˆเบกเปƒเบชเปˆเบ—เบตเปˆเบขเบนเปˆเบ™เบตเป‰, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบกเบนเบ™เบ„เปˆเบฒเบ—เบตเปˆเบขเบนเปˆเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบ–เบทเบเบ›เบฐเบ•เบดเบšเบฑเบ”เปเบฅเบฐเปƒเบชเปˆเปƒเบ™ stack. เบ™เบญเบเบˆเบฒเบเบ™เบตเป‰, 4 เบ–เบทเบเป€เบžเบตเปˆเบกเปƒเบชเปˆ LR เป€เบžเบทเปˆเบญเปƒเบซเป‰เบซเบผเบฑเบ‡เบˆเบฒเบเบเบฑเบšเบ„เบทเบ™เบˆเบฒเบเบŸเบฑเบ‡เบŠเบฑเบ™, เบเบฒเบ™เบŠเบปเบ”เป€เบŠเบตเบเบ”เบฝเบงเบเบฑเบ™เบ™เบตเป‰เบˆเบฐเบ–เบทเบเบ‚เป‰เบฒเบก. เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™, เบ„เปเบฒเบชเบฑเปˆเบ‡ POP {R1} เป€เบญเบปเบฒเบ„เปˆเบฒเบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเบˆเบฒเบ stack. เบ–เป‰เบฒเบ—เปˆเบฒเบ™เป€เบšเบดเปˆเบ‡เบชเบดเปˆเบ‡เบ—เบตเปˆเบ•เบฑเป‰เบ‡เบขเบนเปˆเปƒเบ™เบ—เบตเปˆเบขเบนเปˆ 0xB4BA + 0xEA = 0xB5A4, เบ—เปˆเบฒเบ™เบˆเบฐเป€เบซเบฑเบ™เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบเบฑเบšเบ•เบฒเบ•เบฐเบฅเบฒเบ‡เบ—เบตเปˆเบขเบนเปˆ:

เบŠเบญเบเบซเบฒเบˆเบธเบ”เบญเปˆเบญเบ™เปƒเบ™ UC Browser

เป€เบžเบทเปˆเบญเปเบเป‰เป„เบ‚เบเบฒเบ™เบญเบญเบเปเบšเบšเบ™เบตเป‰, เบ—เปˆเบฒเบ™เบˆเบฐเบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบชเบญเบ‡เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบˆเบฒเบเบฅเบฐเบซเบฑเบ”: เบŠเบปเบ”เป€เบŠเบตเบเปเบฅเบฐเป€เบฅเบเบ—เบฐเบšเบฝเบ™เบ—เบตเปˆเบ—เปˆเบฒเบ™เบ•เป‰เบญเบ‡เบเบฒเบ™เปƒเบซเป‰เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบš. เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เปเบ•เปˆเบฅเบฐเบ„เบปเบ™เบ—เบตเปˆเป€เบ›เบฑเบ™เป„เบ›เป„เบ”เป‰, เบ—เปˆเบฒเบ™เบˆเบฐเบ•เป‰เบญเบ‡เบเบฐเบเบฝเบกเบฅเบฐเบซเบฑเบ”เบซเบ™เบถเปˆเบ‡เบฅเปˆเบงเบ‡เบซเบ™เป‰เบฒ.

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 Browser

เบ™เบญเบเป€เบซเบ™เบทเบญเป„เบ›เบˆเบฒเบเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ—เบตเปˆเป„เบ”เป‰เบเปˆเบฒเบงเบกเบฒเปเบฅเป‰เบง, เบฅเบฐเบซเบฑเบ”เบเบฑเบ‡เบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบ”เบฑเปˆเบ‡เบ•เปเปˆเป„เบ›เบ™เบตเป‰:

เบŠเบญเบเบซเบฒเบˆเบธเบ”เบญเปˆเบญเบ™เปƒเบ™ UC Browser

เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบเปเบฅเบฐเบ™เบตเบ—เบตเปˆเบœเปˆเบฒเบ™เบกเบฒ, เบซเบผเบฑเบ‡เบˆเบฒเบเบ„เปเบฒเปเบ™เบฐเบ™เปเบฒ BLX เบกเบตเบเบฒเบ™เบŠเบปเบ”เป€เบŠเบตเบ:

เบŠเบญเบเบซเบฒเบˆเบธเบ”เบญเปˆเบญเบ™เปƒเบ™ UC Browser

เบžเบงเบเป€เบฎเบปเบฒเป€เบญเบปเบฒเบเบฒเบ™เบŠเบปเบ”เป€เบŠเบตเบเป„เบ›เบซเบฒเบ—เบตเปˆเบขเบนเปˆเบˆเบฒเบ LR, เป€เบžเบตเปˆเบกเบกเบฑเบ™เปƒเบชเปˆ LR เปเบฅเบฐเป„เบ›เบ—เบตเปˆเบ™เบฑเป‰เบ™. 0x72044 + 0xC = 0x72050. script เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบญเบญเบเปเบšเบšเบ™เบตเป‰เปเบกเปˆเบ™เบ‚เป‰เบญเบ™เบ‚เป‰เบฒเบ‡เบ‡เปˆเบฒเบเบ”เบฒเบ:

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"

เบœเบปเบ™โ€‹เบ‚เบญเบ‡โ€‹เบเบฒเบ™โ€‹เบ›เบฐโ€‹เบ•เบดโ€‹เบšเบฑเบ” scriptโ€‹:

เบŠเบญเบเบซเบฒเบˆเบธเบ”เบญเปˆเบญเบ™เปƒเบ™ UC Browser

เป€เบกเบทเปˆเบญเบ—เบธเบเบชเบดเปˆเบ‡เบ—เบธเบเบขเปˆเบฒเบ‡เบ–เบทเบเปเบเป‰เป„เบ‚เปƒเบ™เบซเบ™เป‰เบฒเบ—เบตเปˆ, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบŠเบตเป‰ IDA เป„เบ›เบชเบนเปˆเบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡เบ‚เบญเบ‡เบกเบฑเบ™. เบกเบฑเบ™โ€‹เบˆเบฐโ€‹เบ›เบฐโ€‹เบเบญเบšโ€‹เบฅเบฐโ€‹เบซเบฑเบ”โ€‹เบเบฒเบ™โ€‹เบ—เปเบฒโ€‹เบ‡เบฒเบ™โ€‹เบ—เบฑเบ‡โ€‹เบซเบกเบปเบ”โ€‹เป€เบ‚เบปเป‰เบฒโ€‹เบเบฑเบ™โ€‹, เปเบฅเบฐโ€‹เบกเบฑเบ™โ€‹เบชเบฒโ€‹เบกเบฒเบ” decompiled เป‚เบ”เบโ€‹เบ™เปเบฒโ€‹เปƒเบŠเป‰ HexRaysโ€‹.

เบเบฒเบ™เบ–เบญเบ”เบฅเบฐเบซเบฑเบ”เบชเบฐเบ•เบฃเบดเบ‡

เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฝเบ™เบฎเบนเป‰เบ—เบตเปˆเบˆเบฐเบˆเบฑเบ”เบเบฒเบ™เบเบฑเบš obfuscation เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เป€เบ„เบทเปˆเบญเบ‡เบˆเบฑเบเปƒเบ™เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ” libsgmainso-6.4.36.so เบˆเบฒเบ UC Browser เปเบฅเบฐเป„เบ”เป‰เบฎเบฑเบšเบฅเบฐเบซเบฑเบ”เบŸเบฑเบ‡เบŠเบฑเบ™ 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 เบŠเบทเปˆเบซเป‰เบญเบ‡เบฎเบฝเบ™เบ–เบทเบเบ–เบญเบ”เบฅเบฐเบซเบฑเบ”เบขเปˆเบฒเบ‡เบŠเบฑเบ”เป€เบˆเบ™. เป€เบ›เบฑเบ™เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ‚เบญเบ‡เบŸเบฑเบ‡เบŠเบฑเบ™เบ™เบตเป‰, เบ•เบปเบงเบŠเบตเป‰เป„เบ›เบซเบฒเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบเบฑเบšเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”, buffer เบ—เบตเปˆเปเบ™เปˆเบ™เบญเบ™เปเบฅเบฐเบ•เบปเบงเป€เบฅเบเบ–เบทเบเบชเบปเปˆเบ‡เบœเปˆเบฒเบ™. เปเบ™เปˆเบ™เบญเบ™, เบซเบผเบฑเบ‡เบˆเบฒเบเป‚เบ—เบซเบฒเบŸเบฑเบ‡เบŠเบฑเบ™, เบˆเบฐเบกเบตเป€เบชเบฑเป‰เบ™เบ—เบตเปˆเบ–เบทเบเบ–เบญเบ”เบฅเบฐเบซเบฑเบ”เบขเบนเปˆเปƒเบ™ buffer, เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบงเปˆเบฒเบกเบฑเบ™เบ–เบทเบเบชเบปเปˆเบ‡เป„เบ›เบซเบฒเบŸเบฑเบ‡เบŠเบฑเบ™. FindClass, เป€เบŠเบดเปˆเบ‡เปƒเบŠเป‰เป€เบงเบฅเบฒเบŠเบทเปˆเบซเป‰เบญเบ‡เบฎเบฝเบ™เป€เบ›เบฑเบ™เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ—เบตเบชเบญเบ‡. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ•เบปเบงเป€เบฅเบเปเบกเปˆเบ™เบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบญเบ‡ buffer เบซเบผเบทเบ„เบงเบฒเบกเบเบฒเบงเบ‚เบญเบ‡เป€เบชเบฑเป‰เบ™. เปƒเบซเป‰เบžเบฐเบเบฒเบเบฒเบกเบ–เบญเบ”เบฅเบฐเบซเบฑเบ”เบŠเบทเปˆเบซเป‰เบญเบ‡เบฎเบฝเบ™, เบกเบฑเบ™เบ„เบงเบ™เบˆเบฐเบšเบญเบเบžเบงเบเป€เบฎเบปเบฒเบงเปˆเบฒเบžเบงเบเป€เบฎเบปเบฒเป„เบ›เปƒเบ™เบ—เบดเบ”เบ—เบฒเบ‡เบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡. เบ‚เปเปƒเบซเป‰เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบขเปˆเบฒเบ‡เบฅเบฐเบญเบฝเบ”เบเปˆเบฝเบงเบเบฑเบšเบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบทเป‰เบ™เปƒเบ™ 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 เบชเป‰เบฒเบ‡เบ•เบปเบงเบขเปˆเบฒเบ‡เบ‚เบญเบ‡ container เบชเปเบฒเบฅเบฑเบš byte arrays เบ‚เบญเบ‡เบ‚เบฐเบซเบ™เบฒเบ”เบ—เบตเปˆเบเปเบฒเบ™เบปเบ”เป„เบงเป‰ (เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบšเปเปˆเบขเบนเปˆเปƒเบ™ containers เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เปƒเบ™เบฅเบฒเบเบฅเบฐเบญเบฝเบ”). เบ—เบตเปˆเบ™เบตเป‰เบชเบญเบ‡เบ–เบฑเบ‡เบ”เบฑเปˆเบ‡เบเปˆเบฒเบงเบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™: เบซเบ™เบถเปˆเบ‡เบšเบฑเบ™เบˆเบธเบชเบฒเบ "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 algorithm เปƒเบ™เบกเบฑเบ™.

เบžเบงเบเป€เบฎเบปเบฒเบกเบต algorithm เปเบฅเบฐเบ„เบต. เปƒเบซเป‰เบžเบฐเบเบฒเบเบฒเบกเบ–เบญเบ”เบฅเบฐเบซเบฑเบ”เบŠเบทเปˆเบ‚เบญเบ‡เบซเป‰เบญเบ‡เบฎเบฝเบ™. เบ™เบตเป‰เปเบกเปˆเบ™เบชเบดเปˆเบ‡เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบถเป‰เบ™: com/taobao/wireless/security/adapter/JNICLibrary. เบเบดเปˆเบ‡เปƒเบซเบเปˆ! เบžเบงเบเป€เบฎเบปเบฒเบขเบนเปˆเปƒเบ™เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบ—เบตเปˆเบ–เบทเบเบ•เป‰เบญเบ‡.

เบ•เบปเป‰เบ™เป„เบกเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡

เปƒเบ™เบ›เบฑเบ”เบˆเบธเบšเบฑเบ™เบžเบงเบเป€เบฎเบปเบฒเบˆเปเบฒเป€เบ›เบฑเบ™เบ•เป‰เบญเบ‡เบŠเบญเบเบซเบฒเบชเบดเปˆเบ‡เบ—เป‰เบฒเบ—เบฒเบ เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เบ„เบปเบ™เบžเบทเป‰เบ™เป€เบกเบทเบญเบ‡, เป€เบŠเบดเปˆเบ‡เบˆเบฐเบŠเบตเป‰เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบ›เบฐเบ•เบดเบšเบฑเบ”เบซเบ™เป‰เบฒเบ—เบตเปˆ 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, i.e. เปƒเบ™เบเปเบฅเบฐเบ™เบตเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒ, 1, 6 เปเบฅเบฐ 1. เบชเบฒเบกเบ•เบปเบงเป€เบฅเบเบ™เบตเป‰, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบ•เบปเบงเบŠเบตเป‰เป„เบ›เบซเบฒ. JNIEnv เปเบฅเบฐเบเบฒเบ™เป‚เบ•เป‰เบ–เบฝเบ‡เบ—เบตเปˆเบœเปˆเบฒเบ™เป„เบ›เบซเบฒเบซเบ™เป‰เบฒเบ—เบตเปˆเบˆเบฐเบ–เบทเบเป€เบžเบตเปˆเบกเป€เบ‚เบปเป‰เบฒเปƒเบ™เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เปเบฅเบฐเบชเบปเปˆเบ‡เบ•เปเปˆ. เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบชเบฒเบกเบ•เบปเบงเป€เบฅเบเบ—เบตเปˆเป„เบ”เป‰เบฎเบฑเบš (เปƒเบซเป‰เบซเบกเบฒเบเป€เบ–เบดเบ‡เบžเบงเบเบกเบฑเบ™ N1, N2 เปเบฅเบฐ N3), เบ•เบปเป‰เบ™เป„เบกเป‰เบ„เปเบฒเบชเบฑเปˆเบ‡เปเบกเปˆเบ™เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบถเป‰เบ™.

เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เป€เบŠเบฑเปˆเบ™เบ™เบตเป‰:

เบŠเบญเบเบซเบฒเบˆเบธเบ”เบญเปˆเบญเบ™เปƒเบ™ UC Browser

เบ•เบปเป‰เบ™เป„เบกเป‰เปเบกเปˆเบ™เป€เบ•เบฑเบกเป„เบ›เบ”เป‰เบงเบเปเบšเบšเป€เบ„เบทเปˆเบญเบ™เป„เบซเบง JNI_OnLoad.
เบชเบฒเบกเบ•เบปเบงเป€เบฅเบเป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เปƒเบ™เบ•เบปเป‰เบ™เป„เบกเป‰. เปเบ•เปˆเบฅเบฐเปƒเบšเบ‚เบญเบ‡เบ•เบปเป‰เบ™เป„เบกเป‰เบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบ—เบตเปˆเบขเบนเปˆ pocked เบ‚เบญเบ‡เบŸเบฑเบ‡เบŠเบฑเบ™เบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™. เบเบธเบ™เปเบˆเปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เบ‚เปเป‰เบซเบผเบฑเบ. เบŠเบญเบเบซเบฒเบชเบฐเบ–เบฒเบ™เบ—เบตเปˆเปƒเบ™เบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบซเบ™เป‰เบฒเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบ•เป‰เบญเบ‡เบเบฒเบ™เบ–เบทเบเป€เบžเบตเปˆเบกเปƒเบชเปˆเบ•เบปเป‰เบ™เป„เบกเป‰เปเบกเปˆเบ™เบšเปเปˆเบเบฒเบเบ–เป‰เบฒเบ—เปˆเบฒเบ™เป€เบ‚เบปเป‰เบฒเปƒเบˆเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเปƒเบŠเป‰ (เบžเบงเบเป€เบฎเบปเบฒเบšเปเปˆเป„เบ”เป‰เบญเบฐเบ—เบดเบšเบฒเบเปƒเบซเป‰เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเป€เบžเบทเปˆเบญเบšเปเปˆเปƒเบซเป‰ bloat เป€เบ›เบฑเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ‚เบฐเบซเบ™เบฒเบ”เปƒเบซเบเปˆเปเบฅเป‰เบง).

เบชเบฑเบšเบชเบปเบ™เบซเบผเบฒเบ

เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบ—เบตเปˆเบขเบนเปˆเบ‚เบญเบ‡เบŸเบฑเบ‡เบŠเบฑเบ™เบ—เบตเปˆเบ„เบงเบ™เบ–เบญเบ”เบฅเบฐเบซเบฑเบ”เบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™: 0x5F1AC. เปเบ•เปˆเบกเบฑเบ™เป„เบงเป€เบเบตเบ™เป„เบ›เบ—เบตเปˆเบˆเบฐเบ›เบดเบ•เบดเบเบดเบ™เบ”เบต: เบœเบนเป‰เบžเบฑเบ”เบ—เบฐเบ™เบฒเบ‚เบญเบ‡ UC Browser เป„เบ”เป‰เบเบฐเบเบฝเบกเบ„เบงเบฒเบกเปเบ›เบเปƒเบˆเบญเบตเบเบญเบฑเบ™เปœเบถเปˆเบ‡เปƒเบซเป‰เบเบฑเบšเบžเบงเบเป€เบฎเบปเบฒ.

เบซเบผเบฑเบ‡เบˆเบฒเบเป„เบ”เป‰เบฎเบฑเบšเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบˆเบฒเบ array เบ—เบตเปˆเบ–เบทเบเบชเป‰เบฒเบ‡เบ•เบฑเป‰เบ‡เบ‚เบถเป‰เบ™เปƒเบ™เบฅเบฐเบซเบฑเบ” Java, เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบš
เบเบฑเบšเบŸเบฑเบ‡เบŠเบฑเบ™เบ—เบตเปˆเบขเบนเปˆ 0x4D070. เปเบฅเบฐเปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบ›เบฐเป€เบžเบ”เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ” obfuscation เบญเบทเปˆเบ™เบฅเปเบ–เป‰เบฒเบžเบงเบเป€เบฎเบปเบฒ.

เบžเบงเบเป€เบฎเบปเบฒเป€เบญเบปเบฒเบชเบญเบ‡เบ•เบปเบงเบŠเบตเป‰เบงเบฑเบ”เปƒเบ™ R7 เปเบฅเบฐ R4:

เบŠเบญเบเบซเบฒเบˆเบธเบ”เบญเปˆเบญเบ™เปƒเบ™ UC Browser

เบžเบงเบเป€เบฎเบปเบฒเบ›เปˆเบฝเบ™เบ”เบฑเบ”เบŠเบฐเบ™เบตเบ—เปเบฒเบญเบดเบ”เป€เบ›เบฑเบ™ R11:

เบŠเบญเบเบซเบฒเบˆเบธเบ”เบญเปˆเบญเบ™เปƒเบ™ UC Browser

เป€เบžเบทเปˆเบญเป€เบญเบปเบฒเบ—เบตเปˆเบขเบนเปˆเบˆเบฒเบเบ•เบฒเบ•เบฐเบฅเบฒเบ‡, เปƒเบŠเป‰เบ”เบฑเบ”เบŠเบฐเบ™เบต:

เบŠเบญเบเบซเบฒเบˆเบธเบ”เบญเปˆเบญเบ™เปƒเบ™ UC Browser

เบซเบผเบฑเบ‡เบˆเบฒเบเป„เบ›เบซเบฒเบ—เบตเปˆเบขเบนเปˆเบ—เปเบฒเบญเบดเบ”, เบ”เบฑเบ”เบŠเบฐเบ™เบตเบ—เบตเบชเบญเบ‡เบ–เบทเบเบ™เปเบฒเปƒเบŠเป‰, เป€เบŠเบดเปˆเบ‡เบขเบนเปˆเปƒเบ™ R4. เบกเบต 230 เบญเบปเบ‡เบ›เบฐเบเบญเบšเปƒเบ™เบ•เบฒเบ•เบฐเบฅเบฒเบ‡.

เบˆเบฐเป€เบฎเบฑเบ”เปเบ™เบงเปƒเบ”เบเปˆเบฝเบงเบเบฑเบšเบกเบฑเบ™? เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบšเบญเบ IDA เบงเปˆเบฒเบ™เบตเป‰เปเบกเปˆเบ™เบชเบฐเบซเบผเบฑเบš: เปเบเป‰เป„เบ‚ -> เบญเบทเปˆเบ™ -> เบฅเบฐเบšเบธเบชเบฐเบงเบดเบ”เบชเบฐเบงเบดเบ”.

เบŠเบญเบเบซเบฒเบˆเบธเบ”เบญเปˆเบญเบ™เปƒเบ™ UC Browser

เบฅเบฐเบซเบฑเบ”เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเปเบกเปˆเบ™เบซเบ™เป‰เบฒเบขเป‰เบฒเบ™. เปเบ•เปˆ, เป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบชเบฑเป‰เบ™เบ—เบฒเบ‡เบ‚เบญเบ‡เบ—เปˆเบฒเบ™เบœเปˆเบฒเบ™เบ›เปˆเบฒเบ‚เบญเบ‡เบกเบฑเบ™, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เบชเบฑเบ‡เป€เบเบ”เป€เบซเบฑเบ™เบเบฒเบ™เป‚เบ—เบซเบฒเบซเบ™เป‰เบฒเบ—เบตเปˆเบ„เบธเป‰เบ™เป€เบ„เบตเบเบเบฑเบšเบžเบงเบเป€เบฎเบปเบฒ sub_6115C:

เบŠเบญเบเบซเบฒเบˆเบธเบ”เบญเปˆเบญเบ™เปƒเบ™ UC Browser

เบกเบตเบชเบฐเบงเบดเบ”เบ—เบตเปˆเปƒเบ™เบเปเบฅเบฐเบ™เบตเบ—เบตเปˆ 3 เบกเบตเบเบฒเบ™เบ–เบญเบ”เบฅเบฐเบซเบฑเบ”เป‚เบ”เบเปƒเบŠเป‰ RC4 algorithm. เปเบฅเบฐเปƒเบ™เบเปเบฅเบฐเบ™เบตเบ™เบตเป‰, เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ—เบตเปˆเบ–เบทเบเบชเบปเปˆเบ‡เป„เบ›เบซเบฒเบซเบ™เป‰เบฒเปเบกเปˆเบ™เป€เบ•เบฑเบกเป„เบ›เบ”เป‰เบงเบเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ—เบตเปˆเบœเปˆเบฒเบ™เป„เบ› doCommandNative. เบ‚เปเปƒเบซเป‰เบˆเบทเปˆเบˆเปเบฒเบชเบดเปˆเบ‡เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™ magicInt เบเบฑเบšเบ„เปˆเบฒ 16. เบžเบงเบเป€เบฎเบปเบฒเป€เบšเบดเปˆเบ‡เบเปเบฅเบฐเบ™เบตเบ—เบตเปˆเบชเบญเบ”เบ„เป‰เบญเบ‡เบเบฑเบ™ - เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบเบฒเบ™เบ›เปˆเบฝเบ™เปเบ›เบ‡เบซเบผเบฒเบเป†เบ„เบฑเป‰เบ‡เบžเบงเบเป€เบฎเบปเบฒเบŠเบญเบเบซเบฒเบฅเบฐเบซเบฑเบ”เบ—เบตเปˆ algorithm เบชเบฒเบกเบฒเบ”เบเปเบฒเบ™เบปเบ”เป„เบ”เป‰.

เบŠเบญเบเบซเบฒเบˆเบธเบ”เบญเปˆเบญเบ™เปƒเบ™ UC Browser

เบ™เบตเป‰เปเบกเปˆเบ™ AES!

เบชเบนเบ”เบเบฒเบ™เบ„เบดเบ”เป„เบฅเปˆเบกเบตเบขเบนเปˆ, เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบเบฑเบ‡เป€เบซเบผเบทเบญเปเบกเปˆเบ™เป€เบžเบทเปˆเบญเปƒเบซเป‰เป„เบ”เป‰เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ‚เบญเบ‡เบกเบฑเบ™: เป‚เบซเบกเบ”, เบ„เบตเปเบฅเบฐ, เบญเบฒเบ”เบˆเบฐเป€เบ›เบฑเบ™ vector เบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™ (เบเบฒเบ™เบ›เบฐเบเบปเบ”เบ•เบปเบงเบ‚เบญเบ‡เบกเบฑเบ™เบ‚เบถเป‰เบ™เบเบฑเบšเบฎเบนเบšเปเบšเบšเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡ AES algorithm). เป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบเบฑเบšเบžเบงเบเป€เบ‚เบปเบฒเบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบชเป‰เบฒเบ‡เบ•เบฑเป‰เบ‡เบ‚เบถเป‰เบ™เบขเบนเปˆเบšเปˆเบญเบ™เปƒเบ”เบซเบ™เบถเปˆเบ‡เบเปˆเบญเบ™เบ—เบตเปˆเบˆเบฐเป‚เบ—เบซเบฒเบซเบ™เป‰เบฒเบ—เบตเปˆ sub_6115C, เปเบ•เปˆเบชเปˆเบงเบ™เบ‚เบญเบ‡เบฅเบฐเบซเบฑเบ”เบ™เบตเป‰เปเบกเปˆเบ™เบ–เบทเบเบฅเบปเบšเบเบงเบ™เป‚เบ”เบเบชเบฐเป€เบžเบฒเบฐ, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ„เบงเบฒเบกเบ„เบดเบ”เบ—เบตเปˆเป€เบเบตเบ”เบ‚เบทเป‰เบ™เป€เบžเบทเปˆเบญเปเบเป‰เป„เบ‚เบฅเบฐเบซเบฑเบ”เป€เบžเบทเปˆเบญเปƒเบซเป‰เบžเบฒเบฅเบฒเบกเบดเป€เบ•เบตเบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เบซเบ™เป‰เบฒเบ—เบตเปˆเบ–เบญเบ”เบฅเบฐเบซเบฑเบ”เบ–เบทเบเบ–เบดเป‰เบกเป€เบ‚เบปเป‰เบฒเป„เบ›เปƒเบ™เป„เบŸเบฅเปŒ.

เปเบžเบฑเบ”

เป€เบžเบทเปˆเบญเบšเปเปˆเปƒเบซเป‰เบ‚เบฝเบ™เบฅเบฐเบซเบฑเบ” patch เบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบ™เบžเบฒเบชเบฒเบ›เบฐเบเบญเบšเบ”เป‰เบงเบเบ•เบปเบ™เป€เบญเบ‡, เบ—เปˆเบฒเบ™เบชเบฒเบกเบฒเบ”เป€เบ›เบตเบ” Android Studio, เบ‚เบฝเบ™เบŸเบฑเบ‡เบŠเบฑเบ™เบ—เบตเปˆเบกเบตเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ›เป‰เบญเบ™เบ‚เปเป‰เบกเบนเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบŸเบฑเบ‡เบŠเบฑเบ™เบเบฒเบ™เบ–เบญเบ”เบฅเบฐเบซเบฑเบ”เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปเบฅเบฐเบ‚เบฝเบ™เปƒเบชเปˆเป„เบŸเบฅเปŒ, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบ„เบฑเบ”เบฅเบญเบเบฅเบฐเบซเบฑเบ”เบ—เบตเปˆ compiler เบˆเบฐ. เบชเป‰เบฒเบ‡.

เบซเบกเบนเปˆเป€เบžเบทเปˆเบญเบ™เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบˆเบฒเบเบ—เบตเบกเบ‡เบฒเบ™ UC Browser เบเบฑเบ‡เป„เบ”เป‰เบ”เบนเปเบฅเบ„เบงเบฒเบกเบชเบฐเบ”เบงเบเปƒเบ™เบเบฒเบ™เป€เบžเบตเปˆเบกเบฅเบฐเบซเบฑเบ”. เปƒเบซเป‰เบžเบงเบเป€เบฎเบปเบฒเบˆเบทเปˆเป„เบงเป‰เบงเปˆเบฒเปƒเบ™เบ•เบญเบ™เบ•เบปเป‰เบ™เบ‚เบญเบ‡เปเบ•เปˆเบฅเบฐเบซเบ™เป‰เบฒเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบกเบตเบฅเบฐเบซเบฑเบ”เบ‚เบตเป‰เป€เบซเบเบทเป‰เบญเบ—เบตเปˆเบชเบฒเบกเบฒเบ”เบ–เบทเบเปเบ—เบ™เบ—เบตเปˆเป„เบ”เป‰เบขเปˆเบฒเบ‡เบ‡เปˆเบฒเบเบ”เบฒเบ. เบชเบฐเบ”เบงเบเบซเบผเบฒเบ ๐Ÿ™‚ เบขเปˆเบฒเบ‡เปƒเบ”เบเปเปˆเบ•เบฒเบก, เปƒเบ™เบ•เบญเบ™เบ•เบปเป‰เบ™เบ‚เบญเบ‡เบซเบ™เป‰เบฒเบ—เบตเปˆเป€เบ›เบปเป‰เบฒเบซเบกเบฒเบเบšเปเปˆเบกเบตเบžเบทเป‰เบ™เบ—เบตเปˆเบžเบฝเบ‡เบžเปเบชเปเบฒเบฅเบฑเบšเบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเบŠเปˆเบงเบเบ›เบฐเบขเบฑเบ”เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เปƒเบซเป‰เบเบฑเบšเป„เบŸเบฅเปŒ. เบ‚เป‰เบญเบเบ•เป‰เบญเบ‡เปเบเบเบกเบฑเบ™เบญเบญเบเป€เบ›เบฑเบ™เบชเปˆเบงเบ™เบ•เปˆเบฒเบ‡เป†เปเบฅเบฐเปƒเบŠเป‰เบ‚เบตเป‰เป€เบซเบเบทเป‰เบญเบˆเบฒเบเบซเบ™เป‰เบฒเบ—เบตเปˆเปƒเบเป‰เบ„เบฝเบ‡. เบ—เบฑเบ‡เปเบปเบ”เบกเบตเบชเบตเปˆเบžเบฒเบเบชเปˆเบงเบ™.

เบชเปˆเบงเบ™เบ—เปเบฒเบญเบดเบ”:

เบŠเบญเบเบซเบฒเบˆเบธเบ”เบญเปˆเบญเบ™เปƒเบ™ UC Browser

เปƒเบ™เบชเบฐเบ–เบฒเบ›เบฑเบ”เบ•เบฐเบเบฐเบเปเบฒ ARM, เบชเบตเปˆเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ—เปเบฒเบ‡เบฒเบ™เบ—เปเบฒเบญเบดเบ”เปเบกเปˆเบ™เบœเปˆเบฒเบ™เบ—เบฐเบšเบฝเบ™ R0-R3, เบชเปˆเบงเบ™เบ—เบตเปˆเป€เบซเบผเบทเบญ, เบ–เป‰เบฒเบกเบต, เปเบกเปˆเบ™เบœเปˆเบฒเบ™ stack. เบ—เบฐเบšเบฝเบ™ LR เบ›เบฐเบ•เบดเบšเบฑเบ”เบ—เบตเปˆเบขเบนเปˆเบเบฑเบšเบ„เบทเบ™. เบ—เบฑเบ‡เบซเบกเบปเบ”เบ™เบตเป‰เบ•เป‰เบญเบ‡เป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบšเบฑเบ™เบ—เบถเบเป„เบงเป‰เป€เบžเบทเปˆเบญเปƒเบซเป‰เบŸเบฑเบ‡เบŠเบฑเบ™เบชเบฒเบกเบฒเบ”เป€เบฎเบฑเบ”เบงเบฝเบเป„เบ”เป‰เบซเบผเบฑเบ‡เบˆเบฒเบเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒ dump เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ‚เบญเบ‡เบกเบฑเบ™. เบžเบงเบเป€เบฎเบปเบฒเบเบฑเบ‡เบ•เป‰เบญเบ‡เบเบฒเบ™เบšเบฑเบ™เบ—เบถเบเบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เบ—เบฑเบ‡เบซเบกเบปเบ”เบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเปƒเบŠเป‰เปƒเบ™เบ‚เบฐเบšเบงเบ™เบเบฒเบ™, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบˆเบถเปˆเบ‡เป€เบฎเบฑเบ” PUSH.W {R0-R10,LR}. เปƒเบ™ R7 เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบ—เบตเปˆเบขเบนเปˆเบ‚เบญเบ‡เบšเบฑเบ™เบŠเบตเบฅเบฒเบเบŠเบทเปˆเบ‚เบญเบ‡เบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบชเบปเปˆเบ‡เบเบฑเบšเบซเบ™เป‰เบฒเบ—เบตเปˆเบœเปˆเบฒเบ™ stack.

เบเบฒเบ™เบ™เปเบฒเปƒเบŠเป‰เบเบฒเบ™เบ—เปเบฒเบ‡เบฒเบ™เบ‚เบญเบ‡ fopen เปƒเบซเป‰เป€เบ›เบตเบ”เป„เบŸเบฅเปŒ /data/local/tmp/aes เปƒเบ™เป‚เบซเบกเบ” "ab".
i.e. เบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เป€เบžเบตเปˆเบกเป€เบ•เบตเบก. เปƒเบ™ R0 เบžเบงเบเป€เบฎเบปเบฒเป‚เบซเบฅเบ”เบ—เบตเปˆเบขเบนเปˆเบ‚เบญเบ‡เบŠเบทเปˆเป„เบŸเบฅเปŒ, เปƒเบ™ R1 - เบ—เบตเปˆเบขเบนเปˆเบ‚เบญเบ‡เป€เบชเบฑเป‰เบ™เบชเบฐเปเบ”เบ‡เบฎเบนเบšเปเบšเบš. เปเบฅเบฐเปƒเบ™เบ—เบตเปˆเบ™เบตเป‰เบฅเบฐเบซเบฑเบ”เบ‚เบตเป‰เป€เบซเบเบทเป‰เบญเบชเบดเป‰เบ™เบชเบธเบ”เบฅเบปเบ‡, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบฎเบปเบฒเบเป‰เบฒเบงเป„เบ›เบชเบนเปˆเบซเบ™เป‰เบฒเบ—เบตเปˆเบ•เปเปˆเป„เบ›. เป€เบžเบทเปˆเบญเปƒเบซเป‰เบกเบฑเบ™เบชเบทเบšเบ•เปเปˆเป€เบฎเบฑเบ”เบงเบฝเบ, เบžเบงเบเป€เบฎเบปเบฒเป€เบญเบปเบฒเปƒเบˆเปƒเบชเปˆเปƒเบ™เบ•เบญเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เบเบฒเบ™เบซเบฑเบ™เบ›เปˆเบฝเบ™เป„เบ›เบชเบนเปˆเบฅเบฐเบซเบฑเบ”เบ—เบตเปˆเปเบ—เป‰เบˆเบดเบ‡เบ‚เบญเบ‡เบซเบ™เป‰เบฒเบ—เบตเปˆ, เบ‚เป‰เบฒเบกเบ‚เบตเป‰เป€เบซเบเบทเป‰เบญ, เปเบฅเบฐเปเบ—เบ™เบ—เบตเปˆเบˆเบฐเป€เบ›เบฑเบ™เบ‚เบตเป‰เป€เบซเบเบทเป‰เบญ, เบžเบงเบเป€เบฎเบปเบฒเป€เบžเบตเปˆเบกเบเบฒเบ™เบชเบทเบšเบ•เปเปˆเบ‚เบญเบ‡ patch.

เบŠเบญเบเบซเบฒเบˆเบธเบ”เบญเปˆเบญเบ™เปƒเบ™ UC Browser

เป‚เบ— fopen.

เบชเบฒเบกเบ•เบปเบงเบเปเบฒเบ™เบปเบ”เบเบฒเบ™เบ—เปเบฒเบญเบดเบ”เบ‚เบญเบ‡เบŸเบฑเบ‡เบŠเบฑเบ™ aes เบกเบตโ€‹เบ›เบฐโ€‹เป€เบžเบ”โ€‹ int. เป€เบ™เบทเปˆเบญเบ‡เบˆเบฒเบเบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบšเบฑเบ™เบ—เบถเบเบเบฒเบ™เบฅเบปเบ‡เบ—เบฐเบšเบฝเบ™เปƒเบชเปˆ stack เปƒเบ™เบ•เบญเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™, เบžเบงเบเป€เบฎเบปเบฒเบžเบฝเบ‡เปเบ•เปˆเบชเบฒเบกเบฒเบ”เบœเปˆเบฒเบ™เบซเบ™เป‰เบฒเบ—เบตเปˆ fwrite เบ—เบตเปˆเบขเบนเปˆเบ‚เบญเบ‡เป€เบ‚เบปเบฒเป€เบˆเบปเป‰เบฒเบขเบนเปˆเปƒเบ™ stack เป„เบ”เป‰.

เบŠเบญเบเบซเบฒเบˆเบธเบ”เบญเปˆเบญเบ™เปƒเบ™ UC Browser

เบ•เปเปˆเป„เบ›, เบžเบงเบเป€เบฎเบปเบฒเบกเบตเบชเบฒเบกเป‚เบ„เบ‡เบชเป‰เบฒเบ‡เบ—เบตเปˆเบกเบตเบ‚เบฐเบซเบ™เบฒเบ”เบ‚เปเป‰เบกเบนเบ™เปเบฅเบฐเบ•เบปเบงเบŠเบตเป‰เป„เบ›เบซเบฒเบ‚เปเป‰เบกเบนเบ™เบชเปเบฒเบฅเบฑเบšเบ„เบต, vector เบเบฒเบ™เป€เบฅเบตเปˆเบกเบ•เบปเป‰เบ™เปเบฅเบฐเบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบ–เบทเบเป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”.

เบŠเบญเบเบซเบฒเบˆเบธเบ”เบญเปˆเบญเบ™เปƒเบ™ UC Browser

เปƒเบ™โ€‹เบ—เบตเปˆโ€‹เบชเบธเบ”โ€‹, เบ›เบดเบ”โ€‹เป„เบŸเบฅโ€‹เปŒโ€‹, เบŸเบทเป‰เบ™โ€‹เบŸเบนโ€‹เบเบฒเบ™โ€‹เบˆเบปเบ”โ€‹เบ—เบฐโ€‹เบšเบฝเบ™โ€‹เปเบฅเบฐโ€‹เบเบฒเบ™โ€‹เป‚เบญเบ™โ€‹เบเบฒเบ™โ€‹เบ„เบงเบšโ€‹เบ„เบธเบกโ€‹เบเบฒเบ™โ€‹เบ—เปเบฒโ€‹เบ‡เบฒเบ™โ€‹เบ—เบตเปˆโ€‹เปเบ—เป‰โ€‹เบˆเบดเบ‡โ€‹ aes.

เบžเบงเบเป€เบฎเบปเบฒเป€เบเบฑเบšเบเปเบฒ APK เบ—เบตเปˆเบกเบตเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ” patched, เป€เบŠเบฑเบ™เบกเบฑเบ™, เบญเบฑเบšเป‚เบซเบผเบ”เบกเบฑเบ™เปƒเบชเปˆเบญเบธเบ›เบฐเบเบญเบ™ / emulator, เปเบฅเบฐเป€เบ›เบตเบ”เบกเบฑเบ™. เบžเบงเบเป€เบฎเบปเบฒเป€เบซเบฑเบ™เบงเปˆเบฒเบเบฒเบ™เบ–เบดเป‰เบกเบ‚เบตเป‰เป€เบซเบเบทเป‰เบญเบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเบเปเบฒเบฅเบฑเบ‡เบ–เบทเบเบชเป‰เบฒเบ‡เบ‚เบทเป‰เบ™, เปเบฅเบฐเบ‚เปเป‰เบกเบนเบ™เบˆเปเบฒเบ™เบงเบ™เบซเบฅเบฒเบเบเปเบฒเบฅเบฑเบ‡เบ–เบทเบเบ‚เบฝเบ™เบขเบนเปˆเบ—เบตเปˆเบ™เบฑเป‰เบ™. เบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบšเปƒเบŠเป‰เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เบšเปเปˆเบžเบฝเบ‡เปเบ•เปˆเบชเปเบฒเบฅเบฑเบšเบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™, เปเบฅเบฐเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”เบœเปˆเบฒเบ™เบซเบ™เป‰เบฒเบ—เบตเปˆเบขเบนเปˆเปƒเบ™เบ„เปเบฒเบ–เบฒเบก. เปเบ•เปˆเบชเปเบฒเบฅเบฑเบšเบšเบฒเบ‡เป€เบซเบ”เบœเบปเบ™เบ‚เปเป‰เบกเบนเบ™เบ—เบตเปˆเบˆเปเบฒเป€เบ›เบฑเบ™เบšเปเปˆเบกเบตเบขเบนเปˆ, เปเบฅเบฐเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเบ—เบตเปˆเบ•เป‰เบญเบ‡เบเบฒเบ™เปเบกเปˆเบ™เบšเปเปˆเป€เบซเบฑเบ™เบขเบนเปˆเปƒเบ™เบเบฒเบ™เบˆเบฐเบฅเบฒเบˆเบญเบ™. เป€เบžเบทเปˆเบญเบšเปเปˆเปƒเบซเป‰เบฅเปเบ–เป‰เบฒเบˆเบปเบ™เบเปˆเบงเบฒ 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

เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบฎเบฑเบšเบฅเบฐเบซเบฑเบ”เปเบฅเบฐ vector เป€เบšเบทเป‰เบญเบ‡เบ•เบปเป‰เบ™เป€เบ—เบปเปˆเบฒเบเบฑเบšเบเบฐเปเบˆ. เบฅเบญเบ‡เบ–เบญเบ”เบฅเบฐเบซเบฑเบ”เบเบฒเบ™เบ•เบญเบšเบชเบฐเปœเบญเบ‡เบ‚เบญเบ‡เป€เบŠเบตเบšเป€เบงเบตเปƒเบ™เบฎเบนเบšเปเบšเบš CBC.

เบŠเบญเบเบซเบฒเบˆเบธเบ”เบญเปˆเบญเบ™เปƒเบ™ UC Browser

เบžเบงเบเป€เบฎเบปเบฒเป€เบซเบฑเบ™ URL เบ—เบตเปˆเป€เบเบฑเบšเป„เบงเป‰, เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบ—เบตเปˆเบ„เป‰เบฒเบเบ„เบทเบเบฑเบ™เบเบฑเบš MD5, "extract_unzipsize" เปเบฅเบฐเบ•เบปเบงเป€เบฅเบ. เบžเบงเบเป€เบฎเบปเบฒเบเบงเบ”เป€เบšเบดเปˆเบ‡: MD5 เบ‚เบญเบ‡เบฎเบงเบšเบฎเบงเบกเปเบกเปˆเบ™เบ„เบทเบเบฑเบ™, เบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบญเบ‡เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เบ—เบตเปˆเบšเปเปˆเป„เบ”เป‰เบšเบฑเบ™เบˆเบธเปเบกเปˆเบ™เบ„เบทเบเบฑเบ™. เบžเบงเบโ€‹เป€เบฎเบปเบฒโ€‹เบžเบฐโ€‹เบเบฒโ€‹เบเบฒเบกโ€‹เปเบเป‰โ€‹เป„เบ‚โ€‹เบซเป‰เบญเบ‡โ€‹เบชเบฐโ€‹เบซเบกเบธเบ”โ€‹เบ™เบตเป‰โ€‹เปเบฅเบฐโ€‹เปƒเบซเป‰โ€‹เบกเบฑเบ™โ€‹เบเบฑเบšโ€‹เบ•เบปเบงโ€‹เบ—เปˆเบญเบ‡โ€‹เป€เบงเบฑเบšโ€‹. เป€เบžเบทเปˆเบญเบชเบฐเปเบ”เบ‡เปƒเบซเป‰เป€เบซเบฑเบ™เบงเปˆเบฒเบซเป‰เบญเบ‡เบชเบฐเปเบธเบ” patched เบ‚เบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เป‚เบซเบฅเบ”เปเบฅเป‰เบง, เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเป€เบ›เบตเบ”เบ•เบปเบง Intent เป€เบžเบทเปˆเบญเบชเป‰เบฒเบ‡ SMS เบ—เบตเปˆเบกเบตเบ‚เปเป‰เบ„เบงเบฒเบก "PWNED!" เบžเบงเบเป€เบฎเบปเบฒเบˆเบฐเบ—เบปเบ”เปเบ—เบ™เบชเบญเบ‡เบ„เปเบฒเบ•เบญเบšเบˆเบฒเบเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบ: puds.ucweb.com/upgrade/index.xhtml เปเบฅเบฐเป€เบžเบทเปˆเบญเบ”เบฒเบงเป‚เบซเบฅเบ”เบฎเบงเบšเบฎเบงเบก. เปƒเบ™เบ„เบฑเป‰เบ‡เบ—เปเบฒเบญเบดเบ”เบžเบงเบเป€เบฎเบปเบฒเบ›เปˆเบฝเบ™เปเบ—เบ™ MD5 (เบ‚เบฐเบซเบ™เบฒเบ”เบšเปเปˆเบ›เปˆเบฝเบ™เปเบ›เบ‡เบซเบผเบฑเบ‡เบˆเบฒเบ unpacking), เปƒเบ™เบ„เบฑเป‰เบ‡เบ—เบตเบชเบญเบ‡เบžเบงเบเป€เบฎเบปเบฒเปƒเบซเป‰ archive เบเบฑเบšเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ” patched.

เบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบšเบžเบฐเบเบฒเบเบฒเบกเบ”เบฒเบงเป‚เบซเบฅเบ”เบšเปˆเบญเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เบซเบผเบฒเบเบ„เบฑเป‰เบ‡, เบซเบผเบฑเบ‡เบˆเบฒเบเบ™เบฑเป‰เบ™เบกเบฑเบ™เป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบเบตเบ”เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”. เบ›เบฒเบเบปเบ”เบ‚เบทเป‰เบ™เบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡
เบฅเบฒเบงเบšเปเปˆเบกเบฑเบ. เป€เบ›เบฑเบ™เบœเบปเบ™เบกเบฒเบˆเบฒเบเบเบฒเบ™เบงเบดเป€เบ„เบฒเบฐเบฎเบนเบšเปเบšเบšเบ—เบตเปˆเบ‚เบตเป‰เบฎเป‰เบฒเบเบ™เบตเป‰, เบกเบฑเบ™เป„เบ”เป‰เบซเบฑเบ™เบญเบญเบเบงเปˆเบฒเป€เบ„เบทเปˆเบญเบ‡เปเบกเปˆเบ‚เปˆเบฒเบเบเบฑเบ‡เบชเบปเปˆเบ‡เบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบญเบ‡เบเบฒเบ™เป€เบเบฑเบš:

เบŠเบญเบเบซเบฒเบˆเบธเบ”เบญเปˆเบญเบ™เปƒเบ™ UC Browser

เบกเบฑเบ™เบ–เบทเบเป€เบ‚เบปเป‰เบฒเบฅเบฐเบซเบฑเบ”เปƒเบ™ LEB128. เบซเบผเบฑเบ‡เบˆเบฒเบ patch, เบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบญเบ‡เบฎเบงเบšเบฎเบงเบกเบเบฑเบšเบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เป„เบ”เป‰เบ›เปˆเบฝเบ™เปเบ›เบ‡เป€เบฅเบฑเบเบ™เป‰เบญเบ, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบšเป„เบ”เป‰เบžเบดเบˆเบฒเบฅเบฐเบ™เบฒเบงเปˆเบฒเบเบฒเบ™เป€เบเบฑเบšเบกเป‰เบฝเบ™เป„เบ”เป‰เบ–เบทเบเบ”เบฒเบงเป‚เบซเบผเบ”เบขเปˆเบฒเบ‡เป‚เบซเบ”เบฎเป‰เบฒเบ, เปเบฅเบฐเบซเบผเบฑเบ‡เบˆเบฒเบเบ„เบงเบฒเบกเบžเบฐเบเบฒเบเบฒเบกเบซเบผเบฒเบเป†เบ„เบฑเป‰เบ‡เบกเบฑเบ™เบเปเปˆเป€เบฎเบฑเบ”เปƒเบซเป‰เป€เบเบตเบ”เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”.

เบžเบงเบเป€เบฎเบปเบฒเบ›เบฑเบšเบ‚เบฐเบซเบ™เบฒเบ”เบ‚เบญเบ‡เบฎเบงเบšเบฎเบงเบก ... เปเบฅเบฐ โ€“ เป€เบŠเบทเปˆเบญ! ๐Ÿ™‚เบœเบปเบ™เป„เบ”เป‰เบฎเบฑเบšเปเบกเปˆเบ™เบขเบนเปˆเปƒเบ™เบงเบดเบ”เบตเป‚เบญ.

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

เบœเบปเบ™เบชเบฐเบ—เป‰เบญเบ™เปเบฅเบฐเบ›เบฐเบ•เบดเบเบดเบฅเบดเบเบฒเบ‚เบญเบ‡เบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒ

เปƒเบ™เบ—เบฒเบ‡เบ”เบฝเบงเบเบฑเบ™, เปเบฎเบเป€เบเบตเบชเบฒเบกเบฒเบ”เปƒเบŠเป‰เบ„เบธเบ™เบชเบปเบกเบšเบฑเบ”เบ—เบตเปˆเบšเปเปˆเบ›เบญเบ”เป„เบžเบ‚เบญเบ‡ UC Browser เป€เบžเบทเปˆเบญเปเบˆเบเบขเบฒเบ เปเบฅเบฐเป€เบ›เบตเบ”เปƒเบŠเป‰เบซเป‰เบญเบ‡เบชเบฐเปเบธเบ”เบ—เบตเปˆเป€เบ›เบฑเบ™เบญเบฑเบ™เบ•เบฐเบฅเบฒเบ. เบซเป‰เบญเบ‡เบชเบฐเบซเบกเบธเบ”เป€เบซเบผเบปเปˆเบฒเบ™เบตเป‰เบˆเบฐเป€เบฎเบฑเบ”เบงเบฝเบเบขเบนเปˆเปƒเบ™เบชเบฐเบžเบฒเบšเบเบฒเบ™เบ‚เบญเบ‡เบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบš, เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™เบžเบงเบเป€เบ‚เบปเบฒเบˆเบฐเป„เบ”เป‰เบฎเบฑเบšเบเบฒเบ™เบญเบฐเบ™เบธเบเบฒเบ”เบ—เบฑเบ‡เบซเบกเบปเบ”เบ‚เบญเบ‡เบฅเบฐเบšเบปเบšเบ‚เบญเบ‡เบกเบฑเบ™. เบ”เบฑเปˆเบ‡เบ™เบฑเป‰เบ™, เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบชเบฐเปเบ”เบ‡เบ›เปˆเบญเบ‡เบขเป‰เบฝเบก phishing, เป€เบŠเบฑเปˆเบ™เบ”เบฝเบงเบเบฑเบ™เบเบฑเบšเบเบฒเบ™เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป„เบŸเบฅเปŒเบเบฒเบ™เป€เบฎเบฑเบ”เบงเบฝเบเบ‚เบญเบ‡เบเบฐเบฎเบญเบเบˆเบตเบ™เบชเบตเบชเบปเป‰เบก, เบฅเบงเบกเบ—เบฑเบ‡เบเบฒเบ™เป€เบ‚เบปเป‰เบฒเบชเบนเปˆเบฅเบฐเบšเบปเบš, เบฅเบฐเบซเบฑเบ”เบœเปˆเบฒเบ™เปเบฅเบฐ cookies เบ—เบตเปˆเป€เบเบฑเบšเป„เบงเป‰เปƒเบ™เบ–เบฒเบ™เบ‚เปเป‰เบกเบนเบ™.

เบžเบงเบเป€เบฎเบปเบฒเป„เบ”เป‰เบ•เบดเบ”เบ•เปเปˆเบเบฑเบšเบ™เบฑเบเบžเบฑเบ”เบ—เบฐเบ™เบฒเบ‚เบญเบ‡ UC Browser เปเบฅเบฐเปเบˆเป‰เบ‡เปƒเบซเป‰เบžเบงเบเป€เบ‚เบปเบฒเบฎเบนเป‰เบเปˆเบฝเบงเบเบฑเบšเบšเบฑเบ™เบซเบฒเบ—เบตเปˆเบžเบงเบเป€เบฎเบปเบฒเบžเบปเบšเป€เบซเบฑเบ™, เบžเบฐเบเบฒเบเบฒเบกเบŠเบตเป‰เปƒเบซเป‰เป€เบซเบฑเบ™เป€เบ–เบดเบ‡เบˆเบธเบ”เบญเปˆเบญเบ™เปเบฅเบฐเบญเบฑเบ™เบ•เบฐเบฅเบฒเบเบ‚เบญเบ‡เบกเบฑเบ™, เปเบ•เปˆเบžเบงเบเป€เบ‚เบปเบฒเบšเปเปˆเป„เบ”เป‰เบชเบปเบ™เบ—เบฐเบ™เบฒเบซเบเบฑเบ‡เบเบฑเบšเบžเบงเบเป€เบฎเบปเบฒ. เปƒเบ™เบ‚เบฐเบ™เบฐเบ”เบฝเบงเบเบฑเบ™, เบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบšเบเบฑเบ‡เบชเบทเบšเบ•เปเปˆเบญเป‰เบฒเบ‡เป€เบ–เบดเบ‡เบฅเบฑเบเบชเบฐเบ™เบฐเบญเบฑเบ™เบ•เบฐเบฅเบฒเบเบ‚เบญเบ‡เบกเบฑเบ™เบขเบนเปˆเปƒเบ™เบชเบฒเบเบ•เบฒเบ—เปเบฒเบกเบฐเบ”เบฒ. เปเบ•เปˆเป€เบกเบทเปˆเบญเบžเบงเบเป€เบฎเบปเบฒเป€เบ›เบตเบ”เป€เบœเบตเบเบฅเบฒเบเบฅเบฐเบญเบฝเบ”เบ‚เบญเบ‡เบŠเปˆเบญเบ‡เป‚เบซเบงเปˆ, เบกเบฑเบ™เบšเปเปˆเบชเบฒเบกเบฒเบ”เบ—เบตเปˆเบˆเบฐเบšเปเปˆเบชเบปเบ™เปƒเบˆเบกเบฑเบ™เบ„เบทเป€เบเบปเปˆเบฒ. เบงเบฑเบ™เบ—เบต 27 เบกเบตเบ™เบฒเบ™เบตเป‰
เป€เบงเบตเบŠเบฑเบ™เปƒเปเปˆเบ‚เบญเบ‡ UC Browser 12.10.9.1193 เบ–เบทเบเบ›เปˆเบญเบเบญเบญเบเบกเบฒ, เป€เบŠเบดเปˆเบ‡เป€เบ‚เบปเป‰เบฒเป€เบ–เบดเบ‡เป€เบŠเบตเบšเป€เบงเบตเบœเปˆเบฒเบ™ HTTPS: puds.ucweb.com/upgrade/index.xhtml.

เบ™เบญเบเบˆเบฒเบเบ™เบฑเป‰เบ™, เบซเบผเบฑเบ‡เบˆเบฒเบ "เปเบเป‰เป„เบ‚" เปเบฅเบฐเบˆเบปเบ™เบเปˆเบงเบฒเป€เบงเบฅเบฒเบ‚เบญเบ‡เบเบฒเบ™เบ‚เบฝเบ™เบšเบปเบ”เบ„เบงเบฒเบกเบ™เบตเป‰, เบเบฒเบ™เบžเบฐเบเบฒเบเบฒเบกเป€เบ›เบตเบ” PDF เปƒเบ™เบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบšเบชเบปเปˆเบ‡เบœเบปเบ™เปƒเบซเป‰เป€เบเบตเบ”เบ„เบงเบฒเบกเบœเบดเบ”เบžเบฒเบ”เบ—เบตเปˆเบกเบตเบ‚เปเป‰เบ„เบงเบฒเบก "Oops, เบกเบตเบšเบฒเบ‡เบชเบดเปˆเบ‡เบšเบฒเบ‡เบขเปˆเบฒเบ‡เบœเบดเบ”เบžเบฒเบ”!" เบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเป„เบ›เบซเบฒเป€เบŠเบตเบšเป€เบงเบตเบšเปเปˆเป„เบ”เป‰เป€เบฎเบฑเบ”เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบžเบฐเบเบฒเบเบฒเบกเป€เบ›เบตเบ” PDF, เปเบ•เปˆเบเบฒเบ™เบฎเป‰เบญเบ‡เบ‚เปเป„เบ”เป‰เบ–เบทเบเป€เบฎเบฑเบ”เปƒเบ™เป€เบงเบฅเบฒเบ—เบตเปˆเบ•เบปเบงเบ—เปˆเบญเบ‡เป€เบงเบฑเบšเบ–เบทเบเป€เบ›เบตเบ”เบ•เบปเบง, เป€เบŠเบดเปˆเบ‡เบŠเบตเป‰เปƒเบซเป‰เป€เบซเบฑเบ™เป€เบ–เบดเบ‡เบ„เบงเบฒเบกเบชเบฒเบกเบฒเบ”เปƒเบ™เบเบฒเบ™เบ”เบฒเบงเป‚เบซเบฅเบ”เบฅเบฐเบซเบฑเบ”เบ›เบฐเบ•เบดเบšเบฑเบ”เบขเปˆเบฒเบ‡เบ•เปเปˆเป€เบ™เบทเปˆเบญเบ‡เปƒเบ™เบเบฒเบ™เบฅเบฐเป€เบกเบตเบ”เบเบปเบ”เบฅเบฐเบšเบฝเบšเบ‚เบญเบ‡ Google Play.

เปเบซเบผเปˆเบ‡เบ‚เปเป‰เบกเบนเบ™: www.habr.com

เป€เบžเบตเปˆเบกเบ„เบงเบฒเบกเบ„เบดเบ”เป€เบซเบฑเบ™