рдПрдХ Android рдЖрд╡реЗрджрди рд╣реИрдХрд┐рдВрдЧ

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


рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдпрд╣ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдореИрдВ рдХреИрд╕реЗ рдореБрдХреНрдд рдФрд░ рдЕрдВрдд рдореЗрдВ рд╡рд┐рдЬреНрдЮрд╛рдкрдиреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣рд╛ - рдкрдЯрд╛рдЦреЗ рдХреЗ рдХрд╛рд░реНрдп рдХреЛ рдЬрдЯрд┐рд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рд╢рдмреНрджред

рдЪрд░рдг 1. "рдкрдардиреАрдп" рдЖрд╡реЗрджрди рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред
рдлреЛрди рд╕реЗ рдПрдкреАрдХреЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд░реВрдЯ рд╡рд┐рд╢реЗрд╖рд╛рдзрд┐рдХрд╛рд░реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рдо рдЕрджрдм рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП рдлреЛрди рд╕реЗ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЦреАрдВрдЪрддреЗ рд╣реИрдВ (рдЖрдЗрдП рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдПрдХ рд╢рд╛рдирджрд╛рд░ рдРрдк рд╣реИред рд╕рд╛рдЬрд┐рд╢ рдХреЗ рд▓рд┐рдП рдЖрд╡реЗрджрди рдХрд░реЗрдВ):
adb pull /data/app/greatapp.apk

Overmove habraiser рдиреЗ рдореБрдЭреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рдХрд┐ рд░реВрдЯ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ, рдЖрдк рдПрд╕реНрдЯреНрд░реЛ рдХреЗ рд╕рд╛рде рдХрд┐рд╕реА рднреА рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдмреИрдХрдЕрдк рд▓реЗ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕реЗ / mnt / sdcard рдкрд░ рдХреЙрдкреА рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
рд╣реИрдмрд░реВрд╕рд░ рдореЗрдЧрд╛рдбрд┐рдмреНрд▓реЛ рдиреЗ рдореБрдЭреЗ рдмрддрд╛рдпрд╛ рдХрд┐ рдПрд╕реНрдЯреНрд░реЛ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИред рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд┐рдП рдЧрдП рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдФрд░ рдЙрдирдХреА рдПрдкреАрдХреЗ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рд╕реВрдЪреА рд╢реЗрд▓ рдореЗрдВ pm рдпреВрдЯрд┐рд▓рд┐рдЯреА рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рдИ рдЬрд╛ рд╕рдХрддреА рд╣реИ, рдФрд░ рдЬрдм рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЬреНрдЮрд╛рдд рд╣реИ, рддреЛ рдЗрд╕реЗ adb pull /data/app/app.filename.apk рдорд╛рдзреНрдпрдо рд╕реЗ рдЦреАрдВрдЪрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

APK рдПрдХ рдЬрд╝рд┐рдк рд╕рдВрдЧреНрд░рд╣ рд╣реИ, рд╣рдо рд╕рдВрдХрд▓рд┐рдд рдХреЛрдб рдХреЗ рд╕рд╛рде рд╡рд╣рд╛рдВ рд╕реЗ рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓реЗ classes.dex рдлрд╝рд╛рдЗрд▓ рдкреНрд░рд╛рдкреНрдд рдХрд░рддреЗ рд╣реИрдВред
рд╣рдо рдЕрдкрдиреЗ рдЧрдВрджреЗ рдХрд╛рдореЛрдВ рдХреЗ рд▓рд┐рдП smali / baksmali рдХреЛрдбрд╛рдВрддрд░рдХ / disassembler рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗред
java -jar baksmali-1.3.2.jar classes.dex

