UC рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рдХрдордЬреЛрд░реАрд╣рд░реВ рдЦреЛрдЬреНрджреИ

UC рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рдХрдордЬреЛрд░реАрд╣рд░реВ рдЦреЛрдЬреНрджреИ

рдкрд░рд┐рдЪрдп

рдорд╛рд░реНрдЪрдХреЛ рдЕрдиреНрддреНрдпрдорд╛ рд╣рд╛рдореАрд▓реЗ рд░рд┐рдкреЛрд░реНрдЯ рдЧрд░рд┐рдпреЛ, рдХрд┐ рддрд┐рдиреАрд╣рд░реВрд▓реЗ UC рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рдЕрдкреНрд░рдорд╛рдгрд┐рдд рдХреЛрдб рд▓реЛрдб рдЧрд░реНрди рд░ рдЪрд▓рд╛рдЙрдиреЗ рд▓реБрдХреЗрдХреЛ рдХреНрд╖рдорддрд╛ рдкрддреНрддрд╛ рд▓рдЧрд╛рдПред рдЖрдЬ рд╣рд╛рдореА рдпреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд╕рд░реА рд╣реБрдиреНрдЫ рд░ рд╣реНрдпрд╛рдХрд░рд╣рд░реВрд▓реЗ рдпрд╕рд▓рд╛рдИ рдЖрдлреНрдиреИ рдЙрджреНрджреЗрд╢реНрдпрдХрд╛ рд▓рд╛рдЧрд┐ рдХрд╕рд░реА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдЫрдиреН рднрдиреЗрд░ рд╡рд┐рд╕реНрддреГрдд рд░реВрдкрдорд╛ рд╣реЗрд░реНрдиреЗрдЫреМрдВред

рдХреЗрд╣рд┐ рд╕рдордп рдкрд╣рд┐рд▓реЗ, UC рдмреНрд░рд╛рдЙрдЬрд░рдХреЛ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ рд░ рдзреЗрд░реИ рдЖрдХреНрд░рд╛рдордХ рд░реВрдкрдорд╛ рд╡рд┐рддрд░рдг рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ: рдпреЛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрдХреЛ рдЙрдкрдХрд░рдгрд╣рд░реВрдорд╛ рдорд╛рд▓рд╡реЗрдпрд░ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╕реНрдерд╛рдкрдирд╛ рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ, рднрд┐рдбрд┐рдпреЛ рдлрд╛рдЗрд▓рд╣рд░реВрдХреЛ рдЖрдбрдорд╛ рд╡рд┐рднрд┐рдиреНрди рд╕рд╛рдЗрдЯрд╣рд░реВрдмрд╛рдЯ рд╡рд┐рддрд░рдг рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ (рдЕрд░реНрдерд╛рдд, рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рд╕реЛрдЪреЗрдХрд╛ рдерд┐рдП рдХрд┐ рдЙрдиреАрд╣рд░реВ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрджреИрдЫрдиреН, рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐, рдПрдХ рдЕрд╢реНрд▓реАрд▓ рднрд┐рдбрд┐рдпреЛ, рддрд░ред рдпрд╕рдХреЛ рд╕рдЯреНрдЯрд╛рдорд╛ рдпрд╕ рдмреНрд░рд╛рдЙрдЬрд░рдХреЛ рд╕рд╛рде рдПрдХ APK рдкреНрд░рд╛рдкреНрдд рднрдпреЛ), рдмреНрд░рд╛рдЙрдЬрд░ рдкреБрд░рд╛рдиреЛ, рдХрдордЬреЛрд░, рд░ рдпрд╕реНрддреИ рд╕рд╛рдорд╛рдирд╣рд░реВ рднрдПрдХреЛ рд╕рдиреНрджреЗрд╢рд╣рд░реВрдХрд╛ рд╕рд╛рде рдбрд░рд▓рд╛рдЧреНрджреЛ рдмреНрдпрд╛рдирд░рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдпреЛред VK рдорд╛ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ UC рдмреНрд░рд╛рдЙрдЬрд░ рд╕рдореВрд╣ рдорд╛ рдЫ рд╡рд┐рд╖рдп, рдЬрд╕рдорд╛ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рдЕрдиреБрдЪрд┐рдд рд╡рд┐рдЬреНрдЮрд╛рдкрдирдХреЛ рдмрд╛рд░реЗрдорд╛ рдЧреБрдирд╛рд╕реЛ рдЧрд░реНрди рд╕рдХреНрдЫрдиреН, рддреНрдпрд╣рд╛рдБ рдзреЗрд░реИ рдЙрджрд╛рд╣рд░рдгрд╣рд░реВ рдЫрдиреНред 2016 рдорд╛ рддреНрдпрд╣рд╛рдБ рдкрдирд┐ рдерд┐рдпреЛ рднрд┐рдбрд┐рдпреЛ рд╡рд┐рдЬреНрдЮрд╛рдкрди рд░реВрд╕реАрдорд╛ (рд╣реЛ, рд╡рд┐рдЬреНрдЮрд╛рдкрди-рдмреНрд▓рдХрд┐рдЩ рдмреНрд░рд╛рдЙрдЬрд░рдХреЛ рд▓рд╛рдЧрд┐ рд╡рд┐рдЬреНрдЮрд╛рдкрди)ред

рд▓реЗрдЦреНрдиреЗ рд╕рдордпрдорд╛, UC рдмреНрд░рд╛рдЙрдЬрд░рд╕рдБрдЧ рдЧреБрдЧрд▓ рдкреНрд▓реЗрдорд╛ 500 рд╕реНрдерд╛рдкрдирд╛рд╣рд░реВ рдЫрдиреНред рдпреЛ рдкреНрд░рднрд╛рд╡рд╢рд╛рд▓реА рдЫ - рдХреЗрд╡рд▓ Google Chrome рдорд╛ рдзреЗрд░реИ рдЫред рд╕рдореАрдХреНрд╖рд╛рд╣рд░реВ рдордзреНрдпреЗ рддрдкрд╛рдИрдВрд▓реЗ рд╡рд┐рдЬреНрдЮрд╛рдкрдирдХреЛ рдмрд╛рд░реЗрдорд╛ рдзреЗрд░реИ рдЧреБрдирд╛рд╕реЛрд╣рд░реВ рджреЗрдЦреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рд░ Google Play рдорд╛ рдХреЗрд╣реА рдЕрдиреБрдкреНрд░рдпреЛрдЧрд╣рд░реВрдорд╛ рдкреБрди: рдирд┐рд░реНрджреЗрд╢рд┐рдд рдЧрд░реНрджрдЫред рдпреЛ рд╣рд╛рдореНрд░реЛ рдЕрдиреБрд╕рдиреНрдзрд╛рдирдХреЛ рдХрд╛рд░рдг рдерд┐рдпреЛ: рд╣рд╛рдореАрд▓реЗ UC рдмреНрд░рд╛рдЙрдЬрд░рд▓реЗ рдХреЗрд╣рд┐ рдЦрд░рд╛рдм рдЧрд░рд┐рд░рд╣реЗрдХреЛ рдЫ рдХрд┐ рднрдиреЗрд░ рд╣реЗрд░реНрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реНрдпреМрдВред рд░ рдпреЛ рдмрд╛рд╣рд┐рд░ рднрдпреЛ рдХрд┐ рдЙрд╕рд▓реЗ рдЧрд░реНрдЫ!

рдПрдкреНрд▓рд┐рдХреЗрд╕рди рдХреЛрдбрдорд╛, рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдпреЛрдЧреНрдп рдХреЛрдб рдбрд╛рдЙрдирд▓реЛрдб рд░ рдЪрд▓рд╛рдЙрдиреЗ рдХреНрд╖рдорддрд╛ рдкрддреНрддрд╛ рд▓рд╛рдЧреНрдпреЛ, рдЬреБрди рдПрдкреНрд▓рд┐рдХреЗрд╕рди рдкреНрд░рдХрд╛рд╢рд┐рдд рдЧрд░реНрдиреЗ рдирд┐рдпрдордХреЛ рд╡рд┐рдкрд░реАрдд рд╣реЛ Google Play рдорд╛ред рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдпреЛрдЧреНрдп рдХреЛрдб рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрдиреБрдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд, UC рдмреНрд░рд╛рдЙрдЬрд░рд▓реЗ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рддрд░рд┐рдХрд╛рдорд╛ рдЧрд░реНрдЫ, рдЬреБрди MitM рдЖрдХреНрд░рдордг рд╕реБрд░реБ рдЧрд░реНрди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред рд╣рд╛рдореА рдпрд╕реНрддреЛ рдЖрдХреНрд░рдордг рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ рдХрд┐ рд╣реЗрд░реМрдВред

рддрд▓ рд▓реЗрдЦрд┐рдПрдХрд╛ рд╕рдмреИ рдХреБрд░рд╛ UC рдмреНрд░рд╛рдЙрдЬрд░рдХреЛ рд╕рдВрд╕реНрдХрд░рдгрдХреЛ рд▓рд╛рдЧрд┐ рд╕рд╛рдиреНрджрд░реНрднрд┐рдХ рдЫ рдЬреБрди рдЕрдзреНрдпрдпрдирдХреЛ рд╕рдордпрдорд╛ Google Play рдорд╛ рдЙрдкрд▓рдмреНрдз рдерд┐рдпреЛ:

package: com.UCMobile.intl
versionName: 12.10.8.1172
versionCode: 10598
sha1 APK-╤Д╨░╨╣╨╗╨░: f5edb2243413c777172f6362876041eb0c3a928c

рдЖрдХреНрд░рдордг рд╡реЗрдХреНрдЯрд░

UC рдмреНрд░рд╛рдЙрдЬрд░ рдореНрдпрд╛рдирд┐рдлреЗрд╕реНрдЯрдорд╛ рддрдкрд╛рдИрдВрд▓реЗ рдЖрддреНрдо-рд╡реНрдпрд╛рдЦреНрдпрд╛рддреНрдордХ рдирд╛рдордХреЛ рд╕рд╛рде рд╕реЗрд╡рд╛ рдкрд╛рдЙрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ com.uc.deployment.UpgradeDeployService.

    <service android_exported="false" android_name="com.uc.deployment.UpgradeDeployService" android_process=":deploy" />

рдЬрдм рдпреЛ рд╕реЗрд╡рд╛ рд╕реБрд░реБ рд╣реБрдиреНрдЫ, рдмреНрд░рд╛рдЙрдЬрд░рд▓реЗ POST рдЕрдиреБрд░реЛрдз рдЧрд░реНрджрдЫ puds.ucweb.com/upgrade/index.xhtml, рдЬреБрди рд╕реБрд░реБ рднрдПрдХреЛ рдХреЗрд╣рд┐ рд╕рдордп рдкрдЫрд┐ рдЯреНрд░рд╛рдлрд┐рдХрдорд╛ рджреЗрдЦреНрди рд╕рдХрд┐рдиреНрдЫред рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдорд╛, рдЙрд╕рд▓реЗ рдХреЗрд╣рд┐ рдЕрдкрдбреЗрдЯ рд╡рд╛ рдирдпрд╛рдБ рдореЛрдбреНрдпреБрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрди рдЖрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╕рдХреНрдЫред рд╡рд┐рд╢реНрд▓реЗрд╖рдгрдХреЛ рдХреНрд░рдордорд╛, рд╕рд░реНрднрд░рд▓реЗ рддреНрдпрд╕реНрддрд╛ рдЖрджреЗрд╢рд╣рд░реВ рджрд┐рдПрди, рддрд░ рд╣рд╛рдореАрд▓реЗ рджреЗрдЦреНрдпреМрдВ рдХрд┐ рдЬрдм рд╣рд╛рдореА рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рдкреАрдбреАрдПрдл рдЦреЛрд▓реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдЫреМрдВ, рдпрд╕рд▓реЗ рдорд╛рдерд┐ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдареЗрдЧрд╛рдирд╛рдорд╛ рджреЛрд╕реНрд░реЛ рдЕрдиреБрд░реЛрдз рдЧрд░реНрджрдЫ, рддреНрдпрд╕рдкрдЫрд┐ рдпрд╕рд▓реЗ рдореВрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрджрдЫред рдЖрдХреНрд░рдордг рдЧрд░реНрди, рд╣рд╛рдореАрд▓реЗ UC рдмреНрд░рд╛рдЙрдЬрд░рдХреЛ рдпреЛ рд╕реБрд╡рд┐рдзрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реНтАНрдпреМрдВ: рдиреЗрдЯрд┐рдн рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ PDF рдЦреЛрд▓реНрдиреЗ рдХреНрд╖рдорддрд╛, рдЬреБрди APK рдорд╛ рдЫреИрди рд░ рдЬреБрди рдЖрд╡рд╢реНрдпрдХ рднрдПрдорд╛ рдЗрдиреНрдЯрд░рдиреЗрдЯрдмрд╛рдЯ рдбрд╛рдЙрдирд▓реЛрдб рд╣реБрдиреНрдЫред рдпреЛ рдзреНрдпрд╛рди рджрд┐рди рд▓рд╛рдпрдХ рдЫ рдХрд┐, рд╕реИрджреНрдзрд╛рдиреНрддрд┐рдХ рд░реВрдкрдорд╛, UC рдмреНрд░рд╛рдЙрдЬрд░ рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛ рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛ рдмрд┐рдирд╛ рдХреЗрд╣рд┐ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрди рдмрд╛рдзреНрдп рд╣реБрди рд╕рдХреНрдЫ - рдпрджрд┐ рддрдкрд╛рдЗрдБ рдмреНрд░рд╛рдЙрдЬрд░ рд╕реБрд░реБ рднрдПрдкрдЫрд┐ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рднрдПрдХреЛ рдЕрдиреБрд░реЛрдзрд▓рд╛рдИ рд░рд╛рдореНрд░реЛрд╕рдБрдЧ рдмрдирд╛рдЗрдПрдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рджрд╛рди рдЧрд░реНрдиреБрд╣реБрдиреНрдЫред рддрд░ рдпреЛ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореАрд▓реЗ рд╕рд░реНрднрд░рд╕рдБрдЧрдХреЛ рдЕрдиреНрддрд░рдХреНрд░рд┐рдпрд╛рдХреЛ рдкреНрд░реЛрдЯреЛрдХрд▓рд▓рд╛рдИ рдердк рд╡рд┐рд╕реНрддрд╛рд░рдорд╛ рдЕрдзреНрдпрдпрди рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ, рддреНрдпрд╕реИрд▓реЗ рд╣рд╛рдореАрд▓реЗ рдирд┐рд░реНрдгрдп рдЧрд░реНрдпреМрдВ рдХрд┐ рдЕрд╡рд░реЛрдзрд┐рдд рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рдореНрдкрд╛рджрди рдЧрд░реНрди рд░ PDF рд╕рдБрдЧ рдХрд╛рдо рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдмрджрд▓реНрди рд╕рдЬрд┐рд▓реЛ рд╣реБрдиреЗрдЫред

рддреНрдпрд╕реЛрднрдП, рдЬрдм рдкреНрд░рдпреЛрдЧрдХрд░реНрддрд╛рд▓реЗ рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рд╕реАрдзрд╛ PDF рдЦреЛрд▓реНрди рдЪрд╛рд╣рдиреНрдЫ, рдирд┐рдореНрди рдЕрдиреБрд░реЛрдзрд╣рд░реВ рдЯреНрд░рд╛рдлрд┐рдХрдорд╛ рджреЗрдЦреНрди рд╕рдХрд┐рдиреНрдЫ:

UC рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рдХрдордЬреЛрд░реАрд╣рд░реВ рдЦреЛрдЬреНрджреИ

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

рдЯреБрдХреНрд░рд╛ рдЕрдиреБрд░реЛрдз рдЧрд░реНрдиреБрд╣реЛрд╕реН

