Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
gha-lab-b1fe4918c0 — Авторизованная исследовательская лаборатория безопасности: воспроизведение CVE-2025-32958 (GHSA-8c7v-vccv-cx4q) — GITHUB_TOKEN, утёкший в артефакты workflow из-за remoteBuild.yml проекта Adept (снимок AdeptLanguage/Adept @ 6a64554) | Kitploit
Инструменты/GitHubGitHub/pvharmo2/gha-lab-b1fe4918c0
Анализ уязвимостейБезопасность Цепочки ПоставокОбучение и ОбразованиеПодобранные Ресурсы
GitHubpvharmo2/gha-lab-b1fe4918c0

gha-lab-b1fe4918c0

Авторизованная исследовательская лаборатория безопасности: воспроизведение CVE-2025-32958 (GHSA-8c7v-vccv-cx4q) — GITHUB_TOKEN, утёкший в артефакты workflow из-за remoteBuild.yml проекта Adept (снимок AdeptLanguage/Adept @ 6a64554)

Репозиторий
9 ч 8 мин назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Автоматизированный исследовательский артефакт — не вышестоящий проект.

Этот репозиторий — одноразовая лаборатория, созданная автоматизированной системой для магистерской диссертации в Université Laval по воспроизведению опубликованных уязвимостей в рабочих процессах GitHub Actions. Это дословный снимок AdeptLanguage/Adept на коммите 6a6455463213dabe52d49ceaaebd1f13cfee9018 (2025-04-01), распространённый под собственной лицензией этого проекта, файл которой включён без изменений в этот снимок.

Вышестоящий проект не участвует, никогда не является целью, а изучаемая здесь уязвимость уже публична. Каждый секрет и переменная в этом репозитории — случайно сгенерированное фиктивное значение — никаких реальных учётных данных здесь нет. Ссылки на действия и образы раннеров закреплены на те значения, которые они имели на 2025-04-01; см. pinning.md в выводе системы для каждого изменения, внесённого в снимок.

Вопросы или возражения: [email protected]


Adept

Молниеносно быстрый язык для программирования общего назначения.

Скачать Adept v2.7 для Windows

Скачать Adept v2.7 для MacOS

Скачать расширения кросс-компиляции Adept v2.7

Ресурсы

Документация Adept v2.7

Языковой сервер Adept v2.7

Стандартная библиотека Adept v2.7

Adept v2.7: работа с собственными и внешними библиотеками

Homebrew Tap для Adept v2.7 на MacOS

Плагин Vim для Adept v2.7

Минимальная подсветка синтаксиса Vim для Adept v2.7

Подсветка синтаксиса VSCode для Adept v2.7

Языковой сервер VSCode для Adept v2.7

Подсветка синтаксиса Sublime Text для Adept v2.7

Подсветка синтаксиса Geany для Adept v2.7

Использование из командной строки

adept [filename] [options]

  • filename — по умолчанию 'main.adept'
  • options — дополнительные параметры компилятора

При желании можно использовать adept2-7 вместо adept, если установлено несколько версий.

Базовая функциональность

Hello World

root@kitploit:~
import basics

func main {
    print("Hello World!")
}

Переменные

root@kitploit:~
import basics

func main {
    name String = "Alan"
    age int = 36
    height uint = 189
    
    print("Name is " + name)
    print("Age is " + age)
    print("Height is " + height + " cm")
}

Функции

root@kitploit:~
import basics

func main {
    greet("Alice")
}

func greet(name String) {
    print("Hello " + name)
}

Records

root@kitploit:~
import basics

record Person (name String, age int) {
    func print {
        print(this.name + " is " + this.age + " years old")
    }
}

func main {
    Person("John Smith", 36).print()
}

Structs

root@kitploit:~
import basics

struct Configuration (
    filename String,
    numBatteries int,
    numPorts int,
){
    constructor(filename String) {
        this.filename = filename.commit()
        this.numBatteries = 4
        this.numPorts = 10
    }
}

func toString(config Configuration) String {
    return config.filename + ":" + config.numBatteries + ":" + config.numPorts
}

func main {
    print(Configuration("settings.config"))
}

Указатели

root@kitploit:~
import basics

func main {
    x, y int = 0

    x++
    y++
    addOneTo(&x)

    print("x = " + x)
    print("y = " + y)
}

func addOneTo(pointerToNumber *$T~__number__) {
    (*pointerToNumber)++
}

Условные операторы и циклы

root@kitploit:~
import basics

func main {
    name String = scan("What is your name? ")
    age int = scanInt("How old are you? ")
    
    // If conditional
    if name == "Isaac" {
        print("Hello Isaac :)")
    } else {
        print("Nice to meet you " + name)
    }
    
    // Unless conditional
    unless age > 21 {
        print("You are too young to drink")
    }
    
    // While loops
    while age < 18 {
        print("**birthday**")
        age += 1
    }
    
    print("You are now old enough to smoke")
    
    // Until loops
    until age >= 21 {
        print("**birthday**")
        age += 1
    }
    
    print("You are now old enough to drink")
}

Списки

root@kitploit:~
import basics

record Invitation (to, from String, priority int)

func main {
    invites <Invitation> List
    invites.add(Invitation("Isaac", "Peter", 4))
    invites.add(Invitation("Mr. Smith", "Mrs. Smith", 12))
    invites.add(Invitation("James", "Paul", 3))

    each Invitation in invites {
        printf("invites[%zu] = %S\n", idx, toString(it))
    }
}

func toString(invite Invitation) String {
    return invite.to + " invited " + invite.from + " with priority " + invite.priority
}

Владение

root@kitploit:~
/*
    Для значений, использующих управление памятью на основе владения
    (например, String, List, Grid)
    
    мы должны передавать владение, если хотим сохранить их
    живыми дольше, чем область видимости их владельца
*/

import basics

func main {
    everyone <String> List = getEveryoneAttending()
    
    each fullname String in everyone {
        print("=> " + fullname)
    }
}

func getEveryoneAttending() <String> List {
    everyone <String> List

    person1 String = getFullnameReturnImmediately("Alice", "Golden")
    person2 String = getFullnameStoreAndThenLaterReturn("Bob", "Johnson")

    // Передаём владение строками, хранящимися в 'person1' и 'person2',
    // под управление списка
    everyone.add(person1.commit())
    everyone.add(person2.commit())

    // Передаём владение списком вызывающему коду
    return everyone.commit()
}

func getFullnameReturnImmediately(firstname, lastname String) String {
    // '.commit()' здесь не обязателен
    return firstname + " " + lastname
}

func getFullnameStoreAndThenLaterReturn(firstname, lastname String) String {
    fullname String = firstname + " " + lastname
    
    // Владение результатом удерживает 'fullname',
    // поэтому мы должны передать владение вызывающему коду,
    // чтобы сохранить его живым после возврата из этой функции

    // '.commit()' здесь обязателен
    return fullname.commit()
}

Метки циклов

root@kitploit:~
import basics

func main {
    print(makeNumericSkewer())
    print(makeAlphabetSkewer())
}

func makeNumericSkewer String {
    // Пример вывода: `0-2-4-6-8-10-13-16-19-22-25-28`

    skewer String

    while continue preparing {
        skewer.append(skewer.length)

        if skewer.length < 30 {
            skewer.append("-")
            continue preparing
        }
    }

    return skewer.commit()
}

func makeAlphabetSkewer String {
    // Пример вывода: `a-c-e-g-i-k-m-o-q-s-u-w-y`

    skewer String

    while still_making_skewer : skewer.length < 30 {
        skewer.append('a'ub + skewer.length as ubyte)

        if skewer[skewer.length - 1] == 'y'ub {
            break still_making_skewer
        }

        skewer.append("-")
    }

    return skewer.commit()
}

Именованные выражения и глобальные переменные

root@kitploit:~
import basics

// Будет пересчитываться при каждом использовании
define GREETING = "Welcome"
define STRANGER_NAME = "guest"
define WELCOME_MESSAGE = GREETING + " " + STRANGER_NAME + "!"

// Будет вычислено только один раз при запуске программы
ARCH_STRING String = #get __arm64__ ? "arm64" : #get __x86_64__ ? "x86_64" : "other"

func main {
    print(WELCOME_MESSAGE)
    print("You are using architecture: " + ARCH_STRING)
}

Низкоуровневое динамическое выделение памяти

root@kitploit:~
import 'sys/cstdio.adept'
import 'sys/cstdlib.adept'
import 'sys/cstring.adept'