рдЖрдЙрдЯрдкреБрдЯ рдкрд░, рд╣рдореЗрдВ *.smali рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЗ рд╕рдореВрд╣ рдХреЗ рд╕рд╛рде рдЖрдЙрдЯ рдбрд╛рдпрд░реЗрдХреНрдЯрд░реА *.smali рд╣реИред рдЙрдирдореЗрдВ рд╕реЗ рдкреНрд░рддреНрдпреЗрдХ рдПрдХ .class рдлрд╝рд╛рдЗрд▓ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИред рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ, рдореИрдВ рдирд╣реАрдВ рдЪрд╛рд╣рддрд╛ рдХрд┐ рд╕рдм рдХреБрдЫ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдХреЗ рд▓рд┐рдП рд╕реНрдердЧрд┐рдд рд╣реЛ, рдпрд╣ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрддреА рд╣реИ:


рдЖрдЗрдП рдпрд╣ рд╕рдордЭрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдВ рдХрд┐ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЗрд╕ рдореЛрдЯреЗ рддреМрд░ рдкрд░ рдвреЗрд░ "рдХрд╣рддреЗ" рдХрд╣рд╛рдВ рд╣реИрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдореИрдВрдиреЗ рд╕рд┐рд░реНрдл рд╕рднреА рдлрд╛рдЗрд▓реЛрдВ рдореЗрдВ " AdView " (AdMob SDK рдХреЗ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдирд╛) рдкрд╛рда рдХреЗ рд╕рд╛рде рдПрдХ рдЦреЛрдЬ рдХреАред рдореИрдВрдиреЗ рд╕реНрд╡рдпрдВ AdView.smali , R$id.smali рдФрд░ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд d.smali ред AdView.smali рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд╣реИ, рдореИрдВрдиреЗ рдХрд┐рд╕реА рднреА рддрд░рд╣ R.$id рдХреЛ рдкрд╣рд▓реА рдмрд╛рд░ рдореЗрдВ рдирдЬрд░рдЕрдВрджрд╛рдЬ рдХрд░ рджрд┐рдпрд╛, рдФрд░ рддреБрд░рдВрдд рд░рд╣рд╕реНрдпрдордп d.smali рдЪрд▓рд╛ рдЧрдпрд╛ред

рдЪрд░рдг 2. рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдЬрд╛рдПрдВред
рдпрд╣рд╛рдБ d.smali рдХреЗ рдкрд╣рд▓реЗ рдЙрд▓реНрд▓реЗрдЦ рдХреЗ рд╕рд╛рде d.smali рдлрд╝рд╛рдЗрд▓ рдореЗрдВ a() рд╡рд┐рдзрд┐ рд╣реИ (рдореИрдВрдиреЗ рддрдп рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣ рдПрдХ рд╕реНрдХреНрд░реАрдирд╢реЙрдЯ рдХреЗ рд╕рд╛рде рдмреЗрд╣рддрд░ рдерд╛, рдЕрдиреНрдпрдерд╛ рдпрд╣ рдмрд┐рдирд╛ рдкреНрд░рд╛рд░реВрдкрдг рдХреЗ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рджреБрдЦрдж рд╣реЛрдЧрд╛):


рд╡рд┐рдзрд┐ рдХреБрдЫ рднреА рдирд╣реАрдВ рд▓реМрдЯрд╛рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рджреЛ рдмрд╛рд░ рд╕реЛрдЪрдиреЗ рдХреЗ рдмрд┐рдирд╛, рдореИрдВрдиреЗ return-void рдХреА рд╢реБрд░реБрдЖрдд рдХреЗ рдХрд░реАрдм рдбрд╛рд▓рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛ред рдЬрдм рдореИрдВрдиреЗ рд╕рдм рдХреБрдЫ рдПрдХ рд╕рд╛рде рд░рдЦрд╛ рдФрд░ рдЗрд╕реЗ рдЪрд▓рд╛рдпрд╛, рддреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдЦреБрд╢реА рд╕реЗ рджреБрд░реНрдШрдЯрдирд╛рдЧреНрд░рд╕реНрдд рд╣реЛ рдЧрдпрд╛ред adb logcat рд╕реЗ рд▓реЙрдЧ рдЗрди рдХрд░реЗрдВ:

E/AndroidRuntime(14262): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.greatapp/com.greatapp.GreatApp}: android.view.InflateException: Binary XML file line #22: Error inflating class com.google.ads.AdView

рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд╣реИ рдХрд┐ рдЬреЛрдбрд╝рддреЛрдбрд╝ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдорд╛рд░рд╛ AdView рдареАрдХ рд╕реЗ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ AdView ред d.smali рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рдЬрд╛рдУред

рдЪрд░рдг 3. рд╕рднреА рдкрд░рд┐рд╡рд░реНрддрдиреЛрдВ рдХреЛ рд╡рд╛рдкрд╕ рд░реЛрд▓ рдХрд░реЗрдВ рдФрд░ рдкрд╣рд▓реЗ рдпрд╛рдж рдХрд┐рдП рдЧрдП R$id ред рдпрд╣рд╛рдБ AdView рд╕рд╛рде рд▓рд╛рдЗрди рд╣реИ:
# static fields
.field public static final adView:I = 0x7f080006


рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╡рд┐рдЬреНрдЮрд╛рдкрдиреЛрдВ рдХреЗ рд╕рд╛рде рд╡реНрдпреВ рдЖрдИрдбреА рд╣реИред рдЖрдЗрдП рдЦреЛрдЬ рдХрд░реЗрдВ рдХрд┐ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ 0x7f080006 рдорд╛рди рджреНрд╡рд╛рд░рд╛ 0x7f080006 ред рд╣рдореЗрдВ рдХреЗрд╡рд▓ рджреЛ рдкрд░рд┐рдгрд╛рдо рдорд┐рд▓рддреЗ рд╣реИрдВ: рд╡рд╣реА R$id рдФрд░ GreatApp.smali ред GreatApp.smali рдореЗрдВ, рдкрд╛рда рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдмрд╣реБрдд рдЕрдзрд┐рдХ рд░реЛрдЪрдХ рд╣реИ (рдореЗрд░реА рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ):


рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ View (рдкрдВрдХреНрддрд┐ 588) рдХреА рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд╢рд╛рдмреНрджрд┐рдХ рд░реВрдк рд╕реЗ рддреБрд░рдВрдд рд╡рд┐рдЬреНрдЮрд╛рдкрди рджреГрд╢реНрдп рд╕реНрдХреНрд░реАрди (рдкрдВрдХреНрддрд┐ 595) рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрджрд┐ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдХреА рдХрдореА рдХреЗ рд▓рд┐рдП рднреБрдЧрддрд╛рди рдХрд░рддрд╛ рд╣реИ, рддреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ? рдпрджрд┐ рдЖрдк рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХрд╛ рдЯрдХрдЯрдХреА "рдХреАрд╡рд░реНрдб" рдХреЗ рд╕рд╛рде 558 рдХреЛ рдкрдВрдХреНрддрд┐ рдореЗрдВ рд░рдЦрддрд╛ рд╣реИ:
invoke-static {v7, v8}, Lnet/robotmedia/billing/BillingController;->isPurchased(Landroid/content/Context;Ljava/lang/String;)Z

