
ΠΡΠ²Π΅Π΄Π΅Π½ΠΈΠ΅
Π ΠΊΡΠ°Ρ Π½Π° ΠΌΠ°ΡΡ Π½ΠΈΠ΅ , ΠΎΡΠΊΡΠΈΡ ΠΌΠ΅ ΡΠΊΡΠΈΡΠ° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½Π΅ ΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° Π½Π΅ΠΏΠΎΡΠ²ΡΡΠ΄Π΅Π½ ΠΊΠΎΠ΄ Π² UC Browser. ΠΠ½Π΅Ρ ΡΠ΅ ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΊΠ°ΠΊ ΠΏΡΠΎΡΠΈΡΠ° ΡΠΎΠ²Π° Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½Π΅ ΠΈ ΠΊΠ°ΠΊ Ρ Π°ΠΊΠ΅ΡΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π² ΡΠ²ΠΎΠΈΡΠ΅ ΡΠ΅Π»ΠΈ.
ΠΡΠΊΠΎΠ»ΠΊΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π°Π·Π°Π΄ UC Browser Π±Π΅ Π°Π³ΡΠ΅ΡΠΈΠ²Π½ΠΎ ΡΠ΅ΠΊΠ»Π°ΠΌΠΈΡΠ°Π½ ΠΈ ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½ΡΠ²Π°Π½: ΠΈΠ½ΡΡΠ°Π»ΠΈΡΠ°Ρ Π° Π³ΠΎ Π½Π° ΡΡΡΡΠΎΠΉΡΡΠ²Π°ΡΠ° Π½Π° ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Π·Π»ΠΎΠ½Π°ΠΌΠ΅ΡΠ΅Π½ΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΈ, ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½ΡΠ²Π°Ρ Π° Π³ΠΎ ΠΎΡ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΡΠ°ΠΉΡΠΎΠ²Π΅ ΠΏΠΎΠ΄ ΡΠΎΡΠΌΠ°ΡΠ° Π½Π° Π²ΠΈΠ΄Π΅ΠΎ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ (Ρ.Π΅. ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅ ΠΌΠΈΡΠ»Π΅Ρ Π°, ΡΠ΅ ΡΠ²Π°Π»ΡΡ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΡΠ½ΠΎ ΠΊΠ»ΠΈΠΏ, Π° Π²ΠΌΠ΅ΡΡΠΎ ΡΠΎΠ²Π° ΠΏΠΎΠ»ΡΡΠ°Π²Π°Ρ Π° APK Ρ ΡΠΎΠ·ΠΈ Π±ΡΠ°ΡΠ·ΡΡ), ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π° ΠΏΠ»Π°ΡΠ΅ΡΠΈ Π±Π°Π½Π΅ΡΠΈ Ρ ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΡΠ΅ Π±ΡΠ°ΡΠ·ΡΡΡΡ Π΅ ΠΎΡΡΠ°ΡΡΠ», ΡΡΠ·Π²ΠΈΠΌ ΠΈ Ρ.Π½. Π ΠΎΡΠΈΡΠΈΠ°Π»Π½Π°ΡΠ° Π³ΡΡΠΏΠ° Π½Π° UC Browser Π²ΡΠ² VK ΠΈΠΌΠ° , ΠΊΡΠ΄Π΅ΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΡΠ΅ ΠΎΠΏΠ»Π°ΡΠ°Ρ ΠΎΡ Π½Π΅ΠΊΠΎΡΠ΅ΠΊΡΠ½Π° ΡΠ΅ΠΊΠ»Π°ΠΌΠ°, ΡΠ°ΠΌ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΈ. ΠΡΠ΅Π· 2016 Π³ΠΎΠ΄ΠΈΠ½Π° Π΄ΠΎΡΠΈ ΠΈΠΌΠ°ΡΠ΅ Π½Π° ΡΡΡΠΊΠΈ Π΅Π·ΠΈΠΊ (Π΄Π°, ΡΠ΅ΠΊΠ»Π°ΠΌΠ° Π½Π° Π±ΡΠ°ΡΠ·ΡΡ, ΠΊΠΎΠΉΡΠΎ Π±Π»ΠΎΠΊΠΈΡΠ° ΡΠ΅ΠΊΠ»Π°ΠΌΠΈΡΠ΅).
ΠΡΠΌ ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π½Π° ΠΏΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΠ°ΡΠΈΡΡΠ° UC Browser Π΅ ΠΈΠΌΠ°Π» Π½Π°Π΄ 500 000 000 ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΠΈ Π² Google Play. Π’ΠΎΠ²Π° Π΅ Π²ΠΏΠ΅ΡΠ°ΡΠ»ΡΠ²Π°ΡΠΎ β ΡΠ°ΠΌΠΎ Google Chrome ΠΈΠΌΠ° ΠΏΠΎΠ²Π΅ΡΠ΅. Π‘ΡΠ΅Π΄ ΠΎΡΠ·ΠΈΠ²ΠΈΡΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π²ΠΈΠ΄ΡΡ Π΄ΠΎΡΡΠ° ΠΎΠΏΠ»Π°ΠΊΠ²Π°Π½ΠΈΡ ΠΎΡΠ½ΠΎΡΠ½ΠΎ ΡΠ΅ΠΊΠ»Π°ΠΌΠΈΡΠ΅ ΠΈ ΠΏΡΠ΅Π½Π°ΡΠΎΡΠ²Π°Π½ΠΈΡΡΠ° ΠΊΡΠΌ ΡΠ°Π·Π»ΠΈΡΠ½ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ Π² Google Play. Π’ΠΎΠ²Π° ΡΡΠ°Π½Π° ΠΏΠΎΠ²ΠΎΠ΄ Π·Π° ΠΈΠ·ΡΠ»Π΅Π΄Π²Π°Π½Π΅: ΡΠ΅ΡΠΈΡ
ΠΌΠ΅ Π΄Π° ΠΏΡΠΎΠ²Π΅ΡΠΈΠΌ Π΄Π°Π»ΠΈ UC Browser ΠΏΡΠ°Π²ΠΈ Π½Π΅ΡΠΎ Π½Π΅ΡΠ΅Π΄Π½ΠΎ. Π ΡΠ΅ ΠΎΠΊΠ°Π·Π°, ΡΠ΅ Π²ΡΡΡΠ½ΠΎΡΡ ΠΏΡΠ°Π²ΠΈ!
Π ΠΊΠΎΠ΄Π° Π½Π° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π±Π΅ΡΠ΅ ΠΎΡΠΊΡΠΈΡΠ° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ Π·Π° Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½Π΅ ΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ ΠΊΠΎΠ΄, Π² Google Play. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, ΡΠ΅ UC Browser Π·Π°ΡΠ΅ΠΆΠ΄Π° ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ ΠΊΠΎΠ΄, ΡΠΎΠΉ Π³ΠΎ ΠΏΡΠ°Π²ΠΈ Π½Π΅Π·Π°ΡΠΈΡΠ΅Π½ΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΎ Π·Π° ΠΈΠ·Π²ΡΡΡΠ²Π°Π½Π΅ Π½Π° Π°ΡΠ°ΠΊΠ° Man-in-the-Middle. ΠΠ΅ΠΊΠ° Π²ΠΈΠ΄ΠΈΠΌ Π΄Π°Π»ΠΈ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠ·Π²ΡΡΡΠΈΠΌ ΡΠ°ΠΊΠ°Π²Π° Π°ΡΠ°ΠΊΠ°.
ΠΡΠΈΡΠΊΠΎ, ΠΊΠΎΠ΅ΡΠΎ Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ ΠΏΠΎ-Π΄ΠΎΠ»Ρ, Π΅ Π°ΠΊΡΡΠ°Π»Π½ΠΎ Π·Π° Π²Π΅ΡΡΠΈΡΡΠ° Π½Π° UC Browser, ΠΊΠΎΡΡΠΎ ΠΏΡΠΈΡΡΡΡΠ²Π° Π² Google Play ΠΏΠΎ Π²ΡΠ΅ΠΌΠ΅ΡΠΎ Π½Π° ΠΏΡΠΎΠ²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΈΠ·ΡΠ»Π΅Π΄Π²Π°Π½Π΅ΡΠΎ:
package: com.UCMobile.intl
versionName: 12.10.8.1172
versionCode: 10598
sha1 Π½Π° APK ΡΠ°ΠΉΠ»Π°: f5edb2243413c777172f6362876041eb0c3a928cΠΠ΅ΠΊΡΠΎΡ Π½Π° Π°ΡΠ°ΠΊΠ°
Π ΠΌΠ°Π½ΠΈΡΠ΅ΡΡΠ° Π½Π° UC Browser ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΎΡΠΊΡΠΈΠ΅ ΡΡΠ»ΡΠ³Π° Ρ Π³ΠΎΠ²ΠΎΡΠ΅ΡΠΎ ΠΈΠΌΠ΅ com.uc.deployment.UpgradeDeployService.
<service android_exported="false" android_name="com.uc.deployment.UpgradeDeployService" android_process=":deploy" />
ΠΡΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΠ°Π·ΠΈ ΡΡΠ»ΡΠ³Π° Π±ΡΠ°ΡΠ·ΡΡΡΡ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° POST Π·Π°ΡΠ²ΠΊΠ° ΠΊΡΠΌ , ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π·Π°Π±Π΅Π»ΡΠ·Π°Π½ Π² ΡΡΠ°ΡΠΈΠΊΠ° ΡΠ»Π΅Π΄ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ Π²ΡΠ΅ΠΌΠ΅ ΡΠ»Π΅Π΄ ΡΡΠ°ΡΡΠ°. Π ΠΎΡΠ³ΠΎΠ²ΠΎΡ ΡΠΎΠΉ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠ»ΡΡΠΈ ΠΊΠΎΠΌΠ°Π½Π΄Π° Π·Π° ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅ Π½Π° Π½ΡΠΊΠ°ΠΊΠ²Π° Π°ΠΊΡΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈΠ»ΠΈ Π½ΠΎΠ² ΠΌΠΎΠ΄ΡΠ». ΠΠΎ Π²ΡΠ΅ΠΌΠ΅ Π½Π° Π°Π½Π°Π»ΠΈΠ·Π° ΡΡΡΠ²ΡΡΡΡ Π½Π΅ Π΄Π°Π²Π°ΡΠ΅ ΡΠ°ΠΊΠΈΠ²Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈ, Π½ΠΎ Π·Π°Π±Π΅Π»ΡΠ·Π°Ρ ΠΌΠ΅, ΡΠ΅ ΠΏΡΠΈ ΠΎΠΏΠΈΡ Π·Π° ΠΎΡΠ²Π°ΡΡΠ½Π΅ Π½Π° PDF Π² Π±ΡΠ°ΡΠ·ΡΡΠ° ΡΠΎΠΉ ΠΏΡΠ°Π²ΠΈ ΠΏΠΎΠ²ΡΠΎΡΠ½Π° Π·Π°ΡΠ²ΠΊΠ° Π½Π° ΠΏΠΎΡΠΎΡΠ΅Π½ΠΈΡ ΠΏΠΎ-Π³ΠΎΡΠ΅ Π°Π΄ΡΠ΅Ρ, ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ ΠΈΠ·ΡΠ΅Π³Π»Ρ Π½Π°ΡΠΈΠ²Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°. ΠΠ° ΠΏΡΠΎΠ²Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° Π°ΡΠ°ΠΊΠ°ΡΠ° ΡΠ΅ΡΠΈΡ ΠΌΠ΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΡΠ°Π·ΠΈ ΠΎΡΠΎΠ±Π΅Π½ΠΎΡΡ Π½Π° UC Browser: ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡΠ° Π΄Π° ΠΎΡΠ²Π°ΡΡ PDF Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° Π½Π°ΡΠΈΠ²Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΠΊΠΎΡΡΠΎ Π»ΠΈΠΏΡΠ²Π° Π² APK ΠΈ ΠΊΠΎΡΡΠΎ ΡΠΎΠΉ ΠΏΡΠΈ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡ ΠΈΠ·ΡΠ΅Π³Π»Ρ ΠΎΡ ΠΈΠ½ΡΠ΅ΡΠ½Π΅Ρ. Π‘ΡΡΡΠ²Π° ΡΠΈ Π΄Π° ΡΠ΅ ΠΎΡΠ±Π΅Π»Π΅ΠΆΠΈ, ΡΠ΅ ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ½ΠΎ UC Browser ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ ΠΏΡΠΈΠ½ΡΠ΄Π΅Π½ Π΄Π° ΠΈΠ·ΡΠ΅Π³Π»ΠΈ Π½Π΅ΡΠΎ ΠΈ Π±Π΅Π· Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Ρ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ β Π°ΠΊΠΎ ΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈ ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ ΡΠΎΡΠΌΡΠ»ΠΈΡΠ°Π½ ΠΎΡΠ³ΠΎΠ²ΠΎΡ Π½Π° Π·Π°ΡΠ²ΠΊΠ°ΡΠ°, ΠΊΠΎΡΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½ΡΠ²Π° ΡΠ»Π΅Π΄ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° Π±ΡΠ°ΡΠ·ΡΡΠ°. ΠΠΎ Π·Π° ΡΠΎΠ²Π° ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΡΠΎΡΡΠΈΠΌ ΠΏΠΎ-ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π° Π½Π° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΡΡΡ ΡΡΡΠ²ΡΡΠ°, Π·Π°ΡΠΎΠ²Π° ΡΠ΅ΡΠΈΡ ΠΌΠ΅, ΡΠ΅ Π΅ ΠΏΠΎ-Π»Π΅ΡΠ½ΠΎ Π΄Π° ΡΠ΅Π΄Π°ΠΊΡΠΈΡΠ°ΠΌΠ΅ ΠΏΡΠΈΡ Π²Π°Π½Π°ΡΠΈΡ ΠΎΡΠ³ΠΎΠ²ΠΎΡ ΠΈ Π΄Π° ΠΏΠΎΠ΄ΠΌΠ΅Π½ΠΈΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° Π·Π° ΡΠ°Π±ΠΎΡΠ° Ρ PDF.
Π ΡΠ°ΠΊΠ°, ΠΊΠΎΠ³Π°ΡΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΡ ΠΈΡΠΊΠ° Π΄Π° ΠΎΡΠ²ΠΎΡΠΈ PDF Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π² Π±ΡΠ°ΡΠ·ΡΡΠ°, Π² ΡΡΠ°ΡΠΈΠΊΠ° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π²ΠΈΠ΄ΡΡ ΡΠ»Π΅Π΄Π½ΠΈΡΠ΅ Π·Π°ΡΠ²ΠΊΠΈ:

ΠΡΡΠ²ΠΎ, ΡΠ»Π΅Π΄Π²Π° POST-Π·Π°ΡΠ²ΠΊΠ° ΠΊΡΠΌ , ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ
ΡΠ΅ ΠΈΠ·ΡΠ΅Π³Π»Ρ Π°ΡΡ
ΠΈΠ² Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° Π·Π° ΠΏΡΠ΅Π³Π»Π΅Π΄ Π½Π° PDF ΠΈ ΠΎΡΠΈΡ ΡΠΎΡΠΌΠ°ΡΠΈ. ΠΠΎΠ³ΠΈΡΠ½ΠΎ Π΅ Π΄Π° ΠΏΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΠ΅ Π² ΠΏΡΡΠ²Π°ΡΠ° Π·Π°ΡΠ²ΠΊΠ° ΡΠ΅ ΠΏΡΠ΅Π΄Π°Π²Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° ΡΠΈΡΡΠ΅ΠΌΠ°ΡΠ° (Π½Π°ΠΉ-ΠΌΠ°Π»ΠΊΠΎΡΠΎ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ°, Π·Π° Π΄Π° ΡΠ΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈ Π½ΡΠΆΠ½Π°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°), Π° Π² ΠΎΡΠ³ΠΎΠ²ΠΎΡ Π½Π° Π½Π΅Ρ Π±ΡΠ°ΡΠ·ΡΡΡΡ ΠΏΠΎΠ»ΡΡΠ°Π²Π° ΠΈΠ·Π²Π΅ΡΡΠ½Π° ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π·Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ°, ΠΊΠΎΡΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ ΠΈΠ·ΡΠ΅Π³Π»Π΅Π½Π°: Π°Π΄ΡΠ΅Ρ ΠΈ, Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π΅ΡΠΎ ΠΎΡΠ΅. ΠΡΠΎΠ±Π»Π΅ΠΌΡΡ Π΅, ΡΠ΅ ΡΠ°Π·ΠΈ Π·Π°ΡΠ²ΠΊΠ° Π΅ ΠΊΡΠΈΠΏΡΠΈΡΠ°Π½Π°.
Π€ΡΠ°Π³ΠΌΠ΅Π½Ρ ΠΎΡ Π·Π°ΡΠ²ΠΊΠ°ΡΠ°
Π€ΡΠ°Π³ΠΌΠ΅Π½Ρ ΠΎΡ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ°


Π‘Π°ΠΌΠ°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΅ ΠΎΠΏΠ°ΠΊΠΎΠ²Π°Π½Π° Π² ZIP ΠΈ Π½Π΅ Π΅ ΠΊΡΠΈΠΏΡΠΈΡΠ°Π½Π°.

