Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
gha-lab-b1fe4918c0 — # 인가된 보안 연구 랩: CVE-2025-32958 (GHSA-8c7v-vccv-cx4q) 재현 — Adept의 remoteBuild.yml에 의해 워크플로 아티팩트로 유출된 GITHUB_TOKEN (AdeptLanguage/Adept @ 6a64554 스냅샷) | Kitploit
도구/GitHubGitHub/pvharmo2/gha-lab-b1fe4918c0
Vulnerability AnalysisSupply Chain SecurityLearning & EducationCurated Resources
GitHubpvharmo2/gha-lab-b1fe4918c0

gha-lab-b1fe4918c0

# 인가된 보안 연구 랩: CVE-2025-32958 (GHSA-8c7v-vccv-cx4q) 재현 — Adept의 remoteBuild.yml에 의해 워크플로 아티팩트로 유출된 GITHUB_TOKEN (AdeptLanguage/Adept @ 6a64554 스냅샷)

저장소 보기
1015일 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

자동화된 연구 산출물 — 업스트림 프로젝트가 아님.

이 저장소는 Université Laval의 석사 논문에서 게시된 GitHub Actions 워크플로우 취약점을 재현하기 위해 자동화된 하네스가 구축한 일회용 실험실입니다. 이는 커밋 6a6455463213dabe52d49ceaaebd1f13cfee9018(2025-04-01) 시점의 AdeptLanguage/Adept에 대한 그대로의 스냅샷이며, 해당 프로젝트의 자체 라이선스에 따라 재배포되며, 해당 라이선스 파일은 이 스냅샷에 변경 없이 포함되어 있습니다.

업스트림 프로젝트는 관여하지 않으며, 결코 공격 대상이 아니며, 여기서 연구된 취약점은 이미 공개된 것입니다. 이 저장소의 모든 비밀과 변수는 무작위로 생성된 더미 값입니다 — 실제 자격 증명은 존재하지 않습니다. 액션 참조와 러너 이미지는 2025-04-01에 확인된 값으로 고정되어 있습니다. 스냅샷에 적용된 모든 변경 사항은 하네스 출력의 pinning.md를 참조하십시오.

질문 또는 이의 제기: [email protected]


Adept

범용 프로그래밍을 위한 초고속 언어입니다.

Windows용 Adept v2.7 다운로드

MacOS용 Adept v2.7 다운로드

크로스 컴파일 확장 Adept v2.7 다운로드

리소스

Adept v2.7 문서

Adept v2.7 언어 서버

Adept v2.7 표준 라이브러리

Adept v2.7 국내 및 외부 라이브러리 사용하기

Adept v2.7 MacOS Homebrew Tap

Adept v2.7 Vim 플러그인

Adept v2.7 Vim 기본 문법 강조

Adept v2.7 VSCode 문법 강조

Adept v2.7 VSCode 언어 서버

Adept v2.7 Sublime Text 문법 강조

Adept v2.7 Geany 문법 강조

명령줄 사용법

adept [filename] [options]

  • filename - 기본값은 'main.adept'입니다.
  • options - 보조 컴파일러 옵션입니다.

여러 버전이 설치된 경우 adept 대신 adept2-7을 선택적으로 사용할 수 있습니다.

기본 기능

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)
}

레코드

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()
}

구조체

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 {
    // malloc, free, sprintf를 사용한 수동 C-문자열 조작
    
    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 {
    // new, delete, sprintf를 사용한 수동 C-문자열 조작
    
    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) Tic-Tac-Toe
  • (2.0) Neural Network
  • (2.0) 2D Platformer
  • (2.1) HexGL
  • (2.1) Minesweeper
  • (2.2) Another 2D Platformer
  • (2.2) A* Path Finding
  • (2.3) Creature Gathering Game
  • (2.4) Card Game
  • (2.5) MiniBox Multiplayer Gamepad
  • (2.6) Shared Pointer Demo
  • (2.7) RTS Parody Game
  • (2.8) Windows GUI Examples

인기 라이브러리 및 포트

  • (2.5) Box2D
  • (2.6) SharedPtr

추가 문법 예제

examples 폴더 보기

Adept 후원에 감사드립니다 ❤️

  • Fernando Dantas
도구 다운로드