рд░реЛрдмреЛрдЯрдореАрдбрд┐рдпрд╛ рдПрдХ рддреГрддреАрдп-рдкрдХреНрд╖ (рдУрдкрди рд╕реЛрд░реНрд╕) рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╣реИ рдЬрд┐рд╕реЗ рдПрдВрдбреНрд░реЙрдЗрдб рдореЗрдВ рдЗрди-рдРрдк рдмрд┐рд▓рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХреЛ рдЖрд╕рд╛рди рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЙрд╕реЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмрд╛рдзрд┐рдд рдХреНрдпреЛрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛? рдУрд╣ рдареАрдХ рд╣реИ, рднрд╛рдЧреНрдпрд╢рд╛рд▓реА
рдпрд╣ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ isPurchased() рдкрджреНрдзрддрд┐ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд▓реМрдЯрд╛рддреА рд╣реИ, рдЬреЛ Boolean.valueOf() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реБрдП Boolean.valueOf() рдмреВрд▓рд┐рдпрди рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рд╣реЛ рдЬрд╛рддреА рд╣реИ рдФрд░ рдЕрдВрдд рдореЗрдВ, booleanValue() рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рдирд┐рдпрдорд┐рдд boolean рдореЗрдВ booleanValue() ред
рдФрд░ рдпрд╣рд╛рдБ рд╕рдмрд╕реЗ рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд, рд▓рд╛рдЗрди 572 рдкрд░ рд╣рдо рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ :cond_32 , рдпрджрд┐ рдкрд░рд┐рдгрд╛рдо рдорд╛рди == false ред рдЕрдиреНрдпрдерд╛, рдкрд╣рд▓реЗ рд╕реЗ рджреЗрдЦреА рдЧрдИ AdView рдЦреЛрдЬ рдФрд░ рд╣рдЯрд╛рдирд╛ AdView ред

рдЪрд░рдг 4. рдиреНрдпреВрдирддрдо рдкрд░рд┐рд╡рд░реНрддрди, рдЗрдХрдЯреНрдард╛ рдХрд░рдирд╛ рдФрд░ рдЪрд▓рд╛рдирд╛ред
рдЦреИрд░, рдмрд╛рдд рдЫреЛрдЯреА рд╣реИ - рдЗрд╕ рдХреБрдВрдЬреА рд▓рд╛рдЗрди рдХреЛ рд╣рдЯрд╛рдПрдВ, рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдЗрдХрдЯреНрдард╛ рдХрд░реЗрдВ рдФрд░ рддреБрд░рдВрдд рдлреЛрди рдкрд░ рдЗрдВрд╕реНрдЯреЙрд▓ рдХрд░реЗрдВ:
java -jar ..\smali\smali-1.3.2.jar ..\smali\out -o classes.dex
apkbuilder C:\devel\greatapp\greatapp_cracked.apk -u -z C:\devel\greatapp\greatapp_noclasses.apk -f C:\devel\greatapp\classes.dex
jarsigner -verbose -keystore my-release-key.keystore -storepass testtest -keypass testtest greatapp_cracked.apk alias_name
adb install greatapp_cracked.apk


( greatapp_noclasses.apk рдХрд╛ рдореВрд▓ greatapp_noclasses.apk рд╣реИ рдЬрд╣рд╛рдВ рд╕реЗ classes.dex рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдПрдВрдбреНрд░реЙрдЗрдб рдПрд╕рдбреАрдХреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреНрд░рдорд╛рдг рдкрддреНрд░ рдмрдирд╛рдП рдЬрд╛рддреЗ рд╣реИрдВ)ред
рдФрд░ рддреВрдлрд╛рди, рдЖрд╡реЗрджрди рднрд╛рдЧреЛ, рдХреЛрдИ рд╡рд┐рдЬреНрдЮрд╛рдкрди рдирд╣реАрдВ!

рдЕрдм рдлрд╝реНрд░реАрдмреА рдкреНрд░рд╢рдВрд╕рдХреЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдп рдХреЛ рдХреИрд╕реЗ рдЬрдЯрд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛рдП (рдпрд╣ рд╕рд┐рд░реНрдл Google IO 2011 рдХреЗ рд╕рд╛рде рдкрд╛рдпрд░реЗрд╕реА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╡реАрдбрд┐рдпреЛ рд╕реЗ рдпрд╛рдж рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдиреАрдЪреЗ рджрд┐рдпрд╛ рдЧрдпрд╛ рд▓рд┐рдВрдХ):


рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рджрд┐рд▓рдЪрд╕реНрдк рдерд╛ред рдЕрдВрдд рдореЗрдВ, рд╡рд┐рд╖рдп рдкрд░ рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рд▓рд┐рдВрдХ:

Source: https://habr.com/ru/post/In141522/


All Articles