Π₯Π΅Ρ Π₯Π°Π±Ρ!
Π£ ΡΠ²ΠΎΠΌ ΡΠ°Π΄Ρ Π½Π°ΡΠ° ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΠ° ΡΠ΅ Π²ΡΠ»ΠΎ ΡΠ΅ΡΡΠΎ Π±Π°Π²ΠΈ ΡΠ°Π·Π½ΠΈΠΌ Π°Π»Π°ΡΠΈΠΌΠ° Π·Π° Π°Π½Π°Π»ΠΈΠ·Ρ ΡΡΠ°ΡΠΈΡΠΊΠΎΠ³ ΠΊΠΎΠ΄Π° (Π‘ΠΠ‘Π’). ΠΠ·Π²Π°Π½ ΠΊΡΡΠΈΡΠ΅ ΡΠ²ΠΈ ΡΠ°Π΄Π΅ ΠΏΡΠΎΡΠ΅ΡΠ½ΠΎ. ΠΠ°ΡΠ°Π²Π½ΠΎ, ΡΠ²Π΅ Π·Π°Π²ΠΈΡΠΈ ΠΎΠ΄ ΠΏΡΠΎΡΠ΅ΠΊΡΠ° ΠΈ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡΠ° ΠΊΠΎΡΠ΅ ΡΠ΅ Ρ ΡΠ΅ΠΌΡ ΠΊΠΎΡΠΈΡΡΠ΅, ΠΊΠ°ΠΎ ΠΈ ΠΎΠ΄ ΡΠΎΠ³Π° ΠΊΠΎΠ»ΠΈΠΊΠΎ ΡΡ ΡΠ΅ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡΠ΅ ΠΏΠΎΠΊΡΠΈΠ²Π΅Π½Π΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΈΠΌΠ° Π°Π½Π°Π»ΠΈΠ·Π΅. ΠΠΎ ΠΌΠΎΠΌ ΠΌΠΈΡΡΠ΅ΡΡ, ΡΠ΅Π΄Π°Π½ ΠΎΠ΄ Π½Π°ΡΠ²Π°ΠΆΠ½ΠΈΡΠΈΡ ΠΊΡΠΈΡΠ΅ΡΠΈΡΡΠΌΠ° ΠΏΡΠΈ ΠΎΠ΄Π°Π±ΠΈΡΡ Π‘ΠΠ‘Π’ Π°Π»Π°ΡΠ° ΡΠ΅ ΠΌΠΎΠ³ΡΡΠ½ΠΎΡΡ Π΄Π° Π³Π° ΠΏΡΠΈΠ»Π°Π³ΠΎΠ΄ΠΈΡΠ΅ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΎΡΡΠΈΠΌΠ° Π²Π°ΡΠΈΡ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°, ΠΎΠ΄Π½ΠΎΡΠ½ΠΎ ΠΏΠΈΡΠ΅ΡΠ΅ ΠΈ ΠΌΠ΅ΡΠ°ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° Π°Π½Π°Π»ΠΈΠ·Π΅ ΠΈΠ»ΠΈ, ΠΊΠ°ΠΊΠΎ ΠΈΡ ΡΠ΅ΡΡΠ΅ Π·ΠΎΠ²Ρ, ΠΏΡΠΈΠ»Π°Π³ΠΎΡΠ΅Π½ΠΈ ΡΠΏΠΈΡΠΈ.
ΠΠ°ΡΡΠ΅ΡΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈΠΌΠΎ Π¦Ρ Π΅ΡΠΊΠΌΠ°ΡΠΊ - Π²Π΅ΠΎΠΌΠ° Π·Π°Π½ΠΈΠΌΡΠΈΠ² ΠΈ ΠΌΠΎΡΠ°Π½ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ ΠΊΠΎΠ΄Π°. Π£ ΠΎΠ²ΠΎΠΌ ΡΠ»Π°Π½ΠΊΡ ΡΡ Π³ΠΎΠ²ΠΎΡΠΈΡΠΈ ΠΎ ΡΠ²ΠΎΠΌ ΠΈΡΠΊΡΡΡΠ²Ρ ΠΏΠΈΡΠ°ΡΠ° ΠΏΡΠ°Π²ΠΈΠ»Π° Π°Π½Π°Π»ΠΈΠ·Π΅ Π·Π° ΡΠΎ.
ΠΡΠ΅Π³Π»Π΅Π΄ ΡΠ°Π΄ΡΠΆΠ°ΡΠ°
Π£Π»Π°Π·Π°ΠΊ
ΠΠ° ΠΏΠΎΡΠ΅ΡΠ°ΠΊ, ΠΆΠ΅Π»Π΅ΠΎ Π±ΠΈΡ
Π΄Π° ΠΏΡΠ΅ΠΏΠΎΡΡΡΠΈΠΌ ΡΠ΅Π΄Π°Π½ ΠΎΠ΄ ΡΠ΅ΡΠΊΠΈΡ
ΡΠ»Π°Π½Π°ΠΊΠ° Π½Π° ΡΡΡΠΊΠΎΠΌ ΠΎ ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ°ΠΌΠ° ΠΏΠΈΡΠ°ΡΠ° ΡΠΏΠΈΡΠ° Π·Π° Π¦Ρ
Π΅ΡΠΊΠΌΠ°ΡΠΊ. ΠΠ±ΡΠ°Π²ΡΠ΅Π½ΠΎ ΡΠ΅ Π½Π° Π₯Π°Π±ΡΠ΅Ρ ΠΊΡΠ°ΡΠ΅ΠΌ 2019. Π³ΠΎΠ΄ΠΈΠ½Π΅ ΠΏΠΎΠ΄ Π½Π°ΡΠ»ΠΎΠ²ΠΎΠΌ:
ΠΠ½ Π΄Π΅ΡΠ°ΡΠ½ΠΎ ΠΈΡΠΏΠΈΡΡΡΠ΅ ΠΊΠ°ΠΊΠΎ Π½Π°ΠΏΠΈΡΠ°ΡΠΈ ΠΏΡΠ²Π΅ ΡΠΏΠΈΡΠ΅ Ρ Π¦ΠΊΠΠ-Ρ (Π¦Ρ Π΅ΡΠΊΠΌΠ°ΡΠΊ ΠΡΠ΅ΡΠΈ ΠΠ°Π½Π³ΡΠ°Π³Π΅) Π·Π° Π½Π΅ΠΊΡ ΡΠ΅ΡΡΠ½Ρ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡ ΠΈ ΠΏΠΎΠΊΠ°Π·ΡΡΠ΅ ΠΎΡΠ½ΠΎΠ²Π½Π΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΠ΅ ΠΊΠ°ΠΊΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π° Π°Π½Π°Π»ΠΈΠ·Π΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΡ.
ΠΠ΅ΡΡ ΠΏΠΎΠ½Π°Π²ΡΠ°ΡΠΈ ΠΎΠ½ΠΎ ΡΡΠΎ ΡΠ΅ Ρ ΡΠ΅ΠΌΡ ΠΎΠΏΠΈΡΠ°Π½ΠΎ, ΠΈΠ°ΠΊΠΎ ΡΠ΅ Π½Π΅ΠΊΠ΅ ΡΠ°ΡΠΊΡΡΠ½ΠΈΡΠ΅ ΠΈΠΏΠ°ΠΊ Π±ΠΈΡΠΈ ΠΏΡΠΈΡΡΡΠ½Π΅. Π£ ΡΠ²ΠΎΠΌ ΡΠ»Π°Π½ΠΊΡ ΠΏΠΎΠΊΡΡΠ°ΡΡ Π΄Π° ΡΠ°ΡΡΠ°Π²ΠΈΠΌ Π½Π΅ΠΊΡ Π²ΡΡΡΡ βΠ·Π±ΠΈΡΠΊΠ΅ ΡΠ΅ΡΠ΅ΠΏΠ°ΡΠ°β, ΡΠΏΠΈΡΠ°ΠΊ ΡΠ΅ΡΠ΅ΡΠ° ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠ° ΠΊΠΎΡΠΈΠΌΠ° ΡΠ°ΠΌ ΡΠ΅ ΡΡΡΡΠ΅ΠΎ ΡΠΎΠΊΠΎΠΌ ΡΠ°Π΄Π° ΡΠ° Π¦Ρ Π΅ΡΠΊΠΌΠ°ΡΠΊ-ΠΎΠΌ. ΠΠΎΡΠ°ΠΎ ΡΠ°ΠΌ Π΄Π° ΡΠ΅ ΡΠ°Π·Π±ΠΈΡΠ΅ΠΌ Π·Π±ΠΎΠ³ ΠΌΠ½ΠΎΠ³ΠΈΡ ΠΎΠ΄ ΠΎΠ²ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°. ΠΠΎΠ½Π΅ΠΊΠ°Π΄ Π½ΠΈΡΠ΅ Π±ΠΈΠ»ΠΎ Π΄ΠΎΠ²ΠΎΡΠ½ΠΎ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΠ° Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΈ, Π° ΠΏΠΎΠ½Π΅ΠΊΠ°Π΄ ΡΠ΅ Π±ΠΈΠ»ΠΎ ΡΠ°ΠΊ ΠΈ ΡΠ΅ΡΠΊΠΎ ΡΠ°Π·ΡΠΌΠ΅ΡΠΈ ΠΊΠ°ΠΊΠΎ Π΄Π° ΡΠ΅ ΡΡΠ°Π΄ΠΈ ΠΎΠ½ΠΎ ΡΡΠΎ ΡΠ΅ ΡΡΠ°ΠΆΠΈ. ΠΠ°Π΄Π°ΠΌ ΡΠ΅ Π΄Π° ΠΌΠΎΡΠ΅ ΠΈΡΠΊΡΡΡΠ²ΠΎ ΠΈ Π½Π΅ΠΏΡΠΎΡΠΏΠ°Π²Π°Π½Π΅ Π½ΠΎΡΠΈ Π½Π΅ΡΠ΅ Π±ΠΈΡΠΈ ΡΠ·Π°Π»ΡΠ΄Π½ΠΈ, Π° ΠΎΠ²Π° βΠΊΠΎΠ»Π΅ΠΊΡΠΈΡΠ° ΡΠ΅ΡΠ΅ΠΏΠ°ΡΠ° ΠΏΡΠΈΠ»Π°Π³ΠΎΡΠ΅Π½ΠΈΡ ΡΠΏΠΈΡΠ°β ΡΠ΅ Π²Π°ΠΌ ΡΡΡΠ΅Π΄Π΅ΡΠΈ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ ΡΠ°ΡΠΈ ΠΈΠ»ΠΈ ΠΏΠ°Ρ Π½Π΅ΡΠ²Π½ΠΈΡ ΡΠ΅Π»ΠΈΡΠ°. ΠΠ°ΠΊΠ»Π΅, ΠΏΠΎΡΠ½ΠΈΠΌΠΎ!
ΠΠΏΡΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΠ΅ ΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΠΈΠΌΠ°
ΠΡΠ²ΠΎ, ΠΏΠΎΠ³Π»Π΅Π΄Π°ΡΠΌΠΎ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΏΠ°ΡΠ° ΠΈ ΠΏΡΠΎΡΠ΅Ρ ΡΠ°Π΄Π° ΡΠ° ΠΏΡΠ°Π²ΠΈΠ»ΠΈΠΌΠ°, Π΄Π° Π±ΠΈΡΠΌΠΎ Π±ΠΎΡΠ΅ ΡΠ°Π·ΡΠΌΠ΅Π»ΠΈ ΡΡΠ° ΡΠ΅ ΡΠ΅ ΡΠ»Π΅Π΄Π΅ΡΠ΅ Π΄Π΅ΡΠΈΡΠΈ. Π Π·Π°ΡΠΎ ΡΡΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° Π½Π΅ Π³ΠΎΠ²ΠΎΡΠΈ Π½ΠΈΡΡΠ° ΠΎ ΡΠΎΠΌΠ΅ ΠΈΠ»ΠΈ ΡΠ΅ Π²Π΅ΠΎΠΌΠ° ΡΠ°ΡΠΈΡΠ΅Π½Π° Ρ ΡΡΡΡΠΊΡΡΡΠΈ, ΡΡΠΎ Π½ΠΈΡΠ΅ Π±Π°Ρ Π·Π³ΠΎΠ΄Π½ΠΎ.
-
ΠΡΠ°Π²ΠΈΠ»Π° ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡΡΡ ΡΠΎΠΊΠΎΠΌ ΡΠΊΠ΅Π½ΠΈΡΠ°ΡΠ° Ρ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡΠΈ ΠΎΠ΄ ΡΠ½Π°ΠΏΡΠ΅Π΄ ΠΎΠ΄Π°Π±ΡΠ°Π½Π΅ ΠΏΠΎΡΡΠ°Π²ΠΊΠ΅ Π½Π° ΠΏΠΎΡΠ΅ΡΠΊΡ (ΡΠΊΡΠΏ Π°ΠΊΡΠΈΠ²Π½ΠΈΡ ΠΏΡΠ°Π²ΠΈΠ»Π°). ΠΠΎΠΆΠ΅ΡΠ΅ ΠΊΡΠ΅ΠΈΡΠ°ΡΠΈ Π½Π΅ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ Π±ΡΠΎΡ ΡΠ½Π°ΠΏΡΠ΅Π΄ ΠΏΠΎΠ΄Π΅ΡΠ΅Π½ΠΈΡ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ, Π° ΠΊΠ°ΠΊΠΎ ΡΠ°ΡΠ½ΠΎ Π΄Π° ΠΈΡ ΡΡΡΡΠΊΡΡΡΠΈΡΠ°ΡΠ΅ Π·Π°Π²ΠΈΡΠΈ ΠΎΠ΄ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΎΡΡΠΈ Π²Π°ΡΠ΅Π³ ΠΏΡΠΎΡΠ΅ΡΠ°. ΠΠΎΠΆΠ΅ΡΠ΅ ΠΈΡ Π³ΡΡΠΏΠΈΡΠ°ΡΠΈ ΠΏΠΎ ΡΠ΅Π·ΠΈΠΊΡ ΠΈΠ»ΠΈ ΠΎΠ΄Π°Π±ΡΠ°ΡΠΈ ΡΠ½Π°ΠΏΡΠ΅Π΄ ΠΏΠΎΠ΄Π΅ΡΠ΅Π½Π΅ ΠΏΠΎΡΡΠ°Π²ΠΊΠ΅ Π·Π° ΡΠ²Π°ΠΊΠΈ ΠΏΡΠΎΡΠ΅ΠΊΠ°Ρ. ΠΡΠΎΡ Π°ΠΊΡΠΈΠ²Π½ΠΈΡ ΠΏΡΠ°Π²ΠΈΠ»Π° ΡΡΠΈΡΠ΅ Π½Π° Π±ΡΠ·ΠΈΠ½Ρ ΠΈ ΡΠ°ΡΠ½ΠΎΡΡ ΡΠΊΠ΅Π½ΠΈΡΠ°ΡΠ°.
ΠΠΎΠ΄Π΅ΡΠ°Π²Π°ΡΠ΅ ΡΠ½Π°ΠΏΡΠ΅Π΄ ΠΏΠΎΠ΄Π΅ΡΠ΅Π½ΠΎΠ³ Ρ Π¦Ρ Π΅ΡΠΊΠΌΠ°ΡΠΊ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡΡ
-
ΠΡΠ°Π²ΠΈΠ»Π° ΡΠ΅ ΡΡΠ΅ΡΡΡΡ Ρ ΠΏΠΎΡΠ΅Π±Π½ΠΎΠΌ Π°Π»Π°ΡΡ ΠΊΠΎΡΠΈ ΡΠ΅ Π·ΠΎΠ²Π΅ Π¦ΠΊΠΡΠ΄ΠΈΡΠΎΡ. ΠΠ²ΠΎ ΡΠ΅ Π΄Π΅ΡΠΊΡΠΎΠΏ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ° ΠΊΠΎΡΠ° ΡΠ΅ ΠΏΠΎΠ²Π΅Π·ΡΡΠ΅ ΡΠ° ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ Π½Π° ΠΊΠΎΠΌΠ΅ ΡΠ°Π΄ΠΈ Π¦Ρ Π΅ΡΠΊΠΌΠ°ΡΠΊ. ΠΠ²Π°Ρ Π°Π»Π°Ρ ΠΈΠΌΠ° Π΄Π²Π° Π½Π°ΡΠΈΠ½Π° ΡΠ°Π΄Π°: ΡΡΠ΅ΡΠΈΠ²Π°ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΈ Π°Π½Π°Π»ΠΈΠ·Π° ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ° Π²Π΅Ρ ΠΎΠ±Π°Π²ΡΠ΅Π½ΠΎΠ³ ΡΠΊΠ΅Π½ΠΈΡΠ°ΡΠ°.
Π¦ΠΊΠΡΠ΄ΠΈΡ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡ
-
ΠΡΠ°Π²ΠΈΠ»Π° Ρ Π¦Ρ Π΅ΡΠΊΠΌΠ°ΡΠΊ-Ρ ΡΡ ΠΏΠΎΠ΄Π΅ΡΠ΅Π½Π° ΠΏΠΎ ΡΠ΅Π·ΠΈΠΊΡ, ΠΎΠ΄Π½ΠΎΡΠ½ΠΎ ΡΠ²Π°ΠΊΠΈ ΡΠ΅Π·ΠΈΠΊ ΠΈΠΌΠ° ΡΠ²ΠΎΡ ΡΠΊΡΠΏ ΡΠΏΠΈΡΠ°. ΠΠΎΡΡΠΎΡΠ΅ ΠΈ Π½Π΅ΠΊΠ° ΠΎΠΏΡΡΠ° ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΊΠΎΡΠ° Π²Π°ΠΆΠ΅ Π±Π΅Π· ΠΎΠ±Π·ΠΈΡΠ° Π½Π° ΡΠ΅Π·ΠΈΠΊ, ΡΠΎ ΡΡ ΡΠ°ΠΊΠΎΠ·Π²Π°Π½ΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΈ ΡΠΏΠΈΡΠΈ. Π£Π³Π»Π°Π²Π½ΠΎΠΌ, ΠΎΡΠ½ΠΎΠ²Π½ΠΈ ΡΠΏΠΈΡΠΈ ΡΠΊΡΡΡΡΡΡ ΡΡΠ°ΠΆΠ΅ΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΠ° ΠΊΠΎΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅ Π΄ΡΡΠ³Π° ΠΏΡΠ°Π²ΠΈΠ»Π°.
ΠΠΎΠ΄Π΅Π»Π° ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΏΠΎ ΡΠ΅Π·ΠΈΠΊΡ
-
ΠΡΠ°Π²ΠΈΠ»Π° ΡΡ βΠΈΠ·Π²ΡΡΠ½Π°β ΠΈ βΠ½Π΅ΠΈΠ·Π²ΡΡΠ½Π°β (ΠΈΠ·Π²ΡΡΠ΅Π½Π° ΠΈ Π½Π΅ΠΈΠ·Π²ΡΡΠ΅Π½Π°). ΠΠΎ ΠΌΠΎΠΌ ΠΌΠΈΡΡΠ΅ΡΡ Π½ΠΈΡΠ΅ Π±Π°Ρ ΡΠ°ΡΠ°Π½ Π½Π°Π·ΠΈΠ², Π°Π»ΠΈ ΡΠΎ ΡΠ΅ ΠΎΠ½ΠΎ ΡΡΠΎ ΡΠ΅ΡΡΠ΅. Π‘ΡΡΡΠΈΠ½Π° ΡΠ΅ Π΄Π° ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΠΈΠ·Π²ΡΡΠ°Π²Π°ΡΠ° βΠΠ·Π²ΡΡΠ½ΠΈΡ β ΠΏΡΠ°Π²ΠΈΠ»Π° Π±ΠΈΡΠΈ ΠΏΡΠΈΠΊΠ°Π·Π°Π½ Ρ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΠΌΠ° ΡΠΊΠ΅Π½ΠΈΡΠ°ΡΠ° Ρ ΠΊΠΎΡΠΈΡΠ½ΠΈΡΠΊΠΎΠΌ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡΡ, Π° βΠΠΎΠ½-ΠΠΊΠ΅ΡΡΡΠ°Π±Π»Π΅β ΠΏΡΠ°Π²ΠΈΠ»Π° ΡΡ ΠΏΠΎΡΡΠ΅Π±Π½Π° ΡΠ°ΠΌΠΎ Π΄Π° Π±ΠΈ ΠΊΠΎΡΠΈΡΡΠΈΠ»ΠΈ ΡΠ²ΠΎΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ΅ Ρ Π΄ΡΡΠ³ΠΈΠΌ Π·Π°Ρ ΡΠ΅Π²ΠΈΠΌΠ° (Ρ ΡΡΡΡΠΈΠ½ΠΈ, ΡΠ°ΠΌΠΎ ΡΡΠ½ΠΊΡΠΈΡΠ°).
ΠΠ΄ΡΠ΅ΡΠΈΠ²Π°ΡΠ΅ ΡΠΈΠΏΠ° ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΏΡΠΈΠ»ΠΈΠΊΠΎΠΌ ΠΊΡΠ΅ΠΈΡΠ°ΡΠ°
-
ΠΠΎΠΆΠ΅ΡΠ΅ ΠΊΡΠ΅ΠΈΡΠ°ΡΠΈ Π½ΠΎΠ²Π° ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΈΠ»ΠΈ Π΄ΠΎΠΏΡΠ½ΠΈΡΠΈ/ΠΏΡΠ΅ΠΏΠΈΡΠ°ΡΠΈ ΠΏΠΎΡΡΠΎΡΠ΅ΡΠ°. ΠΠ° Π±ΠΈΡΡΠ΅ ΠΏΠΎΠ½ΠΎΠ²ΠΎ Π½Π°ΠΏΠΈΡΠ°Π»ΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ ΡΠ΅ Π΄Π° Π³Π° ΠΏΡΠΎΠ½Π°ΡΠ΅ΡΠ΅ Ρ ΡΡΠ°Π±Π»Ρ, ΠΊΠ»ΠΈΠΊΠ½Π΅ΡΠ΅ Π΄Π΅ΡΠ½ΠΈΠΌ ΡΠ°ΡΡΠ΅ΡΠΎΠΌ ΠΌΠΈΡΠ° ΠΈ ΠΈΠ·Π°Π±Π΅ΡΠ΅ΡΠ΅ βΠΠ²Π΅ΡΡΠΈΠ΄Π΅β ΠΈΠ· ΠΏΠ°Π΄Π°ΡΡΡΠ΅Π³ ΠΌΠ΅Π½ΠΈΡΠ°. ΠΠ²Π΄Π΅ ΡΠ΅ Π²Π°ΠΆΠ½ΠΎ Π·Π°ΠΏΠ°ΠΌΡΠΈΡΠΈ Π΄Π° Π½ΠΎΠ²Π° ΠΏΡΠ°Π²ΠΈΠ»Π° Π½ΠΈΡΡ ΠΈΠ½ΠΈΡΠΈΡΠ°Π»Π½ΠΎ ΡΠΊΡΡΡΠ΅Π½Π° Ρ ΡΠ½Π°ΠΏΡΠ΅Π΄ ΠΏΠΎΠ΄Π΅ΡΠ΅Π½Π° ΠΏΠΎΠ΄Π΅ΡΠ°Π²Π°ΡΠ° ΠΈ Π½ΠΈΡΡ Π°ΠΊΡΠΈΠ²Π½Π°. ΠΠ° Π±ΠΈΡΡΠ΅ ΠΏΠΎΡΠ΅Π»ΠΈ Π΄Π° ΠΈΡ ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ ΡΠ΅ Π΄Π° ΠΈΡ Π°ΠΊΡΠΈΠ²ΠΈΡΠ°ΡΠ΅ Ρ ΠΌΠ΅Π½ΠΈΡΡ βΠΡΠ΅ΡΠ΅Ρ ΠΠ°Π½Π°Π³Π΅Ρβ Ρ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½ΡΡ. ΠΡΠ΅ΠΏΠΈΡΠ°Π½Π° ΠΏΡΠ°Π²ΠΈΠ»Π° Π·Π°Π΄ΡΠΆΠ°Π²Π°ΡΡ ΡΠ²ΠΎΡΠ° ΠΏΠΎΠ΄Π΅ΡΠ°Π²Π°ΡΠ°, ΠΎΠ΄Π½ΠΎΡΠ½ΠΎ Π°ΠΊΠΎ ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Π±ΠΈΠ»ΠΎ Π°ΠΊΡΠΈΠ²Π½ΠΎ, ΠΎΡΡΠ°ΡΠ΅ ΡΠ°ΠΊΠΎ ΠΈ ΠΎΠ΄ΠΌΠ°Ρ ΡΠ΅ ΡΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΠΈ.
ΠΡΠΈΠΌΠ΅Ρ Π½ΠΎΠ²ΠΎΠ³ ΠΏΡΠ°Π²ΠΈΠ»Π° Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΡΡΡ ΠΡΠ΅ΡΠ΅Ρ ΠΠ°Π½Π°Π³Π΅Ρ
-
Π’ΠΎΠΊΠΎΠΌ ΠΈΠ·Π²ΡΡΠ°Π²Π°ΡΠ° Π³ΡΠ°Π΄ΠΈ ΡΠ΅ βΠ΄ΡΠ²ΠΎβ Π·Π°Ρ ΡΠ΅Π²Π°, ΡΡΠΎ Π·Π°Π²ΠΈΡΠΈ ΠΎΠ΄ ΡΠ΅Π³Π°. ΠΡΠ²ΠΎ ΡΠ΅ ΠΈΠ·Π²ΡΡΠ°Π²Π°ΡΡ ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΊΠΎΡΠ° ΠΏΡΠΈΠΊΡΠΏΡΠ°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΠ΅, Π° Π΄ΡΡΠ³ΠΈ ΠΎΠ½ΠΈ ΠΊΠΎΡΠΈ ΠΈΡ ΠΊΠΎΡΠΈΡΡΠ΅. Π Π΅Π·ΡΠ»ΡΠ°Ρ ΠΈΠ·Π²ΡΡΠ΅ΡΠ° ΡΠ΅ ΠΊΠ΅ΡΠΈΡΠ°Π½, ΡΠ°ΠΊΠΎ Π΄Π° Π°ΠΊΠΎ ΡΠ΅ ΠΌΠΎΠ³ΡΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈΡΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ΅ ΠΏΠΎΡΡΠΎΡΠ΅ΡΠ΅Π³ ΠΏΡΠ°Π²ΠΈΠ»Π°, ΠΎΠ½Π΄Π° ΡΠ΅ Π±ΠΎΡΠ΅ ΡΠΎ ΡΡΠΈΠ½ΠΈΡΠΈ, ΡΠΎ ΡΠ΅ ΡΠΌΠ°ΡΠΈΡΠΈ Π²ΡΠ΅ΠΌΠ΅ ΡΠΊΠ΅Π½ΠΈΡΠ°ΡΠ°.
-
ΠΡΠ°Π²ΠΈΠ»Π° ΡΠ΅ ΠΌΠΎΠ³Ρ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΠΈ Π½Π° ΡΠ°Π·Π»ΠΈΡΠΈΡΠΈΠΌ Π½ΠΈΠ²ΠΎΠΈΠΌΠ°:
-
ΠΠ° ΡΠ΅ΠΎ ΡΠΈΡΡΠ΅ΠΌ - ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ ΡΠ΅ Π·Π° Π±ΠΈΠ»ΠΎ ΠΊΠΎΡΠ΅ ΡΠΊΠ΅Π½ΠΈΡΠ°ΡΠ΅ Π±ΠΈΠ»ΠΎ ΠΊΠΎΠ³ ΠΏΡΠΎΡΠ΅ΠΊΡΠ°
-
ΠΠ° Π½ΠΈΠ²ΠΎΡ ΡΠΈΠΌΠ° (Π’ΠΈΠΌ) - ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ ΡΠ΅ ΡΠ°ΠΌΠΎ Π·Π° ΡΠΊΠ΅Π½ΠΈΡΠ°ΡΠ΅ ΠΏΡΠΎΡΠ΅ΠΊΠ°ΡΠ° Ρ ΠΈΠ·Π°Π±ΡΠ°Π½ΠΎΠΌ ΡΠΈΠΌΡ.
-
ΠΠ° Π½ΠΈΠ²ΠΎΡ ΠΏΡΠΎΡΠ΅ΠΊΡΠ° - ΠΠΈΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΠ΅Π½ΠΎ Ρ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΌ ΠΏΡΠΎΡΠ΅ΠΊΡΡ
ΠΠ΄ΡΠ΅ΡΠΈΠ²Π°ΡΠ΅ Π½ΠΈΠ²ΠΎΠ° Π½Π° ΠΊΠΎΡΠ΅ΠΌ ΡΠ΅ ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠΈΠ²Π°ΡΠΈ
"Π Π΅ΡΠ½ΠΈΠΊ" Π·Π° ΠΏΠΎΡΠ΅ΡΠ½ΠΈΠΊΠ΅
Π ΠΏΠΎΡΠ΅ΡΡ ΡΠ° Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ ΡΡΠ²Π°ΡΠΈ ΠΊΠΎΡΠ΅ ΡΡ ΠΌΠΈ ΠΈΠ·Π°Π·Π²Π°Π»Π΅ ΠΏΠΈΡΠ°ΡΠ°, Π° ΠΏΠΎΠΊΠ°Π·Π°ΡΡ ΠΈ Π±ΡΠΎΡΠ½Π΅ ΡΠ΅Ρ Π½ΠΈΠΊΠ΅ ΠΊΠΎΡΠ΅ ΡΠ΅ Π·Π½Π°ΡΠ°ΡΠ½ΠΎ ΠΏΠΎΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²ΠΈΡΠΈ ΠΆΠΈΠ²ΠΎΡ.
ΠΠΏΠ΅ΡΠ°ΡΠΈΡΠ΅ ΡΠ° Π»ΠΈΡΡΠ°ΠΌΠ°
- Π²ΡΡΠΈΡΠ°Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ· Π΄ΡΡΠ³ΠΎΠ³ΠΎ (list2 - list1)
* ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠΏΠΈΡΠΊΠΎΠ² (list1 * list2)
+ ΡΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΡΠΏΠΈΡΠΊΠΎΠ² (list1 + list2)
& (Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π) - ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ ΡΠΏΠΈΡΠΊΠΈ ΠΏΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π΅Π½ΠΈΡ (list1 & list2), Π°Π½Π°Π»ΠΎΠ³ΠΈΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΡ (list1 * list2)
| (Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΠΠΠ) - ΠΎΠ±ΡΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ ΡΠΏΠΈΡΠΊΠΈ ΠΏΠΎ ΡΠΈΡΠΎΠΊΠΎΠΌΡ ΠΏΠΎΠΈΡΠΊΡ (list1 | list2)
Π‘ΠΎ ΡΠΏΠΈΡΠΊΠ°ΠΌΠΈ Π½Π΅ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ: ^ && || % /
Π‘Π²ΠΈ ΠΏΡΠΎΠ½Π°ΡΠ΅Π½ΠΈ ΠΏΡΠ΅Π΄ΠΌΠ΅ΡΠΈ
Π£Π½ΡΡΠ°Ρ ΡΠΊΠ΅Π½ΠΈΡΠ°Π½ΠΎΠ³ ΡΠ΅Π·ΠΈΠΊΠ° ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄ΠΎΠ±ΠΈΡΠΈ Π»ΠΈΡΡΡ Π°ΠΏΡΠΎΠ»ΡΡΠ½ΠΎ ΡΠ²ΠΈΡ
Π΅Π»Π΅ΠΌΠ΅Π½Π°ΡΠ° ΠΊΠΎΡΠ΅ ΡΠ΅ Π¦Ρ
Π΅ΡΠΊΠΌΠ°ΡΠΊ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠΎΠ²Π°ΠΎ (ΡΡΡΠΈΠ½Π³ΠΎΠ²ΠΈ, ΡΡΠ½ΠΊΡΠΈΡΠ΅, ΠΊΠ»Π°ΡΠ΅, ΠΌΠ΅ΡΠΎΠ΄Π΅ ΠΈΡΠ΄.). ΠΠ²ΠΎ ΡΠ΅ Π½Π΅ΠΊΠΈ ΠΏΡΠΎΡΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΠ°ΡΠ° ΠΊΡΠΎΠ· ΠΊΠΎΡΠΈ ΡΠ΅ ΠΌΠΎΠΆΠ΅ ΠΏΡΠΈΡΡΡΠΏΠΈΡΠΈ All
. Π’ΠΎ ΡΠ΅ΡΡ, Π΄Π° ΡΡΠ°ΠΆΠΈΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΠ°Ρ ΡΠ° ΠΎΠ΄ΡΠ΅ΡΠ΅Π½ΠΈΠΌ ΠΈΠΌΠ΅Π½ΠΎΠΌ searchMe
, ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠ΅ΡΡΠ°ΠΆΠΈΠ²Π°ΡΠΈ, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎ ΠΈΠΌΠ΅Π½Ρ ΡΠ²ΠΈΡ
ΠΏΡΠΎΠ½Π°ΡΠ΅Π½ΠΈΡ
ΠΎΠ±ΡΠ΅ΠΊΠ°ΡΠ°:
// Π’Π°ΠΊΠΎΠΉ Π·Π°ΠΏΡΠΎΡ Π²ΡΠ΄Π°ΡΡ Π²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ
result = All;
// Π’Π°ΠΊΠΎΠΉ Π·Π°ΠΏΡΠΎΡ Π²ΡΠ΄Π°ΡΡ Π²ΡΠ΅ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ, Π² ΠΈΠΌΠ΅Π½ΠΈ ΠΊΠΎΡΠΎΡΡΡ
ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ βsearchMeβ
result = All.FindByName("searchMe");
ΠΠ»ΠΈ, Π°ΠΊΠΎ ΡΡΠ΅Π±Π° Π΄Π° ΠΏΡΠ΅ΡΡΠ°ΠΆΡΡΠ΅ΡΠ΅ Π½Π° Π΄ΡΡΠ³ΠΎΠΌ ΡΠ΅Π·ΠΈΠΊΡ ΠΊΠΎΡΠΈ ΠΈΠ· Π½Π΅ΠΊΠΎΠ³ ΡΠ°Π·Π»ΠΎΠ³Π° Π½ΠΈΡΠ΅ ΡΠΊΡΡΡΠ΅Π½ Ρ ΡΠΊΠ΅Π½ΠΈΡΠ°ΡΠ΅ (Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, Π³ΡΠΎΠΎΠ²ΠΈ Ρ ΠΠ½Π΄ΡΠΎΠΈΠ΄ ΠΏΡΠΎΡΠ΅ΠΊΡΡ), ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠΎΡΠΈΡΠΈΡΠΈ ΠΏΡΠΎΡΡΠΎΡ Π½Π°ΡΠ΅Π³ ΠΎΠ±ΡΠ΅ΠΊΡΠ° ΠΊΡΠΎΠ· ΠΏΡΠΎΠΌΠ΅Π½ΡΠΈΠ²Ρ:
result = AllMembers.All.FindByName("searchMe");
Π€ΡΠ½ΠΊΡΠΈΡΠ΅ Π·Π° Π°Π½Π°Π»ΠΈΠ·Ρ ΠΏΡΠΎΡΠΎΠΊΠ°
ΠΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΡΠ΅ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅ Ρ ΠΌΠ½ΠΎΠ³ΠΈΠΌ ΠΏΡΠ°Π²ΠΈΠ»ΠΈΠΌΠ°, Π° Π΅Π²ΠΎ ΠΌΠ°Π»Π΅ Π²Π°ΡΠ°Π»ΠΈΡΠ΅ ΡΡΠ° ΠΎΠ½Π΅ Π·Π½Π°ΡΠ΅:
// ΠΠ°ΠΊΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅ second Π²Π»ΠΈΡΡΡ Π½Π° first.
// ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ - Π’Π (second) ΡΡΠΎ Π²Π»ΠΈΡΠ΅Ρ Π½Π° ΠΠΠΠ― (first).
result = first.DataInfluencedBy(second);
// ΠΠ°ΠΊΠΈΠ΅ Π΄Π°Π½Π½ΡΠ΅ first Π²Π»ΠΈΡΡΡ Π½Π° second.
// ΠΡΡΠ³ΠΈΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ - Π― (first) Π²Π»ΠΈΡΡ Π½Π° Π’Π (second).
result = first.DataInfluencingOn(second);
ΠΠΎΠ±ΠΈΡΠ°ΡΠ΅ ΠΈΠΌΠ΅Π½Π°/ΠΏΡΡΠ°ΡΠ° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ΅
ΠΠΎΡΡΠΎΡΠΈ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ Π°ΡΡΠΈΠ±ΡΡΠ° ΠΊΠΎΡΠΈ ΡΠ΅ ΠΌΠΎΠ³Ρ Π΄ΠΎΠ±ΠΈΡΠΈ ΠΈΠ· ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ° ΡΠΏΠΈΡΠ° (ΠΈΠΌΠ΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ΅ Ρ ΠΊΠΎΡΠΎΡ ΡΠ΅ ΡΠ½ΠΎΡ ΠΏΡΠΎΠ½Π°ΡΠ΅Π½, ΡΡΡΠΈΠ½Π³, ΠΈΡΠ΄.), Π°Π»ΠΈ Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΈ Π½Π΅ ΠΏΠΈΡΠ΅ ΠΊΠ°ΠΊΠΎ Π΄Π° ΠΈΡ Π΄ΠΎΠ±ΠΈΡΠ΅ΡΠ΅ ΠΈ ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅. ΠΠ°ΠΊΠ»Π΅, Π΄Π° Π±ΠΈΡΡΠ΅ ΡΠΎ ΡΡΠ°Π΄ΠΈΠ»ΠΈ, ΠΌΠΎΡΠ°ΡΠ΅ Π΄Π° ΠΏΡΠΈΡΡΡΠΏΠΈΡΠ΅ ΡΠ²ΠΎΡΡΡΠ²Ρ ΠΠΈΠ½Π΅ΠΡΠ°Π³ΠΌΠ° ΠΈ ΠΎΠ±ΡΠ΅ΠΊΡΠΈ ΠΊΠΎΡΠΈ ΡΡ Π½Π°ΠΌ ΠΏΠΎΡΡΠ΅Π±Π½ΠΈ Π±ΠΈΡΠ΅ ΡΠΌΠ΅ΡΡΠ΅Π½ΠΈ ΡΠ½ΡΡΠ°Ρ ΡΠ΅Π³Π°:
// ΠΠ»Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π½Π°ΠΉΠ΄Π΅ΠΌ Π²ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ
CxList methods = Find_Methods();
// Π ΠΌΠ΅ΡΠΎΠ΄Π°Ρ
Π½Π°ΠΉΠ΄Π΅ΠΌ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ ΠΌΠ΅ΡΠΎΠ΄ scope
CxList scope = methods.FindByName("scope");
// Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ ΠΌΠΎΠΆΠΎ ΠΏΠΎΠ»ΡΡΠΈΡΡ ΠΏΡΡΡ ΠΊ ΡΠ°ΠΉΠ»Ρ
string current_filename = scope.GetFirstGraph().LinePragma.FileName;
// Π Π²ΠΎΡ ΡΠ°ΠΊΠΈΠΌ - ΡΡΡΠΎΠΊΡ, Π³Π΄Π΅ Π½Π°ΡΠ»ΠΎΡΡ ΡΡΠ°Π±Π°ΡΡΠ²Π°Π½ΠΈΠ΅
int current_line = scope.GetFirstGraph().LinePragma.Line;
// ΠΡΠΈ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΠΎ ΡΠ°Π·Π½ΠΎΠΌΡ
// ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΠΎΠ»ΡΡΠΈΡΡ Π²ΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ Π² ΡΠ°ΠΉΠ»Π΅
CxList inFile = All.FindByFileName(current_filename);
// ΠΠ»ΠΈ Π½Π°ΠΉΡΠΈ ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ Π² ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΎΠΉ ΡΡΡΠΎΠΊΠ΅
CxList inLine = inFile.FindByPosition(current_line);
ΠΡΠ΅Π΄ΠΈ ΡΠΎ ΠΈΠΌΠ°ΡΠΈ Π½Π° ΡΠΌΡ FileName
ΡΠ°Π΄ΡΠΆΠΈ Π·Π°ΠΏΡΠ°Π²ΠΎ ΠΏΡΡΠ°ΡΡ Π΄ΠΎ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ΅, ΠΏΠΎΡΡΠΎ ΡΠΌΠΎ ΠΊΠΎΡΠΈΡΡΠΈΠ»ΠΈ ΠΌΠ΅ΡΠΎΠ΄ GetFirstGraph
.
Π Π΅Π·ΡΠ»ΡΠ°Ρ ΠΈΠ·Π²ΡΡΠ΅ΡΠ°
ΠΠΎΡΡΠΎΡΠΈ ΠΏΠΎΡΠ΅Π±Π½Π° ΠΏΡΠΎΠΌΠ΅Π½ΡΠΈΠ²Π° ΡΠ½ΡΡΠ°Ρ Π¦ΠΊΠΠ-Π° result
, ΠΊΠΎΡΠΈ Π²ΡΠ°ΡΠ° ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΠΈΠ·Π²ΡΡΠ°Π²Π°ΡΠ° Π²Π°ΡΠ΅Π³ ΠΏΠΈΡΠ°Π½ΠΎΠ³ ΠΏΡΠ°Π²ΠΈΠ»Π°. ΠΠ΄ΠΌΠ°Ρ
ΡΠ΅ ΠΈΠ½ΠΈΡΠΈΡΠ°Π»ΠΈΠ·ΡΡΠ΅ ΠΈ Ρ ΡΠ΅Π³Π° ΠΌΠΎΠΆΠ΅ΡΠ΅ ΡΠΏΠΈΡΠ°ΡΠΈ ΠΌΠ΅ΡΡΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ΅, ΠΌΠ΅ΡΠ°ΡΡΡΠΈ ΠΈΡ
ΠΈ ΡΡΠ°Π²ΡΡΠ°Π²Π°ΡΡΡΠΈ ΠΈΡ
Π΄ΠΎΠΊ ΡΠ°Π΄ΠΈΡΠ΅. ΠΠ»ΠΈ, Π°ΠΊΠΎ Π½Π΅ ΠΏΠΎΡΡΠΎΡΠΈ Π΄ΠΎΠ΄Π΅Π»Π° ΠΎΠ²ΠΎΡ ΠΏΡΠΎΠΌΠ΅Π½ΡΠΈΠ²ΠΎΡ ΠΈΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΈ ΡΠ½ΡΡΠ°Ρ ΠΏΡΠ°Π²ΠΈΠ»Π° return
β ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΠΈΠ·Π²ΡΡΠ΅ΡΠ° ΡΠ΅ ΡΠ²Π΅ΠΊ Π±ΠΈΡΠΈ Π½ΡΠ»Π°.
Π‘Π»Π΅Π΄Π΅ΡΠΈ ΡΠΏΠΈΡ Π½Π°ΠΌ Π½Π΅ΡΠ΅ Π²ΡΠ°ΡΠΈΡΠΈ Π½ΠΈΡΡΠ° ΠΊΠ°ΠΎ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΠΈΠ·Π²ΡΡΠ΅ΡΠ° ΠΈ ΡΠ²Π΅ΠΊ ΡΠ΅ Π±ΠΈΡΠΈ ΠΏΡΠ°Π·Π°Π½:
// ΠΠ°Ρ
ΠΎΠ΄ΠΈΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ foo
CxList libraries = All.FindByName("foo");
ΠΠ»ΠΈ, Π½Π°ΠΊΠΎΠ½ ΡΡΠΎ ΡΠΌΠΎ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΠΈΠ·Π²ΡΡΠ΅ΡΠ° Π΄ΠΎΠ΄Π΅Π»ΠΈΠ»ΠΈ ΠΌΠ°Π³ΠΈΡΠ½ΠΎΡ ΠΏΡΠΎΠΌΠ΅Π½ΡΠΈΠ²ΠΎΡ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΡ, Π²ΠΈΠ΄Π΅ΡΠ΅ΠΌΠΎ ΡΡΠ° Π½Π°ΠΌ ΠΎΠ²Π°Ρ ΠΏΠΎΠ·ΠΈΠ² Π²ΡΠ°ΡΠ°:
// ΠΠ°Ρ
ΠΎΠ΄ΠΈΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ foo
CxList libraries = All.FindByName("foo");
// ΠΡΠ²ΠΎΠ΄ΠΈΠΌ, ΠΊΠ°ΠΊ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠ°Π²ΠΈΠ»Π°
result = libraries
// ΠΠ»ΠΈ Π΅ΡΠ΅ ΠΊΠΎΡΠΎΡΠ΅
result = All.FindByName("foo");
ΠΠΎΡΠΈΡΡΠ΅ΡΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ΅ Π΄ΡΡΠ³ΠΈΡ ΠΏΡΠ°Π²ΠΈΠ»Π°
ΠΡΠ°Π²ΠΈΠ»Π° Ρ Π¦Ρ Π΅ΡΠΊΠΌΠ°ΡΠΊ-Ρ ΡΠ΅ ΠΌΠΎΠ³Ρ Π½Π°Π·Π²Π°ΡΠΈ Π°Π½Π°Π»ΠΎΠ³Π½ΠΎ ΡΡΠ½ΠΊΡΠΈΡΠ°ΠΌΠ° Ρ ΡΠ΅Π΄ΠΎΠ²Π½ΠΎΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΡΠΊΠΎΠΌ ΡΠ΅Π·ΠΈΠΊΡ. ΠΠ°Π΄Π° ΠΏΠΈΡΠ΅ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈΡΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ΅ Π΄ΡΡΠ³ΠΈΡ ΡΠΏΠΈΡΠ°. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, Π½Π΅ΠΌΠ° ΠΏΠΎΡΡΠ΅Π±Π΅ Π΄Π° ΡΡΠ°ΠΆΠΈΡΠ΅ ΡΠ²Π΅ ΠΏΠΎΠ·ΠΈΠ²Π΅ ΠΌΠ΅ΡΠΎΠ΄Π° Ρ ΠΊΠΎΠ΄Ρ ΡΠ²Π°ΠΊΠΈ ΠΏΡΡ, ΡΠ°ΠΌΠΎ ΠΏΠΎΠ·ΠΎΠ²ΠΈΡΠ΅ ΠΆΠ΅ΡΠ΅Π½ΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ:
// ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π°
CxList methods = Find_Methods();
// ΠΡΠ΅ΠΌ Π²Π½ΡΡΡΠΈ ΠΌΠ΅ΡΠΎΠ΄ foo.
// ΠΡΠΎΡΠΎΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ false ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΈΡΠ΅ΠΌ Π±Π΅Π· ΡΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΊ ΡΠ΅Π³ΠΈΡΡΡΡ
result = methods.FindByShortName("foo", false);
ΠΠ²Π°Ρ ΠΏΡΠΈΡΡΡΠΏ Π²Π°ΠΌ ΠΎΠΌΠΎΠ³ΡΡΠ°Π²Π° Π΄Π° ΡΠΊΡΠ°ΡΠΈΡΠ΅ ΠΊΠΎΠ΄ ΠΈ Π·Π½Π°ΡΠ°ΡΠ½ΠΎ ΡΠΌΠ°ΡΠΈΡΠ΅ Π²ΡΠ΅ΠΌΠ΅ ΠΈΠ·Π²ΡΡΠ°Π²Π°ΡΠ° ΠΏΡΠ°Π²ΠΈΠ»Π°.
Π Π΅ΡΠ°Π²Π°ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°
ΠΠΎΠ³Π³ΠΈΠ½Π³
ΠΠ°Π΄Π° ΡΠ°Π΄ΠΈΡΠ΅ ΡΠ° Π°Π»Π°ΡΠΎΠΌ, ΠΏΠΎΠ½Π΅ΠΊΠ°Π΄ Π½ΠΈΡΠ΅ ΠΌΠΎΠ³ΡΡΠ΅ ΠΎΠ΄ΠΌΠ°Ρ Π½Π°ΠΏΠΈΡΠ°ΡΠΈ ΠΆΠ΅ΡΠ΅Π½ΠΈ ΡΠΏΠΈΡ ΠΈ ΠΌΠΎΡΠ°ΡΠ΅ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΠ°ΡΠΈ, ΠΈΡΠΏΡΠΎΠ±Π°Π²Π°ΡΡΡΠΈ ΡΠ°Π·Π»ΠΈΡΠΈΡΠ΅ ΠΎΠΏΡΠΈΡΠ΅. ΠΠ° ΡΠ°ΠΊΠ°Π² ΡΠ»ΡΡΠ°Ρ, Π°Π»Π°ΡΠΊΠ° ΠΎΠ±Π΅Π·Π±Π΅ΡΡΡΠ΅ Π΅Π²ΠΈΠ΄Π΅Π½ΡΠΈΡΠ°ΡΠ΅, ΠΊΠΎΡΠ΅ ΡΠ΅ Π·ΠΎΠ²Π΅ Π½Π° ΡΠ»Π΅Π΄Π΅ΡΠΈ Π½Π°ΡΠΈΠ½:
// ΠΠ°Ρ
ΠΎΠ΄ΠΈΠΌ ΡΡΠΎ-ΡΠΎ
CxList toLog = All.FindByShortName("log");
// Π€ΠΎΡΠΌΠΈΡΡΠ΅ΠΌ ΡΡΡΠΎΠΊΡ ΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌ Π² Π»ΠΎΠ³
cxLog.WriteDebugMessage (βnumber of DOM elements =β + All.Count);
ΠΠ»ΠΈ Π²ΡΠ΅Π΄ΠΈ Π·Π°ΠΏΠ°ΠΌΡΠΈΡΠΈ Π΄Π° ΠΎΠ²Π°Ρ ΠΌΠ΅ΡΠΎΠ΄ ΠΏΡΠΈΡ
Π²Π°ΡΠ° ΡΠ°ΠΌΠΎ ΠΊΠ°ΠΎ ΡΠ»Π°Π· Π½ΠΈΠ·, ΡΠ°ΠΊΠΎ Π΄Π° Π½Π΅ΡΠ΅ Π±ΠΈΡΠΈ ΠΌΠΎΠ³ΡΡΠ΅ ΠΏΡΠΈΠΊΠ°Π·Π°ΡΠΈ ΠΊΠΎΠΌΠΏΠ»Π΅ΡΠ½Ρ Π»ΠΈΡΡΡ ΠΏΡΠΎΠ½Π°ΡΠ΅Π½ΠΈΡ
Π΅Π»Π΅ΠΌΠ΅Π½Π°ΡΠ° ΠΊΠ°ΠΎ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΠΏΡΠ²Π΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΠ΅. ΠΡΡΠ³Π° ΠΎΠΏΡΠΈΡΠ°, ΠΊΠΎΡΠ° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π·Π° ΠΎΡΠΊΠ»Π°ΡΠ°ΡΠ΅ Π³ΡΠ΅ΡΠ°ΠΊΠ°, ΡΠ΅ Π΄Π° ΡΠ΅ Ρ Π²ΡΠ΅ΠΌΠ΅Π½Π° Π½Π° Π²ΡΠ΅ΠΌΠ΅ Π΄ΠΎΠ΄Π΅Π»ΠΈ ΠΌΠ°Π³ΠΈΡΠ½ΠΎΡ ΠΏΡΠΎΠΌΠ΅Π½ΡΠΈΠ²ΠΎΡ result
ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΡΠΏΠΈΡΠ° ΠΈ Π²ΠΈΠ΄ΠΈΡΠ΅ ΡΡΠ° ΡΠ΅ Π΄Π΅ΡΠ°Π²Π°. ΠΠ²Π°Ρ ΠΏΡΠΈΡΡΡΠΏ Π½ΠΈΡΠ΅ Π±Π°Ρ Π·Π³ΠΎΠ΄Π°Π½; ΠΌΠΎΡΠ°ΡΠ΅ Π±ΠΈΡΠΈ ΡΠΈΠ³ΡΡΠ½ΠΈ Π΄Π° Π½Π΅ΠΌΠ° Π·Π°ΠΌΠ΅ΡΠΈΠ²Π°ΡΠ° ΠΈΠ»ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΠ° ΡΠ° ΠΎΠ²ΠΈΠΌ Ρ ΠΊΠΎΠ΄Ρ Π½Π°ΠΊΠΎΠ½ result
ΠΈΠ»ΠΈ ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ ΠΊΠΎΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΈΡΠ΅ ΠΊΠΎΠ΄ ΠΈΡΠΏΠΎΠ΄. ΠΠ»ΠΈ ΠΌΠΎΠΆΠ΅ΡΠ΅, ΠΊΠ°ΠΎ ΡΠ°, Π΄Π° Π·Π°Π±ΠΎΡΠ°Π²ΠΈΡΠ΅ Π΄Π° ΡΠΊΠ»ΠΎΠ½ΠΈΡΠ΅ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ ΡΠ°ΠΊΠ²ΠΈΡ
ΠΏΠΎΠ·ΠΈΠ²Π° ΠΈΠ· Π³ΠΎΡΠΎΠ²ΠΎΠ³ ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΈ Π·Π°ΠΏΠΈΡΠ°ΡΠ΅ ΡΠ΅ Π·Π°ΡΡΠΎ Π½ΠΈΡΡΠ° Π½Π΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ΅.
ΠΠΎΠ³ΠΎΠ΄Π½ΠΈΡΠΈ Π½Π°ΡΠΈΠ½ ΡΠ΅ ΠΏΠΎΠ·ΠΈΠ²Π°ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Π΅ return
ΡΠ° ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΎΠΌ. Π£ ΠΎΠ²ΠΎΠΌ ΡΠ»ΡΡΠ°ΡΡ, ΠΈΠ·Π²ΡΡΠ΅ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° ΡΠ΅ ΡΠ΅ Π·Π°Π²ΡΡΠΈΡΠΈ ΠΈ ΠΌΠΎΡΠΈ ΡΠ΅ΠΌΠΎ Π΄Π° Π²ΠΈΠ΄ΠΈΠΌΠΎ ΡΡΠ° ΡΠ΅ Π΄Π΅ΡΠΈΠ»ΠΎ ΠΊΠ°ΠΎ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΠΎΠ½ΠΎΠ³Π° ΡΡΠΎ ΡΠΌΠΎ Π½Π°ΠΏΠΈΡΠ°Π»ΠΈ:
// ΠΠ°Ρ
ΠΎΠ΄ΠΈΠΌ ΡΡΠΎ-ΡΠΎ
CxList toLog = All.FindByShortName("log");
// ΠΡΠ²ΠΎΠ΄ΠΈΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ
return toLog
//ΠΡΠ΅, ΡΡΠΎ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ Π΄Π°Π»ΡΡΠ΅ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΎ
result = All.DataInfluencedBy(toLog)
ΠΡΠΎΠ±Π»Π΅ΠΌ ΡΠ° ΠΏΡΠΈΡΠ°Π²ΠΎΠΌ
ΠΠΎΡΡΠΎΡΠ΅ ΡΠΈΡΡΠ°ΡΠΈΡΠ΅ ΠΊΠ°Π΄Π° Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ Π΄Π° ΠΏΡΠΈΡΡΡΠΏΠΈΡΠ΅ Π°Π»Π°ΡΠΊΠΈ Π¦ΠΊΠΡΠ΄ΠΈΡ (ΠΊΠΎΡΠ° ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈ Π·Π° ΠΏΠΈΡΠ°ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π°). ΠΠ° ΡΠΎ ΠΌΠΎΠΆΠ΅ Π±ΠΈΡΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π·Π»ΠΎΠ³Π°, ΡΠΊΡΡΡΡΡΡΡΠΈ ΡΡΡΠ΅ΡΠ°, ΠΈΠ·Π½Π΅Π½Π°Π΄Π½Π° Π°ΠΆΡΡΠΈΡΠ°ΡΠ° ΠΠΈΠ½Π΄ΠΎΠ²Ρ-Π°, ΠΠ‘ΠΠ ΠΈ Π΄ΡΡΠ³Π΅ Π½Π΅ΠΏΡΠ΅Π΄Π²ΠΈΡΠ΅Π½Π΅ ΡΠΈΡΡΠ°ΡΠΈΡΠ΅ ΠΊΠΎΡΠ΅ ΡΡ Π²Π°Π½ Π½Π°ΡΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»Π΅. Π£ ΠΎΠ²ΠΎΠΌ ΡΠ»ΡΡΠ°ΡΡ, ΠΏΠΎΠ½Π΅ΠΊΠ°Π΄ ΠΏΠΎΡΡΠΎΡΠΈ Π½Π΅Π΄ΠΎΠ²ΡΡΠ΅Π½Π° ΡΠ΅ΡΠΈΡΠ° Ρ Π±Π°Π·ΠΈ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ°, ΡΡΠΎ Π²Π°Ρ ΡΠΏΡΠ΅ΡΠ°Π²Π° Π΄Π° ΡΠ΅ ΠΏΠΎΠ½ΠΎΠ²ΠΎ ΠΏΡΠΈΡΠ°Π²ΠΈΡΠ΅. ΠΠ° Π±ΠΈΡΡΠ΅ ΡΠΎ ΠΏΠΎΠΏΡΠ°Π²ΠΈΠ»ΠΈ, ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ ΡΠ΅ Π΄Π° ΠΏΠΎΠΊΡΠ΅Π½Π΅ΡΠ΅ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ ΡΠΏΠΈΡΠ°:
ΠΠ° Π¦Ρ Π΅ΡΠΊΠΌΠ°ΡΠΊΡ ΠΏΡΠ΅ 8.6:
// ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ, ΡΡΠΎ Π΅ΡΡΡ Π·Π°Π»ΠΎΠ³ΠΈΠ½Π΅Π½ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ, Π²ΡΠΏΠΎΠ»Π½ΠΈΠ² Π·Π°ΠΏΡΠΎΡ Π² ΠΠ
SELECT COUNT(*) FROM [CxDB].[dbo].LoggedinUser WHERE [ClientType] = 6;
// ΠΡΠ»ΠΈ ΡΡΠΎ-ΡΠΎ Π΅ΡΡΡ, Π° Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΈ Π½Π΅Ρ, ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π·Π°ΠΏΡΠΎΡ
DELETE FROM [CxDB].[dbo].LoggedinUser WHERE [ClientType] = 6;
ΠΠ° Π¦Ρ Π΅ΡΠΊΠΌΠ°ΡΠΊΡ ΠΏΠΎΡΠ»Π΅ 8.6:
// ΠΡΠΎΠ²Π΅ΡΡΠ΅ΠΌ, ΡΡΠΎ Π΅ΡΡΡ Π·Π°Π»ΠΎΠ³ΠΈΠ½Π΅Π½ΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ, Π²ΡΠΏΠΎΠ»Π½ΠΈΠ² Π·Π°ΠΏΡΠΎΡ Π² ΠΠ
SELECT COUNT(*) FROM LoggedinUser WHERE (ClientType = 'Audit');
// ΠΡΠ»ΠΈ ΡΡΠΎ-ΡΠΎ Π΅ΡΡΡ, Π° Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΈ Π½Π΅Ρ, ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ Π·Π°ΠΏΡΠΎΡ
DELETE FROM [CxDB].[dbo].LoggedinUser WHERE (ClientType = 'Audit');
ΠΡΠ°Π²ΠΈΠ»Π° ΠΏΠΈΡΠ°ΡΠ°
Π‘Π°Π΄Π° Π΄ΠΎΠ»Π°Π·ΠΈΠΌΠΎ Π΄ΠΎ Π½Π°ΡΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ°Π½ΡΠ½ΠΈΡΠ΅Π³ Π΄Π΅Π»Π°. ΠΠ°Π΄Π° ΠΏΠΎΡΠ½Π΅ΡΠ΅ Π΄Π° ΠΏΠΈΡΠ΅ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° Ρ Π¦ΠΊΠΠ-Ρ, ΠΎΠ½ΠΎ ΡΡΠΎ Π²Π°ΠΌ ΡΠ΅ΡΡΠΎ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠ΅ Π½ΠΈΡΠ΅ ΡΠΎΠ»ΠΈΠΊΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ° ΠΊΠΎΠ»ΠΈΠΊΠΎ Π½Π΅ΠΊΠΈ ΠΆΠΈΠ²ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠΈ ΡΠ΅ΡΠ°Π²Π°ΡΠ° ΠΎΠ΄ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΈ ΠΎΠΏΠΈΡΠΈΠ²Π°ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΠ° ΠΊΠ°ΠΊΠΎ ΡΠΏΠΈΡΠΈ ΡΠΎΠΏΡΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΡ.
ΠΠΎΠΊΡΡΠ°ΡΡ Π΄Π° ΠΌΠ°Π»ΠΎ ΠΎΠ»Π°ΠΊΡΠ°ΠΌ ΠΆΠΈΠ²ΠΎΡ ΠΎΠ½ΠΈΠΌΠ° ΠΊΠΎΡΠΈ ΠΏΠΎΡΠΈΡΡ Π΄Π° Π·Π°ΡΠ°ΡΠ°ΡΡ Ρ ΡΠ΅Π·ΠΈΠΊ ΡΠΏΠΈΡΠ° ΠΈ Π΄Π°ΡΡ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ° ΠΏΡΠΈΠ»Π°Π³ΠΎΡΠ΅Π½ΠΈΡ ΡΠΏΠΈΡΠ° Π·Π° ΡΠ΅ΡΠ°Π²Π°ΡΠ΅ ΠΎΠ΄ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°. ΠΠ΅ΠΊΠΈ ΠΎΠ΄ ΡΠΈΡ ΡΡ ΠΏΡΠΈΠ»ΠΈΡΠ½ΠΎ ΠΎΠΏΡΡΠΈ ΠΈ ΠΌΠΎΠ³Ρ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈΡΠΈ Ρ Π²Π°ΡΠΎΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΠΈ ΠΏΡΠ°ΠΊΡΠΈΡΠ½ΠΎ Π±Π΅Π· ΠΏΡΠΎΠΌΠ΅Π½Π°, Π΄ΡΡΠ³ΠΈ ΡΡ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΠΈΡΠΈ, Π°Π»ΠΈ ΡΠ΅ ΠΌΠΎΠ³Ρ ΠΊΠΎΡΠΈΡΡΠΈΡΠΈ ΠΈ ΠΏΡΠΎΠΌΠ΅Π½ΠΎΠΌ ΠΊΠΎΠ΄Π° ΠΊΠ°ΠΊΠΎ Π±ΠΈ ΠΎΠ΄Π³ΠΎΠ²Π°ΡΠ°Π»ΠΈ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΎΡΡΠΈΠΌΠ° Π²Π°ΡΠΈΡ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°.
ΠΠ°ΠΊΠ»Π΅, Π΅Π²ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠ° ΠΊΠΎΡΠΈΠΌΠ° ΡΠΌΠΎ ΡΠ΅ Π½Π°ΡΡΠ΅ΡΡΠ΅ ΡΡΡΡΠ΅Π»ΠΈ:
ΠΠ°Π΄Π°ΡΠ°ΠΊ: ΠΠΎΡΡΠΎΡΠΈ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ ΡΠΎΠΊΠΎΠ²Π° Ρ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΠΌΠ° ΠΈΠ·Π²ΡΡΠ°Π²Π°ΡΠ° ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΈ ΡΠ΅Π΄Π°Π½ ΠΎΠ΄ ΡΠΈΡ ΡΠ΅ ΡΠ³Π½Π΅ΠΆΡΠ΅ΡΠ΅ Π΄ΡΡΠ³ΠΎΠ³, ΠΌΠΎΡΠ°ΡΠ΅ Π½Π°ΠΏΡΡΡΠΈΡΠΈ ΡΠ΅Π΄Π°Π½ ΠΎΠ΄ ΡΠΈΡ .
reΕ‘enje: ΠΠ°ΠΈΡΡΠ°, ΠΏΠΎΠ½Π΅ΠΊΠ°Π΄ Π¦Ρ Π΅ΡΠΊΠΌΠ°ΡΠΊ ΠΏΡΠΈΠΊΠ°Π·ΡΡΠ΅ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ ΡΠΎΠΊΠΎΠ²Π° ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° ΠΊΠΎΡΠΈ ΡΠ΅ ΠΌΠΎΠ³Ρ ΠΏΡΠ΅ΠΊΠ»Π°ΠΏΠ°ΡΠΈ ΠΈ Π±ΠΈΡΠΈ ΡΠΊΡΠ°ΡΠ΅Π½Π° Π²Π΅ΡΠ·ΠΈΡΠ° Π΄ΡΡΠ³ΠΈΡ . ΠΠ° ΡΠ°ΠΊΠ²Π΅ ΡΠ»ΡΡΠ°ΡΠ΅Π²Π΅ ΠΏΠΎΡΡΠΎΡΠΈ ΠΏΠΎΡΠ΅Π±Π°Π½ ΠΌΠ΅ΡΠΎΠ΄ Π Π΅Π΄ΡΡΠ΅Π€Π»ΠΎΠ². Π£ Π·Π°Π²ΠΈΡΠ½ΠΎΡΡΠΈ ΠΎΠ΄ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ°, Π±ΠΈΡΠ°ΡΠ΅ Π½Π°ΡΠΊΡΠ°ΡΠΈ ΠΈΠ»ΠΈ Π½Π°ΡΠ΄ΡΠΆΠΈ ΠΏΡΠΎΡΠΎΠΊ:
// ΠΡΡΠ°Π²ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΄Π»ΠΈΠ½Π½ΡΠ΅ Flow
result = result.ReduceFlow(CxList.ReduceFlowType.ReduceSmallFlow);
// ΠΡΡΠ°Π²ΠΈΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΊΠΎΡΠΎΡΠΊΠΈΠ΅ Flow
result = result.ReduceFlow(CxList.ReduceFlowType.ReduceBigFlow);
ΠΠ°Π΄Π°ΡΠ°ΠΊ: ΠΡΠΎΡΠΈΡΠΈΡΠ΅ Π»ΠΈΡΡΡ ΠΎΡΠ΅ΡΡΠΈΠ²ΠΈΡ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° Π½Π° ΠΊΠΎΡΠ΅ Π°Π»Π°Ρ ΡΠ΅Π°Π³ΡΡΠ΅
reΕ‘enje: Π¦Ρ Π΅ΡΠΊΠΌΠ°ΡΠΊΡ ΠΈΠΌΠ° ΠΎΡΠ½ΠΎΠ²Π½Π° ΠΏΡΠ°Π²ΠΈΠ»Π°, ΡΠΈΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΈ Π΄ΡΡΠ³ΠΈ ΡΠΏΠΈΡΠΈ. ΠΠΎΠΏΡΠ½ΠΎΠΌ Π½Π΅ΠΊΠΈΡ ΠΎΠ΄ ΠΎΠ²ΠΈΡ ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΏΠΎΠ΄Π°ΡΠΈΠΌΠ° ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΈΠΌ Π·Π° Π²Π°ΡΡ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡ, ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΎΠ΄ΠΌΠ°Ρ ΠΏΠΎΠ±ΠΎΡΡΠ°ΡΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ΅ ΡΠΊΠ΅Π½ΠΈΡΠ°ΡΠ°. ΠΡΠΏΠΎΠ΄ ΡΠ΅ ΠΏΡΠΈΠΌΠ΅Ρ ΠΏΡΠ°Π²ΠΈΠ»Π° Π·Π° ΠΏΠΎΡΠ΅ΡΠ°ΠΊ:
ΠΠ΅Π½Π΅ΡΠ°Π»_ΠΏΡΠΈΠ²Π°ΡΠΈ_Π²ΠΈΠΎΠ»Π°ΡΠΈΠΎΠ½_Π»ΠΈΡΡ
Π₯Π°ΡΠ΄Π΅ Π΄Π° Π΄ΠΎΠ΄Π°ΠΌΠΎ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ ΠΏΡΠΎΠΌΠ΅Π½ΡΠΈΠ²ΠΈΡ ΠΊΠΎΡΠ΅ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅ Ρ Π½Π°ΡΠΎΡ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠΈ Π·Π° ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ΅ΡΠ΅ ΠΎΡΠ΅ΡΡΠΈΠ²ΠΈΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΠ°:
// ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π°
result = base.General_privacy_violation_list();
// ΠΡΠ΅ΠΌ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠΏΠ°Π΄Π°ΡΡ ΠΏΠΎΠ΄ ΠΏΡΠΎΡΡΡΠ΅ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΡΠ΅ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡ. ΠΠΎΠΆΠ½ΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΡ Ρ
Π°ΡΠ°ΠΊΡΠ΅ΡΠ½ΡΠΌΠΈ Π΄Π»Ρ Π²Π°Ρ ΠΏΠ°ΡΡΠ΅ΡΠ½Π°ΠΌΠΈ.
CxList personalList = All.FindByShortNames(new List<string> {
"*securityToken*", "*sessionId*"}, false);
// ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΊ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ
result.Add(personalList);
ΠΠ°Π΄Π°ΡΠ°ΠΊ: ΠΡΠΎΡΠΈΡΠΈΡΠ΅ Π»ΠΈΡΡΡ ΠΏΡΠΎΠΌΠ΅Π½ΡΠΈΠ²ΠΈΡ ΡΠ° Π»ΠΎΠ·ΠΈΠ½ΠΊΠ°ΠΌΠ°
reΕ‘enje: ΠΡΠ΅ΠΏΠΎΡΡΡΠΈΠΎ Π±ΠΈΡ Π²Π°ΠΌ Π΄Π° ΠΎΠ΄ΠΌΠ°Ρ ΠΎΠ±ΡΠ°ΡΠΈΡΠ΅ ΠΏΠ°ΠΆΡΡ Π½Π° ΠΎΡΠ½ΠΎΠ²Π½ΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Π·Π° Π΄Π΅ΡΠΈΠ½ΠΈΡΠ°ΡΠ΅ Π»ΠΎΠ·ΠΈΠ½ΠΊΠΈ Ρ ΠΊΠΎΠ΄Ρ ΠΈ Π΄Π° ΠΌΡ Π΄ΠΎΠ΄Π°ΡΠ΅ Π»ΠΈΡΡΡ Π½Π°Π·ΠΈΠ²Π° ΠΏΡΠΎΠΌΠ΅Π½ΡΠΈΠ²ΠΈΡ ΠΊΠΎΡΠΈ ΡΠ΅ ΠΎΠ±ΠΈΡΠ½ΠΎ ΠΊΠΎΡΠΈΡΡΠ΅ Ρ Π²Π°ΡΠΎΡ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΠΈ.
ΠΠ°ΡΡΠ²ΠΎΡΠ΄_ΠΏΡΠΈΠ²Π°ΡΠΈ_Π²ΠΈΠΎΠ»Π°ΡΠΈΠΎΠ½_Π»ΠΈΡΡ
CxList allStrings = All.FindByType("String");
allStrings.Add(All.FindByType(typeof(StringLiteral)));
allStrings.Add(Find_UnknownReference());
allStrings.Add(All.FindByType(typeof (Declarator)));
allStrings.Add(All.FindByType(typeof (MemberAccess)));
allStrings.Add(All.FindByType(typeof(EnumMemberDecl)));
allStrings.Add(Find_Methods().FindByShortName("get*"));
// ΠΠΎΠΏΠΎΠ»Π½ΡΠ΅ΠΌ Π΄Π΅ΡΠΎΠ»ΡΠ½ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
List < string > pswdIncludeList = new List<string>{"*password*", "*psw", "psw*", "pwd*", "*pwd", "*authKey*", "pass*", "cipher*", "*cipher", "pass", "adgangskode", "benutzerkennwort", "chiffre", "clave", "codewort", "contrasena", "contrasenya", "geheimcode", "geslo", "heslo", "jelszo", "kennwort", "losenord", "losung", "losungswort", "lozinka", "modpas", "motdepasse", "parol", "parola", "parole", "pasahitza", "pasfhocal", "passe", "passord", "passwort", "pasvorto", "paswoord", "salasana", "schluessel", "schluesselwort", "senha", "sifre", "wachtwoord", "wagwoord", "watchword", "zugangswort", "PAROLACHIAVE", "PAROLA CHIAVE", "PAROLECHIAVI", "PAROLE CHIAVI", "paroladordine", "verschluesselt", "sisma",
"pincode",
"pin"};
List < string > pswdExcludeList = new List<string>{"*pass", "*passable*", "*passage*", "*passenger*", "*passer*", "*passing*", "*passion*", "*passive*", "*passover*", "*passport*", "*passed*", "*compass*", "*bypass*", "pass-through", "passthru", "passthrough", "passbytes", "passcount", "passratio"};
CxList tempResult = allStrings.FindByShortNames(pswdIncludeList, false);
CxList toRemove = tempResult.FindByShortNames(pswdExcludeList, false);
tempResult -= toRemove;
tempResult.Add(allStrings.FindByShortName("pass", false));
foreach (CxList r in tempResult)
{
CSharpGraph g = r.data.GetByIndex(0) as CSharpGraph;
if(g != null && g.ShortName != null && g.ShortName.Length < 50)
{
result.Add(r);
}
}
ΠΠ°Π΄Π°ΡΠ°ΠΊ: ΠΠΎΠ΄Π°ΡΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅Π½Π΅ ΠΎΠΊΠ²ΠΈΡΠ΅ ΠΊΠΎΡΠ΅ Π¦Ρ Π΅ΡΠΊΠΌΠ°ΡΠΊΠΊ Π½Π΅ ΠΏΠΎΠ΄ΡΠΆΠ°Π²Π°
reΕ‘enje: Π‘Π²ΠΈ ΡΠΏΠΈΡΠΈ Ρ Π¦Ρ Π΅ΡΠΊΠΌΠ°ΡΠΊ-Ρ ΡΡ ΠΏΠΎΠ΄Π΅ΡΠ΅Π½ΠΈ ΠΏΠΎ ΡΠ΅Π·ΠΈΠΊΡ, ΡΠ°ΠΊΠΎ Π΄Π° ΠΌΠΎΡΠ°ΡΠ΅ Π΄Π° Π΄ΠΎΠ΄Π°ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° Π·Π° ΡΠ²Π°ΠΊΠΈ ΡΠ΅Π·ΠΈΠΊ. ΠΡΠΏΠΎΠ΄ ΡΡ Π½Π΅ΠΊΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠΈ ΡΠ°ΠΊΠ²ΠΈΡ ΠΏΡΠ°Π²ΠΈΠ»Π°.
ΠΠΊΠΎ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΠΊΠΎΡΠ΅ Π΄ΠΎΠΏΡΡΡΡΡ ΠΈΠ»ΠΈ Π·Π°ΠΌΠ΅ΡΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΠ΄Π½Ρ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎΡΡ, ΠΎΠ½Π΅ ΡΠ΅ Π»Π°ΠΊΠΎ ΠΌΠΎΠ³Ρ Π΄ΠΎΠ΄Π°ΡΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΏΡΠ°Π²ΠΈΠ»Ρ. Π’Π°Π΄Π° ΡΠ΅ ΡΠ²ΠΈ ΠΊΠΎΡΠΈ Π³Π° ΠΊΠΎΡΠΈΡΡΠ΅ ΠΎΠ΄ΠΌΠ°Ρ ΡΠ°Π·Π½Π°ΡΠΈ Π·Π° Π½ΠΎΠ²Π΅ ΡΠ²ΠΎΠ΄Π΅. ΠΠ° ΠΏΡΠΈΠΌΠ΅Ρ, Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ Π·Π° ΠΏΡΠΈΡΠ°Π²ΡΠΈΠ²Π°ΡΠ΅ Ρ ΠΠ½Π΄ΡΠΎΠΈΠ΄ ΡΡ Π’ΠΈΠΌΠ±Π΅Ρ ΠΈ ΠΠΎΠ³Π³ΠΈ. Π£ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΌ ΠΏΠ°ΠΊΠ΅ΡΡ Π½Π΅ ΠΏΠΎΡΡΠΎΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° Π·Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΡ Π½Π΅ΡΠΈΡΡΠ΅ΠΌΡΠΊΠΈΡ ΠΏΠΎΠ·ΠΈΠ²Π°, ΡΠ°ΠΊΠΎ Π΄Π° Π°ΠΊΠΎ Π»ΠΎΠ·ΠΈΠ½ΠΊΠ° ΠΈΠ»ΠΈ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΡΠ΅ΡΠΈΡΠ΅ ΡΡΡ Ρ Π΅Π²ΠΈΠ΄Π΅Π½ΡΠΈΡΡ, Π½Π΅ΡΠ΅ΠΌΠΎ Π·Π½Π°ΡΠΈ Π·Π° ΡΠΎ. ΠΠΎΠΊΡΡΠ°ΡΠΌΠΎ Π΄Π° Π΄ΠΎΠ΄Π°ΠΌΠΎ Π΄Π΅ΡΠΈΠ½ΠΈΡΠΈΡΠ΅ ΡΠ°ΠΊΠ²ΠΈΡ ΠΌΠ΅ΡΠΎΠ΄Π° Ρ Π¦Ρ Π΅ΡΠΊΠΌΠ°ΡΠΊΡ ΠΏΡΠ°Π²ΠΈΠ»Π°.
Π’Π΅ΡΡΠ½ΠΈ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π° ΠΊΠΎΡΠΈ ΠΊΠΎΡΠΈΡΡΠΈ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Π’ΠΈΠΌΠ±Π΅Ρ Π·Π° Π΅Π²ΠΈΠ΄Π΅Π½ΡΠΈΡΠ°ΡΠ΅:
package com.death.timberdemo;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import timber.log.Timber;
public class MainActivity extends AppCompatActivity {
private static final String TAG = MainActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Timber.e("Error Message");
Timber.d("Debug Message");
Timber.tag("Some Different tag").e("And error message");
}
}
Π Π΅Π²ΠΎ ΠΏΡΠΈΠΌΠ΅ΡΠ° Π·Π°Ρ ΡΠ΅Π²Π° Π·Π° Π¦Ρ Π΅ΡΠΊΠΌΠ°ΡΠΊ, ΠΊΠΎΡΠΈ ΡΠ΅ Π²Π°ΠΌ ΠΎΠΌΠΎΠ³ΡΡΠΈΡΠΈ Π΄Π° Π΄ΠΎΠ΄Π°ΡΠ΅ Π΄Π΅ΡΠΈΠ½ΠΈΡΠΈΡΡ ΠΏΠΎΠ·ΠΈΠ²Π°ΡΠ° Π’ΠΈΠΌΠ±Π΅Ρ ΠΌΠ΅ΡΠΎΠ΄Π° ΠΊΠ°ΠΎ ΠΈΠ·Π»Π°Π·Π½Π΅ ΡΠ°ΡΠΊΠ΅ Π·Π° ΠΏΠΎΠ΄Π°ΡΠΊΠ΅ ΠΈΠ· Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅:
Π€ΠΈΠ½Π΄ΠΠ½Π΄ΡΠΎΠΈΠ΄ΠΡΡΠΏΡΡΡ
// ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π°
result = base.Find_Android_Outputs();
// ΠΠΎΠΏΠΎΠ»Π½ΡΠ΅ΠΌ Π²ΡΠ·ΠΎΠ²Π°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΡ
ΠΎΠ΄ΡΡ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Timber
CxList timber = All.FindByExactMemberAccess("Timber.*") +
All.FindByShortName("Timber").GetMembersOfTarget();
// ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΊ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ
result.Add(timber);
ΠΠΎΠΆΠ΅ΡΠ΅ Π΄ΠΎΠ΄Π°ΡΠΈ ΠΈ ΡΡΡΠ΅Π΄Π½ΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ, Π°Π»ΠΈ ΠΎΠ²ΠΎ ΡΠ΅ ΠΎΠ΄Π½ΠΎΡΠΈ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π½Π° ΠΏΡΠΈΡΠ°Π²ΡΠΈΠ²Π°ΡΠ΅ Π½Π° ΠΠ½Π΄ΡΠΎΠΈΠ΄:
Π€ΠΈΠ½Π΄ΠΠ½Π΄ΡΠΎΠΈΠ΄ΠΠΎΠ³_ΠΡΡΠΏΡΡΡ
// ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π°
result = base.Find_Android_Log_Outputs();
// ΠΠΎΠΏΠΎΠ»Π½ΡΠ΅ΠΌ Π²ΡΠ·ΠΎΠ²Π°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΡΠΈΡ
ΠΎΠ΄ΡΡ ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Timber
result.Add(
All.FindByExactMemberAccess("Timber.*") +
All.FindByShortName("Timber").GetMembersOfTarget()
);
Π’Π°ΠΊΠΎΡΠ΅, Π°ΠΊΠΎ ΠΠ½Π΄ΡΠΎΠΈΠ΄ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅ getInputData
:
Π€ΠΈΠ½Π΄ΠΠ½Π΄ΡΠΎΠΈΠ΄Π Π΅Π°Π΄
// ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π±Π°Π·ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΡΠ°Π²ΠΈΠ»Π°
result = base.Find_Android_Read();
// ΠΠΎΠΏΠΎΠ»Π½ΡΠ΅ΠΌ Π²ΡΠ·ΠΎΠ²ΠΎΠΌ ΡΡΠ½ΠΊΡΠΈΠΈ getInputData, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² WorkManager
CxList getInputData = All.FindByShortName("getInputData");
// ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ ΠΊ ΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ
result.Add(getInputData.GetMembersOfTarget());
ΠΠ°Π΄Π°ΡΠ°ΠΊ: Π’ΡΠ°ΠΆΠ΅ΡΠ΅ ΠΎΡΠ΅ΡΡΠΈΠ²ΠΈΡ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° Ρ ΠΏΠ»ΠΈΡΡ Π·Π° ΠΈΠΠ‘ ΠΏΡΠΎΡΠ΅ΠΊΡΠ΅
reΕ‘enje: ΠΈΠΠ‘ ΡΠ΅ΡΡΠΎ ΠΊΠΎΡΠΈΡΡΠΈ ΠΏΠΎΡΠ΅Π±Π½Π΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ΅ ΡΠ° Π΅ΠΊΡΡΠ΅Π½Π·ΠΈΡΠΎΠΌ .ΠΏΠ»ΠΈΡΡ Π·Π° ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ΅ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠΈΡΠΈΡ ΠΏΡΠΎΠΌΠ΅Π½ΡΠΈΠ²ΠΈΡ ΠΈ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ. Π§ΡΠ²Π°ΡΠ΅ Π»ΠΎΠ·ΠΈΠ½ΠΊΠΈ, ΡΠΎΠΊΠ΅Π½Π°, ΠΊΡΡΡΠ΅Π²Π° ΠΈ Π΄ΡΡΠ³ΠΈΡ ΠΎΡΠ΅ΡΡΠΈΠ²ΠΈΡ ΠΏΠΎΠ΄Π°ΡΠ°ΠΊΠ° Ρ ΠΎΠ²ΠΈΠΌ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΠΌΠ° ΡΠ΅ Π½Π΅ ΠΏΡΠ΅ΠΏΠΎΡΡΡΡΡΠ΅, ΡΠ΅Ρ ΡΠ΅ ΠΌΠΎΠ³Ρ Π±Π΅Π· ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΠΈΠ·Π²ΡΡΠΈ ΡΠ° ΡΡΠ΅ΡΠ°ΡΠ°.
ΠΠ»ΠΈΡΡ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ΅ ΠΈΠΌΠ°ΡΡ ΠΊΠ°ΡΠ°ΠΊΡΠ΅ΡΠΈΡΡΠΈΠΊΠ΅ ΠΊΠΎΡΠ΅ Π½ΠΈΡΡ ΠΎΡΠΈΠ³Π»Π΅Π΄Π½Π΅ Π³ΠΎΠ»ΠΈΠΌ ΠΎΠΊΠΎΠΌ, Π°Π»ΠΈ ΡΡ Π²Π°ΠΆΠ½Π΅ Π·Π° Π¦Ρ Π΅ΡΠΊΠΌΠ°ΡΠΊ. Π₯Π°ΡΠ΄Π΅ Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΠΌΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΠΊΠΎΡΠ΅ ΡΠ΅ ΡΡΠ°ΠΆΠΈΡΠΈ ΠΏΠΎΠ΄Π°ΡΠΊΠ΅ ΠΊΠΎΡΠΈ ΡΡ Π½Π°ΠΌ ΠΏΠΎΡΡΠ΅Π±Π½ΠΈ ΠΈ ΡΠ΅ΡΠΈ Π½Π°ΠΌ Π΄Π° Π»ΠΈ ΡΠ΅ Π½Π΅Π³Π΄Π΅ ΠΏΠΎΠΌΠΈΡΡ Π»ΠΎΠ·ΠΈΠ½ΠΊΠ΅ ΠΈΠ»ΠΈ ΡΠΎΠΊΠ΅Π½ΠΈ.
ΠΡΠΈΠΌΠ΅Ρ ΡΠ°ΠΊΠ²Π΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ΅, ΠΊΠΎΡΠ° ΡΠ°Π΄ΡΠΆΠΈ ΡΠΎΠΊΠ΅Π½ Π·Π° ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΡΡ ΡΠ° ΠΏΠΎΠ·Π°Π΄ΠΈΠ½ΡΠΊΠΎΠΌ ΡΡΠ»ΡΠ³ΠΎΠΌ:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>DeviceDictionary</key>
<dict>
<key>phone</key>
<string>iPhone 6s</string>
</dict>
<key>privatekey</key>
<string>MIICXAIBAAKBgQCqGKukO1De7zhZj6+</string>
</dict>
</plist>
Π ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Π·Π° Π¦Ρ Π΅ΡΠΊΠΌΠ°ΡΠΊ, ΠΊΠΎΡΠ΅ ΠΈΠΌΠ° Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ Π½ΠΈΡΠ°Π½ΡΠΈ ΠΊΠΎΡΠ΅ ΡΡΠ΅Π±Π° ΡΠ·Π΅ΡΠΈ Ρ ΠΎΠ±Π·ΠΈΡ ΠΏΡΠΈΠ»ΠΈΠΊΠΎΠΌ ΠΏΠΈΡΠ°ΡΠ°:
// ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΏΠΎ ΠΏΠΎΠΈΡΠΊΡ ΡΠ°ΠΉΠ»ΠΎΠ² plist, ΡΡΠΎΠ±Ρ ΡΠΌΠ΅Π½ΡΡΠΈΡΡ Π²ΡΠ΅ΠΌΡ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΈ
CxList plist = Find_Plist_Elements();
// ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΠΌ Π½ΠΎΠ²ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
CxList dictionarySettings = All.NewCxList();
// Π’Π΅ΠΏΠ΅ΡΡ Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΏΠΎΠΈΡΠΊ Π²ΡΠ΅Ρ
ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΡΡΠΈΡ
Π½Π°Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ. Π Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΡΠΈΡΡΡΡ ΡΡΠΎΡ ΡΠΏΠΈΡΠΎΠΊ.
// ΠΠ»Ρ ΠΏΠΎΠΈΡΠΊΠ° Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ, ΠΊΠ°ΠΊ Π½ΠΈ ΡΡΡΠ°Π½Π½ΠΎ, ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ FindByMemberAccess - ΠΏΠΎΠΈΡΠΊ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΉ ΠΊ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌ. ΠΡΠΎΡΠΎΠΉ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ Π²Π½ΡΡΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ, false, ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΠΏΠΎΠΈΡΠΊ Π½Π΅ΡΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»Π΅Π½ ΠΊ ΡΠ΅Π³ΠΈΡΡΡΡ
dictionarySettings.Add(plist.FindByMemberAccess("privatekey", false));
dictionarySettings.Add(plist.FindByMemberAccess("privatetoken", false));
// ΠΠ»Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΈΡΠΊΠ° ΠΈΠ·-Π·Π° ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠ΅ΠΉ ΡΡΡΡΠΊΡΡΡΡ plist - Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΊΠ°ΡΡ ΠΏΠΎ ΡΠΈΠΏΡ "If statement"
CxList ifStatements = plist.FindByType(typeof(IfStmt));
// ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ, ΠΏΠ΅ΡΠ΅Π΄ ΡΡΠΈΠΌ ΠΏΠΎΠ»ΡΡΠΈΠ² ΡΠΎΠ΄ΠΈΡΠ΅Π»ΡΡΠΊΠΈΠΉ ΡΠ·Π΅Π» - Π΄Π»Ρ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎΠ³ΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ
result = dictionarySettings.FindByFathers(ifStatements);
ΠΠ°Π΄Π°ΡΠ°ΠΊ: ΠΡΠΎΠ½Π°Π»Π°ΠΆΠ΅ΡΠ΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΠ° Ρ ΠΠ‘ΠΠ-Ρ
reΕ‘enje: Π¦Ρ Π΅ΡΠΊΠΌΠ°ΡΠΊ ΠΈΠΌΠ° Π²Π΅ΠΎΠΌΠ° Π·Π³ΠΎΠ΄Π½Π΅ ΡΡΠ½ΠΊΡΠΈΡΠ΅ Π·Π° ΡΠ°Π΄ ΡΠ° ΠΠ‘ΠΠ-ΠΎΠΌ ΠΈ ΡΡΠ°ΠΆΠ΅ΡΠ΅ Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ, ΠΎΠ·Π½Π°ΠΊΠ°, Π°ΡΡΠΈΠ±ΡΡΠ° ΠΈ ΡΠΎΡ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠΎΠ³Π°. ΠΠ»ΠΈ, Π½Π°ΠΆΠ°Π»ΠΎΡΡ, Π΄ΠΎΡΠ»ΠΎ ΡΠ΅ Π΄ΠΎ Π³ΡΠ΅ΡΠΊΠ΅ Ρ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΈ Π·Π±ΠΎΠ³ ΠΊΠΎΡΠ΅ Π½ΠΈ ΡΠ΅Π΄Π°Π½ ΠΏΡΠΈΠΌΠ΅Ρ Π½Π΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½ΠΈΡΠ΅. Π£ΠΏΡΠΊΠΎΡ ΡΠΈΡΠ΅Π½ΠΈΡΠΈ Π΄Π° ΡΠ΅ ΠΎΠ²Π°Ρ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠ°ΠΊ Π΅Π»ΠΈΠΌΠΈΠ½ΠΈΡΠ°Π½ Ρ Π½Π°ΡΠ½ΠΎΠ²ΠΈΡΠΎΡ Π²Π΅ΡΠ·ΠΈΡΠΈ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ΅, Π±ΡΠ΄ΠΈΡΠ΅ ΠΎΠΏΡΠ΅Π·Π½ΠΈ Π°ΠΊΠΎ ΠΊΠΎΡΠΈΡΡΠΈΡΠ΅ ΡΠ°Π½ΠΈΡΠ΅ Π²Π΅ΡΠ·ΠΈΡΠ΅ Π΄ΠΎΠΊΡΠΌΠ΅Π½Π°ΡΠ°.
ΠΠ²ΠΎ Π½Π΅ΡΠ°ΡΠ½ΠΎΠ³ ΠΏΡΠΈΠΌΠ΅ΡΠ° ΠΈΠ· Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠ΅:
// ΠΠΎΠ΄ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ
result = All.FindXmlAttributesByNameAndValue("*.app", 8, βidβ, "error- section", false, true);
ΠΠ°ΠΎ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΠΏΠΎΠΊΡΡΠ°ΡΠ° ΠΈΠ·Π²ΡΡΠ΅ΡΠ°, Π΄ΠΎΠ±ΠΈΡΠ΅ΠΌΠΎ Π³ΡΠ΅ΡΠΊΡ ΠΊΠΎΡΠ° All
Π½Π΅ ΠΏΠΎΡΡΠΎΡΠΈ ΡΠ°ΠΊΠ°Π² ΠΌΠ΅ΡΠΎΠ΄... Π ΡΠΎ ΡΠ΅ ΡΠ°ΡΠ½ΠΎ, ΠΏΠΎΡΡΠΎ ΠΏΠΎΡΡΠΎΡΠΈ ΠΏΠΎΡΠ΅Π±Π°Π½, ΠΎΠ΄Π²ΠΎΡΠ΅Π½ ΠΏΡΠΎΡΡΠΎΡ Π·Π° ΠΎΠ±ΡΠ΅ΠΊΡΠ΅ Π·Π° ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡΠ° Π·Π° ΡΠ°Π΄ ΡΠ° ΠΠ‘ΠΠ-ΠΎΠΌ - cxXPath
. ΠΠ²Π°ΠΊΠΎ ΠΈΠ·Π³Π»Π΅Π΄Π° ΠΈΡΠΏΡΠ°Π²Π°Π½ ΡΠΏΠΈΡ Π·Π° ΠΏΡΠΎΠ½Π°Π»Π°ΠΆΠ΅ΡΠ΅ ΠΏΠΎΠ΄Π΅ΡΠ°Π²Π°ΡΠ° Ρ ΠΠ½Π΄ΡΠΎΠΈΠ΄-Ρ ΠΊΠΎΡΠ΅ Π΄ΠΎΠ·Π²ΠΎΡΠ°Π²Π° ΠΊΠΎΡΠΈΡΡΠ΅ΡΠ΅ Π₯Π’Π’Π ΡΠ°ΠΎΠ±ΡΠ°ΡΠ°ΡΠ°:
// ΠΡΠ°Π²ΠΈΠ»ΡΠ½ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ cxXPath
result = cxXPath.FindXmlAttributesByNameAndValue("*.xml", 8, "cleartextTrafficPermitted", "true", false, true);
Π₯Π°ΡΠ΄Π΅ Π΄Π° ΡΠΎ ΠΏΠΎΠ³Π»Π΅Π΄Π°ΠΌΠΎ ΠΌΠ°Π»ΠΎ Π΄Π΅ΡΠ°ΡΠ½ΠΈΡΠ΅, ΠΏΠΎΡΡΠΎ ΡΠ΅ ΡΠΈΠ½ΡΠ°ΠΊΡΠ° Π·Π° ΡΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΡΠ΅ ΡΠ»ΠΈΡΠ½Π°, Π½Π°ΠΊΠΎΠ½ ΡΡΠΎ ΡΡΠ΅ ΡΡ Π²Π°ΡΠΈΠ»ΠΈ ΡΠ΅Π΄Π½Ρ, ΠΎΠ½Π΄Π° ΡΠ°ΠΌΠΎ ΡΡΠ΅Π±Π° Π΄Π° ΠΈΠ·Π°Π±Π΅ΡΠ΅ΡΠ΅ ΠΎΠ½Ρ ΠΊΠΎΡΠ° Π²Π°ΠΌ ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½Π°. ΠΠ°ΠΊΠ»Π΅, ΡΠ·Π°ΡΡΠΎΠΏΠ½ΠΎ ΠΏΡΠ΅ΠΌΠ° ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠΈΠΌΠ°:
-
"*.xml"
β ΠΌΠ°ΡΠΊΠ° Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° ΠΊΠΎΡΠ΅ ΡΡΠ΅Π±Π° ΠΏΡΠ΅ΡΡΠ°ΠΆΠΈΠ²Π°ΡΠΈ -
8
β ΠΈΠ΄ ΡΠ΅Π·ΠΈΠΊΠ° Π·Π° ΠΊΠΎΡΠΈ ΡΠ΅ ΠΏΡΠΈΠΌΠ΅ΡΡΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ -
"cleartextTrafficPermitted"
β ΠΈΠΌΠ΅ Π°ΡΡΠΈΠ±ΡΡΠ° Ρ ΠΊΠΌΠ» -
"true"
β Π²ΡΠ΅Π΄Π½ΠΎΡΡ ΠΎΠ²ΠΎΠ³ Π°ΡΡΠΈΠ±ΡΡΠ° -
false
β ΡΠΏΠΎΡΡΠ΅Π±Π° ΡΠ΅Π³ΡΠ»Π°ΡΠ½ΠΎΠ³ ΠΈΠ·ΡΠ°Π·Π° ΠΏΡΠΈ ΠΏΡΠ΅ΡΡΠ°ΠΆΠΈΠ²Π°ΡΡ -
true
β Π·Π½Π°ΡΠΈ Π΄Π° ΡΠ΅ ΠΏΡΠ΅ΡΡΠ°Π³Π° Π±ΠΈΡΠΈ ΠΎΠ±Π°Π²ΡΠ΅Π½Π° Π·Π°Π½Π΅ΠΌΠ°ΡΡΡΡΡΠΈ Π²Π΅Π»ΠΈΠΊΠ° ΠΈ ΠΌΠ°Π»Π° ΡΠ»ΠΎΠ²Π°, ΡΠΎ ΡΠ΅ΡΡ, Π±Π΅Π· ΠΎΠ±Π·ΠΈΡΠ° Π½Π° Π²Π΅Π»ΠΈΠΊΠ° ΠΈ ΠΌΠ°Π»Π° ΡΠ»ΠΎΠ²Π°
ΠΠ°ΠΎ ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΡΠΈΡΡΠΈΠ»ΠΈ ΡΠΌΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΠΊΠΎΡΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΡΡΠ΅ Π½Π΅ΡΠ°ΡΠ½Π°, ΡΠ° Π±Π΅Π·Π±Π΅Π΄Π½ΠΎΡΠ½Π΅ ΡΠ°ΡΠΊΠ΅ Π³Π»Π΅Π΄ΠΈΡΡΠ°, ΠΏΠΎΠ΄Π΅ΡΠ°Π²Π°ΡΠ° ΠΌΡΠ΅ΠΆΠ½Π΅ Π²Π΅Π·Π΅ Ρ ΠΠ½Π΄ΡΠΎΠΈΠ΄-Ρ ΠΊΠΎΡΠ° ΠΎΠΌΠΎΠ³ΡΡΠ°Π²Π°ΡΡ ΠΊΠΎΠΌΡΠ½ΠΈΠΊΠ°ΡΠΈΡΡ ΡΠ° ΡΠ΅ΡΠ²Π΅ΡΠΎΠΌ ΠΏΡΠ΅ΠΊΠΎ Π₯Π’Π’Π ΠΏΡΠΎΡΠΎΠΊΠΎΠ»Π°. ΠΡΠΈΠΌΠ΅Ρ ΠΏΠΎΡΡΠ°Π²ΠΊΠ΅ ΠΊΠΎΡΠ° ΡΠ°Π΄ΡΠΆΠΈ Π°ΡΡΠΈΠ±ΡΡ cleartextTrafficPermitted
ΡΠ° Π·Π½Π°ΡΠ΅ΡΠ΅ΠΌ true
:
<network-security-config>
<domain-config>
<domain includeSubdomains="true">example.com</domain>
<trust-anchors>
<certificates src="@raw/my_ca"/>
</trust-anchors>
<domain-config cleartextTrafficPermitted="true">
<domain includeSubdomains="true">secure.example.com</domain>
</domain-config>
</domain-config>
</network-security-config>
ΠΠ°Π΄Π°ΡΠ°ΠΊ: ΠΠ³ΡΠ°Π½ΠΈΡΠΈΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ΅ ΠΏΡΠ΅ΠΌΠ° ΠΈΠΌΠ΅Π½Ρ/ΠΏΡΡΠ°ΡΡ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ΅
reΕ‘enje: Π£ ΡΠ΅Π΄Π½ΠΎΠΌ ΠΎΠ΄ Π²Π΅Π»ΠΈΠΊΠΈΡ
ΠΏΡΠΎΡΠ΅ΠΊΠ°ΡΠ° Π²Π΅Π·Π°Π½ΠΈΡ
Π·Π° ΡΠ°Π·Π²ΠΎΡ ΠΌΠΎΠ±ΠΈΠ»Π½Π΅ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅ Π·Π° ΠΠ½Π΄ΡΠΎΠΈΠ΄, Π½Π°ΠΈΡΠ»ΠΈ ΡΠΌΠΎ Π½Π° Π»Π°ΠΆΠ½Π΅ ΠΏΠΎΠ·ΠΈΡΠΈΠ²Π΅ ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΊΠΎΡΠ΅ ΠΎΠ΄ΡΠ΅ΡΡΡΠ΅ ΠΏΠΎΡΡΠ°Π²ΠΊΡ Π·Π°ΠΌΠ°Π³ΡΠΈΠ²Π°ΡΠ°. Π§ΠΈΡΠ΅Π½ΠΈΡΠ° ΡΠ΅ Π΄Π° ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Π²Π°Π½ ΠΎΠΊΠ²ΠΈΡΠ° ΡΡΠ°ΠΆΠΈ Ρ Π΄Π°ΡΠΎΡΠ΅ΡΠΈ build.gradle
ΠΏΠΎΡΡΠ°Π²ΠΊΠ° ΠΎΠ΄Π³ΠΎΠ²ΠΎΡΠ½Π° Π·Π° ΠΏΡΠΈΠΌΠ΅Π½Ρ ΠΏΡΠ°Π²ΠΈΠ»Π° Π·Π°ΠΌΠ°Π³ΡΠΈΠ²Π°ΡΠ° Π·Π° Π²Π΅ΡΠ·ΠΈΡΡ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅ Π·Π° ΠΈΠ·Π΄Π°Π²Π°ΡΠ΅.
ΠΠ»ΠΈ Ρ Π²Π΅Π»ΠΈΠΊΠΈΠΌ ΠΏΡΠΎΡΠ΅ΠΊΡΠΈΠΌΠ° ΠΏΠΎΠ½Π΅ΠΊΠ°Π΄ ΠΏΠΎΡΡΠΎΡΠ΅ ΠΏΠΎΠ΄ΡΠ΅ΡΠ΅Π½Π΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ΅ build.gradle
, ΠΊΠΎΡΠΈ ΡΠ΅ ΠΎΠ΄Π½ΠΎΡΠ΅ Π½Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΡΠΊΡΡΡΠ΅Π½Π΅ Ρ ΠΏΡΠΎΡΠ΅ΠΊΠ°Ρ. ΠΠΎΡΠ΅Π±Π½ΠΎΡΡ ΡΠ΅ Ρ ΡΠΎΠΌΠ΅ ΡΡΠΎ ΡΠ°ΠΊ ΠΈ Π°ΠΊΠΎ ΠΎΠ²Π΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ΅ Π½Π΅ ΡΠΊΠ°Π·ΡΡΡ Π½Π° ΠΏΠΎΡΡΠ΅Π±Ρ Π·Π° Π·Π°ΠΌΠ°Π³ΡΠΈΠ²Π°ΡΠ΅ΠΌ, ΠΏΠΎΠ΄Π΅ΡΠ°Π²Π°ΡΠ° ΡΠΎΠ΄ΠΈΡΠ΅ΡΡΠΊΠ΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ΅ ΡΠΊΠ»ΠΎΠΏΠ° ΡΠ΅ Π±ΠΈΡΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠ΅Π½Π° ΡΠΎΠΊΠΎΠΌ ΠΊΠΎΠΌΠΏΠΈΠ»Π°ΡΠΈΡΠ΅.
ΠΠ°ΠΊΠ»Π΅, Π·Π°Π΄Π°ΡΠ°ΠΊ ΡΠ΅ Π΄Π° ΡΠ΅ ΠΎΠ΄ΡΠ΅ΠΊΡ ΠΎΠΊΠΈΠ΄Π°ΡΠΈ Ρ ΠΏΠΎΠ΄ΡΠ΅ΡΠ΅Π½ΠΈΠΌ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ°ΠΌΠ° ΠΊΠΎΡΠ΅ ΠΏΡΠΈΠΏΠ°Π΄Π°ΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠ°. ΠΠΎΠ³Ρ ΡΠ΅ ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠΎΠ²Π°ΡΠΈ ΠΏΠΎ ΠΏΡΠΈΡΡΡΡΠ²Ρ Π»ΠΈΠ½ΠΈΡΠ΅ apply 'com.android.library'
.
ΠΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π° ΠΈΠ· Π΄Π°ΡΠΎΡΠ΅ΠΊΠ΅ build.gradle
, ΡΡΠΎ ΠΎΠ΄ΡΠ΅ΡΡΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Ρ Π·Π° Π·Π°ΠΌΠ°Π³ΡΠΈΠ²Π°ΡΠ΅ΠΌ:
apply plugin: 'com.android.application'
android {
compileSdkVersion 24
buildToolsVersion "24.0.2"
defaultConfig {
...
}
buildTypes {
release {
minifyEnabled true
...
}
}
}
dependencies {
...
}
ΠΡΠΈΠΌΠ΅Ρ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ΅ build.gradle
Π·Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ΡΠΊΡΡΡΠ΅Π½Ρ Ρ ΠΏΡΠΎΡΠ΅ΠΊΠ°Ρ ΠΊΠΎΡΠ° Π½Π΅ΠΌΠ° ΠΎΠ²ΠΎ ΠΏΠΎΠ΄Π΅ΡΠ°Π²Π°ΡΠ΅:
apply plugin: 'android-library'
dependencies {
compile 'com.android.support:support-v4:18.0.+'
}
android {
compileSdkVersion 14
buildToolsVersion '17.0.0'
...
}
Π ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Π·Π° Π¦Ρ Π΅ΡΠΊΠΌΠ°ΡΠΊ:
ΠΡΠΎΠΡΠ°ΡΠ΄ΠΠ±ΡΡΡΡΠ°ΡΠΈΠΎΠ½ΠΠΎΡΠΠ½Π£ΡΠ΅
// ΠΠΎΠΈΡΠΊ ΠΌΠ΅ΡΠΎΠ΄Π° release ΡΡΠ΅Π΄ΠΈ Π²ΡΠ΅Ρ
ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π² Gradle ΡΠ°ΠΉΠ»Π°Ρ
CxList releaseMethod = Find_Gradle_Method("release");
// ΠΡΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΈΠ· ΡΠ°ΠΉΠ»ΠΎΠ² build.gradle
CxList gradleBuildObjects = Find_Gradle_Build_Objects();
// ΠΠΎΠΈΡΠΊ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π½Π°Ρ
ΠΎΠ΄ΠΈΡΡΡ Π²Π½ΡΡΡΠΈ ΠΌΠ΅ΡΠΎΠ΄Π° "release" ΡΡΠ΅Π΄ΠΈ Π²ΡΠ΅Ρ
ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² ΠΈΠ· ΡΠ°ΠΉΠ»ΠΎΠ² build.gradle
CxList methodInvokesUnderRelease = gradleBuildObjects.FindByType(typeof(MethodInvokeExpr)).GetByAncs(releaseMethod);
// ΠΡΠ΅ΠΌ Π²Π½ΡΡΡΠΈ gradle-ΡΠ°ΠΉΠ»ΠΎΠ² ΡΡΡΠΎΠΊΡ "com.android.library" - ΡΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ Π΄Π°Π½Π½ΡΠΉ ΡΠ°ΠΉΠ» ΠΎΡΠ½ΠΎΡΠΈΡΡΡ ΠΊ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ ΠΈ Π΅Π³ΠΎ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΊΠ»ΡΡΠΈΡΡ ΠΈΠ· ΠΏΡΠ°Π²ΠΈΠ»Π°
CxList android_library = gradleBuildObjects.FindByName("com.android.library");
// ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΡΡΡΠΎΠ³ΠΎ ΠΌΠ°ΡΡΠΈΠ²Π°
List<string> libraries_path = new List<string> {};
// ΠΡΠΎΡ
ΠΎΠ΄ΠΈΠΌ ΡΠ΅ΡΠ΅Π· Π²ΡΠ΅ Π½Π°ΠΉΠ΄Π΅Π½Π½ΡΠ΅ "Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠ΅" ΡΠ°ΠΉΠ»Ρ
foreach(CxList library in android_library)
{
// ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΏΡΡΡ ΠΊ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΡΠ°ΠΉΠ»Ρ
string file_name_library = library.GetFirstGraph().LinePragma.FileName;
// ΠΠΎΠ±Π°Π²Π»ΡΠ΅ΠΌ Π΅Π³ΠΎ Π² Π½Π°Ρ ΠΌΠ°ΡΡΠΈΠ²
libraries_path.Add(file_name_library);
}
// ΠΡΠ΅ΠΌ Π²ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΎΠ±ΡΡΡΠΊΠ°ΡΠΈΠΈ Π² ΡΠ΅Π»ΠΈΠ·Π½ΡΡ
Π½Π°ΡΡΡΠΎΠΉΠΊΠ°Ρ
CxList minifyEnabled = methodInvokesUnderRelease.FindByShortName("minifyEnabled");
// ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΡ ΡΡΠΈΡ
Π²ΡΠ·ΠΎΠ²ΠΎΠ²
CxList minifyValue = gradleBuildObjects.GetParameters(minifyEnabled, 0);
// ΠΡΠ΅ΠΌ ΡΡΠ΅Π΄ΠΈ Π½ΠΈΡ
Π²ΠΊΠ»ΡΡΠ΅Π½Π½ΡΠ΅
CxList minifyValueTrue = minifyValue.FindByShortName("true");
// ΠΠ΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠ°Π³ΠΈΠΈ, Π΅ΡΠ»ΠΈ Π½Π΅ Π½Π°ΡΠ»ΠΈ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌ ΡΠΏΠΎΡΠΎΠ±ΠΎΠΌ :D
if (minifyValueTrue.Count == 0) {
minifyValue = minifyValue.FindByAbstractValue(abstractValue => abstractValue is TrueAbstractValue);
} else {
// Π Π΅ΡΠ»ΠΈ Π²ΡΡ-ΡΠ°ΠΊΠΈ Π½Π°ΡΠ»ΠΈ, ΡΠΎ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠΈΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΈ ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌ
minifyValue = minifyValueTrue;
}
// ΠΡΠ»ΠΈ Π½Π΅ Π½Π°ΡΠ»ΠΎΡΡ ΡΠ°ΠΊΠΈΡ
ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²
if (minifyValue.Count == 0)
{
// ΠΠ»Ρ Π±ΠΎΠ»Π΅Π΅ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ³ΠΎ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΌΠ΅ΡΡΠ° ΡΡΠ°Π±Π°ΡΡΠ²Π°Π½ΠΈΡ Π² ΡΠ°ΠΉΠ»Π΅ ΠΈΡΠ΅ΠΌ ΠΈΠ»ΠΈ buildTypes ΠΈΠ»ΠΈ android
CxList tempResult = All.NewCxList();
CxList buildTypes = Find_Gradle_Method("buildTypes");
if (buildTypes.Count > 0) {
tempResult = buildTypes;
} else {
tempResult = Find_Gradle_Method("android");
}
// ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½Π°ΠΉΠ΄Π΅Π½Π½ΡΡ
ΠΌΠ΅ΡΡ ΡΡΠ°Π±Π°ΡΡΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΡ
ΠΎΠ΄ΠΈΠΌ ΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ, Π΄ΠΎΡΠ΅ΡΠ½ΠΈΠΉ ΠΈΠ»ΠΈ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠ°ΠΉΠ»Ρ ΡΠ±ΠΎΡΠΊΠΈ
foreach(CxList res in tempResult)
{
// ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ, Π² ΠΊΠ°ΠΊΠΎΠΌ ΡΠ°ΠΉΠ»Π΅ Π±ΡΠ» Π½Π°ΠΉΠ΄Π΅Π½ buildType ΠΈΠ»ΠΈ android ΠΌΠ΅ΡΠΎΠ΄Ρ
string file_name_result = res.GetFirstGraph().LinePragma.FileName;
// ΠΡΠ»ΠΈ ΡΠ°ΠΊΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π½Π΅Ρ Π² Π½Π°ΡΠ΅ΠΌ ΡΠΏΠΈΡΠΊΠ΅ "Π΄ΠΎΡΠ΅ΡΠ½ΠΈΡ
" ΡΠ°ΠΉΠ»ΠΎΠ² - Π·Π½Π°ΡΠΈΡ ΡΡΠΎ ΠΎΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΡΠ°ΠΉΠ» ΠΈ Π΅Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡΡ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ
if (libraries_path.Contains(file_name_result) == false){
result.Add(res);
}
}
}
ΠΠ²Π°Ρ ΠΏΡΠΈΡΡΡΠΏ ΠΌΠΎΠΆΠ΅ Π±ΠΈΡΠΈ ΠΏΡΠΈΠ»ΠΈΡΠ½ΠΎ ΡΠ½ΠΈΠ²Π΅ΡΠ·Π°Π»Π°Π½ ΠΈ ΠΊΠΎΡΠΈΡΡΠ°Π½ Π½Π΅ ΡΠ°ΠΌΠΎ Π·Π° ΠΠ½Π΄ΡΠΎΠΈΠ΄ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅, Π²Π΅Ρ ΠΈ Π·Π° Π΄ΡΡΠ³Π΅ ΡΠ»ΡΡΠ°ΡΠ΅Π²Π΅ ΠΊΠ°Π΄Π° ΡΡΠ΅Π±Π° Π΄Π° ΡΡΠ²ΡΠ΄ΠΈΡΠ΅ Π΄Π° Π»ΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°Ρ ΠΏΡΠΈΠΏΠ°Π΄Π° ΠΎΠ΄ΡΠ΅ΡΠ΅Π½ΠΎΡ Π΄Π°ΡΠΎΡΠ΅ΡΠΈ.
ΠΠ°Π΄Π°ΡΠ°ΠΊ: ΠΠΎΠ΄Π°ΡΡΠ΅ ΠΏΠΎΠ΄ΡΡΠΊΡ Π·Π° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ ΡΡΠ΅ΡΠ΅ ΡΡΡΠ°Π½Π΅ Π°ΠΊΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠ° Π½ΠΈΡΠ΅ Ρ ΠΏΠΎΡΠΏΡΠ½ΠΎΡΡΠΈ ΠΏΠΎΠ΄ΡΠΆΠ°Π½Π°
reΕ‘enje: ΠΡΠΎΡ ΡΠ°Π·Π»ΠΈΡΠΈΡΠΈΡ ΠΎΠΊΠ²ΠΈΡΠ° ΠΊΠΎΡΠΈ ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅ Ρ ΠΏΡΠΎΡΠ΅ΡΡ ΠΏΠΈΡΠ°ΡΠ° ΠΊΠΎΠ΄Π° ΡΠ΅ ΡΠ΅Π΄Π½ΠΎΡΡΠ°Π²Π½ΠΎ Π²Π°Π½ Π³ΡΠ°Π½ΠΈΡΠ°. ΠΠ°ΡΠ°Π²Π½ΠΎ, Π¦Ρ Π΅ΡΠΊΠΌΠ°ΡΠΊΡ Π½Π΅ Π·Π½Π° ΡΠ²Π΅ΠΊ Π·Π° ΡΠΈΡ ΠΎΠ²ΠΎ ΠΏΠΎΡΡΠΎΡΠ°ΡΠ΅, Π° Π½Π°Ρ Π·Π°Π΄Π°ΡΠ°ΠΊ ΡΠ΅ Π΄Π° Π³Π° Π½Π°ΡΡΠΈΠΌΠΎ Π΄Π° ΡΡ Π²Π°ΡΠΈ Π΄Π° ΠΎΠ΄ΡΠ΅ΡΠ΅Π½Π΅ ΠΌΠ΅ΡΠΎΠ΄Π΅ ΠΏΡΠΈΠΏΠ°Π΄Π°ΡΡ ΡΠΏΡΠ°Π²ΠΎ ΠΎΠ²ΠΎΠΌ ΠΎΠΊΠ²ΠΈΡΡ. ΠΠΎΠ½Π΅ΠΊΠ°Π΄ ΡΠ΅ ΠΎΠ²ΠΎ ΠΊΠΎΠΌΠΏΠ»ΠΈΠΊΠΎΠ²Π°Π½ΠΎ ΡΠΈΡΠ΅Π½ΠΈΡΠΎΠΌ Π΄Π° ΠΎΠΊΠ²ΠΈΡΠΈ ΠΊΠΎΡΠΈΡΡΠ΅ ΠΈΠΌΠ΅Π½Π° ΡΡΠ½ΠΊΡΠΈΡΠ° ΠΊΠΎΡΠ° ΡΡ Π²ΡΠ»ΠΎ ΡΠ΅ΡΡΠ° ΠΈ Π½Π΅ΠΌΠΎΠ³ΡΡΠ΅ ΡΠ΅ Π½Π΅Π΄Π²ΠΎΡΠΌΠΈΡΠ»Π΅Π½ΠΎ ΠΎΠ΄ΡΠ΅Π΄ΠΈΡΠΈ ΠΎΠ΄Π½ΠΎΡ ΠΎΠ΄ΡΠ΅ΡΠ΅Π½ΠΎΠ³ ΠΏΠΎΠ·ΠΈΠ²Π° ΠΏΡΠ΅ΠΌΠ° ΠΎΠ΄ΡΠ΅ΡΠ΅Π½ΠΎΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΡΠΈ.
ΠΠΎΡΠ΅ΡΠΊΠΎΡΠ° ΡΠ΅ Ρ ΡΠΎΠΌΠ΅ ΡΡΠΎ ΡΠΈΠ½ΡΠ°ΠΊΡΠ° ΡΠ°ΠΊΠ²ΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π½ΠΈΡΠ΅ ΡΠ²Π΅ΠΊ ΠΈΡΠΏΡΠ°Π²Π½ΠΎ ΠΏΡΠ΅ΠΏΠΎΠ·Π½Π°ΡΠ° ΠΈ ΠΌΠΎΡΠ°ΡΠ΅ Π΅ΠΊΡΠΏΠ΅ΡΠΈΠΌΠ΅Π½ΡΠΈΡΠ°ΡΠΈ Π΄Π° Π±ΠΈΡΡΠ΅ ΠΈΠ·Π±Π΅Π³Π»ΠΈ Π²Π΅Π»ΠΈΠΊΠΈ Π±ΡΠΎΡ Π»Π°ΠΆΠ½ΠΈΡ ΠΏΠΎΠ·ΠΈΡΠΈΠ²Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ°. ΠΠΎΡΡΠΎΡΠΈ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ ΠΎΠΏΡΠΈΡΠ° Π·Π° ΠΏΠΎΠ±ΠΎΡΡΠ°ΡΠ΅ ΡΠ°ΡΠ½ΠΎΡΡΠΈ ΡΠΊΠ΅Π½ΠΈΡΠ°ΡΠ° ΠΈ ΡΠ΅ΡΠ°Π²Π°ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°:
-
ΠΡΠ²Π° ΠΎΠΏΡΠΈΡΠ°, ΠΏΠΎΡΠ·Π΄Π°Π½ΠΎ Π·Π½Π°ΠΌΠΎ Π΄Π° ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΊΠΎΡΠΈΡΡΠΈ Ρ ΠΎΠ΄ΡΠ΅ΡΠ΅Π½ΠΎΠΌ ΠΏΡΠΎΡΠ΅ΠΊΡΡ ΠΈ ΠΌΠΎΠΆΠ΅ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΠΈ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ Π½Π° Π½ΠΈΠ²ΠΎΡ ΡΠΈΠΌΠ°. ΠΠ»ΠΈ Π°ΠΊΠΎ ΡΠΈΠΌ ΠΎΠ΄Π»ΡΡΠΈ Π΄Π° Π·Π°ΡΠ·ΠΌΠ΅ Π΄ΡΡΠ³Π°ΡΠΈΡΠΈ ΠΏΡΠΈΡΡΡΠΏ ΠΈΠ»ΠΈ ΠΊΠΎΡΠΈΡΡΠΈ Π½Π΅ΠΊΠΎΠ»ΠΈΠΊΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Ρ ΠΊΠΎΡΠΈΠΌΠ° ΡΠ΅ ΠΈΠΌΠ΅Π½Π° ΡΡΠ½ΠΊΡΠΈΡΠ° ΠΏΡΠ΅ΠΊΠ»Π°ΠΏΠ°ΡΡ, ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π΄ΠΎΠ±ΠΈΡΠΈ Π½Π΅ Π±Π°Ρ ΠΏΡΠΈΡΠ°ΡΠ½Ρ ΡΠ»ΠΈΠΊΡ Π±ΡΠΎΡΠ½ΠΈΡ Π»Π°ΠΆΠ½ΠΈΡ ΠΏΠΎΠ·ΠΈΡΠΈΠ²Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠ°
-
ΠΡΡΠ³Π° ΠΎΠΏΡΠΈΡΠ° ΡΠ΅ ΡΡΠ°ΠΆΠ΅ΡΠ΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ° Ρ ΠΊΠΎΡΠΈΠΌΠ° ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΡΠ°ΡΠ½ΠΎ ΡΠ²Π΅Π·Π΅Π½Π°. ΠΠ²ΠΈΠΌ ΠΏΡΠΈΡΡΡΠΏΠΎΠΌ ΠΌΠΎΠΆΠ΅ΠΌΠΎ Π±ΠΈΡΠΈ ΡΠΈΠ³ΡΡΠ½ΠΈ Π΄Π° ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΊΠΎΡΠ° Π½Π°ΠΌ ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½Π° ΡΠ°ΡΠ½ΠΎ ΠΊΠΎΡΠΈΡΡΠΈ Ρ ΠΎΠ²ΠΎΡ Π΄Π°ΡΠΎΡΠ΅ΡΠΈ.
-
Π ΡΡΠ΅ΡΠ° ΠΎΠΏΡΠΈΡΠ° ΡΠ΅ Π΄Π° ΡΠ΅ Π΄Π²Π° Π³ΠΎΡΡΠ° ΠΏΡΠΈΡΡΡΠΏΠ° ΠΊΠΎΡΠΈΡΡΠ΅ Π·Π°ΡΠ΅Π΄Π½ΠΎ.
ΠΠ°ΠΎ ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΠ³Π»Π΅Π΄Π°ΡΠΌΠΎ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Π΄ΠΎΠ±ΡΠΎ ΠΏΠΎΠ·Π½Π°ΡΡ Ρ ΡΡΠΊΠΈΠΌ ΠΊΡΡΠ³ΠΎΠ²ΠΈΠΌΠ° $
, ΠΊΠΎΡΠΈ Π·Π°ΠΌΠ΅ΡΡΡΠ΅ ΠΏΠΎΠ΄Π°ΡΠΊΠ΅ Ρ ΠΏΡΠ΅ΡΡ
ΠΎΠ΄Π½ΠΎ ΡΠΎΡΠΌΠΈΡΠ°Π½ΠΈ Π‘ΠΠ ΡΠΏΠΈΡ. Π’ΠΎ ΡΠ΅, Ρ ΡΡΠ²Π°ΡΠΈ, Π΄ΠΈΡΠ΅ΠΊΡΠ°Π½ Π°Π½Π°Π»ΠΎΠ³ ΠΡΠ΅ΠΏΠ°ΡΠ΅Π΄ Π‘ΡΠ°ΡΠ΅ΠΌΠ΅Π½Ρ-Π° Ρ ΠΠ°Π²ΠΈ. ΠΠ»ΠΈ, Π°ΠΊΠΎ ΡΡΠ΅Π±Π° Π΄Π° Π΄ΠΈΠ½Π°ΠΌΠΈΡΠΊΠΈ ΠΊΠΎΠ½ΡΡΡΡΠΈΡΠ΅ΡΠ΅ Π‘ΠΠ ΡΠΏΠΈΡ, Π½Π° ΠΏΡΠΈΠΌΠ΅Ρ, Π°ΠΊΠΎ ΡΡΠ΅Π±Π° Π΄Π° ΠΏΡΠΎΡΠ»Π΅Π΄ΠΈΡΠ΅ ΠΈΠΌΠ΅Π½Π° ΡΠ°Π±Π΅Π»Π°, ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΊΠΎΡΠΈΡΡΠΈΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ #$
, ΠΊΠΎΡΠΈ ΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡΠΈ ΠΏΠΎΠ΄Π°ΡΠΊΠ΅ Ρ ΡΠΏΠΈΡΡ (ΡΠΊΠΎΡΠΎ ΠΊΠ°ΠΎ ΠΊΠΎΠ½ΠΊΠ°ΡΠ΅Π½Π°ΡΠΈΡΠ° ΡΡΡΠΈΠ½Π³ΠΎΠ²Π°).
Primer koda:
// Π ΠΎΠ±ΡΠ΅ΠΌ ΡΠ»ΡΡΠ°Π΅ - Π·Π½Π°ΡΠ΅Π½ΠΈΡ, ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΠ΅ΠΌΡΠ΅ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Π΅ΠΌ
val table = "coffees"
sql"select * from #$table where name = $name".as[Coffee].headOption
Π¦Ρ
Π΅ΡΠΊΠΌΠ°ΡΠΊ ΡΠΎΡ ΡΠ²Π΅ΠΊ Π½Π΅ Π·Π½Π° ΠΊΠ°ΠΊΠΎ Π΄Π° ΠΎΡΠΊΡΠΈΡΠ΅ ΡΠΏΠΎΡΡΠ΅Π±Ρ Π»ΠΈΡΠ΅ΡΠ°Π»Π½ΠΈΡ
Π²ΡΠ΅Π΄Π½ΠΎΡΡΠΈ ΡΠΏΠ°ΡΠ°ΡΠ° ΠΈ ΠΏΡΠ΅ΡΠΊΠ°ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΠ΅ #$
, ΠΏΠ° ΠΏΠΎΠΊΡΡΠ°ΡΠΌΠΎ Π΄Π° Π³Π° Π½Π°ΡΡΠΈΠΌΠΎ Π΄Π° ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΡΡΠ΅ ΠΏΠΎΡΠ΅Π½ΡΠΈΡΠ°Π»Π½Π΅ Π‘ΠΠ ΠΈΡΠ΅ΠΊΡΠΈΡΠ΅ ΠΈ ΠΈΡΡΠ°ΠΊΠ½Π΅ ΠΏΡΠ°Π²Π° ΠΌΠ΅ΡΡΠ° Ρ ΠΊΠΎΠ΄Ρ:
// ΠΠ°Ρ
ΠΎΠ΄ΠΈΠΌ Π²ΡΠ΅ ΠΈΠΌΠΏΠΎΡΡΡ
CxList imports = All.FindByType(typeof(Import));
// ΠΡΠ΅ΠΌ ΠΏΠΎ ΠΈΠΌΠ΅Π½ΠΈ, Π΅ΡΡΡ Π»ΠΈ Π² ΠΈΠΌΠΏΠΎΡΡΠ°Ρ
slick
CxList slick = imports.FindByShortName("slick");
// ΠΠ΅ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ»Π°Π³, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡΠΈΠΉ, ΡΡΠΎ ΠΈΠΌΠΏΠΎΡΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π² ΠΊΠΎΠ΄Π΅ ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ
// ΠΠ»Ρ Π±ΠΎΠ»Π΅Π΅ ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ - ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ Ρ ΠΈΠΌΠ΅Π½Π΅ΠΌ ΡΠ°ΠΉΠ»Π°
bool not_empty_list = false;
foreach (CxList r in slick)
{
// ΠΡΠ»ΠΈ Π²ΡΡΡΠ΅ΡΠΈΠ»ΠΈ ΠΈΠΌΠΏΠΎΡΡ, ΡΡΠΈΡΠ°Π΅ΠΌ, ΡΡΠΎ slick ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ
not_empty_list = true;
}
if (not_empty_list) {
// ΠΡΠ΅ΠΌ Π²ΡΠ·ΠΎΠ²Ρ, Π² ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ SQL-ΡΡΡΠΎΠΊΠ°
CxList sql = All.FindByShortName("sql");
sql.Add(All.FindByShortName("sqlu"));
// ΠΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΠΌ Π΄Π°Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΠΏΠ°Π΄Π°ΡΡ Π² ΡΡΠΈ Π²ΡΠ·ΠΎΠ²Ρ
CxList data_sql = All.DataInfluencingOn(sql);
// Π’Π°ΠΊ ΠΊΠ°ΠΊ ΡΠΈΠ½ΡΠ°ΠΊΠΈΡ Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΡΡΡ, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΠΈΡΡ ΠΏΠΎΠ΄Ρ
ΠΎΠ΄ Ρ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΡΠΌΠΈ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΡΠΌΠΈ
// RegExp ΡΡΠΎΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΡΠ°ΠΉΠ½Π΅ ΠΎΡΡΠΎΡΠΎΠΆΠ½ΠΎ ΠΈ Π½Π΅ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ Π΅Π³ΠΎ Π½Π° Π±ΠΎΠ»ΡΡΠΎΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π΅ Π΄Π°Π½Π½ΡΡ
, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΡΠΈΠ»ΡΠ½ΠΎ ΠΏΠΎΠ²Π»ΠΈΡΡΡ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ
CxList find_possible_inj = data_sql.FindByRegex(@"#$", true, true, true);
// ΠΠ·Π±Π°Π²Π»ΡΠ΅ΠΌΡΡ ΠΎΡ Π»ΠΈΡΠ½ΠΈΡ
ΡΡΠ°Π±Π°ΡΡΠ²Π°Π½ΠΈΠΉ, Π΅ΡΠ»ΠΈ ΠΎΠ½ΠΈ Π΅ΡΡΡ ΠΈ Π²ΡΠ²ΠΎΠ΄ΠΈΠΌ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ
result = find_possible_inj.FindByType(typeof(BinaryExpr));
}
ΠΠ°Π΄Π°ΡΠ°ΠΊ: ΠΠΎΡΡΠ°ΠΆΠΈΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅Π½Π΅ ΡΠ°ΡΠΈΠ²Π΅ ΡΡΠ½ΠΊΡΠΈΡΠ΅ Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠ° ΠΎΡΠ²ΠΎΡΠ΅Π½ΠΎΠ³ ΠΊΠΎΠ΄Π°
reΕ‘enje: ΠΠ½ΠΎΠ³Π΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡΠ΅ ΠΊΠΎΡΠΈΡΡΠ΅ Π°Π»Π°ΡΠ΅ Π·Π° ΠΏΡΠ°ΡΠ΅ΡΠ΅ ΠΎΡΠ²ΠΎΡΠ΅Π½ΠΎΠ³ ΠΊΠΎΠ΄Π° (ΠΠ‘Π ΠΏΡΠ°ΠΊΡΠ°) Π΄Π° ΠΎΡΠΊΡΠΈΡΡ ΡΠΏΠΎΡΡΠ΅Π±Ρ ΡΠ°ΡΠΈΠ²ΠΈΡ Π²Π΅ΡΠ·ΠΈΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Ρ ΡΠ°Π·Π²ΠΈΡΠ΅Π½ΠΈΠΌ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ°ΠΌΠ°. ΠΠΎΠ½Π΅ΠΊΠ°Π΄ Π½ΠΈΡΠ΅ ΠΌΠΎΠ³ΡΡΠ΅ Π°ΠΆΡΡΠΈΡΠ°ΡΠΈ ΡΠ°ΠΊΠ²Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΡ Π½Π° Π±Π΅Π·Π±Π΅Π΄Π½Ρ Π²Π΅ΡΠ·ΠΈΡΡ. Π£ Π½Π΅ΠΊΠΈΠΌ ΡΠ»ΡΡΠ°ΡΠ΅Π²ΠΈΠΌΠ° ΠΏΠΎΡΡΠΎΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½Π° ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅ΡΠ°, Ρ Π΄ΡΡΠ³ΠΈΠΌΠ° ΡΠΎΠΏΡΡΠ΅ Π½Π΅ ΠΏΠΎΡΡΠΎΡΠΈ ΡΠΈΠ³ΡΡΠ½Π° Π²Π΅ΡΠ·ΠΈΡΠ°. Π£ ΠΎΠ²ΠΎΠΌ ΡΠ»ΡΡΠ°ΡΡ, ΠΊΠΎΠΌΠ±ΠΈΠ½Π°ΡΠΈΡΠ° Π‘ΠΠ‘Π’ ΠΈ ΠΠ‘Π ΠΏΡΠ°ΠΊΡΠΈ ΡΠ΅ ΠΏΠΎΠΌΠΎΡΠΈ Π΄Π° ΡΠ΅ ΡΡΠ²ΡΠ΄ΠΈ Π΄Π° ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡΠ΅ ΠΊΠΎΡΠ΅ Π΄ΠΎΠ²ΠΎΠ΄Π΅ Π΄ΠΎ ΠΈΡΠΊΠΎΡΠΈΡΡΠ°Π²Π°ΡΠ° ΡΠ°ΡΠΈΠ²ΠΎΡΡΠΈ Π½Π΅ ΠΊΠΎΡΠΈΡΡΠ΅ Ρ ΠΊΠΎΠ΄Ρ.
ΠΠ»ΠΈ ΠΏΠΎΠ½Π΅ΠΊΠ°Π΄, ΠΏΠΎΡΠ΅Π±Π½ΠΎ ΠΊΠ°Π΄Π° ΡΠ΅ ΡΠ°Π·ΠΌΠ°ΡΡΠ° ΠΠ°Π²Π°Π‘ΡΡΠΈΠΏΡ, ΠΎΠ²ΠΎ ΠΌΠΎΠΆΠ΄Π° Π½ΠΈΡΠ΅ ΡΠ°ΡΠ²ΠΈΠΌ ΡΡΠΈΠ²ΠΈΡΠ°Π»Π°Π½ Π·Π°Π΄Π°ΡΠ°ΠΊ. ΠΡΠΏΠΎΠ΄ ΡΠ΅ ΡΠ΅ΡΠ΅ΡΠ΅, ΠΌΠΎΠΆΠ΄Π° Π½Π΅ ΠΈΠ΄Π΅Π°Π»Π½ΠΎ, Π°Π»ΠΈ ΠΈΠΏΠ°ΠΊ ΡΡΠ½ΠΊΡΠΈΠΎΠ½Π°Π»Π½ΠΎ, ΠΊΠΎΡΠΈΡΡΠ΅ΡΠΈ ΠΏΡΠΈΠΌΠ΅Ρ ΡΠ°ΡΠΈΠ²ΠΎΡΡΠΈ Ρ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ lodash
Ρ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠ° template
ΠΈ *set
.
ΠΡΠΈΠΌΠ΅ΡΠΈ ΡΠ΅ΡΡΠΈΡΠ°ΡΠ° ΠΏΠΎΡΠ΅Π½ΡΠΈΡΠ°Π»Π½ΠΎ ΡΠ°ΡΠΈΠ²ΠΎΠ³ ΠΊΠΎΠ΄Π° Ρ ΠΠ‘ Π΄Π°ΡΠΎΡΠ΅ΡΠΈ:
/**
* Template example
*/
'use strict';
var _ = require("./node_modules/lodash.js");
// Use the "interpolate" delimiter to create a compiled template.
var compiled = _.template('hello <%= js %>!');
console.log(compiled({ 'js': 'lodash' }));
// => 'hello lodash!'
// Use the internal `print` function in "evaluate" delimiters.
var compiled = _.template('<% print("hello " + js); %>!');
console.log(compiled({ 'js': 'lodash' }));
// => 'hello lodash!'
Π ΠΊΠ°Π΄Π° ΡΠ΅ ΠΏΠΎΠ²Π΅Π·ΡΡΠ΅ΡΠ΅ Π΄ΠΈΡΠ΅ΠΊΡΠ½ΠΎ Ρ Ρ ΡΠΌΠ»-Ρ:
<!DOCTYPE html>
<html>
<head>
<title>Lodash Tutorial</title>
<script src="./node_modules/lodash.js"></script>
<script type="text/javascript">
// Lodash chunking array
nums = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let c1 = _.template('<% print("hello " + js); %>!');
console.log(c1);
let c2 = _.template('<% print("hello " + js); %>!');
console.log(c2);
</script>
</head>
<body></body>
</html>
Π’ΡΠ°ΠΆΠΈΠΌΠΎ ΡΠ²Π΅ Π½Π°ΡΠ΅ ΡΠ°ΡΠΈΠ²Π΅ ΠΌΠ΅ΡΠΎΠ΄Π΅, ΠΊΠΎΡΠ΅ ΡΡ Π½Π°Π²Π΅Π΄Π΅Π½Π΅ Ρ ΡΠ°ΡΠΈΠ²ΠΎΡΡΠΈ:
// ΠΡΠ΅ΠΌ Π²ΡΠ΅ ΡΡΡΠΎΠΊΠΈ: Π² ΠΊΠΎΡΠΎΡΡΡ
Π²ΡΡΡΠ΅ΡΠ°Π΅ΡΡΡ ΡΡΡΠΎΠΊΠ° lodash (ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΠΌ, ΡΡΠΎ ΡΡΠΎ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅ ΠΈΠΌΠΏΠΎΡΡΠ° Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ
CxList lodash_strings = Find_String_Literal().FindByShortName("*lodash*");
// ΠΡΠ΅ΠΌ Π²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅: ΠΊΠΎΡΠΎΡΡΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΡΡ Ρ ΡΡΠΈΠΌΠΈ ΡΡΡΠΎΠΊΠ°ΠΌΠΈ
CxList data_on_lodash = All.InfluencedBy(lodash_strings);
// ΠΠ°Π΄Π°Π΅ΠΌ ΡΠΏΠΈΡΠΎΠΊ ΡΡΠ·Π²ΠΈΠΌΡΡ
ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ²
List<string> vulnerable_methods = new List<string> {"template", "*set"};
// ΠΡΠ΅ΠΌ Π²ΡΠ΅ Π½Π°ΡΠΈ ΡΡΠ·Π²ΠΈΠΌΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠ΅ΡΠ΅ΡΠΈΡΠ»Π΅Π½Π½Ρ Π² ΡΡΠ·Π²ΠΈΠΌΠΎΡΡΡΡ
ΠΈ ΠΎΡΡΠΈΠ»ΡΡΡΠΎΠ²ΡΠ²Π°Π΅ΠΌ ΠΈΡ
ΡΠΎΠ»ΡΠΊΠΎ ΡΠ°ΠΌ, Π³Π΄Π΅ ΠΎΠ½ΠΈ Π²ΡΠ·ΡΠ²Π°Π»ΠΈΡΡ
CxList vulnerableMethods = All.FindByShortNames(vulnerable_methods).FindByType(typeof(MethodInvokeExpr));
//ΠΠ°Ρ
ΠΎΠ΄ΠΈΠΌ Π²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅: ΠΊΠΎΡΠΎΡΡΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΡΡ Ρ Π΄Π°Π½Π½ΡΠΌΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ
CxList vulnFlow = All.InfluencedBy(vulnerableMethods);
// ΠΡΠ»ΠΈ Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎ ΡΡΠΈΠΌ Π΄Π°Π½Π½ΡΠΌ - ΠΊΠ»Π°Π΄Π΅ΠΌ Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ
result = vulnFlow * data_on_lodash;
// Π€ΠΎΡΠΌΠΈΡΡΠ΅ΠΌ ΡΠΏΠΈΡΠΎΠΊ ΠΏΡΡΠ΅ΠΉ ΠΏΠΎ ΠΊΠΎΡΠΎΡΡΠΌ ΠΌΡ ΡΠΆΠ΅ ΠΏΡΠΎΡΠ»ΠΈ, ΡΡΠΎΠ±Ρ ΡΠΈΠ»ΡΡΡΠΎΠ²Π°ΡΡ Π² Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅ΠΌ Π΄ΡΠ±Π»ΠΈ
List<string> lodash_result_path = new List<string> {};
foreach(CxList lodash_result in result)
{
// ΠΡΠ΅ΡΠ΅Π΄Π½ΠΎΠΉ ΡΠ°Π· ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΠΏΡΡΠΈ ΠΊ ΡΠ°ΠΉΠ»Π°ΠΌ
string file_name = lodash_result.GetFirstGraph().LinePragma.FileName;
lodash_result_path.Add(file_name);
}
// ΠΠ°Π»ΡΡΠ΅ ΠΈΠ΄Π΅Ρ ΡΠ°ΡΡΡ ΠΎΡΠ½ΠΎΡΡΡΠ°ΡΡΡ ΠΊ html ΡΠ°ΠΉΠ»Π°ΠΌ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π² Π½ΠΈΡ
ΠΌΡ Π½Π΅ ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΡΠΎΡΠ»Π΅Π΄ΠΈΡΡ ΠΎΡΠΊΡΠ΄Π° ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΈΠ΄Π΅Ρ Π²ΡΠ·ΠΎΠ²
// Π€ΠΎΡΠΌΠΈΡΡΠ΅ΠΌ ΠΌΠ°ΡΡΠΈΠ² ΠΏΡΡΠ΅ΠΉ ΡΠ°ΠΉΠ»ΠΎΠ², ΡΡΠΎΠ±Ρ Π±ΡΡΡ ΡΠ²Π΅ΡΠ΅Π½Π½ΡΠΌΠΈ, ΡΡΠΎ ΡΡΠ°Π±Π°ΡΡΠ²Π°Π½ΠΈΡ ΡΡΠ·Π²ΠΈΠΌΡΡ
ΠΌΠ΅ΡΠΎΠ΄ΠΎΠ² Π±ΡΠ»ΠΈ ΠΈΠΌΠ΅Π½Π½ΠΎ Π² ΡΠ΅Ρ
ΡΠ°ΠΉΠ»Π°Ρ
, Π² ΠΊΠΎΡΠΎΡΡΡ
ΠΎΠ±ΡΡΠ²Π»Π΅Π½ lodash
List<string> lodash_path = new List<string> {};
foreach(CxList string_lodash in lodash_strings)
{
string file_name = string_lodash.GetFirstGraph().LinePragma.FileName;
lodash_path.Add(file_name);
}
// ΠΠ΅ΡΠ΅Π±ΠΈΡΠ°Π΅ΠΌ Π²ΡΠ΅ ΡΡΠ·Π²ΠΈΠΌΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ ΠΈ ΡΠ±Π΅ΠΆΠ΄Π°Π΅ΠΌΡΡ, ΡΡΠΎ ΠΎΠ½ΠΈ Π²ΡΠ·Π²Π°Π½Ρ Π² ΡΠ΅Ρ
ΠΆΠ΅ ΡΠ°ΠΉΠ»Π°Ρ
, ΡΡΠΎ ΠΈ ΠΎΠ±ΡΡΠ²Π»Π΅Π½ΠΈΠ΅/Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ lodash
foreach(CxList method in vulnerableMethods)
{
string file_name_method = method.GetFirstGraph().LinePragma.FileName;
if (lodash_path.Contains(file_name_method) == true && lodash_result_path.Contains(file_name_method) == false){
result.Add(method);
}
}
// Π£Π±ΠΈΡΠ°Π΅ΠΌ Π²ΡΠ΅ UknownReferences ΠΈ ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌ ΡΠ°ΠΌΡΠΉ "Π΄Π»ΠΈΠ½Π½ΡΠΉ" ΠΈΠ· ΠΏΡΡΠ΅ΠΉ, Π΅ΡΠ»ΠΈ ΡΠ°ΠΊΠΈΠ΅ Π²ΡΡΡΠ΅ΡΠ°ΡΡΡΡ
result = result.ReduceFlow(CxList.ReduceFlowType.ReduceSmallFlow) - result.FindByType(typeof(UnknownReference));
ΠΠ°Π΄Π°ΡΠ°ΠΊ: Π’ΡΠ°ΠΆΠ΅ΡΠ΅ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ° ΡΠ³ΡΠ°ΡΠ΅Π½ΠΈΡ Ρ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΡ
reΕ‘enje: ΠΠΈΡΠ΅ Π½Π΅ΡΠΎΠ±ΠΈΡΠ°ΡΠ΅Π½ΠΎ Π΄Π° Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠ΅, ΠΏΠΎΡΠ΅Π±Π½ΠΎ ΠΌΠΎΠ±ΠΈΠ»Π½Π΅, ΠΊΠΎΡΠΈΡΡΠ΅ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠ΅ ΠΈΠ»ΠΈ ΠΊΡΡΡΠ΅Π²Π΅ Π·Π° ΠΏΡΠΈΡΡΡΠΏ ΡΠ°Π·Π»ΠΈΡΠΈΡΠΈΠΌ ΡΠ΅ΡΠ²Π΅ΡΠΈΠΌΠ° ΠΈΠ»ΠΈ Π²Π΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΡΡ Π‘Π‘Π-ΠΏΠΈΠ½ΠΈΠ½Π³Π°. ΠΠ· Π±Π΅Π·Π±Π΅Π΄Π½ΠΎΡΠ½Π΅ ΠΏΠ΅ΡΡΠΏΠ΅ΠΊΡΠΈΠ²Π΅, ΡΡΠ²Π°ΡΠ΅ ΡΠ°ΠΊΠ²ΠΈΡ ΡΡΠ²Π°ΡΠΈ Ρ ΠΊΠΎΠ΄Ρ Π½ΠΈΡΠ΅ Π½Π°ΡΠ±ΠΎΡΠ° ΠΏΡΠ°ΠΊΡΠ°. Π₯Π°ΡΠ΄Π΅ Π΄Π° ΠΏΠΎΠΊΡΡΠ°ΠΌΠΎ Π΄Π° Π½Π°ΠΏΠΈΡΠ΅ΠΌΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ ΠΊΠΎΡΠ΅ ΡΠ΅ ΡΡΠ°ΠΆΠΈΡΠΈ ΡΠ»ΠΈΡΠ½Π΅ Π΄Π°ΡΠΎΡΠ΅ΠΊΠ΅ Ρ ΡΠΏΡΠ΅ΠΌΠΈΡΡΡ:
// ΠΠ°ΠΉΠ΄Π΅ΠΌ Π²ΡΠ΅ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΡ ΠΏΠΎ ΠΌΠ°ΡΠΊΠ΅ ΡΠ°ΠΉΠ»Π°
CxList find_certs = All.FindByShortNames(new List<string> {"*.der", "*.cer", "*.pem", "*.key"}, false);
// ΠΡΠΎΠ²Π΅ΡΠΈΠΌ, Π³Π΄Π΅ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ
CxList data_used_certs = All.DataInfluencedBy(find_certs);
// Π Π΄Π»Ρ ΠΌΠΎΠ±ΠΈΠ»ΡΠ½ΡΡ
ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ - ΠΌΠΎΠΆΠ΅ΠΌ ΠΏΠΎΠΈΡΠΊΠ°ΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ, Π³Π΄Π΅ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΠ²
// ΠΠ»Ρ Π΄ΡΡΠ³ΠΈΡ
ΠΏΠ»Π°ΡΡΠΎΡΠΌ ΠΈ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΠΌΠ΅ΡΠΎΠ΄Ρ
CxList methods = All.FindByMemberAccess("*.getAssets");
// ΠΠ΅ΡΠ΅ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ² Π΄Π°ΡΡ Π½Π°ΠΌ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π»ΠΎΠΊΠ°Π»ΡΠ½ΡΡ
ΡΠ΅ΡΡΠΈΡΠΈΠΊΠ°ΡΠΎΠ² Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ
result = methods * data_used_certs;
ΠΠ°Π΄Π°ΡΠ°ΠΊ: ΠΡΠΎΠ½Π°Π»Π°ΠΆΠ΅ΡΠ΅ ΠΊΠΎΠΌΠΏΡΠΎΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΎΠΊΠ΅Π½Π° Ρ Π°ΠΏΠ»ΠΈΠΊΠ°ΡΠΈΡΠΈ
reΕ‘enje: Π§Π΅ΡΡΠΎ ΡΠ΅ ΠΏΠΎΡΡΠ΅Π±Π½ΠΎ ΠΎΠΏΠΎΠ·Π²Π°ΡΠΈ ΠΊΠΎΠΌΠΏΡΠΎΠΌΠΈΡΠΎΠ²Π°Π½Π΅ ΡΠΎΠΊΠ΅Π½Π΅ ΠΈΠ»ΠΈ Π΄ΡΡΠ³Π΅ Π²Π°ΠΆΠ½Π΅ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡΠ΅ ΠΊΠΎΡΠ΅ ΡΡ ΠΏΡΠΈΡΡΡΠ½Π΅ Ρ ΠΊΠΎΠ΄Ρ. ΠΠ°ΡΠ°Π²Π½ΠΎ, ΡΠΈΡ ΠΎΠ²ΠΎ ΡΠΊΠ»Π°Π΄ΠΈΡΡΠ΅ΡΠ΅ Ρ ΠΈΠ·Π²ΠΎΡΠ½ΠΎΠΌ ΠΊΠΎΠ΄Ρ Π½ΠΈΡΠ΅ Π΄ΠΎΠ±ΡΠ° ΠΈΠ΄Π΅ΡΠ°, Π°Π»ΠΈ ΡΠΈΡΡΠ°ΡΠΈΡΠ΅ ΡΠ΅ ΡΠ°Π·Π»ΠΈΠΊΡΡΡ. ΠΠ°Ρ Π²Π°ΡΡΡΡΡΠΈ Π¦ΠΊΠΠ ΡΠΏΠΈΡΠΈΠΌΠ°, ΠΏΡΠΎΠ½Π°Π»Π°ΠΆΠ΅ΡΠ΅ ΠΎΠ²Π°ΠΊΠ²ΠΈΡ ΡΡΠ²Π°ΡΠΈ ΡΠ΅ ΠΏΡΠΈΠ»ΠΈΡΠ½ΠΎ Π»Π°ΠΊΠΎ:
// ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ Π²ΡΠ΅ ΡΡΡΠΎΠΊΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡΡ Π² ΠΊΠΎΠ΄Π΅
CxList strings = base.Find_Strings();
// ΠΡΠ΅ΠΌ ΡΡΠ΅Π΄ΠΈ Π²ΡΠ΅Ρ
ΡΡΡΠΎΠΊ Π½ΡΠΆΠ½ΠΎΠ΅ Π½Π°ΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅. Π ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΠΎΠΊΠ΅Π½ Π² Π²ΠΈΠ΄Π΅ ΡΡΡΠΎΠΊΠΈ "qwerty12345"
result = strings.FindByShortName("qwerty12345");
ΠΠ°ΠΊΡΡΡΠ°ΠΊ
ΠΠ°Π΄Π°ΠΌ ΡΠ΅ Π΄Π° ΡΠ΅ ΠΎΠ²Π°Ρ ΡΠ»Π°Π½Π°ΠΊ Π±ΠΈΡΠΈ ΠΊΠΎΡΠΈΡΡΠ°Π½ ΠΎΠ½ΠΈΠΌΠ° ΠΊΠΎΡΠΈ ΠΏΠΎΡΠΈΡΡ ΡΠ²ΠΎΡΠ΅ ΡΠΏΠΎΠ·Π½Π°Π²Π°ΡΠ΅ ΡΠ° Π°Π»Π°ΡΠΎΠΌ Π¦Ρ Π΅ΡΠΊΠΌΠ°ΡΠΊ. ΠΠΎΠΆΠ΄Π° ΡΠ΅ ΠΈ ΠΎΠ½ΠΈ ΠΊΠΎΡΠΈ Π²Π΅Ρ Π΄ΡΠ³ΠΎ ΠΏΠΈΡΡ ΡΠ²ΠΎΡΠ° ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΏΡΠΎΠ½Π°ΡΠΈ Π½Π΅ΡΡΠΎ ΠΊΠΎΡΠΈΡΠ½ΠΎ Ρ ΠΎΠ²ΠΎΠΌ Π²ΠΎΠ΄ΠΈΡΡ.
ΠΠ°ΠΆΠ°Π»ΠΎΡΡ, ΡΡΠ΅Π½ΡΡΠ½ΠΎ ΠΏΠΎΡΡΠΎΡΠΈ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠ°ΠΊ ΡΠ΅ΡΡΡΡΠ° Π³Π΄Π΅ Π±ΠΈ ΡΠ΅ ΠΌΠΎΠ³Π»Π΅ ΠΏΡΠΈΠΊΡΠΏΠΈΡΠΈ Π½ΠΎΠ²Π΅ ΠΈΠ΄Π΅ΡΠ΅ ΡΠΎΠΊΠΎΠΌ ΡΠ°Π·Π²ΠΎΡΠ° ΠΏΡΠ°Π²ΠΈΠ»Π° Π·Π° Π¦Ρ
Π΅ΡΠΊΠΌΠ°ΡΠΊ. ΠΠ°ΡΠΎ ΡΠΌΠΎ ΠΈ ΡΡΠ²ΠΎΡΠΈΠ»ΠΈ
Π‘ΠΏΠ°ΡΠΈΠ±ΠΎ Π·Π° Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅!
ΠΠ·Π²ΠΎΡ: Π²Π²Π².Ρ Π°Π±Ρ.ΡΠΎΠΌ