func main int {
    withMallocAndFree('Will', 'Johnson')
    withNewAndDelete('John', 'Wilson')
    return 0
}

func withMallocAndFree(firstname, lastname *ubyte) void {
    // Ручная работа с C-строками с использованием malloc, free и sprintf
    
    fullname *ubyte = malloc(strlen(firstname) + strlen(lastname) + 2)
    defer free(fullname)

    sprintf(fullname, '%s %s', firstname, lastname)
    printf('Fullname is: %s\n', fullname)
}

func withNewAndDelete(firstname, lastname *ubyte) void {
    // Ручная работа с C-строками с использованием new, delete и sprintf
    
    fullname *ubyte = new ubyte * (strlen(firstname) + strlen(lastname) + 2)
    defer delete fullname

    sprintf(fullname, '%s %s', firstname, lastname)
    printf('Fullname is: %s\n', fullname)
}

Аргументы командной строки

root@kitploit:~
import basics

func main(argc int, argv **ubyte) {
    // В стиле C
    // Выводим каждый указанный аргумент
    each *ubyte in [argv, argc] {
        printf("args[%zu] = %s\n", idx, argv[idx])
    }

    // Собираем аргументы в список строк
    args <String> List = Array(argv, argc).map(func &stringConstant)

    // В стиле Adept
    // Выводим аргументы снова, но более аккуратно
    each String in args {
        printf("args[%zu] = %S\n", idx, it)
    }

    if args.contains("-h") || args.contains("--help") {
        print("You asked for help, but I have no help to show you")
    }
}

Указатели на функции

root@kitploit:~
import basics
import random

func sum(a, b int) int = a + b
func mul(a, b int) int = a * b

func main {
    randomize()

    doCalculation func(int, int) int = null
    
    if normalizedRandom() < 0.5 {
        doCalculation = func &sum
    } else {
        doCalculation = func &mul
    }

    print("Result of 8 and 13 is " + doCalculation(8, 13))
}

Операторы defer

root@kitploit:~
import basics

func main {
    defer print("I will be printed last")
    defer print("I will be printed second")
    defer print("I will be printed first")
    print("I will be printed before anyone else")
}

Ключевое слово undef

root@kitploit:~
import 'sys/cstdio.adept'

func main(argc int, argv **ubyte) int {
    // Будет инициализировано значением 0
    zero_value int

    // Будет инициализировано значением null
    null_pointer *ulong

    // Будет неопределённым (останется неинициализированным)
    undefined_value int = undef
    undefined_pointer *ulong = undef

    printf('%d == 0, %d == ?\n', zero_value, undefined_value)
    printf('%p == null, %p == ?\n', null_pointer, undefined_pointer)
    return 0
}

Директивы pragma

root@kitploit:~
pragma compiler_version '2.7'
pragma project_name 'my_cool_project'
pragma optimization aggressive

import basics

func main {
    print("Hello World")
}

Примитивные типы

root@kitploit:~
func main {
    // 8-битные типы
    a_bool   bool   = false
    a_byte   byte   = 0sb
    a_ubyte  ubyte  = 0ub

    // 16-битные типы
    a_short  short  = 0ss
    a_ushort ushort = 0us

    // 32-битные типы
    an_int   int    = 0si
    a_uint   uint   = 0ui
    a_float  float  = 0.0f

    // 64-битные типы
    a_long   long   = 0sl
    a_ulong  ulong  = 0ul
    a_double double = 0.0d
    a_usize  usize  = 0uz

    // 64-битный или 32-битный в зависимости от системы
    a_ptr    ptr    = null
    int_ptr  *int   = null

    return 0
}

Приведение типов

root@kitploit:~
import basics

func main {
    value int = 1234
    
    // x as Type   эквивалентно   cast Type x
    
    // Приведение примитивных значений
    result1 double = value as double
    result2 double = cast double value
    
    // Приведение произвольных указателей
    result3 *uint = &value as *uint
    result4 *uint = cast *uint &value
    
    // Приведение результата выражения
    result5 usize = (value + 1) as usize
    result6 usize = cast usize (value + 1)
}

Информация о типах во время выполнения

root@kitploit:~
import basics