рдЙрддреНрддрд░ рдЯреБрдХреНрд░рд╛

UC рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рдХрдордЬреЛрд░реАрд╣рд░реВ рдЦреЛрдЬреНрджреИ

UC рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рдХрдордЬреЛрд░реАрд╣рд░реВ рдЦреЛрдЬреНрджреИ

рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЖрдлреИ ZIP рдорд╛ рдкреНрдпрд╛рдХреЗрдЬ рдЧрд░рд┐рдПрдХреЛ рдЫ рд░ рдЗрдиреНрдХреНрд░рд┐рдкреНрдЯ рдЧрд░рд┐рдПрдХреЛ рдЫреИрдиред

UC рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рдХрдордЬреЛрд░реАрд╣рд░реВ рдЦреЛрдЬреНрджреИ

рдЯреНрд░рд╛рдлрд┐рдХ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдХреЛрдб рдЦреЛрдЬреНрдиреБрд╣реЛрд╕реН

рд╕рд░реНрднрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдмреБрдЭреНрди рдкреНрд░рдпрд╛рд╕ рдЧрд░реМрдВред рдХрдХреНрд╖рд╛ рдХреЛрдб рд╣реЗрд░реМрдВ com.uc.deployment.UpgradeDeployService: рд╡рд┐рдзрд┐рдмрд╛рдЯ onStartCommand рдЬрд╛рдК рддреНрдпрд╣рд╛рдБ com.uc.deployment.bx, рд░ рдпреЛ рджреЗрдЦрд┐ com.uc.browser.core.dcfe:

    public final void e(l arg9) {
int v4_5;
String v3_1;
byte[] v3;
byte[] v1 = null;
if(arg9 == null) {
v3 = v1;
}
else {
v3_1 = arg9.iGX.ipR;
StringBuilder v4 = new StringBuilder("[");
v4.append(v3_1);
v4.append("]product:");
v4.append(arg9.iGX.ipR);
v4 = new StringBuilder("[");
v4.append(v3_1);
v4.append("]version:");
v4.append(arg9.iGX.iEn);
v4 = new StringBuilder("[");
v4.append(v3_1);
v4.append("]upgrade_type:");
v4.append(arg9.iGX.mMode);
v4 = new StringBuilder("[");
v4.append(v3_1);
v4.append("]force_flag:");
v4.append(arg9.iGX.iEo);
v4 = new StringBuilder("[");
v4.append(v3_1);
v4.append("]silent_mode:");
v4.append(arg9.iGX.iDQ);
v4 = new StringBuilder("[");
v4.append(v3_1);
v4.append("]silent_type:");
v4.append(arg9.iGX.iEr);
v4 = new StringBuilder("[");
v4.append(v3_1);
v4.append("]silent_state:");
v4.append(arg9.iGX.iEp);
v4 = new StringBuilder("[");
v4.append(v3_1);
v4.append("]silent_file:");
v4.append(arg9.iGX.iEq);
v4 = new StringBuilder("[");
v4.append(v3_1);
v4.append("]apk_md5:");
v4.append(arg9.iGX.iEl);
v4 = new StringBuilder("[");
v4.append(v3_1);
v4.append("]download_type:");
v4.append(arg9.mDownloadType);
v4 = new StringBuilder("[");
v4.append(v3_1);
v4.append("]download_group:");
v4.append(arg9.mDownloadGroup);
v4 = new StringBuilder("[");
v4.append(v3_1);
v4.append("]download_path:");
v4.append(arg9.iGH);
v4 = new StringBuilder("[");
v4.append(v3_1);
v4.append("]apollo_child_version:");
v4.append(arg9.iGX.iEx);
v4 = new StringBuilder("[");
v4.append(v3_1);
v4.append("]apollo_series:");
v4.append(arg9.iGX.iEw);
v4 = new StringBuilder("[");
v4.append(v3_1);
v4.append("]apollo_cpu_arch:");
v4.append(arg9.iGX.iEt);
v4 = new StringBuilder("[");
v4.append(v3_1);
v4.append("]apollo_cpu_vfp3:");
v4.append(arg9.iGX.iEv);
v4 = new StringBuilder("[");
v4.append(v3_1);
v4.append("]apollo_cpu_vfp:");
v4.append(arg9.iGX.iEu);
ArrayList v3_2 = arg9.iGX.iEz;
if(v3_2 != null && v3_2.size() != 0) {
Iterator v3_3 = v3_2.iterator();
while(v3_3.hasNext()) {
Object v4_1 = v3_3.next();
StringBuilder v5 = new StringBuilder("[");
v5.append(((au)v4_1).getName());
v5.append("]component_name:");
v5.append(((au)v4_1).getName());
v5 = new StringBuilder("[");
v5.append(((au)v4_1).getName());
v5.append("]component_ver_name:");
v5.append(((au)v4_1).aDA());
v5 = new StringBuilder("[");
v5.append(((au)v4_1).getName());
v5.append("]component_ver_code:");
v5.append(((au)v4_1).gBl);
v5 = new StringBuilder("[");
v5.append(((au)v4_1).getName());
v5.append("]component_req_type:");
v5.append(((au)v4_1).gBq);
}
}
j v3_4 = new j();
m.b(v3_4);
h v4_2 = new h();
m.b(v4_2);
ay v5_1 = new ay();
v3_4.hS("");
v3_4.setImsi("");
v3_4.hV("");
v5_1.bPQ = v3_4;
v5_1.bPP = v4_2;
v5_1.yr(arg9.iGX.ipR);
v5_1.gBF = arg9.iGX.mMode;
v5_1.gBI = arg9.iGX.iEz;
v3_2 = v5_1.gAr;
c.aBh();
v3_2.add(g.fs("os_ver", c.getRomInfo()));
v3_2.add(g.fs("processor_arch", com.uc.b.a.a.c.getCpuArch()));
v3_2.add(g.fs("cpu_arch", com.uc.b.a.a.c.Pb()));
String v4_3 = com.uc.b.a.a.c.Pd();
v3_2.add(g.fs("cpu_vfp", v4_3));
v3_2.add(g.fs("net_type", String.valueOf(com.uc.base.system.a.Jo())));
v3_2.add(g.fs("fromhost", arg9.iGX.iEm));
v3_2.add(g.fs("plugin_ver", arg9.iGX.iEn));
v3_2.add(g.fs("target_lang", arg9.iGX.iEs));
v3_2.add(g.fs("vitamio_cpu_arch", arg9.iGX.iEt));
v3_2.add(g.fs("vitamio_vfp", arg9.iGX.iEu));
v3_2.add(g.fs("vitamio_vfp3", arg9.iGX.iEv));
v3_2.add(g.fs("plugin_child_ver", arg9.iGX.iEx));
v3_2.add(g.fs("ver_series", arg9.iGX.iEw));
v3_2.add(g.fs("child_ver", r.aVw()));
v3_2.add(g.fs("cur_ver_md5", arg9.iGX.iEl));
v3_2.add(g.fs("cur_ver_signature", SystemHelper.getUCMSignature()));
v3_2.add(g.fs("upgrade_log", i.bjt()));
v3_2.add(g.fs("silent_install", String.valueOf(arg9.iGX.iDQ)));
v3_2.add(g.fs("silent_state", String.valueOf(arg9.iGX.iEp)));
v3_2.add(g.fs("silent_file", arg9.iGX.iEq));
v3_2.add(g.fs("silent_type", String.valueOf(arg9.iGX.iEr)));
v3_2.add(g.fs("cpu_archit", com.uc.b.a.a.c.Pc()));
v3_2.add(g.fs("cpu_set", SystemHelper.getCpuInstruction()));
boolean v4_4 = v4_3 == null || !v4_3.contains("neon") ? false : true;
v3_2.add(g.fs("neon", String.valueOf(v4_4)));
v3_2.add(g.fs("cpu_cores", String.valueOf(com.uc.b.a.a.c.Jl())));
v3_2.add(g.fs("ram_1", String.valueOf(com.uc.b.a.a.h.Po())));
v3_2.add(g.fs("totalram", String.valueOf(com.uc.b.a.a.h.OL())));
c.aBh();
v3_2.add(g.fs("rom_1", c.getRomInfo()));
v4_5 = e.getScreenWidth();
int v6 = e.getScreenHeight();
StringBuilder v7 = new StringBuilder();
v7.append(v4_5);
v7.append("*");
v7.append(v6);
v3_2.add(g.fs("ss", v7.toString()));
v3_2.add(g.fs("api_level", String.valueOf(Build$VERSION.SDK_INT)));
v3_2.add(g.fs("uc_apk_list", SystemHelper.getUCMobileApks()));
Iterator v4_6 = arg9.iGX.iEA.entrySet().iterator();
while(v4_6.hasNext()) {
Object v6_1 = v4_6.next();
v3_2.add(g.fs(((Map$Entry)v6_1).getKey(), ((Map$Entry)v6_1).getValue()));
}
v3 = v5_1.toByteArray();
}
if(v3 == null) {
this.iGY.iGI.a(arg9, "up_encode", "yes", "fail");
return;
}
v4_5 = this.iGY.iGw ? 0x1F : 0;
if(v3 == null) {
}
else {
v3 = g.i(v4_5, v3);
if(v3 == null) {
}
else {
v1 = new byte[v3.length + 16];
byte[] v6_2 = new byte[16];
Arrays.fill(v6_2, 0);
v6_2[0] = 0x5F;
v6_2[1] = 0;
v6_2[2] = ((byte)v4_5);
v6_2[3] = -50;
System.arraycopy(v6_2, 0, v1, 0, 16);
System.arraycopy(v3, 0, v1, 16, v3.length);
}
}
if(v1 == null) {
this.iGY.iGI.a(arg9, "up_encrypt", "yes", "fail");
return;
}
if(TextUtils.isEmpty(this.iGY.mUpgradeUrl)) {
this.iGY.iGI.a(arg9, "up_url", "yes", "fail");
return;
}
StringBuilder v0 = new StringBuilder("[");
v0.append(arg9.iGX.ipR);
v0.append("]url:");
v0.append(this.iGY.mUpgradeUrl);
com.uc.browser.core.d.c.i v0_1 = this.iGY.iGI;
v3_1 = this.iGY.mUpgradeUrl;
com.uc.base.net.e v0_2 = new com.uc.base.net.e(new com.uc.browser.core.d.c.i$a(v0_1, arg9));
v3_1 = v3_1.contains("?") ? v3_1 + "&dataver=pb" : v3_1 + "?dataver=pb";
n v3_5 = v0_2.uc(v3_1);
m.b(v3_5, false);
v3_5.setMethod("POST");
v3_5.setBodyProvider(v1);
v0_2.b(v3_5);
this.iGY.iGI.a(arg9, "up_null", "yes", "success");
this.iGY.iGI.b(arg9);
}

рд╣рд╛рдореА рдпрд╣рд╛рдБ POST рдЕрдиреБрд░реЛрдзрдХреЛ рдЧрдарди рджреЗрдЦреНрдЫреМрдВред рд╣рд╛рдореА 16 рдмрд╛рдЗрдЯреНрд╕рдХреЛ рдПрд░реНрд░реЗ рд░ рдпрд╕рдХреЛ рдлрд┐рд▓рд┐рдВрдЧрдорд╛ рдзреНрдпрд╛рди рджрд┐рдиреНрдЫреМрдВ: 0x5F, 0, 0x1F, -50 (=0xCE)ред рд╣рд╛рдореАрд▓реЗ рдорд╛рдерд┐рдХреЛ рдЕрдиреБрд░реЛрдзрдорд╛ рджреЗрдЦреЗрдХрд╛ рдХреБрд░рд╛рд╕рдБрдЧ рдореЗрд▓ рдЦрд╛рдиреНрдЫред

рдПрдЙрдЯреИ рдХрдХреНрд╖рд╛рдорд╛ рддрдкрд╛рдИрд▓реЗ рдиреЗрд╕реНрдЯреЗрдб рдХреНрд▓рд╛рд╕ рджреЗрдЦреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рдЬреБрди рдЕрд░реНрдХреЛ рд░реЛрдЪрдХ рд╡рд┐рдзрд┐ рдЫ:

        public final void a(l arg10, byte[] arg11) {
f v0 = this.iGQ;
StringBuilder v1 = new StringBuilder("[");
v1.append(arg10.iGX.ipR);
v1.append("]:UpgradeSuccess");
byte[] v1_1 = null;
if(arg11 == null) {
}
else if(arg11.length < 16) {
}
else {
if(arg11[0] != 0x60 && arg11[3] != 0xFFFFFFD0) {
goto label_57;
}
int v3 = 1;
int v5 = arg11[1] == 1 ? 1 : 0;
if(arg11[2] != 1 && arg11[2] != 11) {
if(arg11[2] == 0x1F) {
}
else {
v3 = 0;
}
}
byte[] v7 = new byte[arg11.length - 16];
System.arraycopy(arg11, 16, v7, 0, v7.length);
if(v3 != 0) {
v7 = g.j(arg11[2], v7);
}
if(v7 == null) {
goto label_57;
}
if(v5 != 0) {
v1_1 = g.P(v7);
goto label_57;
}
v1_1 = v7;
}
label_57:
if(v1_1 == null) {
v0.iGY.iGI.a(arg10, "up_decrypt", "yes", "fail");
return;
}
q v11 = g.b(arg10, v1_1);
if(v11 == null) {
v0.iGY.iGI.a(arg10, "up_decode", "yes", "fail");
return;
}
if(v0.iGY.iGt) {
v0.d(arg10);
}
if(v0.iGY.iGo != null) {
v0.iGY.iGo.a(0, ((o)v11));
}
if(v0.iGY.iGs) {
v0.iGY.a(((o)v11));
v0.iGY.iGI.a(v11, "up_silent", "yes", "success");
v0.iGY.iGI.a(v11);
return;
}
v0.iGY.iGI.a(v11, "up_silent", "no", "success");
}
}

рд╡рд┐рдзрд┐рд▓реЗ рдЗрдирдкреБрдЯрдХреЛ рд░реВрдкрдорд╛ рдмрд╛рдЗрдЯрд╣рд░реВрдХреЛ рдПрд░реНрд░реЗ рд▓рд┐рдиреНрдЫ рд░ рдЬрд╛рдБрдЪ рдЧрд░реНрджрдЫ рдХрд┐ рд╢реВрдиреНрдп рдмрд╛рдЗрдЯ 0x60 рд╣реЛ рд╡рд╛ рддреЗрд╕реНрд░реЛ рдмрд╛рдЗрдЯ 0xD0 рд╣реЛ, рд░ рджреЛрд╕реНрд░реЛ рдмрд╛рдЗрдЯ 1, 11 рд╡рд╛ 0x1F рд╣реЛред рд╣рд╛рдореА рд╕рд░реНрднрд░рдмрд╛рдЯ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╣реЗрд░реНрдЫреМрдВ: рд╢реВрдиреНрдп рдмрд╛рдЗрдЯ 0x60 рд╣реЛ, рджреЛрд╕реНрд░реЛ 0x1F рд╣реЛ, рддреЗрд╕реНрд░реЛ 0x60 рд╣реЛред рд╣рд╛рдореАрд▓рд╛рдИ рдХреЗ рдЪрд╛рд╣рд┐рдиреНрдЫ рдЬрд╕реНрддреЛ рд▓рд╛рдЧреНрдЫред рд░реЗрдЦрд╛рд╣рд░реВ рджреНрд╡рд╛рд░рд╛ рдиреНрдпрд╛рдп рдЧрд░реНрджреИ ("up_decrypt", рдЙрджрд╛рд╣рд░рдгрдХрд╛ рд▓рд╛рдЧрд┐), рдПрдЙрдЯрд╛ рд╡рд┐рдзрд┐ рдпрд╣рд╛рдБ рдХрд▓ рдЧрд░рд┐рдиреБ рдкрд░реНрдЫ рдЬрд╕рд▓реЗ рд╕рд░реНрднрд░рдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд▓рд╛рдИ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдЧрд░реНрджрдЫред
рд╡рд┐рдзрд┐рдорд╛ рдЬрд╛рдФрдВ gjред рдзреНрдпрд╛рди рджрд┐рдиреБрд╣реЛрд╕реН рдХрд┐ рдкрд╣рд┐рд▓реЛ рддрд░реНрдХ рдЕрдлрд╕реЗрдЯ 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 рд╣реЛрдЗрди, рддрд░ a .jar рд╣реЛред рд╣рд╛рдореАрд▓реЗ рдЪрд╛рд╕реЛ рд░рд╛рдЦреЗрдХреЛ рд╡рд┐рдзрд┐ рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд▓рд╛рдЧреВ рдЧрд░рд┐рдПрдХреЛ рдЫ:

package com.alibaba.wireless.security.a.i;
// ...
public class a implements IStaticDataEncryptComponent {
private ISecurityGuardPlugin a;
// ...
private byte[] a(int mode, int magicInt, int xzInt, String keyId, byte[] encrypted, String magicString) {
return this.a.getRouter().doCommand(10601, new Object[]{Integer.valueOf(mode), Integer.valueOf(magicInt), Integer.valueOf(xzInt), keyId, encrypted, magicString});
}
// ...
private byte[] b(int magicInt, String keyId, byte[] encrypted, String magicString) {
return this.a(2, magicInt, 0, keyId, encrypted, magicString);
}
// ...
public byte[] staticBinarySafeDecryptNoB64(int magicInt, String keyId, byte[] encrypted, String magicString) throws SecException {
if(keyId != null && keyId.length() > 0 && magicInt >= 0 && magicInt < 19 && encrypted != null && encrypted.length > 0) {
return this.b(magicInt, keyId, encrypted, magicString);
}
throw new SecException("", 301);
}
//...
}

рдпрд╣рд╛рдБ рд╣рд╛рдореНрд░реЛ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВрдХреЛ рд╕реВрдЪреА рджреБрдИ рдердк рдкреВрд░реНрдгрд╛рдВрдХрд╣рд░реВрд╕рдБрдЧ рдкреВрд░рдХ рдЫ: 2 рд░ 0ред рджреНрд╡рд╛рд░рд╛ рдиреНрдпрд╛рдп рдЧрд░реНрджреИ
рд╕рдмреИ рдХреБрд░рд╛, 2 рдХреЛ рдЕрд░реНрде рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди, рд╡рд┐рдзрд┐рдорд╛ рдЬрд╕реНрддреИ рдЕрдиреНрддрд┐рдо рдкреНрд░рдгрд╛рд▓реА рд╡рд░реНрдЧ 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);
}
}

рд░ рдХрдХреНрд╖рд╛ рдкрдирд┐ JNICL рдкреБрд╕реНрддрдХрд╛рд▓рдп, рдЬрд╕рдорд╛ рджреЗрд╢реА рд╡рд┐рдзрд┐ рдШреЛрд╖рдгрд╛ рдЧрд░рд┐рдПрдХреЛ рдЫ doCommandNative:

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

рдпрд╕рдХреЛ рдорддрд▓рдм рд╣рд╛рдореАрд▓реЗ рдиреЗрдЯрд┐рдн рдХреЛрдбрдорд╛ рд╡рд┐рдзрд┐ рдЦреЛрдЬреНрдиреБ рдкрд░реНрдЫ doCommandNativeред рд░ рдпрд╣рд╛рдБ рд░рдорд╛рдЗрд▓реЛ рд╕реБрд░реБ рд╣реБрдиреНрдЫред

рдореЗрд╕рд┐рди рдХреЛрдбрдХреЛ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛

рдлрд╛рдЗрд▓рдорд╛ libsgmain.so (рдЬреБрди рд╡рд╛рд╕реНрддрд╡рдорд╛ рдПрдХ .jar рд╣реЛ рд░ рдЬрд╕рдорд╛ рд╣рд╛рдореАрд▓реЗ рдорд╛рдерд┐ рдХреЗрд╣реА рдЗрдиреНрдХреНрд░рд┐рдкреНрд╢рди-рд╕рдореНрдмрдиреНрдзрд┐рдд рдЗрдиреНрдЯрд░рдлреЗрд╕рд╣рд░реВрдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдлреЗрд▓рд╛ рдкрд╛рд░реНрдпреМрдВ) рддреНрдпрд╣рд╛рдБ рдПрдЙрдЯрд╛ рдореВрд▓ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдЫ: libsgmainso-6.4.36.soред рд╣рд╛рдореА рдпрд╕рд▓рд╛рдИ IDA рдорд╛ рдЦреЛрд▓реНрдЫреМрдВ рд░ рддреНрд░реБрдЯрд┐рд╣рд░реВрдХреЛ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдмрдХреНрд╕рд╣рд░реВрдХреЛ рдЧреБрдЪреНрдЫрд╛ рдкрд╛рдЙрдБрдЫреМрдВред рд╕рдорд╕реНрдпрд╛ рдпреЛ рд╣реЛ рдХрд┐ рдЦрдгреНрдб рд╣реЗрдбрд░ рддрд╛рд▓рд┐рдХрд╛ рдЕрдорд╛рдиреНрдп рдЫред рдпреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд▓рд╛рдИ рдЬрдЯрд┐рд▓ рдмрдирд╛рдЙрди рдЙрджреНрджреЗрд╢реНрдпрдорд╛ рдЧрд░рд┐рдиреНрдЫред

UC рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рдХрдордЬреЛрд░реАрд╣рд░реВ рдЦреЛрдЬреНрджреИ

рддрд░ рдпреЛ рдЖрд╡рд╢реНрдпрдХ рдЫреИрди: рд╕рд╣реА рд░реВрдкрдорд╛ ELF рдлрд╛рдЗрд▓ рд▓реЛрдб рдЧрд░реНрди рд░ рдпрд╕рд▓рд╛рдИ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдЧрд░реНрди, рдПрдХ рдХрд╛рд░реНрдпрдХреНрд░рдо рд╣реЗрдбрд░ рддрд╛рд▓рд┐рдХрд╛ рдкрд░реНрдпрд╛рдкреНрдд рдЫред рддреНрдпрд╕рдХрд╛рд░рдг, рд╣рд╛рдореА рдХреЗрд╡рд▓ рдЦрдгреНрдб рддрд╛рд▓рд┐рдХрд╛ рдореЗрдЯрд╛рдЙрдБрдЫреМрдВ, рд╣реЗрдбрд░рдорд╛ рд╕рдореНрдмрдиреНрдзрд┐рдд рдХреНрд╖реЗрддреНрд░рд╣рд░реВ рд╢реВрдиреНрдп рдЧрд░реНрджреИред

UC рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рдХрдордЬреЛрд░реАрд╣рд░реВ рдЦреЛрдЬреНрджреИ

IDA рдорд╛ рдлрд╛рдЗрд▓ рдлреЗрд░рд┐ рдЦреЛрд▓реНрдиреБрд╣реЛрд╕реНред

рдЬрд╛рднрд╛ рднрд░реНрдЪреБрдЕрд▓ рдореЗрд╕рд┐рдирд▓рд╛рдИ рднрдиреНрдирдХрд╛ рд▓рд╛рдЧрд┐ рджреБрдИрд╡рдЯрд╛ рддрд░рд┐рдХрд╛рд╣рд░реВ рдЫрдиреН рдЬрд╣рд╛рдБ рдиреЗрдЯрд┐рдн рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдорд╛ рдЬрд╛рднрд╛ рдХреЛрдбрдорд╛ рдиреЗрдЯрд┐рдн рд░реВрдкрдорд╛ рдШреЛрд╖рд┐рдд рд╡рд┐рдзрд┐рдХреЛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдЕрд╡рд╕реНрдерд┐рдд рдЫред рдкрд╣рд┐рд▓реЛ рдпрд╕рд▓рд╛рдИ рдкреНрд░рдЬрд╛рддрд┐рдХреЛ рдирд╛рдо рджрд┐рдиреБ рд╣реЛ Java_package_name_ClassName_MethodName.

рджреЛрд╕реНрд░реЛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд▓реЛрдб рдЧрд░реНрджрд╛ рдпрд╕рд▓рд╛рдИ рджрд░реНрддрд╛ рдЧрд░реНрдиреБ рд╣реЛ (рдкреНрд░рдХрд╛рд░реНрдпрдорд╛ JNI_Onload)
рдПрдХ рдкреНрд░рдХрд╛рд░реНрдп рдХрд▓ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИ рджрд░реНрддрд╛ рдирд┐рд╡рд╛рд╕реАрд╣рд░реВ.

рд╣рд╛рдореНрд░реЛ рдЕрд╡рд╕реНрдерд╛рдорд╛, рдпрджрд┐ рд╣рд╛рдореАрд▓реЗ рдкрд╣рд┐рд▓реЛ рд╡рд┐рдзрд┐ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреМрдВ рднрдиреЗ, рдирд╛рдо рдпрд╕реНрддреЛ рд╣реБрдиреБрдкрд░реНрдЫ: Java_com_taobao_wireless_security_adapter_JNICLlibrary_doCommandNative.

рдирд┐рд░реНрдпрд╛рдд рдЧрд░рд┐рдПрдХрд╛ рдкреНрд░рдХрд╛рд░реНрдпрд╣рд░реВ рдмреАрдЪрдорд╛ рддреНрдпрд╕реНрддреЛ рдХреБрдиреИ рдкреНрд░рдХрд╛рд░реНрдп рдЫреИрди, рдЬрд╕рдХреЛ рдорддрд▓рдм рддрдкрд╛рдИрдВрд▓реЗ рдХрд▓ рдЦреЛрдЬреНрдиреБ рдкрд░реНрдЫ рджрд░реНрддрд╛ рдирд┐рд╡рд╛рд╕реАрд╣рд░реВ.
рд╕рдорд╛рд░реЛрд╣рдорд╛ рдЬрд╛рдФрдВ JNI_Onload рд░ рд╣рд╛рдореА рдпреЛ рддрд╕реНрд╡реАрд░ рджреЗрдЦреНрдЫреМрдВ:

UC рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рдХрдордЬреЛрд░реАрд╣рд░реВ рдЦреЛрдЬреНрджреИ

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

рдпрд╣рд╛рдБ рдпрд╛рдж рдЧрд░реНрди рд▓рд╛рдпрдХ рдЫ рдХрд┐ ARM рдкреНрд░реЛрд╕реЗрд╕рд░рд╣рд░реВрд╕рдБрдЧ рджреБрдИ рдореЛрдбрд╣рд░реВ рд░ рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВрдХреЛ рджреБрдИ рд╕реЗрдЯрд╣рд░реВ рдЫрдиреН: ARM рд░ рдердореНрдмред рдареЗрдЧрд╛рдирд╛рдХреЛ рдиреНрдпреВрдирддрдо рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдмрд┐рдЯрд▓реЗ рдкреНрд░реЛрд╕реЗрд╕рд░рд▓рд╛рдИ рдХреБрди рдирд┐рд░реНрджреЗрд╢рди рд╕реЗрдЯ рдкреНрд░рдпреЛрдЧ рднрдЗрд░рд╣реЗрдХреЛ рдЫ рднрдиреА рдмрддрд╛рдЙрдБрдЫред рддреНрдпреЛ рд╣реЛ, рдареЗрдЧрд╛рдирд╛ рд╡рд╛рд╕реНрддрд╡рдорд╛ 0xB13A рд╣реЛ, рд░ рдХрдореНрддрд┐рдорд╛ рдорд╣рддреНрддреНрд╡рдкреВрд░реНрдг рдмрд┐рдЯрдорд╛ рдПрдЙрдЯрд╛рд▓реЗ рдердореНрдм рдореЛрдбрд▓рд╛рдИ рд╕рдВрдХреЗрдд рдЧрд░реНрджрдЫред

рдпрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдпрдорд╛ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░реНрдпрдХреЛ рд╕реБрд░реБрдорд╛ рд╕рдорд╛рди "рдПрдбрд╛рдкреНрдЯрд░" рдердкрд┐рдПрдХреЛ рдЫ рд░
рдлреЛрд╣реЛрд░ рдХреЛрдбред рд╣рд╛рдореА рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рдердк рд╡рд┐рд╡рд░рдгрдорд╛ рдмрд╕реНрдиреЗ рдЫреИрдиреМрдВ - рд╣рд╛рдореА рдХреЗрд╡рд▓ рд╕рдореНрдЭрдиреНрдЫреМрдВ
рд▓рдЧрднрдЧ рд╕рдмреИ рдкреНрд░рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реБрд░реБрд╡рд╛рдд рдЕрд▓рд┐ рдЯрд╛рдврд╛ рдЫред

рдХреЛрдб рд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛ 0xB13A рдорд╛ рдЬрд╛рдБрджреИрди, IDA рд▓реЗ рдХреЛрдб рдпреЛ рд╕реНрдерд╛рдирдорд╛ рдЕрд╡рд╕реНрдерд┐рдд рдерд┐рдпреЛ рднрдиреЗрд░ рдкрд╣рд┐рдЪрд╛рди рдЧрд░реЗрдиред рдПрдЙрдЯреИ рдХрд╛рд░рдгрд▓реЗ, рдпрд╕рд▓реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпрдорд╛ рд░рд╣реЗрдХрд╛ рдзреЗрд░реИрдЬрд╕реЛ рдХреЛрдбрд╣рд░реВрд▓рд╛рдИ рдХреЛрдбрдХреЛ рд░реВрдкрдорд╛ рдкрд╣рд┐рдЪрд╛рди рдЧрд░реНрджреИрди, рдЬрд╕рд▓реЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд▓рд╛рдИ рдХреЗрд╣реА рдХрдард┐рди рдмрдирд╛рдЙрдБрдЫред рд╣рд╛рдореА IDA рднрдиреНрдЫреМрдВ рдХрд┐ рдпреЛ рдХреЛрдб рд╣реЛ, рд░ рдпреЛ рдХреЗ рд╣реБрдиреНрдЫ:

UC рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рдХрдордЬреЛрд░реАрд╣рд░реВ рдЦреЛрдЬреНрджреИ

рддрд╛рд▓рд┐рдХрд╛ рд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛ 0xB144 рдорд╛ рд╕реБрд░реБ рд╣реБрдиреНрдЫред sub_494C рдорд╛ рдХреЗ рдЫ?

UC рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рдХрдордЬреЛрд░реАрд╣рд░реВ рдЦреЛрдЬреНрджреИ

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

UC рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рдХрдордЬреЛрд░реАрд╣рд░реВ рдЦреЛрдЬреНрджреИ

рдЕрдм рддрд╛рд▓рд┐рдХрд╛рдмрд╛рдЯ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ 0x20 рд╕рдБрдЧ рдЕрдлрд╕реЗрдЯрдорд╛ рд╕рдВрдХреНрд░рдордг рд╣реБрдиреЗрдЫред

рддрд╛рд▓рд┐рдХрд╛рдХреЛ рд╕рд╛рдЗрдЬрдХреЛ рдЖрдзрд╛рд░рдорд╛, рдХреЛрдбрдорд╛ рддреНрдпрд╕реНрддрд╛ рдзреЗрд░реИ рд╕рдВрдХреНрд░рдордгрд╣рд░реВ рд╣реБрдиреЗрдЫрдиреНред рдкреНрд░рд╢реНрди рдЙрдареНрдЫ рдХрд┐ рдореНрдпрд╛рдиреБрдЕрд▓ рд░реВрдкрдорд╛ рдареЗрдЧрд╛рдирд╛рд╣рд░реВ рдЧрдгрдирд╛ рдирдЧрд░реАрдХрди, рдпрд╕рд▓рд╛рдИ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдкрдорд╛ рдердк рд░реВрдкрдорд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рдЧрд░реНрди рд╕рдореНрднрд╡ рдЫред рд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯрд╣рд░реВ рд░ IDA рдорд╛ рдХреЛрдб рдкреНрдпрд╛рдЪ рдЧрд░реНрдиреЗ рдХреНрд╖рдорддрд╛ рд╣рд╛рдореНрд░реЛ рд╕рд╣рд╛рдпрддрд╛рдорд╛ рдЖрдЙрдБрдЫ:

def put_unconditional_branch(source, destination):
offset = (destination - source - 4) >> 1
if offset > 2097151 or offset < -2097152:
raise RuntimeError("Invalid offset")
if offset > 1023 or offset < -1024:
instruction1 = 0xf000 | ((offset >> 11) & 0x7ff)
instruction2 = 0xb800 | (offset & 0x7ff)
patch_word(source, instruction1)
patch_word(source + 2, instruction2)
else:
instruction = 0xe000 | (offset & 0x7ff)
patch_word(source, instruction)
ea = here()
if get_wide_word(ea) == 0xb503: #PUSH {R0,R1,LR}
ea1 = ea + 2
if get_wide_word(ea1) == 0xbf00: #NOP
ea1 += 2
if get_operand_type(ea1, 0) == 1 and get_operand_value(ea1, 0) == 0 and get_operand_type(ea1, 1) == 2:
index = get_wide_dword(get_operand_value(ea1, 1))
print "index =", hex(index)
ea1 += 2
if get_operand_type(ea1, 0) == 7:
table = get_operand_value(ea1, 0) + 4
elif get_operand_type(ea1, 1) == 2:
table = get_operand_value(ea1, 1) + 4
else:
print "Wrong operand type on", hex(ea1), "-", get_operand_type(ea1, 0), get_operand_type(ea1, 1)
table = None
if table is None:
print "Unable to find table"
else:
print "table =", hex(table)
offset = get_wide_dword(table + (index << 2))
put_unconditional_branch(ea, table + offset)
else:
print "Unknown code", get_operand_type(ea1, 0), get_operand_value(ea1, 0), get_operand_type(ea1, 1) == 2
else:
print "Unable to detect first instruction"

рд▓рд╛рдЗрди 0xB26A рдорд╛ рдХрд░реНрд╕рд░ рд░рд╛рдЦреНрдиреБрд╣реЛрд╕реН, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдЙрдиреБрд╣реЛрд╕реН рд░ 0xB4B0 рдорд╛ рд╕рдВрдХреНрд░рдордг рд╣реЗрд░реНрдиреБрд╣реЛрд╕реН:

UC рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рдХрдордЬреЛрд░реАрд╣рд░реВ рдЦреЛрдЬреНрджреИ

рдЖрдИрдбреАрдПрд▓реЗ рдлреЗрд░рд┐ рдпреЛ рдХреНрд╖реЗрддреНрд░рд▓рд╛рдИ рдХреЛрдбрдХреЛ рд░реВрдкрдорд╛ рдкрд╣рд┐рдЪрд╛рди рдЧрд░реЗрдиред рд╣рд╛рдореА рдЙрдирд▓рд╛рдИ рдорджреНрджрдд рдЧрд░реНрдЫреМрдВ рд░ рддреНрдпрд╣рд╛рдБ рдЕрд░реНрдХреЛ рдбрд┐рдЬрд╛рдЗрди рджреЗрдЦреНрдЫреМрдВ:

UC рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рдХрдордЬреЛрд░реАрд╣рд░реВ рдЦреЛрдЬреНрджреИ

BLX рдкрдЫрд┐ рдирд┐рд░реНрджреЗрд╢рдирд╣рд░реВ рдзреЗрд░реИ рдЕрд░реНрде рд▓рд╛рдЧреНрджреИрди, рдпреЛ рдХреЗрд╣рд┐ рдкреНрд░рдХрд╛рд░рдХреЛ рд╡рд┐рд╕реНрдерд╛рдкрди рдЬрд╕реНрддреИ рд╣реЛред sub_4964 рд╣реЗрд░реМрдВ:

UC рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рдХрдордЬреЛрд░реАрд╣рд░реВ рдЦреЛрдЬреНрджреИ

рд░ рд╡рд╛рд╕реНрддрд╡рдорд╛, рдпрд╣рд╛рдБ LR рдорд╛ рд░рд╣реЗрдХреЛ рдареЗрдЧрд╛рдирд╛рдорд╛ dword рд▓рд┐рдЗрдПрдХреЛ рдЫ, рдпреЛ рдареЗрдЧрд╛рдирд╛рдорд╛ рдердкрд┐рдПрдХреЛ рдЫ, рддреНрдпрд╕рдкрдЫрд┐ рдирддрд┐рдЬрд╛ рдареЗрдЧрд╛рдирд╛рдорд╛ рдорд╛рди рд▓рд┐рдЗрдиреНрдЫ рд░ рд╕реНрдЯреНрдпрд╛рдХрдорд╛ рд░рд╛рдЦрд┐рдиреНрдЫред рд╕рд╛рдереИ, 4 рд▓рд╛рдИ LR рдорд╛ рдердкрд┐рдПрдХреЛ рдЫ рддрд╛рдХрд┐ рдкреНрд░рдХрд╛рд░реНрдпрдмрд╛рдЯ рдлрд░реНрдХреЗрдкрдЫрд┐, рдпрд╣реА рдЕрдлрд╕реЗрдЯ рдЫреЛрдбрд┐рдпреЛред рдЬрд╕ рдкрдЫрд┐ POP {R1} рдЖрджреЗрд╢рд▓реЗ рд╕реНрдЯреНрдпрд╛рдХрдмрд╛рдЯ рдирддрд┐рдЬрд╛ рдорд╛рди рд▓рд┐рдиреНрдЫред рдпрджрд┐ рддрдкрд╛рдЗрдБ рдареЗрдЧрд╛рдирд╛ 0xB4BA + 0xEA = 0xB5A4 рдорд╛ рдЕрд╡рд╕реНрдерд┐рдд рдХреЗ рдЫ рднрдиреЗрд░ рд╣реЗрд░реНрдиреБрднрдпреЛ рднрдиреЗ, рддрдкрд╛рдЗрдБ рдареЗрдЧрд╛рдирд╛ рддрд╛рд▓рд┐рдХрд╛ рдЬрд╕реНрддреИ рдХреЗрд╣рд┐ рджреЗрдЦреНрдиреБрд╣реБрдиреЗрдЫ:

UC рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рдХрдордЬреЛрд░реАрд╣рд░реВ рдЦреЛрдЬреНрджреИ

рдпреЛ рдбрд┐рдЬрд╛рдЗрди рдкреНрдпрд╛рдЪ рдЧрд░реНрди, рддрдкрд╛рдИрдВрд▓реЗ рдХреЛрдбрдмрд╛рдЯ рджреБрдИ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреБрдкрд░реНрдиреЗрдЫ: рдЕрдлрд╕реЗрдЯ рд░ рджрд░реНрддрд╛ рдирдореНрдмрд░ рдЬрд╕рдорд╛ рддрдкрд╛рдИрдВрд▓реЗ рдкрд░рд┐рдгрд╛рдо рд░рд╛рдЦреНрди рдЪрд╛рд╣рдиреБрд╣реБрдиреНрдЫред рдкреНрд░рддреНрдпреЗрдХ рд╕рдореНрднрд╛рд╡рд┐рдд рджрд░реНрддрд╛рдХреЛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдИрдВрд▓реЗ рдЕрдЧреНрд░рд┐рдо рдХреЛрдбрдХреЛ рдЯреБрдХреНрд░рд╛ рддрдпрд╛рд░ рдЧрд░реНрдиреБрдкрд░реНрдиреЗрдЫред

patches = {}
patches[0] = (0x00, 0xbf, 0x01, 0x48, 0x00, 0x68, 0x02, 0xe0)
patches[1] = (0x00, 0xbf, 0x01, 0x49, 0x09, 0x68, 0x02, 0xe0)
patches[2] = (0x00, 0xbf, 0x01, 0x4a, 0x12, 0x68, 0x02, 0xe0)
patches[3] = (0x00, 0xbf, 0x01, 0x4b, 0x1b, 0x68, 0x02, 0xe0)
patches[4] = (0x00, 0xbf, 0x01, 0x4c, 0x24, 0x68, 0x02, 0xe0)
patches[5] = (0x00, 0xbf, 0x01, 0x4d, 0x2d, 0x68, 0x02, 0xe0)
patches[8] = (0x00, 0xbf, 0xdf, 0xf8, 0x06, 0x80, 0xd8, 0xf8, 0x00, 0x80, 0x01, 0xe0)
patches[9] = (0x00, 0xbf, 0xdf, 0xf8, 0x06, 0x90, 0xd9, 0xf8, 0x00, 0x90, 0x01, 0xe0)
patches[10] = (0x00, 0xbf, 0xdf, 0xf8, 0x06, 0xa0, 0xda, 0xf8, 0x00, 0xa0, 0x01, 0xe0)
patches[11] = (0x00, 0xbf, 0xdf, 0xf8, 0x06, 0xb0, 0xdb, 0xf8, 0x00, 0xb0, 0x01, 0xe0)
ea = here()
if (get_wide_word(ea) == 0xb082 #SUB SP, SP, #8
and get_wide_word(ea + 2) == 0xb503): #PUSH {R0,R1,LR}
if get_operand_type(ea + 4, 0) == 7:
pop = get_bytes(ea + 12, 4, 0)
if pop[1] == 'xbc':
register = -1
r = get_wide_byte(ea + 12)
for i in range(8):
if r == (1 << i):
register = i
break
if register == -1:
print "Unable to detect register"
else:
address = get_wide_dword(ea + 8) + ea + 8
for b in patches[register]:
patch_byte(ea, b)
ea += 1
if ea % 4 != 0:
ea += 2
patch_dword(ea, address)
elif pop[:3] == 'x5dxf8x04':
register = ord(pop[3]) >> 4
if register in patches:
address = get_wide_dword(ea + 8) + ea + 8
for b in patches[register]:
patch_byte(ea, b)
ea += 1
patch_dword(ea, address)
else:
print "POP instruction not found"
else:
print "Wrong operand type on +4:", get_operand_type(ea + 4, 0)
else:
print "Unable to detect first instructions"

рд╣рд╛рдореАрд▓реЗ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЧрд░реНрди рдЪрд╛рд╣реЗрдХреЛ рд╕рдВрд░рдЪрдирд╛рдХреЛ рд╕реБрд░реБрдорд╛ рдХрд░реНрд╕рд░ рд░рд╛рдЦреНрдЫреМрдВ - 0xB4B2 - рд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдЙрдиреБрд╣реЛрд╕реН:

UC рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рдХрдордЬреЛрд░реАрд╣рд░реВ рдЦреЛрдЬреНрджреИ

рдкрд╣рд┐рд▓реЗ рдиреИ рдЙрд▓реНрд▓реЗрдЦ рдЧрд░рд┐рдПрдХреЛ рд╕рдВрд░рдЪрдирд╛рдХреЛ рдЕрддрд┐рд░рд┐рдХреНрдд, рдХреЛрдбрд▓реЗ рдирд┐рдореНрди рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫ:

UC рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рдХрдордЬреЛрд░реАрд╣рд░реВ рдЦреЛрдЬреНрджреИ

рдЕрдШрд┐рд▓реНрд▓реЛ рдЕрд╡рд╕реНрдерд╛рдорд╛ рдЬрд╕реНрддреИ, BLX рдирд┐рд░реНрджреЗрд╢рди рдкрдЫрд┐ рддреНрдпрд╣рд╛рдБ рдЕрдлрд╕реЗрдЯ рдЫ:

UC рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рдХрдордЬреЛрд░реАрд╣рд░реВ рдЦреЛрдЬреНрджреИ

рд╣рд╛рдореА LR рдмрд╛рдЯ рдареЗрдЧрд╛рдирд╛рдорд╛ рдЕрдлрд╕реЗрдЯ рд▓рд┐рдиреНрдЫреМрдВ, LR рдорд╛ рдердкреНрдиреБрд╣реЛрд╕реН рд░ рддреНрдпрд╣рд╛рдБ рдЬрд╛рдиреБрд╣реЛрд╕реНред 0x72044 + 0xC = 0x72050ред рдпрд╕ рдбрд┐рдЬрд╛рдЗрдирдХреЛ рд▓рд╛рдЧрд┐ рд▓рд┐рдкрд┐ рдПрдХрджрдо рд╕рд░рд▓ рдЫ:

def put_unconditional_branch(source, destination):
offset = (destination - source - 4) >> 1
if offset > 2097151 or offset < -2097152:
raise RuntimeError("Invalid offset")
if offset > 1023 or offset < -1024:
instruction1 = 0xf000 | ((offset >> 11) & 0x7ff)
instruction2 = 0xb800 | (offset & 0x7ff)
patch_word(source, instruction1)
patch_word(source + 2, instruction2)
else:
instruction = 0xe000 | (offset & 0x7ff)
patch_word(source, instruction)
ea = here()
if get_wide_word(ea) == 0xb503: #PUSH {R0,R1,LR}
ea1 = ea + 6
if get_wide_word(ea + 2) == 0xbf00: #NOP
ea1 += 2
offset = get_wide_dword(ea1)
put_unconditional_branch(ea, (ea1 + offset) & 0xffffffff)
else:
print "Unable to detect first instruction"

рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрдирдХреЛ рдирддрд┐рдЬрд╛:

UC рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рдХрдордЬреЛрд░реАрд╣рд░реВ рдЦреЛрдЬреНрджреИ

рдПрдХрдкрдЯрдХ рд╕рдмреИ рдХреБрд░рд╛ рдкреНрд░рдХрд╛рд░реНрдпрдорд╛ рдкреНрдпрд╛рдЪ рдЧрд░рд┐рд╕рдХреЗрдкрдЫрд┐, рддрдкрд╛рдИрдВрд▓реЗ IDA рд▓рд╛рдИ рдпрд╕рдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕реБрд░реБрд╡рд╛рддрдорд╛ рджреЗрдЦрд╛рдЙрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред рдпрд╕рд▓реЗ рд╕рдмреИ рдкреНрд░рдХрд╛рд░реНрдп рдХреЛрдбрд╣рд░реВ рд╕рдБрдЧреИ рдЯреБрдХреНрд░рд╛ рдЧрд░реНрдиреЗрдЫ, рд░ рдпрд╕рд▓рд╛рдИ рд╣реЗрдХреНрд╕рд░реЗ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдбрд┐рдХрдореНрдкрд╛рдЗрд▓ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред

рдбрд┐рдХреЛрдбрд┐рдЩ рд╕реНрдЯреНрд░рд┐рдЩрд╣рд░реВ

рд╣рд╛рдореАрд▓реЗ рдкреБрд╕реНрддрдХрд╛рд▓рдпрдорд╛ рдореЗрд╕рд┐рди рдХреЛрдбрдХреЛ рдЕрд╕реНрдкрд╖реНрдЯрддрд╛рд╕рдБрдЧ рд╕рдореНрдЭреМрддрд╛ рдЧрд░реНрди рд╕рд┐рдХреЗрдХрд╛ рдЫреМрдВ libsgmainso-6.4.36.so UC рдмреНрд░рд╛рдЙрдЬрд░рдмрд╛рдЯ рд░ рдкреНрд░рдХрд╛рд░реНрдп рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рднрдпреЛ JNI_Onload.

