рдкрд░рд┐рдЪрдп
рдорд╛рд░реНрдЪ рдХреЗ рдЕрдВрдд рдореЗрдВ, рд╣рдордиреЗ
рдмрддрд╛рдпрд╛ рдХрд┐ рд╣рдордиреЗ рдпреВрд╕реА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдЕрд╕рддреНрдпрд╛рдкрд┐рдд рдХреЛрдб рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдЪрд▓рд╛рдиреЗ рдХреА рдПрдХ рдЫрд┐рдкреА рдХреНрд╖рдорддрд╛ рдХреА рдЦреЛрдЬ рдХреАред рдЖрдЬ рд╣рдо рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░реЗрдВрдЧреЗ рдХрд┐ рдпрд╣ рдбрд╛рдЙрдирд▓реЛрдб рдХреИрд╕реЗ рд╣реЛрддрд╛ рд╣реИ рдФрд░ рд╣реИрдХрд░реНрд╕ рдЗрд╕реЗ рдЕрдкрдиреЗ рдЙрджреНрджреЗрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ, рдпреВрд╕реА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдмрд╣реБрдд рдЖрдХреНрд░рд╛рдордХ рддрд░реАрдХреЗ рд╕реЗ рд╡рд┐рдЬреНрдЮрд╛рдкрд┐рдд рдФрд░ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: рдпрд╣ рдореИрд▓рд╡реЗрдпрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рдЙрдкрдХрд░рдгреЛрдВ рдкрд░ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рд╡реАрдбрд┐рдпреЛ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЖрдбрд╝ рдореЗрдВ рд╡рд┐рднрд┐рдиреНрди рд╕рд╛рдЗрдЯреЛрдВ рд╕реЗ рд╡рд┐рддрд░рд┐рдд рдХрд┐рдП рдЧрдП (рдпрд╛рдиреА, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдиреЗ рд╕реЛрдЪрд╛ рдХрд┐ рд╡реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░ рдЪреБрдХреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдПрдХ рдЕрд╢реНрд▓реАрд▓ рдХреНрд▓рд┐рдк, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдПрдХ рдПрдкреАрдХреЗ рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛) рдмреНрд░рд╛рдЙрдЬрд╝рд░), рдпрд╣ рдХрд╣рддреЗ рд╣реБрдП рд╕рдВрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рднрдпрд╛рд╡рд╣ рдмреИрдирд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкреБрд░рд╛рдирд╛, рдХрдордЬреЛрд░ рдФрд░ рд╕рд╛рдорд╛рди рдЬреИрд╕рд╛ рд╣реИред рд╡реАрдХреЗ рдореЗрдВ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рдпреВрд╕реА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕рдореВрд╣ рдХрд╛ рдПрдХ
рд╡рд┐рд╖рдп рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреБрдЪрд┐рдд рд╡рд┐рдЬреНрдЮрд╛рдкрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢рд┐рдХрд╛рдпрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдХрдИ рдЙрджрд╛рд╣рд░рдг рд╣реИрдВред 2016 рдореЗрдВ, рд░реВрд╕реА рдореЗрдВ рднреА
рд╡реАрдбрд┐рдпреЛ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдерд╛ (рд╣рд╛рдБ, рдПрдХ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╕реЗ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдЬреЛ рд╡рд┐рдЬреНрдЮрд╛рдкрдиреЛрдВ рдХреЛ рдЕрд╡рд░реБрджреНрдз рдХрд░рддрд╛ рд╣реИ)ред
рд▓рд┐рдЦрдиреЗ рдХреЗ рд╕рдордп, рдпреВрд╕реА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреА Google Play рдкрд░ 500,000,000 рд╕реЗ рдЕрдзрд┐рдХ рд╕реНрдерд╛рдкрдирд╛рдПрдБ рд╣реИрдВред рдпрд╣ рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рд╣реИ - рдХреЗрд╡рд▓ Google Chrome рдореЗрдВ рдЕрдзрд┐рдХ рд╣реИред рд╕рдореАрдХреНрд╖рд╛рдУрдВ рдХреЗ рдмреАрдЪ рдЖрдк Google Play рдкрд░ рдХреБрдЫ рдЕрдиреБрдкреНрд░рдпреЛрдЧреЛрдВ рдХреЗ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдФрд░ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реА рд╢рд┐рдХрд╛рдпрддреЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЕрдзреНрдпрдпрди рдХрд╛ рдХрд╛рд░рдг рдерд╛: рд╣рдордиреЗ рдпрд╣ рджреЗрдЦрдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдХреНрдпрд╛ рдпреВрд╕реА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреБрдЫ рдмреБрд░рд╛ рдХрд░ рд░рд╣рд╛ рд╣реИред рдФрд░ рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд╡рд╣ рдпрд╣ рдХрд░ рд░рд╣рд╛ рдерд╛!
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЛрдб рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдЪрд▓рд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рдкрддрд╛ рдЪрд▓рд╛,
рдЬреЛ Google Play рдкрд░
рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рдирд┐рдпрдореЛрдВ рдХрд╛ рдЦрдВрдбрди рдХрд░рддрд╛ рд╣реИ ред рдЗрд╕ рддрдереНрдп рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХрд┐ рдпреВрд╕реА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдирд┐рд╖реНрдкрд╛рджрди рдпреЛрдЧреНрдп рдХреЛрдб рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдЗрд╕реЗ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рдмрдирд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдорд┐рдЯрдо рд╣рдорд▓реЗ рдХрд╛ рд╕рдВрдЪрд╛рд▓рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рд╣рдо рдЗрд╕ рддрд░рд╣ рдХреЗ рд╣рдорд▓реЗ рдХреЛ рдЕрдВрдЬрд╛рдо рджреЗрддреЗ рд╣реИрдВред
рдиреАрдЪреЗ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╕рдм рдХреБрдЫ рдпреВрд╕реА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ рдЬреЛ рдЕрдзреНрдпрдпрди рдХреЗ рд╕рдордп Google Play рдкрд░ рдореМрдЬреВрдж рдерд╛:
package: com.UCMobile.intl versionName: 12.10.8.1172 versionCode: 10598 sha1 APK-: f5edb2243413c777172f6362876041eb0c3a928c
рд╣рдорд▓рд╛ рд╡реЗрдХреНрдЯрд░
рдпреВрд╕реА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдкреНрд░рдХрдЯ рдореЗрдВ, рдЖрдк
com.uc.deployment.UpgradeDeployService рдирд╛рдордХ рдПрдХ рд╕реЗрд╡рд╛ рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВред
<service android:exported="false" android:name="com.uc.deployment.UpgradeDeployService" android:process=":deploy" />
рдЬрдм рдпрд╣ рд╕реЗрд╡рд╛ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИ, рддреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░
puds.ucweb.com/upgrad/index.xhtml рдкрд░ POST рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреЗ рдХреБрдЫ рд╕рдордп рдмрд╛рдж рдпрд╛рддрд╛рдпрд╛рдд рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЬрд╡рд╛рдм рдореЗрдВ, рдЙрд╕реЗ рдПрдХ рдЕрдкрдбреЗрдЯ рдпрд╛ рдПрдХ рдирдпрд╛ рдореЙрдбреНрдпреВрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдХрдорд╛рдВрдб рдорд┐рд▓ рд╕рдХрддреА рд╣реИред рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ, рд╕рд░реНрд╡рд░ рдиреЗ рдРрд╕реА рдХрдорд╛рдВрдб рдирд╣реАрдВ рджреА, рд▓реЗрдХрд┐рди рд╣рдордиреЗ рджреЗрдЦрд╛ рдХрд┐ рдЬрдм рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рдкреАрдбреАрдПрдл рдХреЛ рдЦреЛрд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЬрд╛рддреА рд╣реИ, рддреЛ рдпрд╣ рдЙрдкрд░реЛрдХреНрдд рдкрддреЗ рдкрд░ рджреВрд╕рд░рд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рд╡рд╣ рдореВрд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рддрд╛ рд╣реИред рд╣рдорд▓реЗ рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдпреВрд╕реА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреА рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдирд┐рд░реНрдгрдп рд▓рд┐рдпрд╛: рдПрдХ рджреЗрд╢реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреАрдбреАрдПрдл рдЦреЛрд▓рдиреЗ рдХреА рдХреНрд╖рдорддрд╛, рдЬреЛ рдХрд┐ рдПрдкреАрдХреЗ рдореЗрдВ рдирд╣реАрдВ рд╣реИ рдФрд░ рдпрджрд┐ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ, рддреЛ рдЗрдВрдЯрд░рдиреЗрдЯ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ, рдпреВрд╕реА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдВрдЯрд░реИрдХреНрд╢рди рдХреЗ рдмрд┐рдирд╛ рдХреБрдЫ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ - рдпрджрд┐ рдЖрдк рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╢реБрд░реВ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдП рдЧрдП рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдмрдирд╛рдИ рдЧрдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рджреЗрддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдмрд╛рддрдЪреАрдд рдХреЗ рдкреНрд░реЛрдЯреЛрдХреЙрд▓ рдХрд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдЕрдзреНрдпрдпрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдордиреЗ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ рдХрд┐ рдЗрдВрдЯрд░рд╕реЗрдкреНрдЯреЗрдб рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдирд╛ рдФрд░ рдкреАрдбреАрдПрдл рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдмрджрд▓рдирд╛ рдЖрд╕рд╛рди рдерд╛ред
рдЗрд╕рд▓рд┐рдП, рдЬрдм рдХреЛрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрд┐рд╕реА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд╕реАрдзреЗ рдкреАрдбреАрдПрдл рдЦреЛрд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рддреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдЯреНрд░реИрдлрд╝рд┐рдХ рдореЗрдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

рдкрд╣рд▓реЗ
puds.ucweb.com/upgrad/index.xhtml рдкрд░ POST рдЕрдиреБрд░реЛрдз рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж
рдкреАрдбреАрдПрдл рдФрд░ рдХрд╛рд░реНрдпрд╛рд▓рдп рд╕реНрд╡рд░реВрдкреЛрдВ рдХреЛ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЗ рд╕рд╛рде рд╕рдВрдЧреНрд░рд╣ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВред рдпрд╣ рдорд╛рдирдирд╛ тАЛтАЛрддрд░реНрдХрд╕рдВрдЧрдд рд╣реИ рдХрд┐ рдкрд╣рд▓реЗ рдЕрдиреБрд░реЛрдз рдореЗрдВ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╕рд╛рд░рд┐рдд рд╣реЛрддреА рд╣реИ (рдЖрд╡рд╢реНрдпрдХ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо рд╡рд╛рд╕реНрддреБрдХрд▓рд╛), рдФрд░ рдЗрд╕рдХреЗ рдЬрд╡рд╛рдм рдореЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рд╣реЛрддреА рд╣реИ рдЬрд┐рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ: рдкрддрд╛ рдФрд░, рд╕рдВрднрд╡рддрдГ, рдХреБрдЫ рдФрд░ред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ рдЕрдиреБрд░реЛрдз рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рд╣реИред
рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕реНрд╡рдпрдВ рдЬрд╝рд┐рдк рдореЗрдВ рдкреИрдХ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред

рдЯреНрд░реИрдлрд╝рд┐рдХ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдХреЛрдб рдЦреЛрдЬреЗрдВ
рдЪрд▓реЛ рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддреЗ рд╣реИрдВред рд╣рдо рдХрдХреНрд╖рд╛ рдХреЗ рдХреЛрдб рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред
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(); mb(v3_4); h v4_2 = new h(); mb(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.baacgetCpuArch())); v3_2.add(g.fs("cpu_arch", com.uc.baacPb())); String v4_3 = com.uc.baacPd(); 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.baacPc())); 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.baacJl()))); v3_2.add(g.fs("ram_1", String.valueOf(com.uc.baahPo()))); v3_2.add(g.fs("totalram", String.valueOf(com.uc.baahOL()))); 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 = gi(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.dci 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.dci$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); mb(v3_5, false); v3_5.setMethod("POST"); v3_5.setBodyProvider(v1); v0_2.b(v3_5); this.iGY.iGI.a(arg9, "up_null", "yes", "success"); this.iGY.iGI.b(arg9); }
рд╣рдо рдпрд╣рд╛рдВ POST рдЕрдиреБрд░реЛрдз рдХреЗ рдЧрдарди рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВред рд╣рдо 16 рдмрд╛рдЗрдЯреНрд╕ рдХреА рдПрдХ рд╕рд░рдгреА рдФрд░ рдЗрд╕рдХреЗ рднрд░рдиреЗ рдкрд░ рдзреНрдпрд╛рди рдЖрдХрд░реНрд╖рд┐рдд рдХрд░рддреЗ рд╣реИрдВ: 0x5F, 0, 0x1F, -50 (= 0xCE)ред рдКрдкрд░ рдХреЗ рдЕрдиреБрд░реЛрдз рдореЗрдВ рд╣рдордиреЗ рдЬреЛ рджреЗрдЦрд╛ рд╡рд╣ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред
рдЙрд╕реА рдХрдХреНрд╖рд╛ рдореЗрдВ, рдЖрдк рдПрдХ рдиреЗрд╕реНрдЯреЗрдб рдХреНрд▓рд╛рд╕ рдХреЛ рдиреЛрдЯрд┐рд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдФрд░ рджрд┐рд▓рдЪрд╕реНрдк рддрд░реАрдХрд╛ рд╣реИ:
public final void a(l arg10, byte[] arg11) { f v0 = this.iGQ; StringBuilder v1 = new StringBuilder("["); v1.append(arg10.iGX.ipR); v1.append("]:UpgradeSuccess"); byte[] v1_1 = null; if(arg11 == null) { } else if(arg11.length < 16) { } else { if(arg11[0] != 0x60 && arg11[3] != 0xFFFFFFD0) { goto label_57; } int v3 = 1; int v5 = arg11[1] == 1 ? 1 : 0; if(arg11[2] != 1 && arg11[2] != 11) { if(arg11[2] == 0x1F) { } else { v3 = 0; } } byte[] v7 = new byte[arg11.length - 16]; System.arraycopy(arg11, 16, v7, 0, v7.length); if(v3 != 0) { v7 = gj(arg11[2], v7); } if(v7 == null) { goto label_57; } if(v5 != 0) { v1_1 = gP(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 = gb(arg10, v1_1); if(v11 == null) { v0.iGY.iGI.a(arg10, "up_decode", "yes", "fail"); return; } if(v0.iGY.iGt) { v0.d(arg10); } if(v0.iGY.iGo != null) { v0.iGY.iGo.a(0, ((o)v11)); } if(v0.iGY.iGs) { v0.iGY.a(((o)v11)); v0.iGY.iGI.a(v11, "up_silent", "yes", "success"); v0.iGY.iGI.a(v11); return; } v0.iGY.iGI.a(v11, "up_silent", "no", "success"); } }
рд╡рд┐рдзрд┐ рдЗрдирдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдмрд╛рдЗрдЯреНрд╕ рдХреА рдПрдХ рд╕рд░рдгреА рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИ рдФрд░ рдЬрд╛рдВрдЪ рдХрд░рддреА рд╣реИ рдХрд┐ рд╢реВрдиреНрдп рдмрд╛рдЗрдЯ 0x60 рд╣реИ рдпрд╛ рддреАрд╕рд░рд╛ рдмрд╛рдЗрдЯ 0xD0 рд╣реИ, рдФрд░ рджреВрд╕рд░рд╛ рдмрд╛рдЗрдЯ 1, 11 рдпрд╛ 0x1F рд╣реИред рд╣рдо рд╕рд░реНрд╡рд░ рд╕реЗ рдЙрддреНрддрд░ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ: рд╢реВрдиреНрдп рдмрд╛рдЗрдЯ - 0x60, рджреВрд╕рд░рд╛ - 0x1F, рддреАрд╕рд░рд╛ - 0x60ред рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдПред рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП ("up_decrypt", рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП), рдПрдХ рд╡рд┐рдзрд┐ рдХреЛ рдпрд╣рд╛рдВ рдмреБрд▓рд╛рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╕рд░реНрд╡рд░ рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рдХрдо рдХрд░ рджреЗрддрд╛ рд╣реИред
рд╣рдо
рдЬреАрдЬреЗ рд╡рд┐рдзрд┐ рд╕реЗ рдЧреБрдЬрд░рддреЗ рд╣реИрдВред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдСрдлрд╕реЗрдЯ 2 рдкрд░ рдмрд╛рдЗрдЯ (рдпрд╛рдиреА, рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ 0x1F) рдХреЛ рдкрд╣рд▓реЗ рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд╕рд░реНрд╡рд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рдмрд┐рдирд╛
рдкрд╣рд▓реЗ 16 рдмрд╛рдЗрдЯреНрд╕ред
public static byte[] j(int arg1, byte[] arg2) { if(arg1 == 1) { arg2 = cc(arg2, c.adu); } else if(arg1 == 11) { arg2 = m.aF(arg2); } else if(arg1 != 0x1F) { } else { arg2 = EncryptHelper.decrypt(arg2); } return arg2; }
рдЬрд╛рд╣рд┐рд░ рд╣реИ, рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдХрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИ, рдФрд░ рд╡рд╣реА рдмрд╛рдЗрдЯ, рдЬреЛ рд╣рдорд╛рд░реЗ рдореЗрдВ рд╣реИ
рдорд╛рдорд▓рд╛ 0x1F рд╣реИ, рддреАрди рд╕рдВрднрд╛рд╡рд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рджрд░реНрд╢рд╛рддрд╛ рд╣реИред
рд╣рдо рдХреЛрдб рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдирд╛ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реИрдВред рдПрдХ-рджреЛ
рдЪреБрдЯрдХрд┐рдпреЛрдВ рдХреЗ рдмрд╛рдж, рд╣рдо рдмрд╛рдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ
рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдмрд╛рдпрдмрд╛рдЗрдЯреНрд╕рдмрд╛рдпрдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рдеред
рдпрд╣рд╛рдВ, рджреЛ рдФрд░ рдмрд╛рдЗрдЯреНрд╕ рд╣рдорд╛рд░реЗ рдЙрддреНрддрд░ рд╕реЗ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рд╣реИрдВ, рдФрд░ рдЙрдирд╕реЗ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рд╛рдкреНрдд рдХреА рдЬрд╛рддреА рд╣реИред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд╕рдВрджреЗрд╢ рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдВрдЬреА рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
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];
рдЖрдЧреЗ рджреЗрдЦрддреЗ рд╣реБрдП, рд╣рдо рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдЗрд╕ рд╕реНрддрд░ рдкрд░ рдХреБрдВрдЬреА рдЕрднреА рддрдХ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рд╣реБрдИ рд╣реИ, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рдЗрд╕рдХреА "рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛" рд╣реИред рдХреБрдВрдЬреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИред
рдЕрдЧрд▓реА рд╡рд┐рдзрд┐ рдореЗрдВ, рдореМрдЬреВрджрд╛ рдорд╛рдкрджрдВрдбреЛрдВ рдореЗрдВ рджреЛ рдФрд░ рдЬреЛрдбрд╝реЗ рдЬрд╛рддреЗ рд╣реИрдВ, рдФрд░ рдЙрдирдореЗрдВ рд╕реЗ рдЪрд╛рд░ рд╣реИрдВ: рдЬрд╛рджреВ рдирдВрдмрд░ 16, рдкреНрд░рдореБрдЦ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛, рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдбреЗрдЯрд╛ рдФрд░ рдПрдХ рд╕рдордЭрджрд╛рд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ (рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЦрд╛рд▓реА)ред
public final byte[] l(String keyId, byte[] encrypted) throws SecException { return this.ayJ().staticBinarySafeDecryptNoB64(16, keyId, encrypted, ""); }
рдХрдИ рдмрджрд▓рд╛рд╡реЛрдВ рдХреЗ рдмрд╛рдж, рд╣рдо
com.alibaba.wireless.security.open.staticdataencrypt.IStaticDataEnnryptComponent рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреА
staticBinarySafeDecryptNoB64 рд╡рд┐рдзрд┐ рдкрд░
рдкрд╣реБрдБрдЪрддреЗ рд╣реИрдВ ред рдореБрдЦреНрдп рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛрдб рдореЗрдВ рдХреЛрдИ рд╡рд░реНрдЧ рдирд╣реАрдВ рд╣реИрдВ рдЬреЛ рдЗрд╕ рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддреЗ рд╣реИрдВред рдРрд╕рд╛ рд╡рд░реНрдЧ рдлрд╝рд╛рдЗрд▓
lib / armeabi-v7a / libsgmain.so рдореЗрдВ рд╣реЛрддрд╛ рд╣реИ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ .so рдирд╣реАрдВ, рдмрд▓реНрдХрд┐
ajar рд╣реИред рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдмреНрдпрд╛рдЬ рдХреА рд╡рд┐рдзрд┐ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИ:
package com.alibaba.wireless.security.ai;
рдпрд╣рд╛рдВ, рдорд╛рдкрджрдВрдбреЛрдВ рдХреА рд╣рдорд╛рд░реА рд╕реВрдЪреА рджреЛ рдФрд░ рдкреВрд░реНрдгрд╛рдВрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкреВрд░рдХ рд╣реИ: 2 рдФрд░ 0. рджреНрд╡рд╛рд░рд╛
рд╕рднреА рдХреЗ рд▓рд┐рдП, 2 рдХрд╛ рдЕрд░реНрде рд╣реИ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди, рдЬреИрд╕реЗ рдХрд┐
javax.crypto.Cipher рд╕рд┐рд╕реНрдЯрдо рдХреНрд▓рд╛рд╕ рдХреА
рд╕рд╛рдорд╛рдиреНрдп рд╡рд┐рдзрд┐ рдореЗрдВред рдФрд░ рдпрд╣ рд╕рдм 10601 рдирдВрдмрд░ рдХреЗ рд╕рд╛рде рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд░рд╛рдЙрдЯрд░ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдпрд╣, рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, рдХрдорд╛рдВрдб рдирдВрдмрд░ рд╣реИред
рдЕрдЧрд▓реА рд╕рдВрдХреНрд░рдордг рд╢реНрд░реГрдВрдЦрд▓рд╛ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдПрдХ рд╡рд░реНрдЧ рдорд┐рд▓рддрд╛ рд╣реИ рдЬреЛ
IRouterComponent рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдФрд░
doCommand рд╡рд┐рдзрд┐ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рддрд╛ рд╣реИ:
package com.alibaba.wireless.security.mainplugin; import com.alibaba.wireless.security.framework.IRouterComponent; import com.taobao.wireless.security.adapter.JNICLibrary; public class a implements IRouterComponent { public a() { super(); } public Object doCommand(int arg2, Object[] arg3) { return JNICLibrary.doCommandNative(arg2, arg3); } }
рдФрд░
JNICLibrary рдХреНрд▓рд╛рд╕ рднреА, рдЬрд┐рд╕рдореЗрдВ
doCommandNative рдореВрд▓ рд╡рд┐рдзрд┐
рдШреЛрд╖рд┐рдд рдХреА рдЧрдИ рд╣реИ :
package com.taobao.wireless.security.adapter; public class JNICLibrary { public static native Object doCommandNative(int arg0, Object[] arg1); }
рддреЛ, рд╣рдо рдореВрд▓ рдХреЛрдб рдореЗрдВ
doCommandNative рд╡рд┐рдзрд┐ рдЦреЛрдЬрдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИред рдФрд░ рдлрд┐рд░ рдордЬрд╛ рд╢реБрд░реВ рд╣реЛрддрд╛ рд╣реИред
рдорд╢реАрди рдХреЛрдб рдХрд╛ рд╡рд┐рд░реЛрдз
Libsgmain.so рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рдПрдХ рдореВрд▓ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ (рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ .jar рд╣реИ рдФрд░ рдЬрд┐рд╕рдореЗрдВ рд╣рдореЗрдВ рдХреБрдЫ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдХрд╛ рдереЛрдбрд╝рд╛ рд╕рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдорд┐рд▓рд╛ рд╣реИ) рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ:
libsgmainso-6.4.36.so ред рдЗрд╕реЗ рдЖрдИрдбреАрдП рдореЗрдВ рдЦреЛрд▓реЗрдВ рдФрд░ рддреНрд░реБрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдмрдХреНрд╕реЗ рдХрд╛ рдПрдХ рдЧреБрдЪреНрдЫрд╛ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдиреБрднрд╛рдЧ рд╢реАрд░реНрд╖ рд▓реЗрдЦ рддрд╛рд▓рд┐рдХрд╛ рдЕрдорд╛рдиреНрдп рд╣реИред рдпрд╣ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ: рдИрдПрд▓рдПрдл рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд▓реЛрдб рдХрд░рдиреЗ рдФрд░ рдЗрд╕рдХрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдкреНрд░реЛрдЧреНрд░рд╛рдо рд╣реЗрдбрд░ рдЯреЗрдмрд▓ рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╣рдо рд╣реЗрдбрд░ рдореЗрдВ рд╕рдВрдмрдВрдзрд┐рдд рдлрд╝реАрд▓реНрдбреНрд╕ рдХреЛ рд╢реВрдиреНрдп рдХрд░рддреЗ рд╣реБрдП, рдмрд╕ рд╕реЗрдХреНрд╢рди рдЯреЗрдмрд▓ рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВред

рдлрд┐рд░ рд╕реЗ рдЖрдИрдбреАрдП рдореЗрдВ рдлрд╝рд╛рдЗрд▓ рдЦреЛрд▓реЗрдВред
рдЬрд╛рд╡рд╛ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХреЛ рдмрддрд╛рдиреЗ рдХреЗ рджреЛ рддрд░реАрдХреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдореВрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдореВрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд╛рд╡рд╛ рдХреЛрдб рдореЗрдВ рдШреЛрд╖рд┐рдд рд╡рд┐рдзрд┐ рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рд╣реИред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рдлреЙрд░реНрдо рдХрд╛ рдирд╛рдо рджреЗрдирд╛ рд╣реИ
Java_package_name_ClassName_Method_name ред
рджреВрд╕рд░рд╛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХреЛ рд▓реЛрдб рдХрд░рддреЗ рд╕рдордп рдЗрд╕реЗ рдкрдВрдЬреАрдХреГрдд рдХрд░рдирд╛ рд╣реИ (
JNI_OnLoad рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ)
RegisterNatives рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░рдХреЗред
рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрджрд┐ рдЖрдк рдкрд╣рд▓реА рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдирд╛рдо рдЗрд╕ рддрд░рд╣ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
Java_com_taobao_wireless_security_adapter_JNICLibrary_doCommandNative ред
рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ, рдРрд╕рд╛ рдХреЛрдИ рднреА рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреЛ рдкрдВрдЬреАрдХрд░рдгрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рджреЗрдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╣рдо
JNI_OnLoad рдлрд╝рдВрдХреНрд╢рди рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдирд┐рдореНрди рдЪрд┐рддреНрд░ рджреЗрдЦрддреЗ рд╣реИрдВ:

рдпрд╣рд╛рдБ рдХреНрдпрд╛ рд╣реЛ рд░рд╣рд╛ рд╣реИ? рдкрд╣рд▓реА рдирдЬрд╝рд░ рдореЗрдВ, рдлрд╝рдВрдХреНрд╢рди рдХреА рд╢реБрд░реБрдЖрдд рдФрд░ рдЕрдВрдд рдПрдЖрд░рдПрдо рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╣реИрдВред рд╕реНрдЯреИрдХ рдкрд░ рдкрд╣рд▓рд╛ рдирд┐рд░реНрджреЗрд╢ рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд░рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рдлрд╝рдВрдХреНрд╢рди рдЕрдкрдиреЗ рдХрд╛рдо рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдЧрд╛ (рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ R0, R1 рдФрд░ R2), рд╕рд╛рде рд╣реА рд░рдЬрд┐рд╕реНрдЯрд░ LR рдХреА рд╕рд╛рдордЧреНрд░реА, рдЬрд┐рд╕рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд╡рд╛рдкрд╕реА рдкрддрд╛ рд╕реНрдерд┐рдд рд╣реИред рдЕрдВрддрд┐рдо рдирд┐рд░реНрджреЗрд╢ рдХреЗ рд╕рд╛рде, рд╕рд╣реЗрдЬреЗ рдЧрдП рд░рдЬрд┐рд╕реНрдЯрд░реЛрдВ рдХреЛ рдмрд╣рд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рд░рд┐рдЯрд░реНрди рдкрддрд╛ рддреБрд░рдВрдд рдкреАрд╕реА рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рд░рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк рдмрд╛рд░реАрдХреА рд╕реЗ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдкреЗрдирд▓реНрдЯреАрдЯреНрдпреВрдЯ рдЕрдиреБрджреЗрд╢ рд╕реНрдЯреИрдХ рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рд░рд┐рдЯрд░реНрди рдПрдбреНрд░реЗрд╕ рдХреЛ рдмрджрд▓ рджреЗрддрд╛ рд╣реИред рд╣рдо рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕рдХреЗ рдмрд╛рдж рдХреНрдпрд╛ рд╣реЛрдЧрд╛
рдХреЛрдб рдирд┐рд╖реНрдкрд╛рджрдиред рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкрддрд╛ 0xB130 рдХреЛ R1 рдореЗрдВ рд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, 5 рдЗрд╕реЗ рд╕реЗ рдШрдЯрд╛рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рдЗрд╕реЗ R0 рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ 0x10 рдХреЛ рдЗрд╕рдореЗрдВ рдЬреЛрдбрд╝ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ 0xB13B рдирд┐рдХрд▓рд╛ред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдЖрдИрдбреАрдП рд╕реЛрдЪрддрд╛ рд╣реИ рдХрд┐ рдЕрдВрддрд┐рдо рдирд┐рд░реНрджреЗрд╢ рдореЗрдВ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╡рд╛рдкрд╕реА рд╣реИ, рд▓реЗрдХрд┐рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЧрдгрдирд╛ рдХрд┐рдП рдЧрдП рдкрддреЗ 0xB13B рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрдХреНрд░рдордг рд╣реИред
рдпрд╣ рдпрд╛рдж рд░рдЦрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдПрдЖрд░рдПрдо рдкреНрд░реЛрд╕реЗрд╕рд░ рдХреЗ рджреЛ рдореЛрдб рдФрд░ рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рджреЛ рд╕реЗрдЯ рд╣реИрдВ: рдПрдЖрд░рдПрдо рдФрд░ рдердореНрдмред рдкрддреЗ рдХрд╛ рдХрдо рд╕реЗ рдХрдо рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░реЛрд╕реЗрд╕рд░ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдХреМрди рд╕рд╛ рдирд┐рд░реНрджреЗрд╢ рд╕реЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИред рдпрд╣реА рд╣реИ, рдкрддрд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ 0xB13A рд╣реИ, рдФрд░ рдХрдо рдмрд┐рдЯ рдореЗрдВ рдЗрдХрд╛рдИ рдЕрдВрдЧреВрдареЗ рдореЛрдб рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдкреНрд░рддреНрдпреЗрдХ рдлрд╝рдВрдХреНрд╢рди рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдПрдХ рд╕рдорд╛рди "рдПрдбреЗрдкреНрдЯрд░" рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░
рдХрдЪрд░рд╛ рдХреЛрдбред рдЖрдЧреЗ рд╣рдо рдЙрди рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрдВрдЧреЗ - рд╣рдо рд╕рд┐рд░реНрдл рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ
рд▓рдЧрднрдЧ рд╕рднреА рдХрд╛рд░реНрдпреЛрдВ рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╢реБрд░реБрдЖрдд рдереЛрдбрд╝реА рдФрд░ рд╣реИред
рдЪреВрдВрдХрд┐ рдХреЛрдб рдореЗрдВ 0xB13A рдХреЗ рд▓рд┐рдП рдХреЛрдИ рд╕реНрдкрд╖реНрдЯ рд╕рдВрдХреНрд░рдордг рдирд╣реАрдВ рд╣реИ, рдЖрдИрдбреАрдП рдиреЗ рд╕реНрд╡рдпрдВ рдпрд╣ рдирд╣реАрдВ рдкрд╣рдЪрд╛рдирд╛ рдХрд┐ рдХреЛрдб рдЗрд╕ рд╕реНрдерд╛рди рдкрд░ рдерд╛ред рдЗрд╕реА рдХрд╛рд░рдг рд╕реЗ, рдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдХреЛрдб рдХреЛ рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдиреНрдпрддрд╛ рдирд╣реАрдВ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЛ рдХреБрдЫ рд╣рдж рддрдХ рдореБрд╢реНрдХрд┐рд▓ рдмрдирд╛рддрд╛ рд╣реИред рд╣рдо рдЖрдИрдбреАрдП рдХреЛ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдХреЛрдб рдпрд╣рд╛рдВ рд╣реИ, рдФрд░ рдпрд╣рд╛рдВ рдкрд░рд┐рдгрд╛рдо рд╣реИ:

0xB144 рдкрд░, рддрд╛рд▓рд┐рдХрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╢реБрд░реВ рд╣реЛрддреА рд╣реИред Sub_494C рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?

рдЬрдм рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ LR рд░рдЬрд┐рд╕реНрдЯрд░ рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рд╣рдореЗрдВ рдКрдкрд░ рдЙрд▓реНрд▓рд┐рдЦрд┐рдд рддрд╛рд▓рд┐рдХрд╛ рдХрд╛ рдкрддрд╛ рдорд┐рд▓рддрд╛ рд╣реИ (0xB144)ред R0 рдореЗрдВ, рдЗрд╕ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕реВрдЪрдХрд╛рдВрдХред рдпрд╣реА рд╣реИ, рдПрдХ рдорд╛рди рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдПрд▓рдЖрд░ рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ
рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрддрд╛ред рдЖрдЗрдП рдЗрд╕реЗ рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ: 0xB144 + [0xB144 + 8 * 4] = 0xB144 + 0x120 = 0xB264ред рд╣рдо рдкреНрд░рд╛рдкреНрдд рдкрддреЗ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдХреЗрд╡рд▓ рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рд╕реЗ 0xB140 рдкрд░ рд╕рдВрдХреНрд░рдордг рдХрд░рддреЗ рд╣реИрдВ:

рдЕрдм рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рд╕реВрдЪрдХрд╛рдВрдХ 0x20 рдХреЗ рд╕рд╛рде рдСрдлрд╕реЗрдЯ рджреНрд╡рд╛рд░рд╛ рдПрдХ рдмрджрд▓рд╛рд╡ рд╣реЛрдЧрд╛ред
рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, рдХреЛрдб рдореЗрдВ рдРрд╕реЗ рдХрдИ рдмрджрд▓рд╛рд╡ рд╣реИрдВред рд╕рд╡рд╛рд▓ рдЙрдарддрд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдкрддреЛрдВ рдХреА рдЧрдгрдирд╛ рдХрд┐рдП рдмрд┐рдирд╛, рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдирд┐рдкрдЯрдирд╛ рд╕рдВрднрд╡ рд╣реИ рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдЖрдИрдбреАрдП рдореЗрдВ рдХреЛрдб рдХреЛ рдкреИрдЪ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣рдорд╛рд░реА рд╕рд╣рд╛рдпрддрд╛ рдХреЗ рд▓рд┐рдП рдЖрддреА рд╣реИ:
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:
рд╣рдо рдХрд░реНрд╕рд░ рдХреЛ 0xB26A рд▓рд╛рдЗрди рдкрд░ рд░рдЦрддреЗ рд╣реИрдВ, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рддреЗ рд╣реИрдВ рдФрд░ 0xB4B0 рдкрд░ рд╕рдВрдХреНрд░рдордг рджреЗрдЦрддреЗ рд╣реИрдВ:

рдЖрдИрдбреАрдП рдиреЗ рдлрд┐рд░ рд╕реЗ рдЗрд╕ рд╕рд╛рдЗрдЯ рдХреЛ рдПрдХ рдХреЛрдб рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдкрд╣рдЪрд╛рдирд╛ред рд╣рдо рдЙрд╕рдХреА рдорджрдж рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рд╡рд╣рд╛рдВ рдПрдХ рдФрд░ рдирд┐рд░реНрдорд╛рдг рджреЗрдЦрддреЗ рд╣реИрдВ:

рдмреАрдПрд▓рдПрдХреНрд╕ рдХреЗ рдмрд╛рдж рдХреЗ рдирд┐рд░реНрджреЗрд╢ рдмрд╣реБрдд рд╕рд╛рд░реНрдердХ рдирд╣реАрдВ рд▓рдЧрддреЗ рд╣реИрдВ, рдпрд╣ рдХреБрдЫ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкреВрд░реНрд╡рд╛рдЧреНрд░рд╣ рдХреА рддрд░рд╣ рд╣реИред рд╣рдо рд╕рдм_4964 рдореЗрдВ рджреЗрдЦрддреЗ рд╣реИрдВ:

рджрд░рдЕрд╕рд▓, рдпрд╣рд╛рдБ рдПрд▓рдЖрд░ рдореЗрдВ рдкрдбрд╝реЗ рдкрддреЗ рдкрд░ рдбреЙрд░реНрдб рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕ рдкрддреЗ рдкрд░ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдмрд╛рдж рдкреНрд░рд╛рдкреНрдд рдкрддреЗ рдкрд░ рдореВрд▓реНрдп рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╕реНрдЯреИрдХ рдкрд░ рдзрдХреЗрд▓ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, 4 рдХреЛ LR рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЬрд╛рддрд╛ рд╣реИ, рддрд╛рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рд╕реЗ рд▓реМрдЯрдиреЗ рдХреЗ рдмрд╛рдж рдЗрд╕реА рдСрдлрд╕реЗрдЯ рдХреЛ рдХреВрдж рд╕рдХреЗрдВред рддрдм POP {R1} рдХрдорд╛рдВрдб рд╕реНрдЯреИрдХ рд╕реЗ рдкреНрд░рд╛рдкреНрдд рдореВрд▓реНрдп рдХреЛ рдЦреАрдВрдЪрддрд╛ рд╣реИред рдпрджрд┐ рдЖрдк рдкрддреЗ 0xB4BA + 0xEA = 0xB5A4 рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдкрддрд╛ рдкреГрд╖реНрда рдХреЗ рд╕рдорд╛рди рдХреБрдЫ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ:

рдЗрд╕ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреЛ рдкреИрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдХреЛрдб рд╕реЗ рджреЛ рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ: рдСрдлрд╕реЗрдЯ рдФрд░ рд░рдЬрд┐рд╕реНрдЯрд░ рд╕рдВрдЦреНрдпрд╛ рдЬрд┐рд╕рдореЗрдВ рдЖрдк рдкрд░рд┐рдгрд╛рдо рдбрд╛рд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдкреНрд░рддреНрдпреЗрдХ рд╕рдВрднрд╛рд╡рд┐рдд рд░рдЬрд┐рд╕реНрдЯрд░ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рд╕реЗ рдПрдХ рдХреЛрдб рдХреЛрдб рддреИрдпрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
patches = {} patches[0] = (0x00, 0xbf, 0x01, 0x48, 0x00, 0x68, 0x02, 0xe0) patches[1] = (0x00, 0xbf, 0x01, 0x49, 0x09, 0x68, 0x02, 0xe0) patches[2] = (0x00, 0xbf, 0x01, 0x4a, 0x12, 0x68, 0x02, 0xe0) patches[3] = (0x00, 0xbf, 0x01, 0x4b, 0x1b, 0x68, 0x02, 0xe0) patches[4] = (0x00, 0xbf, 0x01, 0x4c, 0x24, 0x68, 0x02, 0xe0) patches[5] = (0x00, 0xbf, 0x01, 0x4d, 0x2d, 0x68, 0x02, 0xe0) patches[8] = (0x00, 0xbf, 0xdf, 0xf8, 0x06, 0x80, 0xd8, 0xf8, 0x00, 0x80, 0x01, 0xe0) patches[9] = (0x00, 0xbf, 0xdf, 0xf8, 0x06, 0x90, 0xd9, 0xf8, 0x00, 0x90, 0x01, 0xe0) patches[10] = (0x00, 0xbf, 0xdf, 0xf8, 0x06, 0xa0, 0xda, 0xf8, 0x00, 0xa0, 0x01, 0xe0) patches[11] = (0x00, 0xbf, 0xdf, 0xf8, 0x06, 0xb0, 0xdb, 0xf8, 0x00, 0xb0, 0x01, 0xe0) ea = here() if (get_wide_word(ea) == 0xb082
рд╣рдо рдЙрд╕ рдирд┐рд░реНрдорд╛рдг рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдХрд░реНрд╕рд░ рд░рдЦрддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рд╣рдо рдмрджрд▓рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ - 0xB4B2 - рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдПрдБ:

рдХреЛрдб рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдмрддрд╛рдП рдЧрдП рдирд┐рд░реНрдорд╛рдгреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдпрд╣рд╛рдБ рднреА рдЗрд╕ рддрд░рд╣ рд╣реИрдВ:

рдЬреИрд╕рд╛ рдХрд┐ рдкрд┐рдЫрд▓реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, BLX рдирд┐рд░реНрджреЗрд╢ рдХреЗ рдмрд╛рдж, рдПрдХ рдСрдлрд╕реЗрдЯ рд╣реИ:

рд╣рдо рдПрд▓рдЖрд░ рд╕реЗ рдкрддреЗ рдкрд░ рдСрдлрд╕реЗрдЯ рд▓реЗрддреЗ рд╣реИрдВ, рдЗрд╕реЗ рдПрд▓рдЖрд░ рдореЗрдВ рдЬреЛрдбрд╝рддреЗ рд╣реИрдВ рдФрд░ рд╡рд╣рд╛рдВ рдЬрд╛рддреЗ рд╣реИрдВред 0x72044 + 0xC = 0x72050ред рдЗрд╕ рдбрд┐рдЬрд╝рд╛рдЗрди рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ:
def put_unconditional_branch(source, destination): offset = (destination - source - 4) >> 1 if offset > 2097151 or offset < -2097152: raise RuntimeError("Invalid offset") if offset > 1023 or offset < -1024: instruction1 = 0xf000 | ((offset >> 11) & 0x7ff) instruction2 = 0xb800 | (offset & 0x7ff) patch_word(source, instruction1) patch_word(source + 2, instruction2) else: instruction = 0xe000 | (offset & 0x7ff) patch_word(source, instruction) ea = here() if get_wide_word(ea) == 0xb503:
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдкрд░рд┐рдгрд╛рдо:

рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рд╕рдм рдХреБрдЫ рдкреИрдЪ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, рдЖрдк рдЖрдИрдбреАрдП рдХреЛ рдЗрд╕рдХреА рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╢реБрд░реБрдЖрдд рдореЗрдВ рдЗрдВрдЧрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдЯреБрдХрдбрд╝реЛрдВ рдореЗрдВ рд╕рднреА рдлрд╝рдВрдХреНрд╢рди рдХреЛрдб рдПрдХрддреНрд░ рдХрд░реЗрдЧрд╛, рдФрд░ рдпрд╣ HexRays рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╡рд┐рдШрдЯрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдбрд┐рдХреЛрдбрд┐рдВрдЧ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕
рд╣рдордиреЗ рд╕реАрдЦрд╛ рд╣реИ рдХрд┐ рдпреВрд╕реА рдмреНрд░рд╛рдЙрдЬрд░ рд╕реЗ
libsgmainso-6.4.36.so рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рдорд╢реАрди рдХреЛрдб рдХреА
рдЧрдбрд╝рдмрдбрд╝реА рд╕реЗ рдХреИрд╕реЗ
рдирд┐рдкрдЯреЗрдВ рдФрд░
JNI_OnLoad рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд▓рд┐рдП рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
int __fastcall real_JNI_OnLoad(JavaVM *vm) { int result;
рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдкрдВрдХреНрддрд┐рдпреЛрдВ рдкрд░ рдзреНрдпрд╛рди рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:
sub_73E24(&unk_83EA6, &v6, 49); clazz = (jclass)((int (__fastcall *)(JNIEnv *, int *))(*env)->FindClass)(env, &v6);
рдЙрдк_73E24 рдлрд╝рдВрдХреНрд╢рди рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╡рд░реНрдЧ рдирд╛рдо рдХреЛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рддрд╛ рд╣реИред , , . , , . .
FindClass , . , тАФ . , , . ,
sub_73E24. int __fastcall sub_73E56(unsigned __int8 *in, unsigned __int8 *out, size_t size) { int v4;
sub_7AF78 ( ). :
┬лDcO/lcK+h?m3c*q@┬╗ ( , ), тАФ . ,
sub_6115C . 3. , .
int __fastcall sub_611B4(struc_1 *a1, _DWORD *a2) { int v3;
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];
,
doCommandNative . . , .
int __fastcall doCommandNative(JNIEnv *env, jobject obj, int command, jarray args) { int 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, switch: Edit -> Other -> Specify switch idiom.

. , ,
sub_6115C :

switch, case 3 RC4. ,
doCommandNative . ,
magicInt 16. case тАУ , .

AES!
, : , , , ( AES). -
sub_6115C , , , .
, Android Studio, , , , , , .
UC Browser ┬л┬╗. , , . :) , , , . . .
:

ARM R0-R3, , тАФ . LR . , , . , , PUSH.W {R0-R10,LR}. R7 , .
fopen /data/local/tmp/aes ┬лab┬╗,
. . . R0 , R1 тАФ . , . , , .
fopen .
aes int . ,
fwrite .

, , .

,
aes .
APK , , /, . , , . , . - , . , UC Browser , , , : onCreate .
const/16 v1, 0x62 new-array v1, v1, [B fill-array-data v1, :encrypted_data const/16 v0, 0x1f invoke-static {v0, v1}, Lcom/uc/browser/core/d/c/g;->j(I[B)[B move-result-object v1 array-length v2, v1 invoke-static {v2}, Ljava/lang/String;->valueOf(I)Ljava/lang/String; move-result-object v2 const-string v0, "ololo" invoke-static {v0, v2}, Landroid/util/Log;->d(Ljava/lang/String;Ljava/lang/String;)I
, , , . NullPointerException, . . null.
, : ┬лMETA-INF/┬╗ ".RSA". , . . , , , . , ┬лMETA-INF/┬╗ ┬лBLABLINF/┬╗, APK .
, , , . рдмрд┐рдВрдЧреЛ! !
MitM
, . CBC.

URL , - MD5, ┬лextract_unzipsize┬╗ . : MD5 , . . , , Intent ┬лPWNED!┬╗. :
puds.ucweb.com/upgrade/index.xhtml . MD5 ( ), .
, . , -
. , :

LEB128. , , , .
тАж тАУ ! :) .
https://www.youtube.com/watch?v=Nfns7uH03J8UC Browser, . , . тАФ , , , .
UC Browser , , - . . , , , . 27
UC Browser 12.10.9.1193, HTTPS:
puds.ucweb.com/upgrade/index.xhtml .
, ┬л┬╗ PDF ┬л, - !┬╗. PDF , , Google Play.