Π’ΡΡΡΠ΅Π½Π΅ Π½Π° ΠΊΠΎΠ΄Π° Π·Π° Π΄Π΅ΠΊΡΠΈΠΏΡΠΈΡΠ°Π½Π΅ Π½Π° ΡΡΠ°ΡΠΈΠΊΠ°
ΠΠ΅ΠΊΠ° ΠΎΠΏΠΈΡΠ°ΠΌΠ΅ Π΄Π° Π΄Π΅ΠΊΡΠΈΠΏΡΠΈΡΠ°ΠΌΠ΅ ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ° Π½Π° ΡΡΡΠ²Π΅ΡΠ°. ΠΠ°Π±Π»ΡΠ΄Π°Π²Π°ΠΌΠ΅ ΠΊΠΎΠ΄Π° Π½Π° ΠΊΠ»Π°ΡΠ° com.uc.deployment.UpgradeDeployService: ΠΎΡ ΠΌΠ΅ΡΠΎΠ΄Π° onStartCommand ΠΏΡΠ΅Ρ Π²ΡΡΠ»ΡΠΌΠ΅ ΡΠ΅ Π² com.uc.deployment.b.x, Π° ΠΎΡ Π½Π΅Π³ΠΎ Π² com.uc.browser.core.d.c.f.e:
ΠΏΡΠ±Π»ΠΈΡΠ΅Π½ ΡΠΈΠ½Π°Π»Π΅Π½ 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("]ΠΏΡΠΎΠ΄ΡΠΊΡ:");
v4.append(arg9.iGX.ipR);
v4 = new StringBuilder("[");
v4.append(v3_1);
v4.append("]Π²Π΅ΡΡΠΈΡ:");
v4.append(arg9.iGX.iEn);
v4 = new StringBuilder("[");
v4.append(v3_1);
v4.append("]ΡΠΈΠΏ_Π½Π°Π΄ΡΡΡΠΎΠΉΠΊΠ°:");
v4.append(arg9.iGX.mMode);
v4 = new StringBuilder("[");
v4.append(v3_1);
v4.append("]ΡΠ»Π°Π³_ΡΠΈΠ»Π°:");
v4.append(arg9.iGX.iEo);
v4 = new StringBuilder("[");
v4.append(v3_1);
v4.append("]ΡΠΈΡ
Π°_ΡΠ΅ΠΆΠΈΠΌ:");
v4.append(arg9.iGX.iDQ);
v4 = new StringBuilder("[");
v4.append(v3_1);
v4.append("]ΡΠΈΡ
_ΡΠΈΠΏ:");
v4.append(arg9.iGX.iEr);
v4 = new StringBuilder("[");
v4.append(v3_1);
v4.append("]ΡΠΈΡ
_ΡΡΡΡΠΎΡΠ½ΠΈΠ΅:");
v4.append(arg9.iGX.iEp);
v4 = new StringBuilder("[");
v4.append(v3_1);
v4.append("]ΡΠΈΡ
_ΡΠ°ΠΉΠ»:");
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("]ΡΠΈΠΏ_ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅:");
v4.append(arg9.mDownloadType);
v4 = new StringBuilder("[");
v4.append(v3_1);
v4.append("]Π³ΡΡΠΏΠ°_ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅:");
v4.append(arg9.mDownloadGroup);
v4 = new StringBuilder("[");
v4.append(v3_1);
v4.append("]ΠΏΡΡ_ΠΈΠ·ΡΠ΅Π³Π»ΡΠ½Π΅:");
v4.append(arg9.iGH);
v4 = new StringBuilder("[");
v4.append(v3_1);
v4.append("]Π²Π΅ΡΡΠΈΡ_Π°ΠΏΠΎΠ»ΠΎ_Π΄Π΅ΡΠ΅:");
v4.append(arg9.iGX.iEx);
v4 = new StringBuilder("[");
v4.append(v3_1);
v4.append("]ΡΠ΅ΡΠΈΡ_Π°ΠΏΠΎΠ»ΠΎ:");
v4.append(arg9.iGX.iEw);
v4 = new StringBuilder("[");
v4.append(v3_1);
v4.append("]Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ°_cpu_Π°ΠΏΠΎΠ»ΠΎ:");
v4.append(arg9.iGX.iEt);
v4 = new StringBuilder("[");
v4.append(v3_1);
v4.append("]vfp3_cpu_Π°ΠΏΠΎΠ»ΠΎ:");
v4.append(arg9.iGX.iEv);
v4 = new StringBuilder("[");
v4.append(v3_1);
v4.append("]vfp_cpu_Π°ΠΏΠΎΠ»ΠΎ:");
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("]ΠΈΠΌΠ΅_ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ:");
v5.append(((au)v4_1).getName());
v5 = new StringBuilder("[");
v5.append(((au)v4_1).getName());
v5.append("]ΠΈΠΌΠ΅_Π²Π΅ΡΡΠΈΡ_ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ:");
v5.append(((au)v4_1).aDA());
v5 = new StringBuilder("[");
v5.append(((au)v4_1).getName());
v5.append("]ΠΊΠΎΠ΄_Π²Π΅ΡΡΠΈΡ_ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ:");
v5.append(((au)v4_1).gBl);
v5 = new StringBuilder("[");
v5.append(((au)v4_1).getName());
v5.append("]ΡΠΈΠΏ_Π·Π°ΡΠ²ΠΊΠ°_ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ:");
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("ver_os", c.getRomInfo()));
v3_2.add(g.fs("Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ°_ΠΏΡΠΎΡΠ΅ΡΠΎΡ", com.uc.b.a.a.c.getCpuArch()));
v3_2.add(g.fs("Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ°_cpu", com.uc.b.a.a.c.Pb()));
String v4_3 = com.uc.b.a.a.c.Pd();
v3_2.add(g.fs("vfp_cpu", v4_3));
v3_2.add(g.fs("ΡΠΈΠΏ_ΠΌΡΠ΅ΠΆΠ°", String.valueOf(com.uc.base.system.a.Jo())));
v3_2.add(g.fs("ΠΎΡΡ
ΠΎΡΡ", arg9.iGX.iEm));
v3_2.add(g.fs("Π²Π΅ΡΡΠΈΡ_ΠΏΠ»Π°Π³ΠΈΠ½", arg9.iGX.iEn));
v3_2.add(g.fs("ΡΠ΅Π»Π΅Π²ΠΈ_Π΅Π·ΠΈΠΊ", arg9.iGX.iEs));
v3_2.add(g.fs("Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ°_cpu_vitamio", arg9.iGX.iEt));
v3_2.add(g.fs("vfp_vitamio", arg9.iGX.iEu));
v3_2.add(g.fs("vfp3_vitamio", arg9.iGX.iEv));
v3_2.add(g.fs("Π²Π΅ΡΡΠΈΡ_Π΄Π΅ΡΠ΅_ΠΏΠ»Π°Π³ΠΈΠ½", arg9.iGX.iEx));
v3_2.add(g.fs("ΡΠ΅ΡΠΈΡ_Π²Π΅ΡΡΠΈΡ", arg9.iGX.iEw));
v3_2.add(g.fs("Π΄Π΅ΡΠ΅_Π²Π΅ΡΡΠΈΡ", r.aVw()));
v3_2.add(g.fs("md5_cur_Π²Π΅ΡΡΠΈΡ", arg9.iGX.iEl));
v3_2.add(g.fs("ΠΏΠΎΠ΄ΠΏΠΈΡ_cur_Π²Π΅ΡΡΠΈΡ", SystemHelper.getUCMSignature()));
v3_2.add(g.fs("Π»ΠΎΠ³_Π½Π°Π΄ΡΡΡΠΎΠΉΠΊΠ°", i.bjt()));
v3_2.add(g.fs("ΡΠΈΡΠΈΠ½Π°_ΠΈΠ½ΡΡΠ°Π»Π°ΡΠΈΡ", String.valueOf(arg9.iGX.iDQ)));
v3_2.add(g.fs("ΡΠΈΡ
ΠΎ_ΡΡΡΡΠΎΡΠ½ΠΈΠ΅", String.valueOf(arg9.iGX.iEp)));
v3_2.add(g.fs("ΡΠΈΡ
_ΡΠ°ΠΉΠ»", arg9.iGX.iEq));
v3_2.add(g.fs("ΡΠΈΡ
_ΡΠΈΠΏ", String.valueOf(arg9.iGX.iEr)));
v3_2.add(g.fs("Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ°_cpu", com.uc.b.a.a.c.Pc()));
v3_2.add(g.fs("Π½Π°ΡΡΡΠΎΠΉΠΊΠ°_cpu", SystemHelper.getCpuInstruction()));
boolean v4_4 = v4_3 == null || !v4_3.contains("neon") ? false : true;
v3_2.add(g.fs("Π½Π΅ΠΎΠ½", String.valueOf(v4_4)));
v3_2.add(g.fs("ΡΠ΄ΡΠ°_cpu", 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("ΠΎΠ±ΡΠΎ_ram", 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("ΡΠ°Π·Π΄Π΅Π»Π΅Π½ΠΈΠ΅_Π΅ΠΊΡΠ°Π½", v7.toString()));
v3_2.add(g.fs("Π½ΠΈΠ²ΠΎ_api", String.valueOf(Build$VERSION.SDK_INT)));
v3_2.add(g.fs("ΡΠΏΠΈΡΡΠΊ_uc_apk", 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", "Π΄Π°", "Π½Π΅ΡΡΠΏΠ΅Ρ
");
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", "Π΄Π°", "Π½Π΅ΡΡΠΏΠ΅Ρ
");
return;
}
if(TextUtils.isEmpty(this.iGY.mUpgradeUrl)) {
this.iGY.iGI.a(arg9, "up_url", "Π΄Π°", "Π½Π΅ΡΡΠΏΠ΅Ρ
");
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", "Π΄Π°", "ΡΡΠΏΠ΅Ρ
");
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β), ΡΡΠΊ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΠΈΠ·Π²ΠΈΠΊΠ° ΠΌΠ΅ΡΠΎΠ΄, ΠΊΠΎΠΉΡΠΎ Π΄Π΅ΠΊΡΠΈΠΏΡΠΈΡΠ° ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ° ΠΎΡ ΡΡΡΠ²ΡΡΠ°.
ΠΡΠ΅ΠΌΠΈΠ½Π°Π²Π°ΠΌΠ΅ ΠΊΡΠΌ ΠΌΠ΅ΡΠΎΠ΄Π° g.j. ΠΠ°Π±Π΅Π»Π΅ΠΆΠ΅ΡΠ΅, ΡΠ΅ ΠΊΠ°ΡΠΎ ΠΏΡΡΠ²ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½Ρ Π² Π½Π΅Π³ΠΎ ΡΠ΅ ΠΏΠΎΠ΄Π°Π²Π° Π±Π°ΠΉΡ ΠΎΡ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, Π° .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 0) {
return this.b(magicInt, keyId, encrypted, magicString);
}
throw new SecException("", 301);
}
//...
} Π’ΡΠΊ Π½Π°ΡΠΈΡΡ ΡΠΏΠΈΡΡΠΊ Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ ΡΠ΅ Π΄ΠΎΠΏΡΠ»Π²Π° Ρ ΠΎΡΠ΅ Π΄Π²Π΅ ΡΠ΅Π»ΠΈ ΡΠΈΡΠ»Π°: 2 ΠΈ 0. Π‘ΡΠ΄Π΅ΠΉΠΊΠΈ ΠΏΠΎ
Π²ΡΠΈΡΠΊΠΎ, 2 ΠΎΠ·Π½Π°ΡΠ°Π²Π° Π΄Π΅ΠΊΡΠΈΠΏΡΠΈΡΠ°Π½Π΅, ΠΊΠ°ΠΊΡΠΎ Π² ΠΌΠ΅ΡΠΎΠ΄Π° doFinal Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈΡ ΠΊΠ»Π°Ρ javax.crypto.Cipher. Π Π²ΡΠΈΡΠΊΠΎ ΡΠΎΠ²Π° ΡΠ΅ ΠΏΡΠ΅Π΄Π°Π²Π° Π½Π° Π½ΡΠΊΠ°ΠΊΡΠ² Router Ρ ΡΠΈΡΠ»ΠΎΡΠΎ 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 ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ ΠΊΡΠΏ Π΄ΠΈΠ°Π»ΠΎΠ³ΠΎΠ²ΠΈ ΠΏΡΠΎΠ·ΠΎΡΡΠΈ Ρ Π³ΡΠ΅ΡΠΊΠΈ. ΠΡΠΎΠ±Π»Π΅ΠΌΡΡ Π΅, ΡΠ΅ ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° Π½Π° ΡΠ΅ΠΊΡΠΈΠΈ (section header table) β Π΅ Π½Π΅Π²Π°Π»ΠΈΠ΄Π½Π°. Π’ΠΎΠ²Π° Π΅ Π½Π°ΠΏΡΠ°Π²Π΅Π½ΠΎ ΡΠΌΠΈΡΠ»Π΅Π½ΠΎ, Π·Π° Π΄Π° ΡΠ΅ ΡΡΠ»ΠΎΠΆΠ½ΠΈ Π°Π½Π°Π»ΠΈΠ·ΡΡ.

ΠΠΎ ΡΡ ΠΈ Π½Π΅ Π΅ Π½ΡΠΆΠ½Π°: Π·Π° Π΄Π° Π·Π°ΡΠ΅Π΄ΠΈΠΌ ELF ΡΠ°ΠΉΠ»Π° ΠΊΠΎΡΠ΅ΠΊΡΠ½ΠΎ ΠΈ Π΄Π° Π³ΠΎ Π°Π½Π°Π»ΠΈΠ·ΠΈΡΠ°ΠΌΠ΅, Π΅ Π½Π°ΠΏΡΠ»Π½ΠΎ Π΄ΠΎΡΡΠ°ΡΡΡΠ½Π° ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° Π½Π° ΡΠ΅Π³ΠΌΠ΅Π½ΡΠΈΡΠ΅ (program header table). ΠΠ°ΡΠΎΠ²Π° ΠΏΡΠΎΡΡΠΎ ΠΏΡΠ΅ΠΌΠ°Ρ
Π²Π°ΠΌΠ΅ ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° Π½Π° ΡΠ΅ΠΊΡΠΈΠΈΡΠ΅, Π½ΡΠ»ΠΈΡΠ°ΠΉΠΊΠΈ ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡΠ΅ ΠΏΠΎΠ»Π΅ΡΠ° Π² Π·Π°Π³Π»Π°Π²ΠΊΠ°ΡΠ°.

ΠΡΠ½ΠΎΠ²ΠΎ ΠΎΡΠ²Π°ΡΡΠΌΠ΅ ΡΠ°ΠΉΠ»Π° Π² IDA.
ΠΠΌΠ° Π΄Π²Π° Π½Π°ΡΠΈΠ½Π° Π΄Π° ΡΡΠΎΠ±ΡΠΈΠΌ Π½Π° Π²ΠΈΡΡΡΠ°Π»Π½Π°ΡΠ° Java ΠΌΠ°ΡΠΈΠ½Π°, ΠΊΡΠ΄Π΅ ΡΠΎΡΠ½ΠΎ Π² Π½Π°ΡΠΈΠ²Π½Π°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠ΅ Π½Π°ΠΌΠΈΡΠ° ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡΡΠ° Π½Π° ΠΌΠ΅ΡΠΎΠ΄Π°, ΠΎΠ±ΡΠ²Π΅Π½ Π² Java ΠΊΠΎΠ΄Π° ΠΊΠ°ΡΠΎ Π½Π°ΡΠΈΠ²Π΅Π½. ΠΡΡΠ²ΠΈΡΡ β Π΄Π° ΠΌΡ Π΄Π°Π΄Π΅ΠΌ ΠΈΠΌΠ΅ ΠΎΡ Π²ΠΈΠ΄Π° Java_ΠΈΠΌΡ_ΠΏΠ°ΠΊΠ΅ΡΠ°_ΠΠΌΡΠΠ»Π°ΡΡΠ°_ΠΈΠΌΡΠΠ΅ΡΠΎΠ΄Π°.
ΠΡΠΎΡΠΈΡΡ β Π΄Π° Π³ΠΎ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ°ΠΌΠ΅ ΠΏΡΠΈ Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½Π΅ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° (Π² ΡΡΠ½ΠΊΡΠΈΡΡΠ° JNI_OnLoad)
Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ° RegisterNatives.
Π Π½Π°ΡΠΈΡ ΡΠ»ΡΡΠ°ΠΉ, Π°ΠΊΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΏΡΡΠ²ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄, ΠΈΠΌΠ΅ΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° Π±ΡΠ΄Π΅ ΡΠ°ΠΊΠΎΠ²Π°: Java_com_taobao_wireless_security_adapter_JNICLibrary_doCommandNative.
ΠΠ΅ΠΆΠ΄Ρ Π΅ΠΊΡΠΏΠΎΡΡΠΈΡΠ°Π½ΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ°ΠΊΠ°Π²Π° Π½ΡΠΌΠ°, ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»Π½ΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΡΡΡΠΈΠΌ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ΡΠΎ RegisterNatives.
ΠΡΠΈΠ²Π°ΠΌΠ΅ Π² ΡΡΠ½ΠΊΡΠΈΡΡΠ° JNI_OnLoad ΠΈ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ ΡΠ°ΠΊΠ°Π²Π° ΠΊΠ°ΡΡΠΈΠ½Π°:

ΠΠ°ΠΊΠ²ΠΎ ΡΠ΅ ΡΠ»ΡΡΠ²Π° ΡΡΠΊ? ΠΠ° ΠΏΡΡΠ² ΠΏΠΎΠ³Π»Π΅Π΄, Π½Π°ΡΠ°Π»ΠΎΡΠΎ ΠΈ ΠΊΡΠ°ΡΡ Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ° ΡΠ° ΡΠΈΠΏΠΈΡΠ½ΠΈ Π·Π° Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ°ΡΠ° ARM. ΠΡΡΠ²Π°ΡΠ° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ Π² ΡΡΠ΅ΠΊΠ° Π·Π°ΠΏΠ°Π·Π²Π° ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΡΡΠ½ΠΊΡΠΈΡΡΠ° ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π² ΡΠ°Π±ΠΎΡΠ°ΡΠ° ΡΠΈ (Π² ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ R0, R1 ΠΈ R2), ΠΊΠ°ΠΊΡΠΎ ΠΈ ΡΡΠ΄ΡΡΠΆΠ°Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠ΅Π³ΠΈΡΡΡΠ° LR, Π² ΠΊΠΎΠΉΡΠΎ ΡΠ΅ Π½Π°ΠΌΠΈΡΠ° Π°Π΄ΡΠ΅ΡΡΡ Π·Π° Π²ΡΡΡΠ°Π½Π΅ ΠΎΡ ΡΡΠ½ΠΊΡΠΈΡΡΠ°. ΠΠΎΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ Π²ΡΠ·ΡΡΠ°Π½ΠΎΠ²ΡΠ²Π° Π·Π°ΠΏΠ°Π·Π΅Π½ΠΈΡΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΈ, ΠΊΠ°ΡΠΎ Π°Π΄ΡΠ΅ΡΡΡ Π·Π° Π²ΡΡΡΠ°Π½Π΅ Π²Π΅Π΄Π½Π°Π³Π° ΡΠ΅ ΠΏΠΎΡΡΠ°Π²Ρ Π² ΡΠ΅Π³ΠΈΡΡΡΡ PC β ΠΏΠΎ ΡΠΎΠ·ΠΈ Π½Π°ΡΠΈΠ½ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° Π²ΡΡΡΠ°Π½Π΅ΡΠΎ ΠΎΡ ΡΡΠ½ΠΊΡΠΈΡΡΠ°. ΠΠΎ Π°ΠΊΠΎ ΡΠ΅ Π²Π³Π»Π΅Π΄Π°ΠΌΠ΅ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»Π½ΠΎ, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΠΌ, ΡΠ΅ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ ΠΏΡΠΎΠΌΠ΅Π½Ρ Π°Π΄ΡΠ΅ΡΠ° Π·Π° Π²ΡΡΡΠ°Π½Π΅, Π·Π°ΠΏΠ°Π·Π΅Π½ Π² ΡΡΠ΅ΠΊΠ°. ΠΠ° ΠΈΠ·ΡΠΈΡΠ»ΠΈΠΌ ΠΊΠ°ΠΊΡΠ² ΡΠ΅ Π±ΡΠ΄Π΅ ΡΠΎΠΉ ΡΠ»Π΅Π΄
ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΊΠΎΠ΄Π°. Π R1 ΡΠ΅ Π·Π°ΡΠ΅ΠΆΠ΄Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ Π°Π΄ΡΠ΅Ρ 0xB130, ΠΎΡ Π½Π΅Π³ΠΎ ΡΠ΅ ΠΈΠ·Π²Π°ΠΆΠ΄Π° 5, ΡΠ»Π΅Π΄ ΡΠΎΠ²Π° ΡΠ΅ ΠΏΡΠ΅Ρ
Π²ΡΡΠ»Ρ Π² R0 ΠΈ ΠΌΡ ΡΠ΅ ΠΏΡΠΈΠ±Π°Π²Ρ 0x10. ΠΠΎΠ»ΡΡΠ°Π²Π° ΡΠ΅ 0xB13B. ΠΠΎ ΡΠΎΠ·ΠΈ Π½Π°ΡΠΈΠ½ IDA ΠΌΠΈΡΠ»ΠΈ, ΡΠ΅ Π² ΠΏΠΎΡΠ»Π΅Π΄Π½Π°ΡΠ° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΡ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° ΠΎΠ±ΠΈΡΠ°ΠΉΠ½ΠΎ Π²ΡΡΡΠ°Π½Π΅ ΠΎΡ ΡΡΠ½ΠΊΡΠΈΡΡΠ°, Π° Π²ΡΡΡΠ½ΠΎΡΡ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° ΠΏΡΠ΅Ρ
Π²ΡΡΠ»ΡΠ½Π΅ ΠΏΠΎ ΠΈΠ·ΡΠΈΡΠ»Π΅Π½ΠΈΡ Π°Π΄ΡΠ΅Ρ 0xB13B.
Π’ΡΠΊ Π΅ Π΄ΠΎΠ±ΡΠ΅ Π΄Π° ΠΏΡΠΈΠΏΠΎΠΌΠ½ΠΈΠΌ, ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠΎΡΠΈΡΠ΅ ARM ΠΈΠΌΠ°Ρ Π΄Π²Π° ΡΠ΅ΠΆΠΈΠΌΠ° ΠΈ Π΄Π²Π° Π½Π°Π±ΠΎΡΠ° ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ: ARM ΠΈ Thumb. ΠΠ°ΠΉ-Π½ΠΈΡΡΠΊ Π±ΠΈΡ Π½Π° Π°Π΄ΡΠ΅ΡΠ° ΠΊΠ°Π·Π²Π° Π½Π° ΠΏΡΠΎΡΠ΅ΡΠΎΡΠ° ΠΊΠΎΠΉ Π½Π°Π±ΠΎΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°. Π’.Π΅. Π°Π΄ΡΠ΅ΡΡΡ Π²ΡΡΡΠ½ΠΎΡΡ Π΅ 0xB13A, Π° Π΅Π΄ΠΈΠ½ΠΈΡΠ°ΡΠ° Π² Π½Π°ΠΉ-Π½ΠΈΡΠΊΠΈΡ Π±ΠΈΡ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠ°Π²Π° ΡΠ΅ΠΆΠΈΠΌ Thumb.
Π Π½Π°ΡΠ°Π»ΠΎΡΠΎ Π½Π° Π²ΡΡΠΊΠ° ΡΡΠ½ΠΊΡΠΈΡ Π² ΡΠ°Π·ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΅ Π΄ΠΎΠ±Π°Π²Π΅Π½ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ "Π°Π΄Π°ΠΏΡΠ΅Ρ" ΠΈ
Π±ΠΎΠΊΠ»ΡΠΊ ΠΊΠΎΠ΄. ΠΠΎ-Π½Π°ΡΠ°ΡΡΠΊ Π½ΡΠΌΠ° Π΄Π° ΡΠ΅ ΡΠΏΠΈΡΠ°ΠΌΠ΅ ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΠΎ Π½Π° ΡΡΡ
β ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠΌΠ½ΠΈΠΌ,
ΡΠ΅ ΠΈΡΡΠΈΠ½ΡΠΊΠΎΡΠΎ Π½Π°ΡΠ°Π»ΠΎ ΠΏΠΎΡΡΠΈ Π½Π° Π²ΡΠΈΡΠΊΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΡΠ΅ Π½Π°ΠΌΠΈΡΠ° ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-Π΄Π°Π»Π΅Ρ.
Π’ΡΠΉ ΠΊΠ°ΡΠΎ Π² ΠΊΠΎΠ΄Π° Π½ΡΠΌΠ° ΡΠ²Π΅Π½ ΠΏΡΠ΅Ρ ΠΎΠ΄ Π½Π° 0xB13A, IDA ΡΠ°ΠΌΠ° Π½Π΅ Π΅ ΡΠ°Π·ΠΏΠΎΠ·Π½Π°Π»Π°, ΡΠ΅ Π² ΡΠΎΠ²Π° ΠΌΡΡΡΠΎ ΠΈΠΌΠ° ΠΊΠΎΠ΄. ΠΠΎ ΡΡΡΠ°ΡΠ° ΠΏΡΠΈΡΠΈΠ½Π° Π³ΠΎΠ»ΡΠΌΠ° ΡΠ°ΡΡ ΠΎΡ ΠΊΠΎΠ΄Π° Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° ΡΡ Π½Π΅ ΡΠ°Π·ΠΏΠΎΠ·Π½Π°Π²Π° ΠΊΠ°ΡΠΎ ΠΊΠΎΠ΄, ΠΊΠΎΠ΅ΡΠΎ Π·Π°ΡΡΡΠ΄Π½ΡΠ²Π° Π°Π½Π°Π»ΠΈΠ·Π°. ΠΠ°ΠΆΠ΅ΡΠ΅ Π½Π° IDA, ΡΠ΅ ΡΡΠΊ ΠΈΠΌΠ° ΠΊΠΎΠ΄, ΠΈ Π΅ΡΠΎ ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π²Π°:

ΠΠ° 0xB144 ΡΠ²Π½ΠΎ Π·Π°ΠΏΠΎΡΠ²Π° ΡΠ°Π±Π»ΠΈΡΠ°. Π ΠΊΠ°ΠΊΠ²ΠΎ ΠΈΠΌΠ° Π² sub_494C?

ΠΡΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° ΡΠ°Π·ΠΈ ΡΡΠ½ΠΊΡΠΈΡ Π² ΡΠ΅Π³ΠΈΡΡΡΠ° LR ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ Π°Π΄ΡΠ΅ΡΠ° Π½Π° ΡΠΏΠΎΠΌΠ΅Π½Π°ΡΠ°ΡΠ° ΠΏΠΎ-ΡΠ°Π½ΠΎ ΡΠ°Π±Π»ΠΈΡΠ° (0xB144). Π R0 β ΠΈΠ½Π΄Π΅ΠΊΡ Π² ΡΠ°Π·ΠΈ ΡΠ°Π±Π»ΠΈΡΠ°. Π’.Π΅. Π²Π·ΠΈΠΌΠ° ΡΠ΅ ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° ΠΎΡ ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ°, ΠΏΡΠΈΠ±Π°Π²Ρ ΡΠ΅ ΠΊΡΠΌ LR ΠΈ ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π²Π°
Π°Π΄ΡΠ΅ΡΡΡ, Π½Π° ΠΊΠΎΠΉΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΠΎΡΠΈΠ΄Π΅ΠΌ. Π©Π΅ ΠΏΡΠΎΠ±Π²Π°ΠΌΠ΅ Π΄Π° Π³ΠΎ ΠΈΠ·ΡΠΈΡΠ»ΠΈΠΌ: 0xB144 + [0xB144 + 8 * 4] = 0xB144 + 0x120 = 0xB264. ΠΡΠ΅ΠΌΠΈΠ½Π°Π²Π°ΠΌΠ΅ ΠΏΠΎ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π°Π΄ΡΠ΅Ρ ΠΈ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ Π±ΡΠΊΠ²Π°Π»Π½ΠΎ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΈ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ ΠΈ ΠΎΡΠ½ΠΎΠ²ΠΎ ΠΏΡΠ΅Ρ
ΠΎΠ΄ Π½Π° 0xB140:

Π‘Π΅Π³Π° ΡΠ΅ ΠΈΠΌΠ° ΠΏΡΠ΅Ρ
ΠΎΠ΄ ΠΏΠΎ ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ Ρ ΠΈΠ½Π΄Π΅ΠΊΡ 0x20 ΠΎΡ ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ°.
Π‘ΡΠ΄Ρ ΠΏΠΎ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ°, ΡΠ°ΠΊΠΈΠ²Π° ΠΏΡΠ΅Ρ ΠΎΠ΄ΠΈ Π² ΠΊΠΎΠ΄Π° ΡΠ΅ ΡΠ΅ ΡΡΠ΅ΡΠ½Π°Ρ ΠΌΠ½ΠΎΠ³ΠΎ. ΠΡΠ·Π½ΠΈΠΊΠ²Π° Π²ΡΠΏΡΠΎΡΡΡ, ΠΌΠΎΠΆΠ΅ Π»ΠΈ Π΄Π° ΡΠ΅ ΡΠΏΡΠ°Π²ΠΈΠΌ Ρ ΡΠΎΠ²Π° ΠΏΠΎ-Π°Π²ΡΠΎΠΌΠ°ΡΠΈΠ·ΠΈΡΠ°Π½ΠΎ, Π±Π΅Π· ΡΡΡΠ½ΠΎ ΠΈΠ·ΡΠΈΡΠ»ΡΠ²Π°Π½Π΅ Π½Π° Π°Π΄ΡΠ΅ΡΠΈ. Π Π½Π° ΠΏΠΎΠΌΠΎΡ ΠΈΠ΄Π²Π°Ρ ΡΠΊΡΠΈΠΏΡΠΎΠ²Π΅ΡΠ΅ ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π΄Π° ΠΏΠ°ΡΡΠ²Π°ΠΌΠ΅ ΠΊΠΎΠ΄Π° Π² IDA:
def put_unconditional_branch(source, destination):
offset = (destination - source - 4) >> 1
if offset > 2097151 or offset 1023 or 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 "ΠΈΠ½Π΄Π΅ΠΊΡ =", 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 "ΠΡΠ΅ΡΠ΅Π½ ΡΠΈΠΏ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ Π½Π°", hex(ea1), "-", get_operand_type(ea1, 0), get_operand_type(ea1, 1)
table = None
if table is None:
print "ΠΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π½Π°ΠΌΠ΅ΡΠΈ ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ°"
else:
print "ΡΠ°Π±Π»ΠΈΡΠ° =", hex(table)
offset = get_wide_dword(table + (index << 2))
put_unconditional_branch(ea, table + offset)
else:
print "ΠΠ΅ΠΈΠ·Π²Π΅ΡΡΠ΅Π½ ΠΊΠΎΠ΄", get_operand_type(ea1, 0), get_operand_value(ea1, 0), get_operand_type(ea1, 1) == 2
else:
print "ΠΠ΅ ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΎΡΠΊΡΠΈΠ΅ ΠΏΡΡΠ²Π°ΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Π°"Π‘Π»Π°Π³Π°ΠΌΠ΅ ΠΊΡΡΡΠΎΡΠ° Π½Π° ΡΠ΅Π΄ 0xB26A, ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΡΠΊΡΠΈΠΏΡΠ° ΠΈ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ ΠΏΡΠ΅Ρ ΠΎΠ΄ Π½Π° 0xB4B0:

IDA ΠΎΡΠ½ΠΎΠ²ΠΎ Π½Π΅ ΡΠ°Π·ΠΏΠΎΠ·Π½Π°Π²Π° ΡΠΎΠ·ΠΈ ΡΡΠ°ΡΡΡΠΊ ΠΊΠ°ΡΠΎ ΠΊΠΎΠ΄. ΠΠΎΠΌΠ°Π³Π°ΠΌΠ΅ ΠΉ ΠΈ Π²ΠΈΠΆΠ΄Π°ΠΌΠ΅ Π΄ΡΡΠ³Π° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ:

ΠΠ½ΡΡΡΡΠΊΡΠΈΠΈΡΠ΅ ΡΠ»Π΅Π΄ BLX ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°Ρ Π½Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΌΠΈΡΠ»Π΅Π½ΠΈ, ΡΠΎΠ²Π° ΠΏΠΎ-ΡΠΊΠΎΡΠΎ ΠΏΡΠΈΠ»ΠΈΡΠ° Π½Π° Π½ΡΠΊΠ°ΠΊΠ²ΠΎ ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅. ΠΠ΅ΠΊΠ° Π΄Π° ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌ Π² sub_4964:

Π Π½Π°ΠΈΡΡΠΈΠ½Π°, ΡΡΠΊ ΡΠ΅ Π²Π·Π΅ΠΌΠ° dword ΠΎΡ Π°Π΄ΡΠ΅ΡΠ°, Π»Π΅ΠΆΠ°Ρ Π² LR, Π΄ΠΎΠ±Π°Π²Ρ ΡΠ΅ ΠΊΡΠΌ ΡΠΎΠ·ΠΈ Π°Π΄ΡΠ΅Ρ, ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ ΡΠ΅ Π²Π·ΠΈΠΌΠ° ΡΡΠΎΠΉΠ½ΠΎΡΡΡΠ° ΠΎΡ ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡ Π°Π΄ΡΠ΅Ρ ΠΈ ΡΠ΅ ΠΏΠΎΡΡΠ°Π²Ρ Π² ΡΡΠ΅ΠΊΠ°. Π‘ΡΡΠΎ ΡΠ°ΠΊΠ° ΠΊΡΠΌ LR ΡΠ΅ Π΄ΠΎΠ±Π°Π²Ρ 4, Π·Π° Π΄Π° ΠΏΡΠ΅ΡΠΊΠΎΡΠΈ ΡΠΎΠ²Π° ΠΎΡΠΊΠ»ΠΎΠ½Π΅Π½ΠΈΠ΅ ΡΠ»Π΅Π΄ Π²ΡΡΡΠ°Π½Π΅ΡΠΎ ΠΎΡ ΡΡΠ½ΠΊΡΠΈΡΡΠ°. Π‘Π»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° POP {R1} ΠΈΠ·Π²Π»ΠΈΡΠ° ΠΏΠΎΠ»ΡΡΠ΅Π½Π°ΡΠ° ΡΡΠΎΠΉΠ½ΠΎΡΡ ΠΎΡ ΡΡΠ΅ΠΊΠ°. ΠΠΊΠΎ ΠΏΠΎΠ³Π»Π΅Π΄Π½Π΅ΠΌ ΠΊΠ°ΠΊΠ²ΠΎ ΡΠ΅ Π½Π°ΠΌΠΈΡΠ° Π½Π° Π°Π΄ΡΠ΅Ρ 0xB4BA + 0xEA = 0xB5A4, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ Π½Π΅ΡΠΎ, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° ΡΠ°Π±Π»ΠΈΡΠ° ΠΎΡ Π°Π΄ΡΠ΅ΡΠΈ:

ΠΠ° Π΄Π° ΠΏΠ°ΡΡΠ½Π΅ΡΠ΅ ΡΠ°Π·ΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ, ΡΠ΅ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΡΠ΅ Π΄Π²Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡΠ° ΠΎΡ ΠΊΠΎΠ΄Π°: ΠΎΡΡΠ΅Ρ ΠΈ Π½ΠΎΠΌΠ΅Ρ Π½Π° ΡΠ΅Π³ΠΈΡΡΡΠ°, Π² ΠΊΠΎΠΉΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΠΏΠΎΡΡΠ°Π²ΠΈΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ°. ΠΠ° Π²ΡΠ΅ΠΊΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ΅Π½ ΡΠ΅Π³ΠΈΡΡΡΡ ΡΠ΅ ΡΡΡΠ±Π²Π° ΠΏΡΠ΅Π΄Π²Π°ΡΠΈΡΠ΅Π»Π½ΠΎ Π΄Π° ΠΏΠΎΠ΄Π³ΠΎΡΠ²ΠΈΡΠ΅ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠ°ΡΡΠ΅ ΠΊΠΎΠ΄.
patches = {}
patches[0] = (0x00, 0xbf, 0x01, 0x48, 0x00, 0x68, 0x02, 0xe0)
patches[1] = (0x00, 0xbf, 0x01, 0x49, 0x09, 0x68, 0x02, 0xe0)
patches[2] = (0x00, 0xbf, 0x01, 0x4a, 0x12, 0x68, 0x02, 0xe0)
patches[3] = (0x00, 0xbf, 0x01, 0x4b, 0x1b, 0x68, 0x02, 0xe0)
patches[4] = (0x00, 0xbf, 0x01, 0x4c, 0x24, 0x68, 0x02, 0xe0)
patches[5] = (0x00, 0xbf, 0x01, 0x4d, 0x2d, 0x68, 0x02, 0xe0)
patches[8] = (0x00, 0xbf, 0xdf, 0xf8, 0x06, 0x80, 0xd8, 0xf8, 0x00, 0x80, 0x01, 0xe0)
patches[9] = (0x00, 0xbf, 0xdf, 0xf8, 0x06, 0x90, 0xd9, 0xf8, 0x00, 0x90, 0x01, 0xe0)
patches[10] = (0x00, 0xbf, 0xdf, 0xf8, 0x06, 0xa0, 0xda, 0xf8, 0x00, 0xa0, 0x01, 0xe0)
patches[11] = (0x00, 0xbf, 0xdf, 0xf8, 0x06, 0xb0, 0xdb, 0xf8, 0x00, 0xb0, 0x01, 0xe0)
ea = here()
if (get_wide_word(ea) == 0xb082 #SUB SP, SP, #8
and get_wide_word(ea + 2) == 0xb503): #PUSH {R0,R1,LR}
if get_operand_type(ea + 4, 0) == 7:
pop = get_bytes(ea + 12, 4, 0)
if pop[1] == 'xbc':
register = -1
r = get_wide_byte(ea + 12)
for i in range(8):
if r == (1 <> 4
if register in patches:
address = get_wide_dword(ea + 8) + ea + 8
for b in patches[register]:
patch_byte(ea, b)
ea += 1
patch_dword(ea, address)
else:
print "POP instruction not found"
else:
print "Wrong operand type on +4:", get_operand_type(ea + 4, 0)
else:
print "Unable to detect first instructions"ΠΠΎΡΡΠ°Π²ΡΠΌΠ΅ ΠΊΡΡΡΠΎΡΠ° Π² Π½Π°ΡΠ°Π»ΠΎΡΠΎ Π½Π° ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡΡΠ°, ΠΊΠΎΡΡΠΎ ΠΈΡΠΊΠ°ΠΌΠ΅ Π΄Π° Π·Π°ΠΌΠ΅Π½ΠΈΠΌ β 0xB4B2 β ΠΈ ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ ΡΠΊΡΠΈΠΏΡΠ°:

ΠΡΠ²Π΅Π½ Π²Π΅ΡΠ΅ ΡΠΏΠΎΠΌΠ΅Π½Π°ΡΠΈΡΠ΅ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΠΈ, Π² ΠΊΠΎΠ΄Π° ΡΡΡΠΎ ΡΠ΅ ΡΡΠ΅ΡΠ°Ρ ΠΈ ΡΠ°ΠΊΠΈΠ²Π°:

ΠΠ°ΠΊΡΠΎ ΠΈ Π² ΠΏΡΠ΅Π΄ΠΈΡΠ½ΠΈΡ ΡΠ»ΡΡΠ°ΠΉ, ΡΠ»Π΅Π΄ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈΡΠ΅ BLX ΡΠ»Π΅Π΄Π²Π° ΠΎΡΡΠ΅Ρ:

ΠΠ·Π΅ΠΌΠ°ΠΌΠ΅ ΠΎΡΡΠ΅ΡΠ° ΠΎΡ Π°Π΄ΡΠ΅ΡΠ° Π² LR, Π΄ΠΎΠ±Π°Π²ΡΠΌΠ΅ Π³ΠΎ ΠΊΡΠΌ LR ΠΈ ΠΎΡΠΈΠ²Π°ΠΌΠ΅ ΡΠ°ΠΌ. 0x72044 + 0xC = 0x72050. Π‘ΠΊΡΠΈΠΏΡΡΡ Π·Π° ΡΠ°Π·ΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΈΡ Π΅ ΡΡΠ²ΡΠ΅ΠΌ ΠΏΡΠΎΡΡ:
def put_unconditional_branch(source, destination):
offset = (destination - source - 4) >> 1
if offset > 2097151 or offset 1023 or offset > 11) & 0x7ff)
instruction2 = 0xb800 | (offset & 0x7ff)
patch_word(source, instruction1)
patch_word(source + 2, instruction2)
else:
instruction = 0xe000 | (offset & 0x7ff)
patch_word(source, instruction)
ea = here()
if get_wide_word(ea) == 0xb503: #PUSH {R0,R1,LR}
ea1 = ea + 6
if get_wide_word(ea + 2) == 0xbf00: #NOP
ea1 += 2
offset = get_wide_dword(ea1)
put_unconditional_branch(ea, (ea1 + offset) & 0xffffffff)
else:
print "Unable to detect first instruction"Π Π΅Π·ΡΠ»ΡΠ°Ρ ΠΎΡ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΡΠΊΡΠΈΠΏΡΠ°:

Π‘Π»Π΅Π΄ ΠΊΠ°ΡΠΎ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡΡΠ° Π΅ ΠΏΡΠΎΠΏΠ°ΡΡΠ΅Π½Π°, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠΊΠ°ΠΆΠ΅ΠΌ Π½Π° IDA ΡΠ΅Π°Π»Π½ΠΎΡΠΎ ΠΉ Π½Π°ΡΠ°Π»ΠΎ. Π’Ρ ΡΠ΅ ΡΡΠ±Π΅ΡΠ΅ ΡΠ΅Π»ΠΈΡ ΠΊΠΎΠ΄ Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ° ΠΏΠ°ΡΡΠ΅ ΠΏΠΎ ΠΏΠ°ΡΡΠ΅ ΠΈ ΡΠΎΠΉ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π΄Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡΠ°Π½ Ρ HexRays.
ΠΠ΅ΡΠΈΡΡΠΈΡΠ°Π½Π΅ Π½Π° Π½ΠΈΠ·ΠΎΠ²Π΅
ΠΠ°ΡΡΠΈΡ ΠΌΠ΅ ΡΠ΅ Π΄Π° ΡΠ΅ ΡΠΏΡΠ°Π²ΡΠΌΠ΅ Ρ ΠΎΠ±ΡΡΡΠΊΠ°ΡΠΈΡΡΠ° Π½Π° ΠΌΠ°ΡΠΈΠ½Π½ΠΈΡ ΠΊΠΎΠ΄ Π² Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° libsgmainso-6.4.36.so ΠΎΡ UC 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 ΡΠ²Π½ΠΎ ΡΠ΅ ΠΈΠ·Π²ΡΡΡΠ²Π° ΡΠ°Π·ΡΠΈΡΡΠΎΠ²ΠΊΠ° Π½Π° ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΠΊΠ»Π°ΡΠ°. ΠΠ°ΡΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π½Π° ΡΠ°Π·ΠΈ ΡΡΠ½ΠΊΡΠΈΡ ΡΠ΅ ΠΏΡΠ΅Π΄Π°Π²Π° ΡΠΊΠ°Π·Π°ΡΠ΅Π» ΠΊΡΠΌ Π΄Π°Π½Π½ΠΈ, ΠΊΠΎΠΈΡΠΎ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°Ρ ΡΠΈΡΡΠΎΠ²Π°Π½ΠΈ, Π΅Π΄ΠΈΠ½ Π±ΡΡΠ΅Ρ ΠΈ ΡΠΈΡΠ»ΠΎ. ΠΡΠ΅Π²ΠΈΠ΄Π½ΠΎ Π΅, ΡΠ΅ ΡΠ»Π΅Π΄ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ° Π² Π±ΡΡΠ΅ΡΠ° ΡΠ΅ Π±ΡΠ΄Π΅ ΡΠ°Π·ΡΠΈΡΡΠΎΠ²Π°Π½ Π½ΠΈΠ·, ΡΡΠΉ ΠΊΠ°ΡΠΎ ΡΠΎΠΉ ΡΠ΅ ΠΏΡΠ΅Π΄Π°Π²Π° Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ° 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 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;
}ΠΠ°ΡΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ switch ΡΠ΅ ΠΏΡΠ΅Π΄Π°Π²Π° ΠΏΠΎΠ»Π΅ Π½Π° ΡΡΡΡΠΊΡΡΡΠ°, Π½Π° ΠΊΠΎΠ΅ΡΠΎ ΠΏΠΎ-ΡΠ°Π½ΠΎ Π΅ Π±ΠΈΠ»ΠΎ ΠΏΡΠΈΡΠ²ΠΎΠ΅Π½ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 3. ΠΠ΅ΠΊΠ° ΡΠ°Π·Π³Π»Π΅Π΄Π°ΠΌΠ΅ case 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.
ΠΡ ΠΊΠΎΠ΄Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌ, ΡΠ΅ ΠΎΡ Π½ΠΎΠΌΠ΅ΡΠ° Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄Π°ΡΠ° ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°Π²Π°Ρ ΡΡΠΈ ΡΠΈΡΠ»Π°: command / 10000, command % 10000 / 100 ΠΈ command % 10, Ρ.Π΅. Π² Π½Π°ΡΠΈΡ ΡΠ»ΡΡΠ°ΠΉ, 1, 6 ΠΈ 1. Π’Π΅Π·ΠΈ ΡΡΠΈ ΡΠΈΡΠ»Π°, Π·Π°Π΅Π΄Π½ΠΎ Ρ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° JNIEnv ΠΈ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΈΡΠ΅, ΠΏΡΠ΅Π΄Π°Π΄Π΅Π½ΠΈ Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ°, ΡΠ΅ ΡΡΠ±ΠΈΡΠ°Ρ Π² ΡΡΡΡΠΊΡΡΡΠ° ΠΈ ΡΠ΅ ΠΏΡΠ΅Π΄Π°Π²Π°Ρ Π½Π°ΠΏΡΠ΅Π΄. Π‘ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΠΏΠΎΠ»ΡΡΠ΅Π½ΠΈΡΠ΅ ΡΡΠΈ ΡΠΈΡΠ»Π° (Π½Π΅ΠΊΠ° Π³ΠΈ ΠΎΠ±ΠΎΠ·Π½Π°ΡΠΈΠΌ N1, N2 ΠΈ N3) ΡΠ΅ ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π° Π΄ΡΡΠ²ΠΎΡΠΎ Π½Π° ΠΊΠΎΠΌΠ°Π½Π΄ΠΈΡΠ΅.
ΠΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ°ΠΊΠ°:

ΠΡΡΠ²ΠΎΡΠΎ ΡΠ΅ ΠΏΠΎΠΏΡΠ»Π²Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ½ΠΎ Π² JNI_OnLoad.
Π’ΡΠΈ ΡΠΈΡΠ»Π° ΠΊΠΎΠ΄ΠΈΡΠ°Ρ
Π° ΠΏΡΡΡ Π² Π΄ΡΡΠ²ΠΎΡΠΎ. ΠΡΠ΅ΠΊΠΈ Π»ΠΈΡΡ Π½Π° Π΄ΡΡΠ²ΠΎΡΠΎ ΡΡΠ΄ΡΡΠΆΠ° ΠΏΠΎΡΠΎΡΠ΅Π½ Π°Π΄ΡΠ΅Ρ Π½Π° ΡΡΠΎΡΠ²Π΅ΡΠ½Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ. ΠΠ»ΡΡΡΡ Π΅ Π² ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΠΊΠΈΡ Π²ΡΠ·Π΅Π». ΠΠ°ΠΌΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΠΌΡΡΡΠΎΡΠΎ Π² ΠΊΠΎΠ΄Π°, ΠΊΡΠ΄Π΅ΡΠΎ Π² Π΄ΡΡΠ²ΠΎΡΠΎ ΡΠ΅ Π΄ΠΎΠ±Π°Π²Ρ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠ°ΡΠ° Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΡ, Π½Π΅ Π΅ Π³ΠΎΠ»ΡΠΌΠΎ ΡΡΠΈΠ»ΠΈΠ΅, Π°ΠΊΠΎ ΡΠ°Π·Π±Π΅ΡΠ΅ΡΠ΅ Π²ΡΠΈΡΠΊΠΈΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ ΡΡΡΡΠΊΡΡΡΠΈ (ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ΡΠΎ ΠΈΠΌ Π½Π΅ Π΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΎ, Π·Π° Π΄Π° Π½Π΅ ΡΠ°Π·ΡΠΈΡΡΠ²Π°ΠΌΠ΅ ΠΈ Π±Π΅Π· ΡΠΎΠ²Π° Π³ΠΎΠ»ΡΠΌΠ°ΡΠ° ΡΡΠ°ΡΠΈΡ).
ΠΡΠ΅ ΠΎΠ±ΡΡΡΠΊΠ°ΡΠΈΡ
ΠΠΎΠ»ΡΡΠΈΡ ΠΌΠ΅ Π°Π΄ΡΠ΅ΡΠ° Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ°, ΠΊΠΎΡΡΠΎ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ°Π·ΡΠΈΡΡΠΎΠ²Π° ΡΡΠ°ΡΠΈΠΊΠ°: 0x5F1AC. ΠΠΎ Π²ΡΠ΅ ΠΎΡΠ΅ Π½Π΅ Π΅ Π²ΡΠ΅ΠΌΠ΅ Π·Π° ΡΠ°Π΄ΠΎΡΡ: ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ Π½Π° UC Browser ΡΠ° ΠΏΠΎΠ΄Π³ΠΎΡΠ²ΠΈΠ»ΠΈ ΠΎΡΠ΅ Π΅Π΄Π½Π° ΠΈΠ·Π½Π΅Π½Π°Π΄Π° Π·Π° Π½Π°Ρ.
Π‘Π»Π΅Π΄ ΠΏΠΎΠ»ΡΡΠ°Π²Π°Π½Π΅ Π½Π° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ ΠΎΡ ΠΌΠ°ΡΠΈΠ²Π°, ΠΊΠΎΠΉΡΠΎ Π±Π΅ΡΠ΅ ΡΠΎΡΠΌΠΈΡΠ°Π½ Π² Java ΠΊΠΎΠ΄Π°, ΠΏΠΎΠΏΠ°Π΄Π°ΠΌΠ΅
Π² ΡΡΠ½ΠΊΡΠΈΡΡΠ° ΠΏΠΎ Π°Π΄ΡΠ΅Ρ 0x4D070. Π ΡΡΠΊ Π½ΠΈ ΠΎΡΠ°ΠΊΠ²Π° ΠΎΡΠ΅ Π΅Π΄ΠΈΠ½ Π²ΠΈΠ΄ ΠΎΠ±ΡΡΡΠΊΠ°ΡΠΈΡ Π½Π° ΠΊΠΎΠ΄Π°.
Π‘Π»Π°Π³Π°ΠΌΠ΅ Π² R7 ΠΈ R4 Π΄Π²Π° ΠΈΠ½Π΄Π΅ΠΊΡΠ°:

ΠΡΠ΅ΠΌΠ΅ΡΡΠ²Π°ΠΌΠ΅ ΠΏΡΡΠ²ΠΈΡ ΠΈΠ½Π΄Π΅ΠΊΡ Π² R11:

ΠΠ° Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΠΌ Π°Π΄ΡΠ΅ΡΠ° ΠΎΡ ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ°, ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΈΠ½Π΄Π΅ΠΊΡΠ°:

Π‘Π»Π΅Π΄ ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°Π½Π΅ΡΠΎ ΠΏΡΠ΅Π· ΠΏΡΡΠ²ΠΈΡ Π°Π΄ΡΠ΅Ρ, ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π²ΡΠΎΡΠΈΡΡ ΠΈΠ½Π΄Π΅ΠΊΡ, ΠΊΠΎΠΉΡΠΎ Π΅ Π² R4. Π ΡΠ°Π±Π»ΠΈΡΠ°ΡΠ° ΠΈΠΌΠ° 230 Π΅Π»Π΅ΠΌΠ΅Π½ΡΠ°.
ΠΠ°ΠΊΠ²ΠΎ Π΄Π° ΠΏΡΠ°Π²ΠΈΠΌ Ρ ΡΠΎΠ²Π°? ΠΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΊΠ°ΠΆΠ΅ΠΌ Π½Π° IDA, ΡΠ΅ ΡΠΎΠ²Π° Π΅ ΡΠ°ΠΊΠΎΠ²Π° ΠΏΡΠ΅Π²ΠΊΠ»ΡΡΠ²Π°Π½Π΅: Edit -> Other -> Specify switch idiom.

ΠΠΎΠ»ΡΡΠ΅Π½ΠΈΡΡ ΠΊΠΎΠ΄ Π΅ ΡΡΡΠ°ΡΠ΅Π½. ΠΠΎ, ΠΏΡΠΎΡΡΠ²Π°ΠΉΠΊΠΈ Π΄Π΅Π±ΡΠΈΡΠ΅ ΠΌΡ, ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ Π·Π°Π±Π΅Π»Π΅ΠΆΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π²Π΅ΡΠ΅ ΠΏΠΎΠ·Π½Π°ΡΠ° Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΡ. sub_6115C:

ΠΠΌΠ°ΡΠ΅ ΠΏΡΠ΅Π²ΠΊΠ»ΡΡΠ²Π°Π½Π΅, Π² ΠΊΠΎΠ΅ΡΠΎ Π² case 3 Π±Π΅ΡΠ΅ ΡΠ°Π·ΡΠΈΡΡΠΎΠ²ΠΊΠ°ΡΠ° Ρ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ΡΠΎ Π½Π° Π°Π»Π³ΠΎΡΠΈΡΡΠΌΠ° RC4. Π Π² ΡΠΎΠ·ΠΈ ΡΠ»ΡΡΠ°ΠΉ ΠΏΡΠ΅Π΄Π°Π²Π°Π½Π°ΡΠ° Π² ΡΡΠ½ΠΊΡΠΈΡΡΠ° ΡΡΡΡΠΊΡΡΡΠ° ΡΠ΅ Π·Π°ΠΏΡΠ»Π²Π° ΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅, ΠΏΡΠ΅Π΄Π°Π΄Π΅Π½ΠΈ Π² doCommandNative. Π‘ΠΏΠΎΠΌΠ½ΡΠΌΠ΅ ΡΠΈ, ΡΠ΅ ΡΠ°ΠΌ ΠΈΠΌΠ°Ρ
ΠΌΠ΅ magicInt Ρ ΡΡΠΎΠΉΠ½ΠΎΡΡ 16. Π Π°Π·Π³Π»Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΡΡΠΎΡΠ²Π΅ΡΠ½ΠΈΡ case β ΠΈ ΡΠ»Π΅Π΄ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°Π½ΠΈΡ ΠΎΡΠΊΡΠΈΠ²Π°ΠΌΠ΅ ΠΊΠΎΠ΄, ΠΏΠΎ ΠΊΠΎΠΉΡΠΎ ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΠ°Π·ΠΏΠΎΠ·Π½Π°Π΅ΠΌ Π°Π»Π³ΠΎΡΠΈΡΡΠΌΠ°.

Π’ΠΎΠ²Π° Π΅ AES!
ΠΠ»Π³ΠΎΡΠΈΡΡΠΌΡΡ Π΅ Π·Π°Π΄ Π½Π°Ρ, ΠΎΡΡΠ°Π²Π° Π΄Π° ΠΏΠΎΠ»ΡΡΠΈΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΡΠ΅ ΠΌΡ: ΡΠ΅ΠΆΠΈΠΌ, ΠΊΠ»ΡΡ ΠΈ, Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π²Π΅ΠΊΡΠΎΡ Π½Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ (Π½Π°Π»ΠΈΡΠΈΠ΅ΡΠΎ ΠΌΡ Π·Π°Π²ΠΈΡΠΈ ΠΎΡ ΡΠ΅ΠΆΠΈΠΌΠ° Π½Π° ΡΠ°Π±ΠΎΡΠ° Π½Π° Π°Π»Π³ΠΎΡΠΈΡΡΠΌΠ° AES). Π‘ΡΡΡΠΊΡΡΡΠ°ΡΠ° Ρ ΡΡΡ ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ ΡΠΎΡΠΌΠΈΡΠ° Π½ΡΠΊΡΠ΄Π΅ ΠΏΡΠ΅Π΄ΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ° sub_6115C, Π½ΠΎ ΡΠ°Π·ΠΈ ΡΠ°ΡΡ ΠΎΡ ΠΊΠΎΠ΄Π° Π΅ ΠΎΠ±ΡΡΡΡΠΈΡΠ°Π½Π° ΠΎΡΠΎΠ±Π΅Π½ΠΎ Π΄ΠΎΠ±ΡΠ΅, Π·Π°ΡΠΎΠ²Π° ΡΠ΅ ΡΠΎΠ΄ΠΈ ΠΈΠ΄Π΅ΡΡΠ° Π΄Π° ΠΏΠ°ΡΡΠ½Π΅ΠΌ ΠΊΠΎΠ΄Π°, ΡΠ°ΠΊΠ° ΡΠ΅ Π²ΡΠΈΡΠΊΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π½Π° ΡΠ°Π·ΡΠΈΡΡΠΎΠ²ΠΊΠ°ΡΠ° Π΄Π° ΡΠ΅ Π·Π°ΠΏΠΈΡΠ²Π°Ρ Π² ΡΠ°ΠΉΠ».
ΠΠ°ΡΡ
ΠΠ° Π΄Π° Π½Π΅ ΠΏΠΈΡΠ΅ΠΌ ΡΠ΅Π»ΠΈΡ ΠΊΠΎΠ΄ Π½Π° ΠΏΠ°ΡΡΠ° Π½Π° Π°ΡΠ΅ΠΌΠ±Π»Π΅Ρ ΠΎΡ ΡΡΠΊΠ°, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ Android Studio, Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΠΌ ΡΡΠ½ΠΊΡΠΈΡ, ΠΊΠΎΡΡΠΎ ΠΏΠΎΠ»ΡΡΠ°Π²Π° ΡΡΡΠΈΡΠ΅ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ, ΠΊΠ°ΠΊΡΠΎ Π½Π°ΡΠ°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π·Π° ΡΠ°Π·ΡΠΈΡΡΠΎΠ²ΠΊΠ°, ΠΈ Π·Π°ΠΏΠΈΡΠ²Π° Π² ΡΠ°ΠΉΠ», ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ Π΄Π° ΠΊΠΎΠΏΠΈΠΏΠ΅ΠΉΡΡΠ½Π΅ΠΌ ΠΊΠΎΠ΄Π°, ΠΊΠΎΠΉΡΠΎ ΡΠ΅ Π³Π΅Π½Π΅ΡΠΈΡΠ° ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΎΡΡΡ.
ΠΠ°ΡΠΈΡΠ΅ ΠΏΡΠΈΡΡΠ΅Π»ΠΈ ΠΎΡ Π΅ΠΊΠΈΠΏΠ° Π½Π° UC Browser ΡΡΡΠΎ ΡΠ΅ ΠΏΠΎΠ³ΡΠΈΠΆΠΈΡ Π° Π·Π° ΡΠ΄ΠΎΠ±ΡΡΠ²ΠΎΡΠΎ Π½Π° Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅ Π½Π° ΠΊΠΎΠ΄. ΠΠ΅ΠΊΠ° ΠΏΡΠΈΠΏΠΎΠΌΠ½ΠΈΠΌ, ΡΠ΅ Π² Π½Π°ΡΠ°Π»ΠΎΡΠΎ Π½Π° Π²ΡΡΠΊΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΈΠΌΠ°ΠΌΠ΅ Π½Π΅Π½ΡΠΆΠ½ΠΎ ΠΊΠΎΠ΄ΠΈΡΠ°Π½Π΅, ΠΊΠΎΠ΅ΡΠΎ Π»Π΅ΡΠ½ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π±ΡΠ΄Π΅ Π·Π°ΠΌΠ΅Π½Π΅Π½ΠΎ Ρ ΠΊΠ°ΠΊΠ²ΠΎΡΠΎ ΠΈ Π΄Π° Π΅ Π΄ΡΡΠ³ΠΎ. ΠΠ½ΠΎΠ³ΠΎ ΡΠ΄ΠΎΠ±Π½ΠΎ π Π Π²ΡΠ΅ ΠΏΠ°ΠΊ, Π² Π½Π°ΡΠ°Π»ΠΎΡΠΎ Π½Π° ΡΠ΅Π»Π΅Π²Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΌΡΡΡΠΎΡΠΎ Π·Π° ΠΊΠΎΠ΄Π°, ΠΊΠΎΠΉΡΠΎ ΡΡΡ ΡΠ°Π½ΡΠ²Π° Π²ΡΠΈΡΠΊΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ Π²ΡΠ² ΡΠ°ΠΉΠ», Π΅ ΠΌΠ°Π»ΠΊΠΎ. ΠΠ΅ΡΠ΅ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° Π³ΠΎ ΡΠ°Π·Π΄Π΅Π»ΠΈΠΌ Π½Π° ΡΠ°ΡΡΠΈ ΠΈ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π½Π΅Π½ΡΠΆΠ½ΠΈ Π±Π»ΠΎΠΊΠΎΠ²Π΅ ΠΎΡ ΡΡΡΠ΅Π΄Π½ΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ. Π ΠΊΡΠ°ΠΉΠ½Π° ΡΠΌΠ΅ΡΠΊΠ° ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΡ Π° ΡΠ΅ΡΠΈΡΠΈ ΡΠ°ΡΡΠΈ.
ΠΡΡΠ²Π° ΡΠ°ΡΡ:

Π Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΠ°ΡΠ° ARM ΠΏΡΡΠ²ΠΈΡΠ΅ ΡΠ΅ΡΠΈΡΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡΠ° Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ° ΡΠ΅ ΠΏΡΠ΅Π΄Π°Π²Π°Ρ ΡΡΠ΅Π· ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ΅ R0-R3, Π° ΠΎΡΡΠ°Π½Π°Π»ΠΈΡΠ΅, Π°ΠΊΠΎ ΠΈΠΌΠ° ΡΠ°ΠΊΠΈΠ²Π°, - ΡΡΠ΅Π· ΡΡΠ΅ΠΊΠ°. Π ΡΠ΅Π³ΠΈΡΡΡΡΠ° LR ΡΠ΅ ΠΏΡΠ΅Π΄Π°Π²Π° Π°Π΄ΡΠ΅ΡΡΡ Π·Π° Π²ΡΡΡΠ°Π½Π΅. ΠΡΠΈΡΠΊΠΎ ΡΠΎΠ²Π° ΡΡΡΠ±Π²Π° Π΄Π° ΡΠ΅ Π·Π°ΠΏΠ°Π·ΠΈ, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ ΡΡΠ½ΠΊΡΠΈΡΡΠ° Π΄Π° ΡΠ°Π±ΠΎΡΠΈ ΡΠ»Π΅Π΄ ΠΊΠ°ΡΠΎ ΠΈΠ· dump-ΠΈΠΌ Π½Π΅ΠΉΠ½ΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ. ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° Π΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π΄Π° Π·Π°ΠΏΠ°Π·ΠΈΠΌ Π²ΡΠΈΡΠΊΠΈ ΡΠ΅Π³ΠΈΡΡΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Π² ΠΏΡΠΎΡΠ΅ΡΠ°, ΡΠ°ΠΊΠ° ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠΌ PUSH.W {R0-R10,LR}. Π R7 ΠΏΠΎΠ»ΡΡΠ°Π²Π°ΠΌΠ΅ Π°Π΄ΡΠ΅ΡΠ° Π½Π° ΡΠΏΠΈΡΡΠΊΠ° Ρ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈ, ΠΏΡΠ΅Π΄Π°Π΄Π΅Π½ΠΈ Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ° ΡΡΠ΅Π· ΡΡΠ΅ΠΊΠ°.
Π‘ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ° fopen ΠΎΡΠ²Π°ΡΡΠΌΠ΅ ΡΠ°ΠΉΠ»Π° /data/local/tmp/aes Π² ΡΠ΅ΠΆΠΈΠΌ βabβ,
Ρ.Π΅. Π·Π° Π΄ΠΎΠ±Π°Π²ΡΠ½Π΅. Π R0 Π·Π°ΡΠ΅ΠΆΠ΄Π°ΠΌΠ΅ Π°Π΄ΡΠ΅ΡΠ° Π½Π° ΠΈΠΌΠ΅ΡΠΎ Π½Π° ΡΠ°ΠΉΠ»Π°, Π° Π² R1 β Π°Π΄ΡΠ΅ΡΠ° Π½Π° ΡΡΡΠΎΠΊΠ°ΡΠ° Ρ ΡΠΊΠ°Π·Π°Π½ΠΈΠ΅ΡΠΎ Π·Π° ΡΠ΅ΠΆΠΈΠΌΠ°. Π ΡΡΠΊ Π½Π΅Π½ΡΠΆΠ½ΠΈΡΡ ΠΊΠΎΠ΄ ΡΠ²ΡΡΡΠ²Π°, Π·Π°ΡΠΎΠ²Π° ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π°ΠΌΠ΅ ΠΊΡΠΌ ΡΠ»Π΅Π΄Π²Π°ΡΠ°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ. ΠΠ° Π΄Π° ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠΈ Π΄Π° ΡΠ°Π±ΠΎΡΠΈ, ΠΏΠΎΡΡΠ°Π²ΡΠΌΠ΅ Π² Π½Π°ΡΠ°Π»ΠΎΡΠΎ ΠΏΡΠ΅Ρ
ΠΎΠ΄ ΠΊΡΠΌ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»Π½ΠΈΡ ΠΊΠΎΠ΄ Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ°, Π·Π°ΠΎΠ±ΠΈΠΊΠ°Π»ΡΠΉΠΊΠΈ Π½Π΅Π½ΡΠΆΠ½ΠΎΡΠΎ, Π° Π²ΠΌΠ΅ΡΡΠΎ Π½Π΅Π½ΡΠΆΠ½ΠΎΡΠΎ Π΄ΠΎΠ±Π°Π²ΡΠΌΠ΅ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ΅Π½ΠΈΠ΅ΡΠΎ Π½Π° ΠΏΠ°ΡΡ.

ΠΠ·Π²ΠΈΠΊΠ²Π°ΠΌΠ΅ fopen.
ΠΡΡΠ²ΠΈΡΠ΅ ΡΡΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡΠ° Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ° aes ΠΈΠΌΠ°Ρ ΡΠΈΠΏ int. ΠΡΠΊΠΎΠ»ΠΊΠΎΡΠΎ Π² Π½Π°ΡΠ°Π»ΠΎΡΠΎ Π·Π°ΠΏΠ°Π·ΠΈΡ ΠΌΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ΅ Π² ΡΡΠ΅ΠΊΠ°, ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΎΡΡΠΎ Π΄Π° ΠΏΡΠ΅Π΄Π°Π΄Π΅ΠΌ Π½Π° ΡΡΠ½ΠΊΡΠΈΡΡΠ° fwrite ΡΠ΅Ρ Π½ΠΈΡΠ΅ Π°Π΄ΡΠ΅ΡΠΈ Π² ΡΡΠ΅ΠΊΠ°.

Π‘Π»Π΅Π΄ ΡΠΎΠ²Π° ΠΈΠΌΠ°ΠΌΠ΅ ΡΡΠΈ ΡΡΡΡΠΊΡΡΡΠΈ, ΠΊΠΎΠΈΡΠΎ ΡΡΠ΄ΡΡΠΆΠ°Ρ ΡΠ°Π·ΠΌΠ΅Ρ Π½Π° Π΄Π°Π½Π½ΠΈΡΠ΅ ΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π» ΠΊΡΠΌ Π΄Π°Π½Π½ΠΈΡΠ΅ Π·Π° ΠΊΠ»ΡΡΠ°, Π²Π΅ΠΊΡΠΎΡΠ° Π·Π° ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΈ ΠΊΡΠΈΠΏΡΠΈΡΠ°Π½ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ.

ΠΠ°ΠΊΡΠ°Ρ Π·Π°ΡΠ²Π°ΡΡΠΌΠ΅ ΡΠ°ΠΉΠ»Π°, Π²ΡΠ·ΡΡΠ°Π½ΠΎΠ²ΡΠ²Π°ΠΌΠ΅ ΡΠ΅Π³ΠΈΡΡΡΠΈΡΠ΅ ΠΈ ΠΏΡΠ΅Π΄Π°Π²Π°ΠΌΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»Π° Π½Π° Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»Π½Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ. aes.
Π‘ΡΠ±ΠΈΡΠ°ΠΌΠ΅ APK Ρ ΠΏΡΠΎΠΏΠ°ΡΡΠ΅Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°, ΠΏΠΎΠ΄ΠΏΠΈΡΠ²Π°ΠΌΠ΅, ΠΏΡΠ΅Ρ Π²ΡΡΠ»ΡΠΌΠ΅ Π½Π° ΡΡΡΡΠΎΠΉΡΡΠ²ΠΎΡΠΎ/Π΅ΠΌΡΠ»Π°Π³ΠΎΡ, ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅. ΠΠΈΠΆΠ΄Π°ΠΌΠ΅, ΡΠ΅ Π½Π°ΡΠΈΡΡ dump ΡΠ΅ ΡΡΠ·Π΄Π°Π²Π° ΠΈ ΡΠ°ΠΌ ΡΠ΅ Π·Π°ΠΏΠΈΡΠ²Π°Ρ ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π°Π½Π½ΠΈ. ΠΡΠ°ΡΠ·Π΅ΡΡΡ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΊΡΠΈΠΏΡΠΈΡΠ°Π½Π΅ Π½Π΅ ΡΠ°ΠΌΠΎ Π·Π° ΡΡΠ°ΡΠΈΠΊΠ° ΠΈ Π²ΡΠΈΡΠΊΠΎΡΠΎ ΠΊΡΠΈΠΏΡΠΈΡΠ°Π½Π΅ ΠΏΡΠ΅ΠΌΠΈΠ½Π°Π²Π° ΡΡΠ΅Π· ΡΠ°Π·Π³Π»Π΅ΠΆΠ΄Π°Π½Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ. Π Π½ΡΠΆΠ½ΠΈΡΠ΅ Π΄Π°Π½Π½ΠΈ ΠΏΠΎ Π½ΡΠΊΠ°ΠΊΠ²Π° ΠΏΡΠΈΡΠΈΠ½Π° Π»ΠΈΠΏΡΠ²Π°Ρ ΠΈ Π² ΡΡΠ°ΡΠΈΠΊΠ° Π½Π΅ ΡΠ΅ Π²ΠΈΠΆΠ΄Π° Π½ΡΠΆΠ½ΠΈΡΡ Π·Π°ΠΏΠΈΡ. ΠΠ° Π΄Π° Π½Π΅ ΡΠ°ΠΊΠ°ΡΠ΅, Π΄ΠΎΠΊΠ°ΡΠΎ 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.

ΠΠΈΠΆΠ΄Π°ΠΌΠ΅ URL Π°Π΄ΡΠ΅ΡΠ° Π½Π° Π°ΡΡ
ΠΈΠ²Π°, Π½Π΅ΡΠΎ, ΠΊΠΎΠ΅ΡΠΎ ΠΏΡΠΈΠ»ΠΈΡΠ° Π½Π° MD5, "extract_unzipsize" ΠΈ ΡΠΈΡΠ»ΠΎ. ΠΡΠΎΠ²Π΅ΡΡΠ²Π°ΠΌΠ΅: MD5 Π½Π° Π°ΡΡ
ΠΈΠ²Π° ΡΡΠ²ΠΏΠ°Π΄Π°, ΡΠ°Π·ΠΌΠ΅ΡΡΡ Π½Π° ΡΠ°Π·Π°ΡΡ
ΠΈΠ²ΠΈΡΠ°Π½Π°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΡΠ²ΠΏΠ°Π΄Π°. ΠΠΏΠΈΡΠ²Π°ΠΌΠ΅ Π΄Π° ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠ°ΠΌΠ΅ ΡΠ°Π·ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΈ Π΄Π° Ρ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΠΌ Π½Π° Π±ΡΠ°ΡΠ·Π΅ΡΠ°. ΠΠ° Π΄Π° ΠΏΠΎΠΊΠ°ΠΆΠ΅ΠΌ, ΡΠ΅ Π½Π°ΡΠ°ΡΠ° ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠ°Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΅ Π·Π°ΡΠ΅Π΄Π΅Π½Π°, ΡΠ΅ ΡΡΠ°ΡΡΠΈΡΠ°ΠΌΠ΅ Intent Π·Π° ΡΡΠ·Π΄Π°Π²Π°Π½Π΅ Π½Π° SMS Ρ ΡΠ΅ΠΊΡΡΠ° "PWNED!". Π©Π΅ ΠΏΠΎΠ΄ΠΌΠ΅Π½ΠΈΠΌ Π΄Π²Π° ΠΎΡΠ³ΠΎΠ²ΠΎΡΠ° ΠΎΡ ΡΡΡΠ²ΡΡΠ°: ΠΈ Π·Π° ΡΠ²Π°Π»ΡΠ½Π΅ Π½Π° Π°ΡΡ
ΠΈΠ²Π°. Π ΠΏΡΡΠ²ΠΈΡ ΠΏΠΎΠ΄ΠΌΠ΅Π½ΡΠΌΠ΅ MD5 (ΡΠ°Π·ΠΌΠ΅ΡΡΡ ΡΠ»Π΅Π΄ ΡΠ°Π·Π°ΡΡ
ΠΈΠ²ΠΈΡΠ°Π½Π΅ Π½Π΅ ΡΠ΅ ΠΏΡΠΎΠΌΠ΅Π½Ρ), Π° Π²ΡΠ² Π²ΡΠΎΡΠΈΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΡΠΌΠ΅ Π°ΡΡ
ΠΈΠ²Π° Ρ ΠΌΠΎΠ΄ΠΈΡΠΈΡΠΈΡΠ°Π½Π°ΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°.
ΠΡΠ°ΡΠ·Π΅ΡΡΡ ΠΎΠΏΠΈΡΠ²Π° Π΄Π° ΡΠ²Π°Π»ΠΈ Π°ΡΡ
ΠΈΠ²Π° Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΏΡΡΠΈ, ΡΠ»Π΅Π΄ ΠΊΠΎΠ΅ΡΠΎ ΠΏΠΎΠΊΠ°Π·Π²Π° Π³ΡΠ΅ΡΠΊΠ°. ΠΠΎ Π²ΡΠΈΡΠΊΠΎ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π°, ΡΠ΅ Π½Π΅ΡΠΎ
ΠΌΡ Π½Π΅ Ρ
Π°ΡΠ΅ΡΠ²Π°. Π ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° Π°Π½Π°Π»ΠΈΠ·Π° Π½Π° ΡΠΎΠ·ΠΈ Π½Π΅ΡΡΠ΅Π½ ΡΠΎΡΠΌΠ°Ρ Π±Π΅ΡΠ΅ ΡΡΡΠ°Π½ΠΎΠ²Π΅Π½ΠΎ, ΡΠ΅ ΡΡΡΠ²ΡΡΡΡ ΠΏΡΠ΅Π΄Π°Π²Π° ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° Π°ΡΡ
ΠΈΠ²Π°:

Π’ΠΎΠΉ Π΅ ΠΊΠΎΠ΄ΠΈΡΠ°Π½ Π² LEB128. Π‘Π»Π΅Π΄ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΈΡΡΠ° ΡΠ°Π·ΠΌΠ΅ΡΡΡ Π½Π° Π°ΡΡ
ΠΈΠ²Π° Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΡΠ° ΡΠ΅ Π΅ ΠΏΡΠΎΠΌΠ΅Π½ΠΈΠ» ΠΌΠ°Π»ΠΊΠΎ, ΠΏΠΎΡΠ°Π΄ΠΈ ΠΊΠΎΠ΅ΡΠΎ Π±ΡΠ°ΡΠ·Π΅ΡΡΡ ΡΠΌΡΡΠ°, ΡΠ΅ Π°ΡΡ
ΠΈΠ²ΡΡ Π΅ ΡΠ²Π°Π»Π΅Π½ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»Π½ΠΎ ΠΈ ΡΠ»Π΅Π΄ Π½ΡΠΊΠΎΠ»ΠΊΠΎ ΠΎΠΏΠΈΡΠ° ΠΏΠΎΠΊΠ°Π·Π²Π° Π³ΡΠ΅ΡΠΊΠ°.
ΠΠΎΡΠΈΠ³ΠΈΡΠ°ΠΌΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ° Π½Π° Π°ΡΡ ΠΈΠ²Π°β¦ Π - ΠΏΠΎΠ±Π΅Π΄Π°! π Π Π΅Π·ΡΠ»ΡΠ°ΡΡΡ Π΅ Π½Π° Π²ΠΈΠ΄Π΅ΠΎ.
ΠΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΡ ΠΈ ΡΠ΅Π°ΠΊΡΠΈΡ Π½Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°
ΠΠΎ ΡΡΡΠΈΡ Π½Π°ΡΠΈΠ½ Ρ Π°ΠΊΠ΅ΡΠΈΡΠ΅ ΠΌΠΎΠ³Π°Ρ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ Π½Π΅Π½Π°Π΄Π΅ΠΆΠ΄Π½Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Π½Π° UC Browser, Π·Π° Π΄Π° ΡΠ°Π·ΠΏΡΠΎΡΡΡΠ°Π½ΡΠ²Π°Ρ ΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Ρ Π·Π»ΠΎΠ²ΡΠ΅Π΄Π½ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. Π’Π΅Π·ΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ ΡΠ΅ ΡΠ°Π±ΠΎΡΡΡ Π² ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π½Π° Π±ΡΠ°ΡΠ·ΡΡΠ° ΠΈ ΡΠ΅ ΠΏΠΎΠ»ΡΡΠ°Ρ Π²ΡΠΈΡΠΊΠΈ Π½Π΅Π³ΠΎΠ²ΠΈ ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡ. Π ΡΠ΅Π·ΡΠ»ΡΠ°Ρ Π½Π° ΡΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° ΡΠ΅ ΠΏΠΎΡΠ²ΡΡ ΡΠΈΡΠΈΠ½Π³ ΠΏΡΠΎΠ·ΠΎΡΡΠΈ ΠΈ Π΄ΠΎΡΡΡΠΏ Π΄ΠΎ ΡΠ°Π±ΠΎΡΠ½ΠΈΡΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²Π΅ Π½Π° ΠΎΡΠ°Π½ΠΆΠ΅Π²Π°ΡΠ° ΠΊΠΈΡΠ°ΠΉΡΠΊΠ° Π±Π΅Π»ΠΊΠ°, Π²ΠΊΠ»ΡΡΠΈΡΠ΅Π»Π½ΠΎ ΡΡΡ ΡΠ°Π½ΡΠ²Π°Π½ΠΈ Π² Π±Π°Π·Π°ΡΠ° Π΄Π°Π½Π½ΠΈ Π»ΠΎΠ³ΠΈΠ½ΠΈ, ΠΏΠ°ΡΠΎΠ»ΠΈ ΠΈ Π±ΠΈΡΠΊΠ²ΠΈΡΠΊΠΈ.
Π‘Π²ΡΡΠ·Π°Ρ
ΠΌΠ΅ ΡΠ΅ Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΡΠΈΡΠ΅ Π½Π° UC Browser ΠΈ ΠΈΠΌ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡΠ°Ρ
ΠΌΠ΅ Π·Π° ΠΎΡΠΊΡΠΈΡΠ°ΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°, ΠΎΠΏΠΈΡΠ²Π°ΠΉΠΊΠΈ ΡΠ΅ Π΄Π° ΠΏΠΎΡΠΎΡΠΈΠΌ ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΡΠ° ΠΈ Π½Π΅ΠΉΠ½Π°ΡΠ° ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ, Π½ΠΎ ΡΠ΅ Π½Π΅ ΠΆΠ΅Π»Π°Π΅Ρ
Π° Π΄Π° ΠΎΠ±ΡΡΠΆΠ΄Π°Ρ Π½ΠΈΡΠΎ Ρ Π½Π°Ρ. ΠΠ΅ΠΆΠ΄ΡΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π±ΡΠ°ΡΠ·ΡΡΡΡ ΠΏΡΠΎΠ΄ΡΠ»ΠΆΠ°Π²Π°ΡΠ΅ Π΄Π° ΡΠ΅ Ρ
Π²Π°Π»ΠΈ Ρ ΠΎΠΏΠ°ΡΠ½Π°ΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΠΏΡΠ΅Π΄ Π²ΡΠΈΡΠΊΠΈ. ΠΠΎ ΡΠ»Π΅Π΄ ΠΊΠ°ΡΠΎ ΡΠ°Π·ΠΊΡΠΈΡ
ΠΌΠ΅ Π΄Π΅ΡΠ°ΠΉΠ»ΠΈΡΠ΅ Π½Π° ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΡΠ°, ΠΈΠ³Π½ΠΎΡΠΈΡΠ°Π½Π΅ΡΠΎ Ρ, ΠΊΠ°ΠΊΡΠΎ ΠΏΠΎ-ΡΠ°Π½ΠΎ, Π²Π΅ΡΠ΅ Π½Π΅ Π±Π΅ΡΠ΅ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎ. ΠΠ° 27 ΠΌΠ°ΡΡ Π±Π΅ΡΠ΅
ΠΈΠ·Π΄Π°Π΄Π΅Π½Π° Π½ΠΎΠ²Π° Π²Π΅ΡΡΠΈΡ Π½Π° UC Browser 12.10.9.1193, ΠΊΠΎΡΡΠΎ ΡΠ΅ ΡΠ²ΡΡΠ·Π²Π°ΡΠ΅ ΡΡΡ ΡΡΡΠ²ΡΡΠ° ΠΏΠΎ HTTPS: .
ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π°, ΡΠ»Π΅Π΄ "ΠΏΠΎΠΏΡΠ°Π²ΠΊΠ°ΡΠ°" ΠΈ Π΄ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π½Π° Π½Π°ΠΏΠΈΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° ΡΡΠ°ΡΠΈΡΡΠ° ΠΎΠΏΠΈΡΡΡ Π·Π° ΠΎΡΠ²Π°ΡΡΠ½Π΅ Π½Π° PDF Π² Π±ΡΠ°ΡΠ·ΡΡΠ° Π²ΠΎΠ΄Π΅ΡΠ΅ Π΄ΠΎ ΠΏΠΎΡΠ²Π°ΡΠ° Π½Π° ΡΡΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π·Π° Π³ΡΠ΅ΡΠΊΠ° Ρ ΡΠ΅ΠΊΡΡ "ΠΠΏΡ, Π½Π΅ΡΠΎ ΡΠ΅ ΠΎΠ±ΡΡΠΊΠ°!". ΠΠ°ΡΠ²ΠΊΠ°ΡΠ° ΠΊΡΠΌ ΡΡΡΠ²ΡΡΠ° ΠΏΡΠΈ ΠΎΠΏΠΈΡΠ° Π·Π° ΠΎΡΠ²Π°ΡΡΠ½Π΅ Π½Π° PDF Π½Π΅ Π±Π΅ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½Π°, Π½ΠΎ Π·Π°ΡΠ²ΠΊΠ°ΡΠ° ΠΏΡΠΈ ΡΡΠ°ΡΡΠΈΡΠ°Π½Π΅ Π½Π° Π±ΡΠ°ΡΠ·ΡΡΠ° Π±Π΅ΡΠ΅ ΡΡΠΏΠ΅ΡΠ½Π°, ΠΊΠΎΠ΅ΡΠΎ ΠΏΠΎΠ΄ΡΠΊΠ°Π·Π²Π°, ΡΠ΅ Π΅ Π·Π°ΠΏΠ°Π·Π΅Π½Π° Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π·Π° Π·Π°ΡΠ΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΈΠ·ΠΏΡΠ»Π½ΠΈΠΌ ΠΊΠΎΠ΄ Π² Π½Π°ΡΡΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠ°Π²ΠΈΠ»Π°ΡΠ° Π½Π° Google Play.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: habr.com