int __fastcall real_JNI_OnLoad(JavaVM *vm)
{
int result; // r0
jclass clazz; // r0 MAPDST
int v4; // r0
JNIEnv *env; // r4
int v6; // [sp-40h] [bp-5Ch]
int v7; // [sp+Ch] [bp-10h]
v7 = *(_DWORD *)off_8AC00;
if ( !vm )
goto LABEL_39;
sub_7C4F4();
env = (JNIEnv *)sub_7C5B0(0);
if ( !env )
goto LABEL_39;
v4 = sub_72CCC();
sub_73634(v4);
sub_73E24(&unk_83EA6, &v6, 49);
clazz = (jclass)((int (__fastcall *)(JNIEnv *, int *))(*env)->FindClass)(env, &v6);
if ( clazz
&& (sub_9EE4(),
sub_71D68(env),
sub_E7DC(env) >= 0
&& sub_69D68(env) >= 0
&& sub_197B4(env, clazz) >= 0
&& sub_E240(env, clazz) >= 0
&& sub_B8B0(env, clazz) >= 0
&& sub_5F0F4(env, clazz) >= 0
&& sub_70640(env, clazz) >= 0
&& sub_11F3C(env) >= 0
&& sub_21C3C(env, clazz) >= 0
&& sub_2148C(env, clazz) >= 0
&& sub_210E0(env, clazz) >= 0
&& sub_41B58(env, clazz) >= 0
&& sub_27920(env, clazz) >= 0
&& sub_293E8(env, clazz) >= 0
&& sub_208F4(env, clazz) >= 0) )
{
result = (sub_B7B0(env, clazz) >> 31) | 0x10004;
}
else
{
LABEL_39:
result = -1;
}
return result;
}

рдирд┐рдореНрди рд░реЗрдЦрд╛рд╣рд░реВрд▓рд╛рдИ рдирдЬрд┐рдХрдмрд╛рдЯ рд╣реЗрд░реМрдВ:

  sub_73E24(&unk_83EA6, &v6, 49);
clazz = (jclass)((int (__fastcall *)(JNIEnv *, int *))(*env)->FindClass)(env, &v6);

рдХрд╛рд░реНрдпрдорд╛ sub_73E24 рдХрдХреНрд╖рд╛рдХреЛ рдирд╛рдо рд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдЧрд░рд┐рдПрдХреЛ рдЫред рдпрд╕ рдкреНрд░рдХрд╛рд░реНрдпрдХреЛ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВрдХреЛ рд░реВрдкрдорд╛, рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдбрд╛рдЯрд╛, рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдмрдлрд░ рд░ рдирдореНрдмрд░рд╣рд░реВ рдЬрд╕реНрддреИ рдбреЗрдЯрд╛рдХреЛ рд▓рд╛рдЧрд┐ рдПрдХ рд╕реВрдЪрдХ рдкрд╛рд╕ рдЧрд░рд┐рдиреНрдЫред рд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛, рдкреНрд░рдХрд╛рд░реНрдпрд▓рд╛рдИ рдХрд▓ рдЧрд░реЗрдкрдЫрд┐, рддреНрдпрд╣рд╛рдБ рдмрдлрд░рдорд╛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯреЗрдб рд▓рд╛рдЗрди рд╣реБрдиреЗрдЫ, рдХрд┐рдирдХрд┐ рдпреЛ рдкреНрд░рдХрд╛рд░реНрдпрдорд╛ рдкрд╛рд╕ рд╣реБрдиреНрдЫред рдХреНрд▓рд╛рд╕ рдЦреЛрдЬреНрдиреБрд╣реЛрд╕реН, рдЬрд╕рд▓реЗ рдХрдХреНрд╖рд╛рдХреЛ рдирд╛рдорд▓рд╛рдИ рджреЛрд╕реНрд░реЛ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рдХреЛ рд░реВрдкрдорд╛ рд▓рд┐рдиреНрдЫред рддреНрдпрд╕рдХрд╛рд░рдг, рд╕рдВрдЦреНрдпрд╛ рдмрдлрд░рдХреЛ рдЖрдХрд╛рд░ рд╡рд╛ рд░реЗрдЦрд╛рдХреЛ рд▓рдореНрдмрд╛рдЗ рд╣реЛред рдХрдХреНрд╖рд╛рдХреЛ рдирд╛рдо рдмреБрдЭрд╛рдЙрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реМрдВ, рдпрд╕рд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рд╕рд╣реА рджрд┐рд╢рд╛рдорд╛ рдЧрдЗрд░рд╣реЗрдХреЛ рдЫ рдХрд┐ рдЫреИрди рднрдиреЗрд░ рдмрддрд╛рдЙрдиреБрдкрд░реНрдЫред рдЖрдЙрдиреБрд╣реЛрд╕реН рдПрдХ рдирдЬрд┐рдХрдмрд╛рдЯ рдХреЗ рд╣реБрдиреНрдЫ рдорд╛ рд╣реЗрд░реМрдВ sub_73E24ред

int __fastcall sub_73E56(unsigned __int8 *in, unsigned __int8 *out, size_t size)
{
int v4; // r6
int v7; // r11
int v8; // r9
int v9; // r4
size_t v10; // r5
int v11; // r0
struc_1 v13; // [sp+0h] [bp-30h]
int v14; // [sp+1Ch] [bp-14h]
int v15; // [sp+20h] [bp-10h]
v4 = 0;
v15 = *(_DWORD *)off_8AC00;
v14 = 0;
v7 = sub_7AF78(17);
v8 = sub_7AF78(size);
if ( !v7 )
{
v9 = 0;
goto LABEL_12;
}
(*(void (__fastcall **)(int, const char *, int))(v7 + 12))(v7, "DcO/lcK+h?m3c*q@", 16);
if ( !v8 )
{
LABEL_9:
v4 = 0;
goto LABEL_10;
}
v4 = 0;
if ( !in )
{
LABEL_10:
v9 = 0;
goto LABEL_11;
}
v9 = 0;
if ( out )
{
memset(out, 0, size);
v10 = size - 1;
(*(void (__fastcall **)(int, unsigned __int8 *, size_t))(v8 + 12))(v8, in, v10);
memset(&v13, 0, 0x14u);
v13.field_4 = 3;
v13.field_10 = v7;
v13.field_14 = v8;
v11 = sub_6115C(&v13, &v14);
v9 = v11;
if ( v11 )
{
if ( *(_DWORD *)(v11 + 4) == v10 )
{
qmemcpy(out, *(const void **)v11, v10);
v4 = *(_DWORD *)(v9 + 4);
}
else
{
v4 = 0;
}
goto LABEL_11;
}
goto LABEL_9;
}
LABEL_11:
sub_7B148(v7);
LABEL_12:
if ( v8 )
sub_7B148(v8);
if ( v9 )
sub_7B148(v9);
return v4;
}

рд╕рдорд╛рд░реЛрд╣ sub_7AF78 рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЖрдХрд╛рд░рдХреЛ рдмрд╛рдЗрдЯ рдПрд░реЗрд╣рд░реВрдХреЛ рд▓рд╛рдЧрд┐ рдХрдиреНрдЯреЗрдирд░рдХреЛ рдЙрджрд╛рд╣рд░рдг рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрдЫ (рд╣рд╛рдореА рдпреА рдХрдиреНрдЯреЗрдирд░рд╣рд░реВрдорд╛ рд╡рд┐рд╕реНрддреГрдд рд░реВрдкрдорд╛ рдмрд╕реНрдиреЗ рдЫреИрдиреМрдВ)ред рдпрд╣рд╛рдБ рджреБрдИрд╡рдЯрд╛ рдХрдиреНрдЯреЗрдирд░рд╣рд░реВ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░рд┐рдПрдХрд╛ рдЫрдиреН: рдПрдЙрдЯрд╛рдорд╛ рд░реЗрдЦрд╛ рд╕рдорд╛рд╡реЗрд╢ рдЫ "DcO/lcK+h?m3c*q@" (рдпреЛ рдПрдЙрдЯрд╛ рдХреБрдЮреНрдЬреА рд╣реЛ рднрдиреЗрд░ рдЕрдиреБрдорд╛рди рдЧрд░реНрди рд╕рдЬрд┐рд▓реЛ рдЫ), рдЕрд░реНрдХреЛрдорд╛ рдЗрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдбрд╛рдЯрд╛ рд╣реБрдиреНрдЫред рдЕрд░реНрдХреЛ, рджреБрд╡реИ рд╡рд╕реНрддреБрд╣рд░реВ рдирд┐рд╢реНрдЪрд┐рдд рд╕рдВрд░рдЪрдирд╛рдорд╛ рд░рд╛рдЦрд┐рдПрдХрд╛ рдЫрдиреН, рдЬреБрди рдкреНрд░рдХрд╛рд░реНрдпрдорд╛ рдкрдард╛рдЗрдиреНрдЫ sub_6115Cред рдпрд╕ рд╕рдВрд░рдЪрдирд╛рдорд╛ рдорд╛рди 3 рднрдПрдХреЛ рдлрд┐рд▓реНрдбрд▓рд╛рдИ рдкрдирд┐ рдЪрд┐рдиреНрд╣ рд▓рдЧрд╛рдЙрдиреБрд╣реЛрд╕реНред рдЕрдм рдпреЛ рд╕рдВрд░рдЪрдирд╛рд▓рд╛рдИ рдХреЗ рд╣реБрдиреНрдЫ рд╣реЗрд░реМрдВред

int __fastcall sub_611B4(struc_1 *a1, _DWORD *a2)
{
int v3; // lr
unsigned int v4; // r1
int v5; // r0
int v6; // r1
int result; // r0
int v8; // r0
*a2 = 820000;
if ( a1 )
{
v3 = a1->field_14;
if ( v3 )
{
v4 = a1->field_4;
if ( v4 < 0x19 )
{
switch ( v4 )
{
case 0u:
v8 = sub_6419C(a1->field_0, a1->field_10, v3);
goto LABEL_17;
case 3u:
v8 = sub_6364C(a1->field_0, a1->field_10, v3);
goto LABEL_17;
case 0x10u:
case 0x11u:
case 0x12u:
v8 = sub_612F4(
a1->field_0,
v4,
*(_QWORD *)&a1->field_8,
*(_QWORD *)&a1->field_8 >> 32,
a1->field_10,
v3,
a2);
goto LABEL_17;
case 0x14u:
v8 = sub_63A28(a1->field_0, v3);
goto LABEL_17;
case 0x15u:
sub_61A60(a1->field_0, v3, a2);
return result;
case 0x16u:
v8 = sub_62440(a1->field_14);
goto LABEL_17;
case 0x17u:
v8 = sub_6226C(a1->field_10, v3);
goto LABEL_17;
case 0x18u:
v8 = sub_63530(a1->field_14);
LABEL_17:
v6 = 0;
if ( v8 )
{
*a2 = 0;
v6 = v8;
}
return v6;
default:
LOWORD(v5) = 28032;
goto LABEL_5;
}
}
}
}
LOWORD(v5) = -27504;
LABEL_5:
HIWORD(v5) = 13;
v6 = 0;
*a2 = v5;
return v6;
}

рд╕реНрд╡рд┐рдЪ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░ рдПрдХ рд╕рдВрд░рдЪрдирд╛ рдХреНрд╖реЗрддреНрд░ рд╣реЛ рдЬреБрди рдкрд╣рд┐рд▓реЗ рдорд╛рди 3 рддреЛрдХрд┐рдПрдХреЛ рдерд┐рдпреЛред рдХреЗрд╕ 3 рд╣реЗрд░реНрдиреБрд╣реЛрд╕реН: рдкреНрд░рдХрд╛рд░реНрдпрдорд╛ sub_6364C рдорд╛рдкрджрдгреНрдбрд╣рд░реВ рд╕рдВрд░рдЪрдирд╛рдмрд╛рдЯ рдкрд╛рд░рд┐рдд рдЧрд░рд┐рдиреНрдЫ рдЬреБрди рддреНрдпрд╣рд╛рдБ рдЕрдШрд┐рд▓реНрд▓реЛ рдкреНрд░рдХрд╛рд░реНрдпрдорд╛ рдердкрд┐рдПрдХреЛ рдерд┐рдпреЛ, рдЕрд░реНрдерд╛рддреН рдХреБрдЮреНрдЬреА рд░ рдЗрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдбрд╛рдЯрд╛ред рдирдЬрд┐рдХрдмрд╛рдЯ рд╣реЗрд░реНрдиреБрднрдпреЛ рднрдиреЗ sub_6364C, рддрдкрд╛рдИрд▓реЗ рдпрд╕рдорд╛ RC4 рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЪрд┐рдиреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫред

рд╣рд╛рдореАрд╕рдБрдЧ рдПрд▓реНрдЧреЛрд░рд┐рджрдо рд░ рдХреБрдЮреНрдЬреА рдЫред рдХрдХреНрд╖рд╛рдХреЛ рдирд╛рдо рдмреБрдЭрд╛рдЙрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реМрдВред рдпрд╣рд╛рдБ рдХреЗ рднрдпреЛ: com/taobao/wireless/security/adapter/JNICLlibraryред рдорд╣рд╛рди! рд╣рд╛рдореА рд╕рд╣реА рдмрд╛рдЯреЛрдорд╛ рдЫреМрдВред

рдЖрджреЗрд╢ рд░реВрдЦ

рдЕрдм рд╣рд╛рдореАрд▓реЗ рдЪреБрдиреМрддреА рдЦреЛрдЬреНрдиреБрдкрд░реНрдЫ рджрд░реНрддрд╛ рдирд┐рд╡рд╛рд╕реАрд╣рд░реВ, рдЬрд╕рд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рдкреНрд░рдХрд╛рд░реНрдпрдорд╛ рд╕рдВрдХреЗрдд рдЧрд░реНрдиреЗрдЫ doCommandNativeред рдмрд╛рдЯ рдмреЛрд▓рд╛рдЗрдПрдХреЛ рдкреНрд░рдХрд╛рд░реНрдпрд╣рд░реВ рд╣реЗрд░реМрдВ JNI_Onload, рд░ рд╣рд╛рдореА рдпрд╕рд▓рд╛рдИ рдлреЗрд▓рд╛ рдкрд╛рд░реНрдЫреМрдВ sub_B7B0:

int __fastcall sub_B7F6(JNIEnv *env, jclass clazz)
{
char signature[41]; // [sp+7h] [bp-55h]
char name[16]; // [sp+30h] [bp-2Ch]
JNINativeMethod method; // [sp+40h] [bp-1Ch]
int v8; // [sp+4Ch] [bp-10h]
v8 = *(_DWORD *)off_8AC00;
decryptString((unsigned __int8 *)&unk_83ED9, (unsigned __int8 *)name, 0x10u);// doCommandNative
decryptString((unsigned __int8 *)&unk_83EEA, (unsigned __int8 *)signature, 0x29u);// (I[Ljava/lang/Object;)Ljava/lang/Object;
method.name = name;
method.signature = signature;
method.fnPtr = sub_B69C;
return ((int (__fastcall *)(JNIEnv *, jclass, JNINativeMethod *, int))(*env)->RegisterNatives)(env, clazz, &method, 1) >> 31;
}

рд░ рд╡рд╛рд╕реНрддрд╡рдорд╛, рдирд╛рдо рд╕рдВрдЧ рдПрдХ рджреЗрд╢реА рд╡рд┐рдзрд┐ рдпрд╣рд╛рдБ рджрд░реНрддрд╛ рдЧрд░рд┐рдПрдХреЛ рдЫ doCommandNativeред рдЕрдм рд╣рд╛рдореАрд▓рд╛рдИ рдЙрдирдХреЛ рдареЗрдЧрд╛рдирд╛ рдерд╛рд╣рд╛ рдЫред рд╣реЗрд░реМрдВ рдЙрд╕рд▓реЗ рдХреЗ рдЧрд░реНрдЫред

