Начало работы с Python в Windows для начинающих
Это пошаговое руководство для пользователей, начинающих работу с Python в Windows.
Настройка среды разработки
Для начинающих, которые не знакомы с Python, рекомендуется установить Python из Microsoft Store. При установке из Microsoft Store используется базовый интерпретатор Python3, но в дополнение к автоматическому обновлению также настраиваются параметры пути для текущего пользователя (без необходимости доступа администратора). Это особенно полезно, если вы работаете из среды образовательного учреждения или являетесь частью организации, которая ограничивает разрешения или административный доступ на компьютере.
Если вы используете Python в Windows для разработки веб-приложений, мы рекомендуем настроить среду разработки другим образом. Вместо установки непосредственно в Windows рекомендуется установить и использовать Python через подсистему Windows для Linux. Дополнительные сведения см. в статье «Начало работы с Python для веб-разработки в Windows». Если вы заинтересованы в автоматизации распространенных задач в операционной системе, ознакомьтесь с нашим руководством. Начало работы с Python в Windows для сценариев и автоматизации. Для некоторых сложных сценариев (например, необходимо получить доступ к установленным файлам Python или изменить файлы Python, создавать копии двоичных файлов или использовать библиотеки DLL Python напрямую), вам может потребоваться скачать конкретный выпуск Python непосредственно из python.org или рассмотреть возможность установки альтернативы, например Anaconda, Jython, PyPy, WinPython, IronPython и т. д. Мы рекомендуем использовать это только в том случае, если вы являетесь более продвинутым программистом Python с определенной причиной выбора альтернативной реализации.
установите Python;
Чтобы установить Python с помощью Microsoft Store, сделайте следующее:
- Перейдите в меню Пуск (значок Windows в нижнем левом углу), введите «Microsoft Store» и щелкните ссылку, чтобы открыть магазин.
- Когда магазин откроется, выберите Поиск в верхнем правом меню и введите «Python». Выберите, какую версию Python вы хотите использовать, из результатов в разделе «Приложения». Мы рекомендуем использовать самую последнюю версию, если только у вас нет причин для обратного (например, по причине согласования с версией, использованной в уже существующем проекте, над которым вы планируете работать). Определив, какую версию вы хотите установить, выберите Получить.
- После того как Python завершит процесс загрузки и установки, откройте Windows PowerShell, используя меню Пуск (значок Windows в нижнем левом углу). После открытия PowerShell введите Python —version , чтобы убедиться, что Python 3 установлен на компьютере.
- Установка Python из Microsoft Store содержит стандартный диспетчер пакетов pip. Pip позволяет устанавливать дополнительные пакеты, которые не входят в стандартную библиотеку Python, и управлять ими. Чтобы убедиться, что у вас есть pip, который можно использовать для установки пакетов и управления ими, введите pip —version .
Установка Visual Studio Code
При использовании VS Code в качестве текстового редактора или интегрированной среды разработки (IDE) вам доступны IntelliSense (помощь в завершении кода), анализ кода (помогает избежать ошибок в коде), поддержка отладки (помогает находить ошибки в коде после запуска), фрагменты кода (шаблоны для небольших повторно используемых блоков кода) и модульное тестирование (тестирование интерфейса кода с различными типами входных данных).
VS Code также содержит встроенный терминал, который позволяет открывать командную строку Python с помощью командной строки Windows, PowerShell или любой другой, создавая простой рабочий процесс между редактором кода и командной строкой.

- Чтобы установить VS Code, скачайте VS Code для Windows: https://code.visualstudio.com.
- Установив VS Code, необходимо также установить расширение Python. Для установки расширения Python можно выбрать ссылку на VS Code в Marketplace или открыть VS Code и выполнить поиск по фразе Python в меню расширений (Ctrl+Shift+X).
- Python — интерпретируемый язык, и для выполнения кода Python необходимо указать VS Code, какой интерпретатор нужно использовать. Мы рекомендуем использовать самую последнюю версию Python, если у вас нет особой причины для обратного. После установки расширения Python выберите интерпретатор Python 3, открыв палитру команд (CTRL+SHIFT+P), начните вводить команду Python: выберите интерпретатор для поиска, а затем выберите команду. Вы также можете использовать параметр Select Python Environment (Выбрать среду Python) в нижней строке состояния, если она доступна (возможно, уже отображается выбранный интерпретатор). Команда предоставляет список доступных интерпретаторов, которые VS Code может найти автоматически, включая виртуальные среды. Если нужный интерпретатор не отображается, перейдите к статье о настройке сред Python.
- Чтобы открыть терминал в VS Code, выберите Просмотр>Терминал или используйте клавиши CTRL+` (символ обратного апострофа). Терминалом по умолчанию является PowerShell.
- В окне терминала VS Code откройте Python, просто введя команду: python
- Попробуйте использовать интерпретатор Python, введя: print(«Hello World») . Python вернет фразу «Hello World».
Установка Git (необязательно)
Если вы планируете совместно работать над кодом Python с другими пользователями или размещать проект на сайте с открытым исходным кодом (например, GitHub), примите во внимание, что VS Code поддерживает управление версиями с помощью Git. Вкладка системы управления версиями в VS Code отслеживает все изменения и содержит общие команды Git (добавление, фиксация, принудительная отправка, извлечение) прямо в пользовательском интерфейсе. Сначала необходимо установить Git для включения панели управления версиями.
- Скачайте и установите Git для Windows с веб-сайта git-scm.
- В комплект входит мастер установки, который задает вам ряд вопросов о параметрах установки Git. Рекомендуется использовать все параметры по умолчанию, если у вас нет конкретной причины изменить какой-либо из них.
- Если вы никогда не использовали Git, обратитесь к руководствам по GitHub. Они помогут вам приступить к работе.
Учебник по некоторым основам работы с Python (на примере Hello World)
Python, согласно его создателю Гвидо ван Россуму, — это «язык программирования высокого уровня, и его основная философия проектирования — это удобочитаемость кода и синтаксис, позволяющий программистам выразить концепции в нескольких строках кода».
Python — интерпретируемый язык. В отличие от скомпилированных языков, в которых написанный код необходимо перевести в машинный код для выполнения процессором компьютера, код Python передается непосредственно интерпретатору и запускается напрямую. Просто введите код и запустите его. Попробуем сделать это!
- Откройте командную строку PowerShell и введите python , чтобы запустить интерпретатор Python 3. (В некоторых инструкциях указано использовать команду py или python3 , которые также подойдут.) Если вы делаете все правильно,появится командная строка с тремя символами «больше, чем» >>>.
- Существует несколько встроенных методов, позволяющих вносить изменения в строки в Python. Создайте переменную с помощью команды variable = ‘Hello World!’ . Нажмите клавишу ВВОД для создания новой строки.
- Выведите переменную с помощью команды print(variable) . Отобразится текст «Hello World!».
- Выясните, сколько символов используется для переменной строки, с помощью команды len(variable) . Будет показано, что используется 12 символов. (Обратите внимание, что пробел учитывается как символ в общей длине.)
- Преобразуйте строковую переменную в буквы верхнего регистра: variable.upper() . Теперь преобразуйте строковую переменную в буквы нижнего регистра: variable.lower() .
- Подсчитайте, сколько раз буква «l» используется в строковой переменной: variable.count(«l») .
- Найдите определенный символ в вашей строковой переменной. Давайте найдем восклицательный знак с помощью команды variable.find(«!») . Будет показано, что восклицательный знак находится в позиции 11 строки.
- Замените восклицательный знак на вопросительный знак: variable.replace(«!», «?») .
- Чтобы выйти из Python, введите exit() , quit() или нажмите клавиши CTRL+Z.

Надеемся, вам понравилось использовать некоторые из встроенных в Python методов модификации строк. Теперь попробуйте создать файл программы Python и запустить его с помощью VS Code.
Учебник по использованию Python с VS Code (на примере Hello World)
Команда VS Code составила отличный учебник по началу работы с Python с пошаговым руководством по созданию программы Hello World с помощью Python, запуску программного файла, настройке и запуску отладчика, а также установке пакетов, таких как matplotlib и numpy, для создания графического изображения в виртуальной среде.
-
Откройте PowerShell и создайте пустую папку с именем hello, перейдите в эту папку и откройте ее в VS Code:
mkdir hello cd hello code .
Создание простой игры с помощью Pygame

Pygame — это популярный пакет Python для создания игр, который позволяет учащимся изучать программирование увлекательным способом. Pygame отображает графические изображения в новом окне, поэтому метод «только командной строки» WSL не подойдет. Но если вы установили Python с помощью Microsoft Store, как описано в этом учебнике, все получится.
- После установки Python установите Pygame из командной строки (или терминала в VS Code), введя python -m pip install -U pygame —user .
- Протестируйте установку, запустив пример игры: python -m pygame.examples.aliens
- Если все в порядке, откроется окно игры. По завершении игры закройте окно.
Вот как начать написание кода собственной игры:
-
Откройте PowerShell (или командную строку Windows) и создайте пустую папку с именем bounce. Перейдите к этой папке и создайте файл с именем bounce.py. Откройте папку в VS Code:
mkdir bounce cd bounce new-item bounce.py code .
import sys, pygame pygame.init() size = width, height = 640, 480 dx = 1 dy = 1 x= 163 y = 120 black = (0,0,0) white = (255,255,255) screen = pygame.display.set_mode(size) while 1: for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() x += dx y += dy if x < 0 or x >width: dx = -dx if y < 0 or y >height: dy = -dy screen.fill(black) pygame.draw.circle(screen, white, (x,y), 8) pygame.display.flip()

Попробуйте изменить некоторые из чисел, чтобы увидеть, как они влияют на прыгающий шарик.
Дополнительные сведения о создании игр с помощью Pygame см. на сайте pygame.org.
Материалы для непрерывного обучения
Мы рекомендуем использовать следующие ресурсы, чтобы продолжить изучение разработки на Python в Windows.
- Блоги разработчиков Майкрософт: Python: ознакомьтесь с последними обновлениями обо всех вещах Python в Майкрософт.
Онлайн-ресурсы для обучения Python
- Введение в Python. Попробуйте интерактивную платформу Microsoft Learn и заработать точки опыта для выполнения этого модуля, охватывающего основы написания базового кода Python, объявления переменных и работы с входными и выходными данными консоли. Интерактивная среда песочницы предоставляет эту отличную возможность начать пользователям, у которых еще не настроена среда разработки Python.
- Обучение Python на LinkedIn.com: базовое введение в Python.
- Руководство по Python для начинающих. Полный и бесплатный учебник Python с интерактивными примерами кода (запускаемой) идеально подходит для начинающих и для тех, кто имеет предыдущий опыт.
- LearnPython.org учебники. Приступая к обучению Python без необходимости устанавливать или настраивать что-либо с помощью этих бесплатных интерактивных учебников Python от людей в DataCamp.
- Учебники по Python.org: впервые вводите читателя в основные понятия и функции языка Python и системы.
Работа с Python в VS Code
- Редактирование Python в VS Code: узнайте больше о том, как воспользоваться преимуществами автоматической компиляции VS Code и поддержки IntelliSense для Python, включая настройку их поведения. или просто отключите их.
- Linting Python: Linting — это процесс выполнения программы, которая будет анализировать код для потенциальных ошибок. Узнайте о различных формах поддержки анализа кода VS Code для Python и о том, как выполнить его настройку.
- Отладка Python: отладка — это процесс выявления и удаления ошибок из компьютерной программы. В статье по этой ссылке описывается инициализация и настройка отладки для Python с помощью VS Code, установка и проверка точек останова, присоединение локального скрипта, выполнение отладки для различных типов приложений или на удаленном компьютере, а также некоторые основные способы устранения неполадок.
- Модульное тестирование Python: описывает некоторые общие сведения о том, что означает модульное тестирование, пример пошагового руководства, включение платформы тестирования, создание и запуск тестов, отладка тестов и параметры конфигурации тестов.
Исследование защиты Wing IDE

Доброго здравия! Не удивлюсь, что Вы раньше даже не слышали об этой программе. Как и я, до того дня, когда мне пригодился Python Debugger. Да, знаю, есть pdb, но его функционал и то, как он представлен, мне совершенно не приглянулось. После непродолжительных поисков я наткнулся на этот замечательный продукт. Тут есть все, что может пригодиться в отладке ваших Python приложений (скажу сразу: данный язык я не изучал, поэтому, если какие-то неточности всплывут, просьба не ругаться).
Предостережение: повторяя действия из статьи, вы действуете на свой страх и риск!
Итак, мы начинаем.
Пациент, сразу скажу, необычный. Во-первых: он поставляется с исходниками (. ), пускай и в байт-коде; во-вторых, как это иногда бывает… в общем, увидите.
Первым делом, качаем программу (Wing IDE Professional v 5.1.4). Устанавливаем, осматриваем папку. Главный исполняемый файл находится по адресу ./bin/wing.exe. Запустим его. Ругается на отсутствие Python, поэтому установим и его. Нужен версии 2 (на данный момент это версия 2.7.9). Снова запускаем программу. На этот раз предлагает установить патчи, и перезапуститься. Так и сделаем.
Теперь вылезает окошко с запросом лицензии (т.к. у нас про-версия). Введем какую-нибудь ерунду:

Получаем следующий ответ:

Что забавно: программа нам сама говорит длину ключа (20, не учитывая дефисов), и символы, с которых он должен начинаться. В принципе, с этого уже можно и начать исследовать защиту — найдем эту строчку в файлах программы.
Дальше — интереснее. Результат поиска нашелся в файле ./bin/2.7/src.zip!
Да-да. Все действительно так: программа идет с исходниками. В них-то нам и придется копаться.
Этап два: роемся в исходниках
Включим в Total Commander поиск по архивам, и найдем ту строку снова. Строка лежит в файле: ./bin/2.7/src.zip/process/wingctl.pyo. PYO-файлы представляют из себя бинарники с «оптимизированным» байт-кодом Python.
К нашему счастью, для Питона существует парочка декомпиляторов байт-кода. Чтобы не утруждать Вас поисками, дам ссылки на те, которые мне пригодились:
- Easy Python Decompiler (EPD) — оболочка, в которой зашиты два декомпилятора (Uncompyle2 и Decompyle++);
- Форк Uncompyle2 — иногда распаковывает то, что не могут распаковать другие.

Дожидаемся окончания процесса, и идем осматривать что получилось. А получились на выходе декомпилированные файлы с окончанием _dis. Их мы переименуем в .py. Все бы хорошо, но, выясняется, что имеются также файлы с окончанием _dis_failed, что говорит о том, что эти файлы декомпилятор не осилил. К счастью, файл только один: edit/editor.pyo_dis_failed
Попробуем на него натравить Decompyle++… Та же беда. Не зря я дал ссылку на запасной декомпилятор, т.к. именно он и сделал то, что не удалось другим. Теперь удалим все pyo/pyc файлы из папки src, а .py*_dis переименуем в .py.
Далее повторим все вышеописанное для архива opensource.zip, распаковав его в соседнюю одноименную папку. Архив external.zip я решил не трогать, т.к., осмотрев его, можно увидеть, что там лежат библиотеки, которые можно установить отдельно для нашего Питона. Так и сделаем:
pip install docutils
Этапы три и четыре: собственно исходный код. Отладка.
Порыскав по питоновским скриптам, я наткнулся на файлик wing.py в корне папки с программой. И, первый же комментарий нам подсказывает:
# Top level script for invoking Wing IDE. If --use-src is specified # as an arg, then the files in WINGHOME/src, WINGHOME/external, # WINGHOME/opensource will be used; otherwise, the files in the version # specific bin directory will be used if it exists.
В двух словах: если скрипту дать параметр —use-src, то при запуске будут использоваться исходники из папок src, external, opensource корневого каталога с Wing IDE (а не со скриптом).
Заглянув в корневую папку, я обнаружил еще одну папку src, и .py-файлы в ней. Подкинем их в нашу папку src, с перезаписью (здесь все таки оригиналы, а не декомпилированные файлы).
Теперь все три папки (указанные чуть выше), скопируем в корневой каталог программы. Попробуем подебажить…
Запускаем Wing IDE, и открываем в ней файл wing.py из каталога bin. Далее в меню Debug -> Debug Environment. в поле параметров указываем —use-src. Теперь стартанем дебаггер (клавиша F5). Если все махинации с копированиями папок прошли успешно, мы получим вторую копию запущенной Wing IDE. Прекрасно!
Далее: откроем в родительском Wing IDE тот файлик, в котором мы нашли ранее строку о плохом license id (wingctl.py), и поставим бряку до этого сообщения:

В отлаживаемом Wing IDE зайдем в меню Help -> Enter License. , и введем ключик согласно правилам (помните?: 20 символов, при том, первый из набора [‘T’, ‘N’, ‘E’, ‘C’, ‘1’, ‘3’, ‘6’]):

Жмем Continue и попадаем на бабки бряку. Первая же интересная функция: abstract.ValidateAndNormalizeLicenseID(id). Зайдем в нее по F7. Там еще одна: __ValidateAndNormalize(id). Зайдем и в нее.
Первая проверка на валидность:
for c in code: if c in ('-', ' ', '\t'): pass elif c not in textutils.BASE30: code2 += c badchars.add(c) else: code2 += c
Видим, что от нас требуют, чтобы символы License ID принадлежали набору textutils.BASE30:
BASE30 = '123456789ABCDEFGHJKLMNPQRTVWXY'
Вроде других проверок в __ValidateAndNormalize(id) нет. Исправляем введенный нами идентификатор и повторяем снова. Проверку на первый символ мы уже прошли:
if len(id2) > 0 and id2[0] not in kLicenseUseCodes: errs.append(_('Invalid first character: Should be one of %s') % str(kLicenseUseCodes))
А вот и второй символ:
if len(id2) > 1 and id2[1] != kLicenseProdCode:
kLicenseProdCodes = kLicenseProdCode = kLicenseProdCodes[config.kProductCode]
Т.к. у нас Professional версия, то второй символ должен быть N — исправляем, и возвращаемся. abstract.ValidateAndNormalizeLicenseID(id) прошелся без ошибок. Прекрасно. Упс:
if len(errs) == 0 and id[0] == 'T': errs.append(_('You cannot enter a trial license id here'))
Фиксим (я выбрал E), и продолжаем. Пробежавшись глазами ниже по коду, ничего дополнительно к предыдущим проверкам я не обнаружил, поэтому смело отпустил отладку далее по F5. Новое окно:

Вводим случайный текст, получаем сообщение об ошибке (опять 20 символов, и начинаться код активации должен с AXX), находим его в файлах, ставим бряку:

Первая функция проверки: abstract.ValidateAndNormalizeActivation(act). В ней снова проверка на принадлежность BASE30. Проверка на префикс, которую мы уже прошли:
if id2[:3] != kActivationPrefix: errs.append(_("Invalid prefix: Should be '%s'") % kActivationPrefix)
Следующее интересное место:
err, info = self.fLicMgr._ValidateLicenseDict(lic2, None) if err == abstract.kLicenseOK:
Заходим в self.fLicMgr._ValidateLicenseDict. Тут формируется хэш от лицензии:
lichash = CreateActivationRequest(lic) act30 = lic['activation'] if lichash[2] not in 'X34': hasher = sha.new() hasher.update(lichash) hasher.update(lic['license']) digest = hasher.hexdigest().upper() lichash = lichash[:3] + textutils.SHAToBase30(digest) errs, lichash = ValidateAndNormalizeRequest(lichash)
Если посмотреть на содержимое lichash после выполнения этого блока, можно заметить, что текст ее похож на request code, отображаемый в окошке ввода кода активации, хотя несколько цифр и отличается. Ладно, будем думать, что здесь имеют место быть какие-то рандомные части, не влияющие на активацию (что, кстати, далее подтвердится!).
Далее из кода активации отрезают три первых символа, убирают дефисы, преобразовывают в BASE16, и дополняют нулями, если нужно:
act = act30.replace('-', '')[3:] hexact = textutils.BaseConvert(act, textutils.BASE30, textutils.BASE16) while len(hexact) < 20: hexact = '0' + hexact
И вот оно, самое интересное:
valid = control.validate(lichash, lic['os'], lic['version'][:lic['version'].find('.')], hexact)
Какой-то control вызывает функцию validate, передавая ему lichash (request code), имя операционной системы, для которой делается ключ, версию программы, и преобразованный код активации. Почему я остановил на этом месте внимание? Дело в том, что этот control — это pyd-файл (в чем можно убедиться, добавив имя объекта в watch, и глянув поле __file__), которые представляют из себя обычные DLL с одной экспортируемой функцией (не validate), которая дает Питону информацию о том, что она умеет делать. Ну что же, давайте посмотрим на нее со стороны декомпилятора Hex Rays…
Этап пять: это уже не Python
Затащим в IDA Pro наш control (ctlutil.pyd) и посмотрим на экспортируемую функцию initctlutil:
int initctlutil()
off_10003094 представляет из себя структуру, в которой указаны имена и адрес экспортируемых методов. Вот и наш validate:
.data:100030A4 dd offset aValidate ; "validate" .data:100030A8 dd offset sub_10001410
Из всего кода, который содержит процедура sub_10001410 самым интересным выглядит этот:
if ( sub_10001020(v6, &v9) || strcmp(&v9, v7) )
Зайдем и в sub_10001020 тоже. Интересно было бы не на глаз давать имена переменным, а подебажить и обозвать их как следует. Так и сделаем. Настроим отладчик IDA Pro:

Думаю, все понятно из скриншота: мы указали приложение, которое в итоге будет подгружать наш pyd-файл.
Теперь ставим бряк на начало sub_10001020, и начинаем заглядывать в переменные и входные параметры. После непродолжительного процесса отладки приходим к такому вот листингу функции:
Код функции convert_reqest_key
int __usercall convert_reqest_key@(char *version@, const char *platform@, const char *activation_key, char *out_key) < unsigned int len_1; // edi@1 const char *platform_; // esi@1 char *version_; // ebx@1 int ver_; // eax@2 signed int mul1; // ecx@3 signed int mul2; // esi@3 signed int mul3; // ebp@3 bool v11; // zf@15 const char *act_key_ptr; // eax@31 char v13; // dl@32 const char *act_key_ptr_1; // eax@35 unsigned int len_2; // ecx@35 char v16; // dl@36 const char *act_key_ptr_2; // eax@39 unsigned int len_3; // ecx@39 char v19; // dl@40 int P3_; // ebx@42 const char *act_key_ptr_3; // eax@45 unsigned int len_4; // ecx@45 char v23; // dl@46 unsigned int P4; // ebp@47 signed int mul4; // [sp+10h] [bp-18h]@0 unsigned int P3; // [sp+14h] [bp-14h]@1 unsigned int P2; // [sp+18h] [bp-10h]@1 unsigned int P1; // [sp+1Ch] [bp-Ch]@1 len_1 = 0; platform_ = platform; version_ = version; P1 = 0; P2 = 0; P3 = 0; if ( !strcmp(platform, aWindows) ) < ver_ = (unsigned __int8)*version_; if ( *version_ == '2' ) < mul1 = 142; mul2 = 43; mul3 = 201; mul4 = 38; goto LABEL_31; >if ( (_BYTE)ver_ == '3' ) < mul1 = 23; mul2 = 163; mul3 = 2; mul4 = 115; goto LABEL_31; >if ( (_BYTE)ver_ == '4' ) < mul1 = 17; mul2 = 87; mul3 = 120; mul4 = 34; goto LABEL_31; >> else if ( !strcmp(platform_, aMacosx) ) < ver_ = (unsigned __int8)*version_; if ( *version_ == '2' ) < mul1 = 41; mul2 = 207; mul3 = 104; mul4 = 77; goto LABEL_31; >if ( (_BYTE)ver_ == '3' ) < mul1 = 128; mul2 = 178; mul3 = 104; mul4 = 95; goto LABEL_31; >if ( (_BYTE)ver_ == '4' ) < mul1 = 67; mul2 = 167; mul3 = 74; mul4 = 13; goto LABEL_31; >> else < v11 = strcmp(platform_, aLinux) == 0; LOBYTE(ver_) = *version_; if ( v11 ) < if ( (_BYTE)ver_ == '2' ) < mul1 = 48; mul2 = 104; mul3 = 234; mul4 = 247; goto LABEL_31; >if ( (_BYTE)ver_ == '3' ) < mul2 = 52; mul1 = 254; mul3 = 98; mul4 = 235; goto LABEL_31; >if ( (_BYTE)ver_ == '4' ) < mul1 = 207; mul2 = 45; mul3 = 198; mul4 = 189; goto LABEL_31; >> else < if ( (_BYTE)ver_ == '2' ) < mul1 = 123; mul2 = 202; mul3 = 97; mul4 = 211; goto LABEL_31; >if ( (_BYTE)ver_ == '3' ) < mul1 = 127; mul2 = 45; mul3 = 209; mul4 = 198; goto LABEL_31; >if ( (_BYTE)ver_ == '4' ) < mul2 = 4; mul1 = 240; mul3 = 47; mul4 = 98; goto LABEL_31; >> > if ( (_BYTE)ver_ == '5' ) < mul1 = 7; mul2 = 123; mul3 = 23; mul4 = 87; >else < mul1 = 0; mul2 = 0; mul3 = 0; >LABEL_31: act_key_ptr = activation_key; do v13 = *act_key_ptr++; while ( v13 ); if ( act_key_ptr != activation_key + 1 ) < do P1 = (P1 * mul1 + activation_key[len_1++]) & 0xFFFFF; while ( len_1 < strlen(activation_key) ); >act_key_ptr_1 = activation_key; len_2 = 0; do v16 = *act_key_ptr_1++; while ( v16 ); if ( act_key_ptr_1 != activation_key + 1 ) < do P2 = (P2 * mul2 + activation_key[len_2++]) & 0xFFFFF; while ( len_2 < strlen(activation_key) ); >act_key_ptr_2 = activation_key; len_3 = 0; do v19 = *act_key_ptr_2++; while ( v19 ); if ( act_key_ptr_2 != activation_key + 1 ) < P3_ = 0; do P3_ = (P3_ * mul3 + activation_key[len_3++]) & 0xFFFFF; while ( len_3 < strlen(activation_key) ); P3 = P3_; >act_key_ptr_3 = activation_key; len_4 = 0; do v23 = *act_key_ptr_3++; while ( v23 ); P4 = 0; if ( act_key_ptr_3 != activation_key + 1 ) < do P4 = (P4 * mul4 + activation_key[len_4++]) & 0xFFFFF; while ( len_4 < strlen(activation_key) ); >sprintf(out_key, a_5x_5x_5x_5x, P1, P2, P3, P4); return 0; >
А место вызова этой функции приобретает следующий вид:
if ( convert_reqest_key(version, platform, request_key, out_key) || strcmp(out_key, act_key_hash) )
Из этого всего можно сделать вывод, что request code преобразовывается с помощью функции convert_reqest_key и сравнивается затем с тем преобразованным кодом активации. Помните то преобразование?
Далее из кода активации отрезают три первых символа, убирают дефисы, преобразовывают в BASE16, и дополняют нулями, если нужно
- Дать выполниться функции преобразования convert_reqest_key;
- На месте выполнения strcmp высмотреть содержимое out_key;
- Убрать лишние нули в начале out_key;
- Преобразовать out_key обратно в BASE30;
- Дописать в начало получившейся строки убранные три символа (AXX);
- По желанию навтыкать дефисов через каждые пять символов.
print("AXX" + textutils.BaseConvert("FCBCFEFD2FF684FA6A4F", textutils.BASE16, textutils.BASE30))
На выходе получил ключик:
wingide — 2015/05/24 04:03:47 — AXX3Q6BQHKQ773D24P58
Введя его в поле ввода ключа активации, получил заветное:

ИТОГИ
Как видите, процесс взлома не столько сложный, сколько интересный получился! Исследовать свои же исходники в скомпилированном их варианте… это, конечно, забавно.
Не знаю, зачем авторы приложили к своей программе ее исходники (хоть и в большинстве своем, в виде байт-кода). Но, думаю, вы понимаете, что так делать не стоит!
Wing Python 7, IDE для Python, доступная через Snap

В следующей статье мы рассмотрим Wing Python IDE, которая в версии 7 уже доступна в виде пакета оснастки для установки в Ubuntu. Это IDE, разработанная Wingware и предназначенная для языка программирования Python. Wing Python IDE 7 теперь можно легко установить через пакет Snap в Ubuntu 16.04, Ubuntu 18.04, Ubuntu 18.10 и Ubuntu 19.04. Эта интегрированная среда разработки (IDE) была разработана для сокращения времени разработки и отладки, а также предлагает хорошую помощь при кодировании или обнаружении ошибок в коде. Он стремится облегчить навигацию и понимание кода Python.
Официальные наборы снимков Wing 7 Они доступны в трех разных версиях: Крыло Pro, который является коммерческой версией со всеми доступными функциями. Эта версия особенно подходит для профессиональных программистов. Мы также найдем доступные Крыло Персональное, Который является Бесплатная версия и что в нем отсутствуют некоторые функции, доступные в коммерческой версии. Это ориентировано на студентов и болельщиков. Последняя доступная версия Крыло 101, Это Бесплатная версия очень упрощенный, предназначен для обучения начинающих программистов.
В этой новой версии Wing 7 имеет улучшения по сравнению с предыдущими версиями. Среди них мы можем найти улучшенную систему контроль предупреждений и качества кода.

Теме статьи:
Wing, среда разработки, предназначенная для Python
В эту новую версию также добавлены новый фрейм данных, простая встроенная визуализация данных отладки с помощью Shift-Space или улучшенная визуализация данных стека. Мы также найдем новые вызовы для поиска и других функций навигации, некоторые улучшенные закладки, расширенный режим презентации и т. Д.
Посмотреть все разделы
Некоторые общие характеристики Wing Python 7

- Через некоторые функции будет легче увидеть указанный текст.
- У нас будет четыре новые цветовые палитры; Дракула, Позитроник, Вишневый цвет и Солнечная сталь.
- Улучшения в просмотрщике массивов и вьювере кадров.
- Wing включает шрифты для улучшить парсинг стандартной библиотеки Python и некоторые сторонние модули.
- Это было улучшенный отладчик.
- Крыло 7 добавляет меню настройки высокого уровня в правом верхнем углу окна. Это меню призвано упростить переключение в темный режим, изменение настроек клавиатуры для эмуляции редактора, отображение и скрытие панели инструментов и внести другие общие изменения конфигурации.
- Из меню конфигурации мы также можем использовать режим презентации. Это расширяет пользовательский интерфейс на предварительно настроенный коэффициент масштабирования, чтобы сделать его более заметным во время собраний и разговоров. Кроме того, он также поддерживает экран с высоким разрешением.
- Добавлен новый менеджер обновлений. После первоначальной установки Wing 7 можно обновить до более новых версий без загрузки установщика.
- Улучшено восстановление визуального статуса в редакторах для файлов, которые изменяются вне поддержки Wing.
- Крыло сейчас работает на Qt 5.10.

Это лишь некоторые особенности новой версии. Они могут проверить все особенности последней версии этой IDE в Ваш сайт.
Установите Wing Python как мгновенный пакет
к Ubuntu 18.04 и вышеВсе, что вам нужно сделать, это найти и установить пакет Wing snap из Опция программного обеспечения Ubuntu:

Если вы используете Ubuntu 16.04сначала откройте терминал (Ctrl + Alt + T) и выполните следующую команду, чтобы сначала установите snapd.
sudo apt install snapd
После установить Personal Wing 7 используя команду:
sudo snap install --classic wing-personal7
Заменяет wing-personal7 в последней команде с wing7 для установки Wing Pro или крыло-101-7 установить самую простую версию из всех.
деинсталляция
Чтобы удалить эту IDE для Python, используйте опцию программного обеспечения Ubuntu или запустите в терминале (Ctrl + Alt + T):
sudo snap remove wing-personal7
В этой команде вы также должны заменить wing-personal7 на wing7 или wing-101-7 в зависимости от установленной вами версии.
Для получения дополнительной информации о том, как работать с этой IDE, вы можете обратитесь к документации которые разработчики делают доступными для пользователей на своих веб-сайтах. Эта же справка также будет доступна через меню справки, которое сопровождает программу.
Содержание статьи соответствует нашим принципам редакционная этика. Чтобы сообщить об ошибке, нажмите здесь.
Полный путь к статье: Убунлог » Ubuntu » Wing Python 7, IDE для Python, доступная через Snap
Будьте первым, чтобы комментировать
Установка pip — Python: Настройка окружения
Если вы устанавливали Python на macOS или Windows по нашим рекомендациям, то pip будет установлен вместе с интерпретатором. На Ubuntu его нужно поставить отдельно с помощью команды:
sudo apt update sudo apt install python3-pip
Запуск pip
Можно запускать pip непосредственно командой pip . Но лучше воспользоваться более длинной командой, которая гарантированно вызовет самую свежую установленную версию pip для нужной версии Python.
Итак, вызываем pip:
-m pip --version pip 20.0.2 from /usr/lib/python3/dist-packages/pip (python 3.8)
При показе своей версии pip также сообщает, куда установлен он сам и на какой версии Python он запущен.
Обратите внимание на структуру команды, которую мы вызывали. Эта команда означает « python3 , запусти модуль -m с именем pip как программу с параметром --version ».
Если вы в дальнейшем увидите в документации к pip команды, вроде pip help , то смело вызывайте python3 -m pip help — результат будет тот же самый.
Установка первого пакета
Попробуем установить первый пакет. Для примера возьмем пакет cowsay , который мы установим сразу в пользовательское окружение.
Причин для установки туда есть несколько:
- Мы не помешаем своими пакетами другим пользователям системы
- Нам не потребуются права администратора
- Мы не поломаем операционную систему случайной установкой более свежего пакета, чем того требует система (особенно это важно в Linux, где многие системные задачи решаются с помощью Python)
Итак, установим cowsay:
Пакет установился и стал доступен интерпретатору. Теперь мы видим, что он делает — печатает корову, которая говорит заданную пользователем фразу.
Флаг --user команды pip install сообщает pip, что мы хотим установить пакет в глобальное окружение текущего пользователя. Если этот флаг не указать, то pip установит пакет в общесистемное окружение. Старайтесь не делать так, чтобы не мешать другим пользователям системы.
Программа pip, точки входа и PATH
Как мы увидели выше, установленный пакет cowsay может быть использован из кода. Но этот пакет имеет еще и точку входа.
Точки входа — это готовые к исполнению программы, содержащиеся в пакете. Если у пакета есть точки входа, то pip создаст для каждой специальный исполняемый скрипт, который позволит удобно запускать программу из командной оболочки.
При этом нужно обращать внимание на путь до директории, в которую pip помещает такие скрипты — например, на Linux это ~/.local/bin . Этот путь нужно добавить в PATH . Проверьте содержимое PATH , и если путь прописан правильно, то скрипт для cowsay должен работать так:
Точка входа — это всегда Python-модуль, пригодный для запуска в роли программы. Такие программы называют еще исполняемыми файлами — позже мы рассмотрим, как такие делать. Создаваемые pip'ом скрипты вызывают python3 -m имя_модуля , поэтому установленный нами cowsay можно запускать точно так же:
Всегда свежий pip
Как вы могли уже догадаться, сам pip — это тоже точка входа одноименного пакета pip, поэтому мы его запускаем командой python3 -m pip .
Еще pip нужно периодически обновлять. Вы можете установить свежий pip в пользовательское окружение с помощью такой команды:
-m pip install --user --upgrade pip
Открыть доступ
Курсы программирования для новичков и опытных разработчиков. Начните обучение бесплатно
- 130 курсов, 2000+ часов теории
- 1000 практических заданий в браузере
- 360 000 студентов
Наши выпускники работают в компаниях: