일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Flutter
- system hacking
- pytorch
- 파이토치 트랜스포머를 활용한 자연어 처리와 컴퓨터비전 심층학습
- MATLAB
- MDP
- bloc
- Computer Architecture
- 백준
- ARM
- Widget
- study book
- Algorithm
- Dreamhack
- Got
- Stream
- Image Processing
- PCA
- 영상처리
- llm을 활용 단어장 앱 개발일지
- DART
- C++
- FastAPI
- Kaggle
- BAEKJOON
- ML
- BFS
- fastapi를 사용한 파이썬 웹 개발
- BOF
- rao
- Today
- Total
목록All (309)
Bull

FSB C언어에 포맷 스트링이라하면 대표적으로 printf, scanf, fprintf, fscanf, sprintf, sscanf가 있다. 이 함수들은 포맷 스트링을 채울 값들을 레지스터나 스택에서 가져온다. 그런데 이들 내부에는 포맷 스트링이 필요로 하는 인자의 개수와 함수에 전달된 인자의 개수를 비교하는 루틴이 없다. 그래서 만약 사용자가 포맷 스트링을 입력할 수 있다면, 악의적으로 다수의 인자를 요청하여 레지스터나 스택의 값을 읽을 수 있다. Printf() https://cplusplus.com/reference/cstdio/printf/ https://cplusplus.com/reference/cstdio/printf/ function printf int printf ( const char *..

pip install einops from einops import rearrange x = torch.randn(64, 3, 32, 32) patch_size = 4 # 4 pixels print('x :', x.shape) patches = rearrange(x, 'b c (h s1) (w s2) -> b (h w) (s1 s2 c)', s1=patch_size, s2=patch_size) # 64 3 32 32 = 64 3 8*4 8*4 -> 64 8*8 4*4*3 print('patches :', patches.shape) x : torch.Size([64, 3, 32, 32]) patches : torch.Size([64, 64, 48]) rearrange(x, 'b c (h s1) (w s2)..

# 사용할 베이스 이미지 FROM pytorch/pytorch:latest # PyTorch 및 Jupyter 설치 RUN conda install pytorch RUN conda install torchvision RUN conda install jupyter RUN apt-get update RUN conda install cudatoolkit=11.8 cudnn -c pytorch # 작업 디렉터리 설정 WORKDIR /workspace # Jupyter Notebook 설정 (옵션: 비밀번호 설정 등) # 이 예제에서는 비밀번호 없이 모든 IP에서 접속 가능하게 설정 RUN jupyter notebook --generate-config --allow-root RUN echo "c.NotebookA..

$P(X=x)=(1-p)^{x-1}·p^x$ 기하분포의 확률은 위와 같습니다. 기하분포의 평균 증명 $E(X)= \sum_{x=1}^∞xf(x)$ 그리고 기하분포는 성공할 때 까지의 시행이므로 확률분포에서 평균은 위와 같습니다. 이제 평균 공식에다가 식을 대입해보겠습니다. $E\left(X\right)=\sum_{x=1}^∞x·(1-p)^{x-1}·p$ 여기서$x·(1-p)^{x-1}= -\frac{d}{dp}(1-p)^x$가 성립합니다. 따라서, $E\left(X\right)=\sum_{x=1}^∞-\frac{d}{dp}(1-p)^x·p$ $E\left(X\right)= -p\sum_{x=1}^∞\frac{d}{dp}(1-p)^x$ 이제 무한 등비급수 공식에 의해, $E\left(X\right)=-p·..

개념 Return To Library(RTL)는 NX를 우회하는 공격 기법으로 널리 알려져있다. NX로 인해 공격자가 버퍼에 주입한 셸 코드를 실행하기는 어렵지만, 스택 버퍼 오버플로우 취약점으로 반환 주소를 덮는 것은 여전히 가능하다. 프로세스에 실행 권한이 있는 메모리 영역은 일반적으로 바이너리의 코드 영역과 바이너리가 참조하는 라이브러리의 코드 영역이다. Return-to-Libc: 공격자는 특정 libc 함수의 주소를 리턴 주소로 설정합니다. 가장 일반적인 목표는 system 함수로의 실행 흐름을 변경하는 것이며, 이를 통해 임의의 시스템 명령을 실행할 수 있다. 예를 들어, 공격자는 system("/bin/sh") 호출을 통해 셸을 획득할 수 있다. Dreamhack 실습코드 // Name: r..

시스템 해킹과 보안 분야에서 "PLT(Procedure Linkage Table)"와 "GOT(Global Offset Table)"는 주로 동적 링킹을 지원하는 시스템에서 사용되며, 실행 시간에 함수와 변수의 실제 주소를 결정하는 역할을 한다. 여기서 동적 링킹이란 프로그램이 실행되는 동안 필요한 코드나 데이터를 다른 파일로부터 불러와 연결하는 과정이다. PLT(Procedure Linkage Table) PLT는 동적 링킹을 사용하는 프로그램이 외부 함수를 호출할 때 사용하는 테이블이다. 예를 들어, 어떤 프로그램이 C 라이브러리의 printf 함수를 호출하려 할 때, 해당 프로그램의 실행 파일 자체에는 printf의 실제 코드가 포함되어 있지 않다. 대신, 실행 시간에 동적 링커(dynamic li..

NX (No eXecute) NX는 실행 금지 비트라고도 하며, 특정 메모리 영역에 실행 권한을 부여하지 않아 공격자가 악의적인 코드를 그 영역에 삽입하고 실행하는 것을 방지하는 기술이다. 스택이나 힙과 같이 데이터를 저장하는 용도로 사용되는 메모리 영역에서 코드 실행을 금지하여, 버퍼 오버플로우 공격을 통한 악성 코드 실행을 막는다. 위 사진과 같이 vmmap을 통해 어느 스택 주소에 실행권한이 있는지 없는지 판별할 수 있다. NX의 또다른 명칭 인텔 AMD ARM 윈도우 XD(eXecute Disable) NX DEP(Data Execution Prevention XN(eXecute Never 명칭만 다를 뿐 모두 비슷한 보호 기법이다. 5.4.0 미만 버전 스택 영역 뿐만 아니라 힙, 데이터 영역 ..

Stack Cnanary란? Stack Canary는 스택 버퍼 오버플로우 공격을 탐지하고 방지하기 위해 사용된다. 이 기술은 '카나리아'라는 새에 비유되는데, 과거에 광부들이 가스 누출을 감지하기 위해 새를 채굴장에 가져갔던 것에서 유래한다. 마찬가지로, 스택 카나리는 메모리의 특정 부분에 의도적으로 배치된, 변경되면 안 되는 값(카나리 값)으로, 스택 버퍼의 오버플로우를 감지하는 데 사용된다. 프로그램이 실행될 때, 스택 카나리 값은 스택에 있는 로컬 변수와 반환 주소 사이에 배치된다. 이 값은 실행 동안 불변이어야 하며, 보통 실행 때마다 또는 프로그램이 시작될 때마다 무작위로 생성된다. 공격자가 버퍼 오버플로우를 이용하여 스택의 메모리를 덮어쓰려고 시도할 때, 카나리 값도 변경될 가능성이 높다. ..

함수 확인 info func 아직 gdb 사용에 미숙하여 우선 아이다와 함께 디컴파일러를 통해 어떤 함수가 있는 지 보았다. gdb에서 info func을 통해서도 확인할 수 있다. b* _start main으로 시작되는 함수가 _start() 인것을 알았다면 우선 브레이크 포인트를 잡아준다. _start() 분석 우선 인자를 넣기 위해 eax,ebx,ecx,edx를 0으로 초기화 하는 것으로 보인다. 부분 부터는 출력할 인자를 미리 스택에 넣어 놓는 것으로 보인다. 이부분은 eax(al), ebx(bl), edx(dl)에 인자가 들어가고 아래 int 0x80이 보이는데 이는 리눅스의 32bit 아키텍쳐에서의 syscall이다. 따라서 write()를 실행한다. (화면으로 출력) 그 아래에는 read()..

# >>>>>>>>>>>>>>>>>>>>>> ERROR REPORT

Return Address Overwrite Return Address Overwrite는 공격자가 프로그램의 실행 흐름을 조작하기 위해 사용하는 기법 중 하나이다. 이 기법은 주로 버퍼 오버플로우 취약점을 이용하여 실행된다. 버퍼 오버플로우란 프로그램이 데이터를 저장하기 위해 할당받은 메모리 영역(버퍼)을 초과하여 데이터를 쓸 때 발생하는 보안 취약점을 말한다. char buf[0x30]; scanf("%s", buf); buf에 0x28만큼 스택에 할당되었다고 하자. 그런데 scanf는 크기를 얼마나 받을 지 정해놓지 않았기때문에 buf에 0x30보다 많이 넣으면 오버플로우가 일어난다. 이렇게 인덱스의 값이 배열의 크기보다 커지는 현상을 Index Out Of Bound (OOB)라고 하며 OOB취약..

https://www.acmicpc.net/problem/10830 10830번: 행렬 제곱 크기가 N*N인 행렬 A가 주어진다. 이때, A의 B제곱을 구하는 프로그램을 작성하시오. 수가 매우 커질 수 있으니, A^B의 각 원소를 1,000으로 나눈 나머지를 출력한다. www.acmicpc.net 요구사항 ① 다이나믹 프로그래밍 ② 행렬 곱 ③ MOD 1000으로 나타내기 ④ 분할정복 (시간복잡도 단축) 코드 #include #include #include #define MOD 1000 using namespace std; typedef long long ll; int dp[5][5][38]; int result[5][5]; void init() { cin.tie(NULL); cout.tie(NULL);..