int __fastcall doCommandNative(JNIEnv *env, jobject obj, int command, jarray args)
{
int v5; // r5
struc_2 *a5; // r6
int v9; // r1
int v11; // [sp+Ch] [bp-14h]
int v12; // [sp+10h] [bp-10h]
v5 = 0;
v12 = *(_DWORD *)off_8AC00;
v11 = 0;
a5 = (struc_2 *)malloc(0x14u);
if ( a5 )
{
a5->field_0 = 0;
a5->field_4 = 0;
a5->field_8 = 0;
a5->field_C = 0;
v9 = command % 10000 / 100;
a5->field_0 = command / 10000;
a5->field_4 = v9;
a5->field_8 = command % 100;
a5->field_C = env;
a5->field_10 = args;
v5 = sub_9D60(command / 10000, v9, command % 100, 1, (int)a5, &v11);
}
free(a5);
if ( !v5 && v11 )
sub_7CF34(env, v11, &byte_83ED7);
return v5;
}

рдирд╛рдордмрд╛рдЯ рддрдкрд╛рдИрд▓реЗ рдЕрдиреБрдорд╛рди рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рдХрд┐ рдпрд╣рд╛рдБ рд╕рдмреИ рдкреНрд░рдХрд╛рд░реНрдпрд╣рд░реВрдХреЛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдмрд┐рдиреНрджреБ рд╣реЛ рдЬреБрди рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рдиреЗрдЯрд┐рдн рд▓рд╛рдЗрдмреНрд░реЗрд░реАрдорд╛ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░реНрдиреЗ рдирд┐рд░реНрдгрдп рдЧрд░реЗред рд╣рд╛рдореА рдкреНрд░рдХрд╛рд░реНрдп рдирдореНрдмрд░ 10601 рдорд╛ рд░реБрдЪрд┐ рд░рд╛рдЦреНрдЫреМрдВред

рддрдкрд╛рдИрд▓реЗ рдХреЛрдбрдмрд╛рдЯ рджреЗрдЦреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ рдХрд┐ рдЖрджреЗрд╢ рдирдореНрдмрд░рд▓реЗ рддреАрди рдирдореНрдмрд░рд╣рд░реВ рдЙрддреНрдкрд╛рджрди рдЧрд░реНрджрдЫ: рдЖрджреЗрд╢/10000, рдЖрджреЗрд╢ % 10000 / 100 ╨╕ рдЖрджреЗрд╢ % 10, рдЕрд░реНрдерд╛рддреН, рд╣рд╛рдореНрд░реЛ рдорд╛рдорд▓рд╛рдорд╛, 1, 6 рд░ 1ред рдпреА рддреАрди рдирдореНрдмрд░рд╣рд░реВ, рд╕рд╛рдереИ рдПрдХ рд╕реВрдЪрдХ JNIEnv рд░ рдкреНрд░рдХрд╛рд░реНрдпрдорд╛ рдкрд╛рд╕ рдЧрд░рд┐рдПрдХрд╛ рддрд░реНрдХрд╣рд░реВ рд╕рдВрд░рдЪрдирд╛рдорд╛ рдердкрд┐рдиреНрдЫрдиреН рд░ рдкрд╛рд░рд┐рдд рд╣реБрдиреНрдЫрдиреНред рдкреНрд░рд╛рдкреНрдд рддреАрди рдирдореНрдмрд░рд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ (рдЙрдиреАрд╣рд░реВрд▓рд╛рдИ N1, N2 рд░ N3 рдмреБрдЭреМрдВ), рдПрдЙрдЯрд╛ рдЖрджреЗрд╢ рд░реВрдЦ рдмрдирд╛рдЗрдПрдХреЛ рдЫред

рдпрд╕реНрддреЛ рдХреЗрд╣рд┐:

UC рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рдХрдордЬреЛрд░реАрд╣рд░реВ рдЦреЛрдЬреНрджреИ

рд░реВрдЦ рдЧрддрд┐рд╢реАрд▓ рд░реВрдкрдорд╛ рднрд░рд┐рдПрдХреЛ рдЫ JNI_Onload.
рддреАрди рдирдореНрдмрд░рд╣рд░реВрд▓реЗ рд░реВрдЦрдорд╛ рдмрд╛рдЯреЛ рд╕рдЩреНрдХреЗрдд рдЧрд░реНрдЫред рд░реВрдЦрдХреЛ рдкреНрд░рддреНрдпреЗрдХ рдкрд╛рддрд▓реЗ рд╕рдореНрдмрдиреНрдзрд┐рдд рдкреНрд░рдХрд╛рд░реНрдпрдХреЛ рдкреЛрдХ рдЧрд░рд┐рдПрдХреЛ рдареЗрдЧрд╛рдирд╛ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрджрдЫред рдХреБрдЮреНрдЬреА рдЕрднрд┐рднрд╛рд╡рдХ рдиреЛрдбрдорд╛ рдЫред рдХреЛрдбрдорд╛ рд╕реНрдерд╛рди рдкрддреНрддрд╛ рд▓рдЧрд╛рдЙрдиреБ рдЬрд╣рд╛рдБ рд╣рд╛рдореАрд▓рд╛рдИ рдЖрд╡рд╢реНрдпрдХ рдХрд╛рд░реНрдп рд░реВрдЦрдорд╛ рдердкрд┐рдПрдХреЛ рдЫ рдпрджрд┐ рддрдкрд╛рдЗрдБ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХрд╛ рд╕рдмреИ рд╕рдВрд░рдЪрдирд╛рд╣рд░реВ рдмреБрдЭреНрдиреБрд╣реБрдиреНрдЫ рднрдиреЗ рдЧрд╛рд╣реНрд░реЛ рдЫреИрди (рд╣рд╛рдореА рддрд┐рдиреАрд╣рд░реВрд▓рд╛рдИ рд╡рд░реНрдгрди рдЧрд░реНрджреИрдиреМрдВ рддрд╛рдХрд┐ рдкрд╣рд┐рд▓реЗ рдиреИ рдмрд░реБ рдареВрд▓реЛ рд▓реЗрдЦ рдмреНрд▓реЛрдЯ рдирд╣реЛрд╕реН)ред

рдердк рдЕрд╕реНрдкрд╖реНрдЯрддрд╛

рд╣рд╛рдореАрд▓реЗ рдЯреНрд░рд╛рдлрд┐рдХ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдЧрд░реНрдиреЗ рдкреНрд░рдХрд╛рд░реНрдпрдХреЛ рдареЗрдЧрд╛рдирд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдпреМрдВ: 0x5F1ACред рддрд░ рдпреЛ рд░рдорд╛рдЗрд▓реЛ рдЧрд░реНрди рдзреЗрд░реИ рдЪрд╛рдБрдбреЛ рдЫ: UC рдмреНрд░рд╛рдЙрдЬрд░рдХрд╛ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрд▓реЗ рд╣рд╛рдореНрд░реЛ рд▓рд╛рдЧрд┐ рдЕрд░реНрдХреЛ рдЖрд╢реНрдЪрд░реНрдп рддрдпрд╛рд░ рдкрд╛рд░реЗрдХрд╛ рдЫрдиреНред

рдЬрд╛рднрд╛ рдХреЛрдбрдорд╛ рдмрдирд╛рдЗрдПрдХреЛ рдПрд░реЗрдмрд╛рдЯ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реЗрдкрдЫрд┐, рд╣рд╛рдореАрд▓реЗ рдкрд╛рдЙрдБрдЫреМрдВ
рдареЗрдЧрд╛рдирд╛ 0x4D070 рдорд╛ рд╕рдорд╛рд░реЛрд╣рдорд╛ред рд░ рдпрд╣рд╛рдБ рдЕрд░реНрдХреЛ рдкреНрд░рдХрд╛рд░рдХреЛ рдХреЛрдб рдЕрд╕реНрдкрд╖реНрдЯрддрд╛ рд╣рд╛рдореАрд▓рд╛рдИ рдкрд░реНрдЦрд┐рд░рд╣реЗрдХреЛ рдЫред

рд╣рд╛рдореАрд▓реЗ R7 рд░ R4 рдорд╛ рджреБрдИ рд╕реВрдЪрдХрд╣рд░реВ рд░рд╛рдЦреНрдЫреМрдВ:

UC рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рдХрдордЬреЛрд░реАрд╣рд░реВ рдЦреЛрдЬреНрджреИ

рд╣рд╛рдореА рдкрд╣рд┐рд▓реЛ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛рд▓рд╛рдИ R11 рдорд╛ рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░реНрдЫреМрдВ:

UC рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рдХрдордЬреЛрд░реАрд╣рд░реВ рдЦреЛрдЬреНрджреИ

рддрд╛рд▓рд┐рдХрд╛рдмрд╛рдЯ рдареЗрдЧрд╛рдирд╛ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди, рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрд╣реЛрд╕реН:

UC рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рдХрдордЬреЛрд░реАрд╣рд░реВ рдЦреЛрдЬреНрджреИ

рдкрд╣рд┐рд▓реЛ рдареЗрдЧрд╛рдирд╛рдорд╛ рдЧрдПрдкрдЫрд┐, рджреЛрд╕реНрд░реЛ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдиреНрдЫ, рдЬреБрди R4 рдорд╛ рдЫред рддрд╛рд▓рд┐рдХрд╛рдорд╛ 230 рддрддреНрд╡рд╣рд░реВ рдЫрдиреНред

рдпрд╕рдорд╛ рдХреЗ рдЧрд░реНрдиреЗ ? рддрдкрд╛рдИрдВрд▓реЗ IDA рд▓рд╛рдИ рдпреЛ рд╕реНрд╡рд┐рдЪ рд╣реЛ рднрдиреА рдмрддрд╛рдЙрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ: рд╕рдореНрдкрд╛рджрди -> рдЕрдиреНрдп -> тАЛтАЛрд╕реНрд╡рд┐рдЪ рдореБрд╣рд╛рд╡рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЧрд░реНрдиреБрд╣реЛрд╕реНред

UC рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рдХрдордЬреЛрд░реАрд╣рд░реВ рдЦреЛрдЬреНрджреИ

рдирддрд┐рдЬрд╛ рдХреЛрдб рднрдпрд╛рдирдХ рдЫред рддрд░, рдпрд╕рдХреЛ рдЬрдЩреНрдЧрд▓рдмрд╛рдЯ рдЖрдлреНрдиреЛ рдмрд╛рдЯреЛ рдмрдирд╛рдЙрдБрджреИ, рддрдкрд╛рдИрдВрд▓реЗ рд╣рд╛рдореАрд▓рд╛рдИ рдкрд╣рд┐рд▓реЗ рдиреИ рдкрд░рд┐рдЪрд┐рдд рд╕рдорд╛рд░реЛрд╣рдорд╛ рдХрд▓ рджреЗрдЦреНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ sub_6115C:

UC рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рдХрдордЬреЛрд░реАрд╣рд░реВ рдЦреЛрдЬреНрджреИ

рддреНрдпрд╣рд╛рдБ рдПрдЙрдЯрд╛ рд╕реНрд╡рд┐рдЪ рдерд┐рдпреЛ рдЬрд╕рдорд╛ рдХреЗрд╕ 3 рдорд╛ RC4 рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдерд┐рдпреЛред рд░ рдпрд╕ рдЕрд╡рд╕реНрдерд╛рдорд╛, рдкреНрд░рдХрд╛рд░реНрдпрдорд╛ рдкрд╛рд╕ рдЧрд░рд┐рдПрдХреЛ рд╕рдВрд░рдЪрдирд╛рд▓рд╛рдИ рдкрд╛рд╕ рдЧрд░рд┐рдПрдХреЛ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВрдмрд╛рдЯ рднрд░рд┐рдПрдХреЛ рдЫ doCommandNativeред рд╣рд╛рдореА рддреНрдпрд╣рд╛рдБ рдХреЗ рдерд┐рдпреЛ рд╕рдореНрдЭреМрдВ magicInt рдорд╛рди 16 рдХреЛ рд╕рд╛рдеред рд╣рд╛рдореА рд╕рдореНрдмрдиреНрдзрд┐рдд рдХреЗрд╕ рд╣реЗрд░реНрдЫреМрдВ - рд░ рдзреЗрд░реИ рд╕рдВрдХреНрд░рдордг рдкрдЫрд┐ рд╣рд╛рдореА рдХреЛрдб рдлреЗрд▓рд╛ рдкрд╛рд░реНрдЫреМрдВ рдЬрд╕рджреНрд╡рд╛рд░рд╛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдкрд╣рд┐рдЪрд╛рди рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред

UC рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рдХрдордЬреЛрд░реАрд╣рд░реВ рдЦреЛрдЬреНрджреИ

рдпреЛ AES рд╣реЛ!

рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рдЕрд╡рд╕реНрдерд┐рдд рдЫ, рдмрд╛рдБрдХреА рд╕рдмреИ рдпрд╕рдХреЛ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрди рд╣реЛ: рдореЛрдб, рдХреБрдЮреНрдЬреА рд░, рд╕рдореНрднрд╡рддрдГ, рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рднреЗрдХреНрдЯрд░ (рдпрд╕рдХреЛ рдЙрдкрд╕реНрдерд┐рддрд┐ AES рдПрд▓реНрдЧреЛрд░рд┐рдереНрдордХреЛ рдЕрдкрд░реЗрдЯрд┐рдЩ рдореЛрдбрдорд╛ рдирд┐рд░реНрднрд░ рдЧрд░реНрджрдЫ)ред рддрд┐рдиреАрд╣рд░реВрд╕рдБрдЧрдХреЛ рд╕рдВрд░рдЪрдирд╛ рдкреНрд░рдХрд╛рд░реНрдп рдХрд▓ рдЕрдШрд┐ рдХрддреИ рдЧрдарди рд╣реБрдиреБрдкрд░реНрдЫ sub_6115C, рддрд░ рдХреЛрдбрдХреЛ рдпреЛ рднрд╛рдЧ рд╡рд┐рд╢реЗрд╖ рдЧрд░реА рд░рд╛рдореНрд░реЛрд╕рдБрдЧ рдЕрд╕реНрдкрд╖реНрдЯ рдЫ, рддреНрдпрд╕реИрд▓реЗ рдХреЛрдб рдкреНрдпрд╛рдЪ рдЧрд░реНрдиреЗ рд╡рд┐рдЪрд╛рд░ рдЙрддреНрдкрдиреНрди рд╣реБрдиреНрдЫ рддрд╛рдХрд┐ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдкреНрд░рдХрд╛рд░реНрдпрдХрд╛ рд╕рдмреИ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рдлрд╛рдЗрд▓рдорд╛ рдбрдореНрдк рд╣реБрдиреНрдЫрдиреНред

рдкреНрдпрд╛рдЪ