func main {
    print("Every type used in this program: ")
    
    each *AnyType in [__types__, __types_length__] {
        print(" => " + stringConstant(it.name))
    }
    
    print("...")
    print("Each member of type 'String':")
    
    string_type *AnyStructType = typeinfo String as *AnyStructType
    repeat string_type.length {
        field_name String = stringConstant(string_type.member_names[idx])
        field_type String = stringConstant(string_type.members[idx].name)
        print(" => " + field_name + " " + field_type)
    }
}

Условная компиляция

root@kitploit:~
#default should_fake_windows   false
#default should_fake_macos     false
#default enable_secret_feature false

#if enable_secret_feature
    #print "Doing super secret feature stuff..."
    #set should_fake_windows true
    #set should_fake_macos   true
#end

import basics

func main {
    #if should_fake_windows && should_fake_macos
        print("Hello from Windows and MacOS???")
    #elif __windows__ || should_fake_windows
        print("Hello on Windows!")
    #elif __macos__ || should_fake_macos
        print("Hello on MacOS!")
    #end
}

Полиморфизм

root@kitploit:~
import basics

func sum(a, b $T) $T = a + b

func main {
    print(sum(8, 13))
    print(sum(3.14159, 0.57721))
    print(sum(' 'ub, '!'ub))
    print(sum(true, false))
    print(sum("Hello", " World"))
}

Полиморфные структуры

root@kitploit:~
import basics

record <$T> Couple (first, second $T)

func main {
    coord <int> Couple
    coord.first = 3
    coord.second = 4
    print("Distance is: " + coord.distance())
    
    socks <String> Couple = Couple("Left Sock", "Right Sock")
    print(socks)
}

func toString(couple <$T> Couple) String {
    return toString(couple.first) + " " + toString(couple.second)
}

func distance(this *<$T~__number__> Couple) $T {
    const x double = cast double this.first
    const y double = cast double this.second
    return sqrt(x * x + y * y) as $T
}

Отложенное объявление методов

root@kitploit:~
import basics

record Unit (hp int) {
    func damage(atk int) {
        this.hp -= atk
    }
}

func heal(this *Unit, pts int) {
    this.hp += pts
}

func main {
    unit Unit = Unit(10)
    unit.damage(7)
    unit.heal(4)
    print("Remaining HP: " + unit.hp)
}

Встроенные переменные циклов

root@kitploit:~
import basics

func main {
    my_integers <int> List
    
    // Добавляем числа 0..9 включительно в список
    repeat 10, my_integers.add(idx)
    
    // Возводим каждое число в списке в квадрат
    each int in my_integers, it = it * it
    
    // Выводим каждое число
    each int in my_integers {
        printf("my_integers[%zu] = %d\n", idx, it)
    }
}

Классы и виртуальная диспетчеризация

root@kitploit:~
import basics

class Shape () {
    constructor {}
    
    virtual func draw {}
}

class Rectangle extends Shape (w, h float) {
    constructor(w, h float) {
        this.w = w
        this.h = h
    }
    
    override func draw {
        printf("Rectangle %f by %f\n", this.w, this.h)
    }
}

class Circle extends Shape (radius float) {
    constructor(radius float) {
        this.radius = radius
    }
    
    override func draw {
        printf("Circle with radius %f\n", this.radius)
    }
}

func main {
    shapes <*Shape> List
    
    defer {
        each *Shape in shapes, delete it
    }
     
    shapes.add(new Rectangle(4.0, 5.0) as *Shape)
    shapes.add(new Circle(9.0) as *Shape)

    each *Shape in shapes {
        it.draw()
    }
}

Приложения на Adept 2.0

  • (2.0) Крестики-нолики
  • (2.0) Нейронная сеть
  • (2.0) 2D-платформер
  • (2.1) HexGL
  • (2.1) Сапёр
  • (2.2) Ещё один 2D-платформер
  • (2.2) Поиск пути A*
  • (2.3) Игра о сборе существ
  • (2.4) Карточная игра
  • (2.5) MiniBox Multiplayer Gamepad
  • (2.6) Демонстрация разделяемых указателей
  • (2.7) Пародийная RTS-игра
  • (2.8) Примеры Windows GUI

Популярные библиотеки и порты

  • (2.5) Box2D
  • (2.6) SharedPtr

Дополнительные примеры синтаксиса

См. папку examples

Спасибо за спонсирование Adept ❤️

  • Fernando Dantas
Скачать инструмент