рд╕рдмреИ рдкреНрдпрд╛рдЪ рдХреЛрдбрд╣рд░реВ рдЕрд╕реЗрдВрдмрд▓реА рднрд╛рд╖рд╛рдорд╛ рдореНрдпрд╛рдиреБрдЕрд▓ рд░реВрдкрдорд╛ рдирд▓реЗрдЦреНрдирдХреЛ рд▓рд╛рдЧрд┐, рддрдкрд╛рдИрдВрд▓реЗ рдПрдиреНрдбреНрд░реЛрдЗрдб рд╕реНрдЯреБрдбрд┐рдпреЛ рд╕реБрд░реБ рдЧрд░реНрди рд╕рдХреНрдиреБрд╣реБрдиреНрдЫ, рддреНрдпрд╣рд╛рдБ рдПрдЙрдЯрд╛ рдкреНрд░рдХрд╛рд░реНрдп рд▓реЗрдЦреНрдиреБрд╣реЛрд╕реН рдЬрд╕рд▓реЗ рд╣рд╛рдореНрд░реЛ рдбрд┐рдХреНрд░рд┐рдкреНрд╢рди рдкреНрд░рдХрд╛рд░реНрдпрдХреЛ рд░реВрдкрдорд╛ рд╕рдорд╛рди рдЗрдирдкреБрдЯ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрджрдЫ рд░ рдлрд╛рдЗрд▓рдорд╛ рд▓реЗрдЦреНрдЫ, рддреНрдпрд╕рдкрдЫрд┐ рдХрдореНрдкрд╛рдЗрд▓рд░рд▓реЗ рдХреЛрдб рдкреНрд░рддрд┐рд▓рд┐рдкрд┐ рдЧрд░реЗрд░ рдЯрд╛рдБрд╕реНрдиреБрд╣реЛрд╕реНред рдЙрддреНрдкрдиреНрди рдЧрд░реНрдиреБрд╣реЛрд╕реНред

UC рдмреНрд░рд╛рдЙрдЬрд░ рдЯреЛрд▓реАрдХрд╛ рд╣рд╛рдореНрд░рд╛ рд╕рд╛рдереАрд╣рд░реВрд▓реЗ рдкрдирд┐ рдХреЛрдб рдердкреНрдиреЗ рд╕реБрд╡рд┐рдзрд╛рдХреЛ рдЦреНрдпрд╛рд▓ рдЧрд░реЗред рд╣рд╛рдореАрд▓рд╛рдИ рдпрд╛рдж рдЧрд░реМрдВ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░реНрдпрдХреЛ рд╕реБрд░реБрдорд╛ рд╣рд╛рдореАрд╕рдБрдЧ рдлреЛрд╣реЛрд░ рдХреЛрдб рдЫ рдЬреБрди рд╕рдЬрд┐рд▓реИрд╕рдБрдЧ рдХреБрдиреИ рдкрдирд┐ рдЕрдиреНрдпрд╕рдБрдЧ рдмрджрд▓реНрди рд╕рдХрд┐рдиреНрдЫред рдзреЗрд░реИ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ ЁЯЩВ рдпрджреНрдпрдкрд┐, рд▓рдХреНрд╖реНрдп рдкреНрд░рдХрд╛рд░реНрдпрдХреЛ рд╕реБрд░реБрдорд╛ рддреНрдпрд╣рд╛рдБ рдХреЛрдбрдХреЛ рд▓рд╛рдЧрд┐ рдкрд░реНрдпрд╛рдкреНрдд рдард╛рдЙрдБ рдЫреИрди рдЬрд╕рд▓реЗ рдлрд╛рдЗрд▓рдорд╛ рд╕рдмреИ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рдмрдЪрдд рдЧрд░реНрджрдЫред рдореИрд▓реЗ рдпрд╕рд▓рд╛рдИ рднрд╛рдЧрд╣рд░реВрдорд╛ рд╡рд┐рднрд╛рдЬрди рдЧрд░реНрдиреБрдкрд░реНтАНрдпреЛ рд░ рдЫрд┐рдореЗрдХреА рдХрд╛рд░реНрдпрд╣рд░реВрдмрд╛рдЯ рдлреЛрд╣реЛрд░ рдмреНрд▓рдХрд╣рд░реВ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреБрдкрд░реНтАНрдпреЛред рдЬрдореНрдорд╛ рдЪрд╛рд░ рднрд╛рдЧ рдерд┐рдП ред

рдкрд╣рд┐рд▓реЛ рднрд╛рдЧ:

UC рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рдХрдордЬреЛрд░реАрд╣рд░реВ рдЦреЛрдЬреНрджреИ

рдПрдЖрд░рдПрдо рдЖрд░реНрдХрд┐рдЯреЗрдХреНрдЪрд░рдорд╛, рдкрд╣рд┐рд▓реЛ рдЪрд╛рд░ рдкреНрд░рдХрд╛рд░реНрдп рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рджрд░реНрддрд╛рд╣рд░реВ R0-R3 рдорд╛рд░реНрдлрдд рдкрд╛рд░рд┐рдд рдЧрд░рд┐рдиреНрдЫ, рдмрд╛рдБрдХреА, рдпрджрд┐ рдХреБрдиреИ рдЫ рднрдиреЗ, рд╕реНрдЯреНрдпрд╛рдХ рдорд╛рд░реНрдлрдд рдкрд╛рд░рд┐рдд рдЧрд░рд┐рдиреНрдЫред LR рджрд░реНрддрд╛рд▓реЗ рдлрд┐рд░реНрддреА рдареЗрдЧрд╛рдирд╛ рд░рд╛рдЦреНрдЫред рдпреЛ рд╕рдмреИ рдмрдЪрдд рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ рддрд╛рдХрд┐ рд╣рд╛рдореАрд▓реЗ рдпрд╕рдХреЛ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рдбрдореНрдк рдЧрд░реЗрдкрдЫрд┐ рдкреНрд░рдХрд╛рд░реНрдпрд▓реЗ рдХрд╛рдо рдЧрд░реНрди рд╕рдХреНрдЫред рд╣рд╛рдореАрд▓реЗ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдиреЗ рд╕рдмреИ рджрд░реНрддрд╛рд╣рд░реВ рдкрдирд┐ рдмрдЪрдд рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫ, рддреНрдпрд╕реИрд▓реЗ рд╣рд╛рдореА PUSH.W {R0-R10,LR} рдЧрд░реНрдЫреМрдВред R7 рдорд╛ рд╣рд╛рдореАрд▓реЗ рд╕реНрдЯреНрдпрд╛рдХ рдорд╛рд░реНрдлрдд рдкреНрд░рдХрд╛рд░реНрдпрдорд╛ рдкрд╛рд╕ рдЧрд░рд┐рдПрдХреЛ рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВрдХреЛ рд╕реВрдЪреАрдХреЛ рдареЗрдЧрд╛рдирд╛ рдкрд╛рдЙрдБрдЫреМрдВред

рдкреНрд░рдХрд╛рд░реНрдп рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджреИ fopen рдлрд╛рдЗрд▓ рдЦреЛрд▓реМрдВ /data/local/tmp/aes "ab" рдореЛрдбрдорд╛
рдЕрд░реНрдерд╛рддреН рдердкрдХреЛ рд▓рд╛рдЧрд┐ред R0 рдорд╛ рд╣рд╛рдореА рдлрд╛рдЗрд▓ рдирд╛рдордХреЛ рдареЗрдЧрд╛рдирд╛ рд▓реЛрдб рдЧрд░реНрдЫреМрдВ, R1 рдорд╛ - рдореЛрдб рд╕рдВрдХреЗрдд рдЧрд░реНрдиреЗ рд▓рд╛рдЗрдирдХреЛ рдареЗрдЧрд╛рдирд╛ред рд░ рдпрд╣рд╛рдБ рдЧрд╛рд░реНрдмреЗрдЬ рдХреЛрдб рд╕рдорд╛рдкреНрдд рд╣реБрдиреНрдЫ, рддреНрдпрд╕реИрд▓реЗ рд╣рд╛рдореА рдЕрд░реНрдХреЛ рдкреНрд░рдХрд╛рд░реНрдпрдорд╛ рдЬрд╛рдиреНрдЫреМрдВред рдпрд╕рд▓рд╛рдИ рдХрд╛рдо рдЧрд░реНрди рдЬрд╛рд░реА рд░рд╛рдЦреНрдирдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореАрд▓реЗ рд╕реБрд░реБрдорд╛ рдлрдВрдХреНрд╢рдирдХреЛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдбрдорд╛ рдЯреНрд░рд╛рдиреНрдЬрд┐рд╕рди рд░рд╛рдЦреНрдЫреМрдВ, рдлреЛрд╣реЛрд░рд▓рд╛рдИ рдмрд╛рдЗрдкрд╛рд╕ рдЧрд░реНрджреИ, рд░ рдлреЛрд╣реЛрд░рдХреЛ рд╕рдЯреНрдЯрд╛ рд╣рд╛рдореА рдкреНрдпрд╛рдЪрдХреЛ рдирд┐рд░рдиреНрддрд░рддрд╛ рдердкреНрдЫреМрдВред

UC рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рдХрдордЬреЛрд░реАрд╣рд░реВ рдЦреЛрдЬреНрджреИ

рдХрд▓ рдЧрд░реНрджреИ fopen.

рдкреНрд░рдХрд╛рд░реНрдпрдХреЛ рдкрд╣рд┐рд▓реЛ рддреАрди рдкреНрдпрд╛рд░рд╛рдорд┐рдЯрд░рд╣рд░реВ рдПрдИрдПрд╕ рдкреНрд░рдХрд╛рд░ рдЫ intред рд╣рд╛рдореАрд▓реЗ рд╕реБрд░реБрдорд╛ рд╕реНрдЯреНрдпрд╛рдХрдорд╛ рджрд░реНрддрд╛рд╣рд░реВ рдмрдЪрдд рдЧрд░реЗрдХрд╛рд▓реЗ, рд╣рд╛рдореА рдХреЗрд╡рд▓ рдкреНрд░рдХрд╛рд░реНрдп рдкрд╛рд╕ рдЧрд░реНрди рд╕рдХреНрдЫреМрдВ fwrite рд╕реНрдЯреНрдпрд╛рдХрдорд╛ рддрд┐рдиреАрд╣рд░реВрдХреЛ рдареЗрдЧрд╛рдирд╛рд╣рд░реВред

UC рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рдХрдордЬреЛрд░реАрд╣рд░реВ рдЦреЛрдЬреНрджреИ

рдЕрд░реНрдХреЛ рд╣рд╛рдореАрд╕рдБрдЧ рдбрд╛рдЯрд╛ рд╕рд╛рдЗрдЬ рд░ рдХреБрдЮреНрдЬреА, рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рднреЗрдХреНрдЯрд░ рд░ рдЗрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдбрд╛рдЯрд╛рдХреЛ рд▓рд╛рдЧрд┐ рдбреЗрдЯрд╛рдХреЛ рд▓рд╛рдЧрд┐ рд╕реВрдЪрдХ рд╕рдорд╛рд╡реЗрд╢ рдЧрд░реНрдиреЗ рддреАрди рд╕рдВрд░рдЪрдирд╛рд╣рд░реВ рдЫрдиреНред

UC рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рдХрдордЬреЛрд░реАрд╣рд░реВ рдЦреЛрдЬреНрджреИ

рдЕрдиреНрддрдорд╛, рдлрд╛рдЗрд▓ рдмрдиреНрдж рдЧрд░реНрдиреБрд╣реЛрд╕реН, рджрд░реНрддрд╛рд╣рд░реВ рдкреБрдирд░реНрд╕реНрдерд╛рдкрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░рдХрд╛рд░реНрдпрдорд╛ рдирд┐рдпрдиреНрддреНрд░рдг рд╕реНрдерд╛рдирд╛рдиреНрддрд░рдг рдЧрд░реНрдиреБрд╣реЛрд╕реН рдПрдИрдПрд╕.

рд╣рд╛рдореА рдкреНрдпрд╛рдЪ рдЧрд░рд┐рдПрдХреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдпрдХреЛ рд╕рд╛рде рдПрдкреАрдХреЗ рд╕рдЩреНрдХрд▓рди рдЧрд░реНрдЫреМрдВ, рддреНрдпрд╕рдорд╛ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдЧрд░реНрдЫреМрдВ, рдпрдиреНрддреНрд░/рдЗрдореНрдпреБрд▓реЗрдЯрд░рдорд╛ рдЕрдкрд▓реЛрдб рдЧрд░реНрдЫреМрдВ, рд░ рдпрд╕рд▓рд╛рдИ рд▓рдиреНрдЪ рдЧрд░реНрдЫреМрдВред рд╣рд╛рдореА рджреЗрдЦреНрдЫреМрдВ рдХрд┐ рд╣рд╛рдореНрд░реЛ рдбрдореНрдк рд╕рд┐рд░реНрдЬрдирд╛ рднрдЗрд░рд╣реЗрдХреЛ рдЫ, рд░ рддреНрдпрд╣рд╛рдБ рдзреЗрд░реИ рдбрд╛рдЯрд╛ рд▓реЗрдЦрд┐рдПрдХреЛ рдЫред рдмреНрд░рд╛рдЙрдЬрд░рд▓реЗ рдЯреНрд░рд╛рдлрд┐рдХрдХреЛ рд▓рд╛рдЧрд┐ рдорд╛рддреНрд░ рдирднрдИ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ, рд░ рд╕рдмреИ рдЗрдиреНрдХреНрд░рд┐рдкреНрд╢рди рдкреНрд░рд╢реНрдирдорд╛ рд░рд╣реЗрдХреЛ рдкреНрд░рдХрд╛рд░реНрдп рдорд╛рд░реНрдлрдд рдЬрд╛рдиреНрдЫред рддрд░ рдХреБрдиреИ рдХрд╛рд░рдгрд▓реЗ рдЖрд╡рд╢реНрдпрдХ рдбрд╛рдЯрд╛ рддреНрдпрд╣рд╛рдБ рдЫреИрди, рд░ рдЖрд╡рд╢реНрдпрдХ рдЕрдиреБрд░реЛрдз рдЯреНрд░рд╛рдлрд┐рдХрдорд╛ рджреЗрдЦрд┐рдБрджреИрдиред UC рдмреНрд░рд╛рдЙрдЬрд░рд▓реЗ рдЖрд╡рд╢реНрдпрдХ рдЕрдиреБрд░реЛрдз рдЧрд░реНрди рдирдЖрдПрд╕рдореНрдо рдкрд░реНрдЦрди рдирдкрд░реЛрд╕реН, рдкрд╣рд┐рд▓реЗ рдкреНрд░рд╛рдкреНрдд рднрдПрдХреЛ рд╕рд░реНрднрд░рдмрд╛рдЯ рдЗрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд▓рд┐рдиреБрд╣реЛрд╕реН рд░ рдПрдкрд▓рд╛рдИ рдлреЗрд░рд┐ рдкреНрдпрд╛рдЪ рдЧрд░реНрдиреБрд╣реЛрд╕реН: рдореБрдЦреНрдп рдЧрддрд┐рд╡рд┐рдзрд┐рдХреЛ 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 рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдЫреМрдВ рдХрд┐рдирднрдиреЗ рд╡рд┐рдзрд┐ рд╢реВрдиреНрдп рдлрд░реНрдХрд┐рдпреЛред

рдХреЛрдбрдХреЛ рдердк рд╡рд┐рд╢реНрд▓реЗрд╖рдгрдХреЛ рдХреНрд░рдордорд╛, рдПрдЙрдЯрд╛ рдкреНрд░рдХрд╛рд░реНрдп рдкрддреНрддрд╛ рд▓рд╛рдЧреНрдпреЛ рдЬрд╕рд▓реЗ рд░реЛрдЪрдХ рд░реЗрдЦрд╛рд╣рд░реВ рдмреБрдЭрд╛рдЙрдБрдЫ: "META-INF/" рд░ ".RSA"ред рдпрд╕реНрддреЛ рджреЗрдЦрд┐рдиреНрдЫ рдХрд┐ рдЕрдиреБрдкреНрд░рдпреЛрдЧрд▓реЗ рдЖрдлреНрдиреЛ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдкреНрд░рдорд╛рдгрд┐рдд рдЧрд░рд┐рд░рд╣реЗрдХреЛ рдЫред рд╡рд╛ рдпрд╕рдмрд╛рдЯ рдХреБрдЮреНрдЬреАрд╣рд░реВ рдкрдирд┐ рдЙрддреНрдкрдиреНрди рдЧрд░реНрджрдЫред рдо рдкреНрд░рдорд╛рдгрдкрддреНрд░рд╕рдБрдЧ рдХреЗ рднрдЗрд░рд╣реЗрдХреЛ рдЫ рднрдиреНрдиреЗ рдХреБрд░рд╛рд╕рдБрдЧ рд╡реНрдпрд╡рд╣рд╛рд░ рдЧрд░реНрди рдЪрд╛рд╣рдиреНрди, рддреНрдпрд╕реИрд▓реЗ рд╣рд╛рдореА рдпрд╕рд▓рд╛рдИ рд╕рд╣реА рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдорд╛рддреНрд░реИ рдЪрд┐рдкреНрд▓реНрдиреЗрдЫреМрдВред рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рд▓рд╛рдЗрди рдкреНрдпрд╛рдЪ рдЧрд░реМрдВ рддрд╛рдХрд┐ "META-INF/" рдХреЛ рд╕рдЯреНрдЯрд╛ "BLABLINF/" рдкреНрд░рд╛рдкреНрдд рдЧрд░реМрдВ, APK рдорд╛ рддреНрдпреЛ рдирд╛рдордХреЛ рдлреЛрд▓реНрдбрд░ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреБрд╣реЛрд╕реН рд░ рддреНрдпрд╣рд╛рдБ рдЧрд┐рд▓рд╣рд░реА рдмреНрд░рд╛рдЙрдЬрд░ рдкреНрд░рдорд╛рдгрдкрддреНрд░ рдердкреНрдиреБрд╣реЛрд╕реНред

рд╣рд╛рдореА рдЬрдореНрдорд╛, рд╣рд╕реНрддрд╛рдХреНрд╖рд░, рд╕реНрдерд╛рдкрдирд╛, рд╕реБрд░реБрд╡рд╛рддред рдмрд┐рдВрдЧреЛ! рд╣рд╛рдореАрд╕рдБрдЧ рдЪрд╛рдмреА рдЫ!

MitM

рд╣рд╛рдореАрд▓реЗ рдХреБрдЮреНрдЬреА рд░ рдХреБрдЮреНрдЬреА рдмрд░рд╛рдмрд░рдХреЛ рдкреНрд░рд╛рд░рдореНрднрд┐рдХ рднреЗрдХреНрдЯрд░ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдпреМрдВред CBC рдореЛрдбрдорд╛ рд╕рд░реНрднрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реМрдВред

UC рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рдХрдордЬреЛрд░реАрд╣рд░реВ рдЦреЛрдЬреНрджреИ

рд╣рд╛рдореАрд▓реЗ рд╕рдВрдЧреНрд░рд╣ URL, MD5 рдЬрд╕реНрддреИ рдХреЗрд╣рд┐, "extract_unzipsize" рд░ рдПрдЙрдЯрд╛ рдирдореНрдмрд░ рджреЗрдЦреНрдЫреМрдВред рд╣рд╛рдореА рдЬрд╛рдБрдЪ рдЧрд░реНрдЫреМрдВ: рдЕрднрд┐рд▓реЗрдЦрдХреЛ MD5 рдЙрд╕реНрддреИ рдЫ, рдЕрдирдкреНрдпрд╛рдХ рдЧрд░рд┐рдПрдХреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдпрдХреЛ рдЖрдХрд╛рд░ рдЙрд╕реНрддреИ рдЫред рд╣рд╛рдореА рдпреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдкреНрдпрд╛рдЪ рдЧрд░реНрди рд░ рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рджрд┐рдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрджреИрдЫреМрдВред рд╣рд╛рдореНрд░реЛ рдкреНрдпрд╛рдЪ рдЧрд░рд┐рдПрдХреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд▓реЛрдб рднрдПрдХреЛ рджреЗрдЦрд╛рдЙрдирдХреЛ рд▓рд╛рдЧрд┐, рд╣рд╛рдореА "PWNED!" рдкрд╛рдардХреЛ рд╕рд╛рде рдПрд╕рдПрдордПрд╕ рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрдиреЗ рдЙрджреНрджреЗрд╢реНрдп рд╕реБрд░реБ рдЧрд░реНрдиреЗрдЫреМрдВред рд╣рд╛рдореА рд╕рд░реНрднрд░рдмрд╛рдЯ рджреБрдИ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рд╣рд░реВ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЧрд░реНрдиреЗрдЫреМрдВ: puds.ucweb.com/upgrade/index.xhtml рд░ рдЕрднрд┐рд▓реЗрдЦ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрдиред рдкрд╣рд┐рд▓реЛрдорд╛ рд╣рд╛рдореА MD5 рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдЧрд░реНрдЫреМрдВ (рдкреНрдпрд╛рдХ рдЧрд░реЗрдкрдЫрд┐ рдЖрдХрд╛рд░ рдкрд░рд┐рд╡рд░реНрддрди рд╣реБрдБрджреИрди), рджреЛрд╕реНрд░реЛрдорд╛ рд╣рд╛рдореА рдкреНрдпрд╛рдЪ рдЧрд░рд┐рдПрдХреЛ рдкреБрд╕реНрддрдХрд╛рд▓рдпрдХреЛ рд╕рд╛рде рд╕рдВрдЧреНрд░рд╣ рджрд┐рдиреНрдЫреМрдВред

рдмреНрд░рд╛рдЙрдЬрд░рд▓реЗ рдзреЗрд░реИ рдкрдЯрдХ рд╕рдВрдЧреНрд░рд╣ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдЫ, рддреНрдпрд╕рдкрдЫрд┐ рдпрд╕рд▓реЗ рддреНрд░реБрдЯрд┐ рджрд┐рдиреНрдЫред рд╕реНрдкрд╖реНрдЯ рд░реВрдкрдорд╛ рдХреЗрд╣рд┐
рдЙрд╕рд▓рд╛рдИ рдорди рдкрд░реНрджреИрдиред рдпрд╕ рдзрдорд┐рд▓реЛ рдврд╛рдБрдЪрд╛рдХреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрдХреЛ рдирддрд┐рдЬрд╛рдХреЛ рд░реВрдкрдорд╛, рдпреЛ рдкрддреНрддрд╛ рд▓рд╛рдЧреНрдпреЛ рдХрд┐ рд╕рд░реНрднрд░рд▓реЗ рдЕрднрд┐рд▓реЗрдЦрдХреЛ рдЖрдХрд╛рд░ рдкрдирд┐ рдкреНрд░рд╕рд╛рд░рдг рдЧрд░реНрджрдЫ:

UC рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рдХрдордЬреЛрд░реАрд╣рд░реВ рдЦреЛрдЬреНрджреИ

рдпреЛ LEB128 рдорд╛ рдПрдиреНрдХреЛрдб рдЧрд░рд┐рдПрдХреЛ рдЫред рдкреНрдпрд╛рдЪ рдкрдЫрд┐, рдкреБрд╕реНрддрдХрд╛рд▓рдпрдХреЛ рд╕рд╛рде рдЕрднрд┐рд▓реЗрдЦрдХреЛ рдЖрдХрд╛рд░ рдЕрд▓рд┐рдХрддрд┐ рдкрд░рд┐рд╡рд░реНрддрди рднрдпреЛ, рддреНрдпрд╕реИрд▓реЗ рдмреНрд░рд╛рдЙрдЬрд░рд▓реЗ рд╡рд┐рдЪрд╛рд░ рдЧрд░реНтАНрдпреЛ рдХрд┐ рдЕрднрд┐рд▓реЗрдЦ рдХреБрдЯрд┐рд▓ рд░реВрдкрдорд╛ рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ, рд░ рдзреЗрд░реИ рдкреНрд░рдпрд╛рд╕рд╣рд░реВ рдкрдЫрд┐ рдпрд╕рд▓реЗ рддреНрд░реБрдЯрд┐ рдлреНрдпрд╛рдБрдХреНрдпреЛред

рд╣рд╛рдореА рдЕрднрд┐рд▓реЗрдЦрдХреЛ рдЖрдХрд╛рд░ рд╕рдорд╛рдпреЛрдЬрди рдЧрд░реНрдЫреМрдВ... рд░ - рд╡рд┐рдЬрдп! ЁЯЩВ рдирддрд┐рдЬрд╛ рднрд┐рдбрд┐рдпреЛрдорд╛ рдЫред

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

рдкрд░рд┐рдгрд╛рдо рд░ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛

рддреНрдпрд╕реИрдЧрд░реА, рд╣реНрдпрд╛рдХрд░рд╣рд░реВрд▓реЗ рдпреВрд╕реА рдмреНрд░рд╛рдЙрдЬрд░рдХреЛ рдЕрд╕реБрд░рдХреНрд╖рд┐рдд рд╕реБрд╡рд┐рдзрд╛рд▓рд╛рдИ рдорд╛рд▓рд┐рд╕рд┐рдпрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реАрд╣рд░реВ рд╡рд┐рддрд░рдг рд░ рдЪрд▓рд╛рдЙрди рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рд╕рдХреНрдЫрдиреНред рдпреА рдкреБрд╕реНрддрдХрд╛рд▓рдпрд╣рд░реВрд▓реЗ рдмреНрд░рд╛рдЙрдЬрд░рдХреЛ рд╕рдиреНрджрд░реНрднрдорд╛ рдХрд╛рдо рдЧрд░реНрдиреЗрдЫрдиреН, рддреНрдпрд╕реИрд▓реЗ рддрд┐рдиреАрд╣рд░реВрд▓реЗ рдпрд╕рдХреЛ рд╕рдмреИ рдкреНрд░рдгрд╛рд▓реА рдЕрдиреБрдорддрд┐рд╣рд░реВ рдкреНрд░рд╛рдкреНрдд рдЧрд░реНрдиреЗрдЫрдиреНред рдлрд▓рд╕реНрд╡рд░реВрдк, рдлрд┐рд╕рд┐рдЩ рд╡рд┐рдиреНрдбреЛрдЬрд╣рд░реВ рдкреНрд░рджрд░реНрд╢рди рдЧрд░реНрдиреЗ рдХреНрд╖рдорддрд╛, рд╕рд╛рдереИ рд╕реБрдиреНрддрд▓рд╛ рдЪрд┐рдирд┐рдпрд╛рдБ рдЧрд┐рд▓рд╣рд░реАрдХреЛ рдХрд╛рдо рдЧрд░реНрдиреЗ рдлрд╛рдЗрд▓рд╣рд░реВрдорд╛ рдкрд╣реБрдБрдЪ, рд▓рдЧрдЗрдирд╣рд░реВ, рдкрд╛рд╕рд╡рд░реНрдбрд╣рд░реВ рд░ рдбрд╛рдЯрд╛рдмреЗрд╕рдорд╛ рднрдгреНрдбрд╛рд░ рдЧрд░рд┐рдПрдХрд╛ рдХреБрдХреАрд╣рд░реВ рд╕рд╣рд┐рддред

рд╣рд╛рдореАрд▓реЗ UC рдмреНрд░рд╛рдЙрдЬрд░рдХрд╛ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛рд╣рд░реВрд▓рд╛рдИ рд╕рдореНрдкрд░реНрдХ рдЧрд░реНрдпреМрдВ рд░ рдЙрдиреАрд╣рд░реВрд▓рд╛рдИ рд╣рд╛рдореАрд▓реЗ рдлреЗрд▓рд╛ рдкрд░реЗрдХреЛ рд╕рдорд╕реНрдпрд╛рдХреЛ рдмрд╛рд░реЗрдорд╛ рдЬрд╛рдирдХрд╛рд░реА рдЧрд▒реНрдпреМрдВ, рдЬреЛрдЦрд┐рдо рд░ рдпрд╕рдХреЛ рдЦрддрд░рд╛ рдФрдВрд▓реНрдпрд╛рдЙрди рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрдпреМрдВ, рддрд░ рддрд┐рдиреАрд╣рд░реВрд▓реЗ рд╣рд╛рдореАрд╕рдБрдЧ рдХреБрдиреИ рдкрдирд┐ рдХреБрд░рд╛ рдЧрд░реЗрдирдиреНред рдпрд╕реИрдмреАрдЪ, рдмреНрд░рд╛рдЙрдЬрд░рд▓реЗ рдЖрдлреНрдиреЛ рдЦрддрд░рдирд╛рдХ рд╡рд┐рд╢реЗрд╖рддрд╛рд▓рд╛рдИ рд╕рд╛рджрд╛ рджреГрд╖реНрдЯрд┐рдорд╛ рджреЗрдЦрд╛рдЙрди рдЬрд╛рд░реА рд░рд╛рдЦреНрдпреЛред рддрд░ рдПрдХрдкрдЯрдХ рд╣рд╛рдореАрд▓реЗ рдЬреЛрдЦрд┐рдордХреЛ рд╡рд┐рд╡рд░рдгрд╣рд░реВ рдЦреБрд▓рд╛рд╕рд╛ рдЧрд░реЗрдкрдЫрд┐, рдпрд╕рд▓рд╛рдИ рдкрд╣рд┐рд▓реЗрдХреЛ рд░реВрдкрдорд╛ рдмреЗрд╡рд╛рд╕реНрддрд╛ рдЧрд░реНрди рд╕рдореНрднрд╡ рдерд┐рдПрдиред реирен рдЪреИрдд рдерд┐рдпреЛ
UC рдмреНрд░рд╛рдЙрдЬрд░ 12.10.9.1193 рдХреЛ рдирдпрд╛рдБ рд╕рдВрд╕реНрдХрд░рдг рдЬрд╛рд░реА рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ, рдЬрд╕рд▓реЗ HTTPS рдорд╛рд░реНрдлрдд рд╕рд░реНрднрд░ рдкрд╣реБрдБрдЪ рдЧрд░реНрдпреЛ: puds.ucweb.com/upgrade/index.xhtml.

рдердк рд░реВрдкрдорд╛, "рдлрд┐рдХреНрд╕" рдкрдЫрд┐ рд░ рдпреЛ рд▓реЗрдЦ рд▓реЗрдЦреНрдиреЗ рд╕рдордп рд╕рдореНрдо, рдмреНрд░рд╛рдЙрдЬрд░рдорд╛ рдкреАрдбреАрдПрдл рдЦреЛрд▓реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрджрд╛ "рдЙрдл, рдХреЗрд╣рд┐ рдЧрд▓рдд рднрдпреЛ!" рдкрд╛рдардХреЛ рд╕рд╛рде рддреНрд░реБрдЯрд┐ рд╕рдиреНрджреЗрд╢ рдЖрдпреЛред рдкреАрдбреАрдПрдл рдЦреЛрд▓реНрдиреЗ рдкреНрд░рдпрд╛рд╕ рдЧрд░реНрджрд╛ рд╕рд░реНрднрд░рд▓рд╛рдИ рдЕрдиреБрд░реЛрдз рдЧрд░рд┐рдПрдХреЛ рдерд┐рдПрди, рддрд░ рдмреНрд░рд╛рдЙрдЬрд░ рд╕реБрд░реВ рдЧрд░реНрджрд╛ рдЕрдиреБрд░реЛрдз рдЧрд░рд┐рдПрдХреЛ рдерд┐рдпреЛ, рдЬрд╕рд▓реЗ Google Play рдирд┐рдпрдорд╣рд░реВрдХреЛ рдЙрд▓реНрд▓рдЩреНрдШрдирдорд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдпреЛрдЧреНрдп рдХреЛрдб рдбрд╛рдЙрдирд▓реЛрдб рдЧрд░реНрдиреЗ рдирд┐рд░рдиреНрддрд░ рдХреНрд╖рдорддрд╛рдорд╛ рд╕рдЩреНрдХреЗрдд рдЧрд░реНрдЫред

рд╕реНрд░реЛрдд: www.habr.com

рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдердкреНрди