728x90
오늘도 대단한 능력을 가진 GPT 4와 핸드레이 실습을 해보았다
참고로 말한다면, chat gpt는 주인장의 실력에 따라 편차가 꽤 크다 (실제 실험 결과임) 호구 븅딱 같은 주인을 만나면 풀지 못하는 문제도 주인장 실력이 꽤 뛰어나면 느끈히~ 풀어낸다
물론 그렇다고 gpt4가 나비에-스트로크 방정식이나 골드바흐 추측을 풀 수 있다는 건 아니다.
gpt를 최대한 활용하려면 주인장 실력도 제법 뛰어나야 한다.
.arch armv8-a
.file "chall.c"
.text
.align 2
.global func1
.type func1, %function
func1:
sub sp, sp, #16
str w0, [sp, 12]
str w1, [sp, 8]
ldr w1, [sp, 12]
ldr w0, [sp, 8]
cmp w1, w0
bls .L2
ldr w0, [sp, 12]
b .L3
.L2:
ldr w0, [sp, 8]
.L3:
add sp, sp, 16
ret
.size func1, .-func1
.section .rodata
.align 3
.LC0:
.string "Result: %ld\n"
.text
.align 2
.global main
.type main, %function
main:
stp x29, x30, [sp, -48]!
add x29, sp, 0
str x19, [sp, 16]
str w0, [x29, 44]
str x1, [x29, 32]
ldr x0, [x29, 32]
add x0, x0, 8
ldr x0, [x0]
bl atoi
mov w19, w0
ldr x0, [x29, 32]
add x0, x0, 16
ldr x0, [x0]
bl atoi
mov w1, w0
mov w0, w19
bl func1
mov w1, w0
adrp x0, .LC0
add x0, x0, :lo12:.LC0
bl printf
mov w0, 0
ldr x19, [sp, 16]
ldp x29, x30, [sp], 48
ret
.size main, .-main
.ident "GCC: (Ubuntu/Linaro 7.5.0-3ubuntu1~18.04) 7.5.0"
.section .note.GNU-stack,"",@progbits
먼저 실습할 어셈블리어를 던져주었다. 아마도 해커니 뭐니 하는 귀요미한 친구들도 이 어셈블리어만 봤을 때 감 못 잡을 친구들이 꽤 많을 것이다.
최고급 주인장을 만난 gpt4 는 바로 최고의 답변을 내뱉는다
(바로 아래가 gpt4 본인이 스스로 생성한 답변)
아래는 ARM 어셈블리 코드를 ARM 기반 바이너리로 변환하고, 그 바이너리를 x86 시스템에서 실행하기 위한 전체 과정에 대한 명령어들입니다:
- 먼저 ARM cross-compiler를 설치합니다:
bash
sudo apt install binutils-aarch64-linux-gnu gcc-aarch64-linux-gnu
- 제공된 ARM 어셈블리 코드가 chall.S 파일에 있는 것으로 가정하겠습니다. 이 파일을 컴파일합니다:
bash
aarch64-linux-gnu-as -o chall.o chall.S
- 컴파일된 오브젝트 파일을 스태틱 바이너리로 링크합니다:
bash
aarch64-linux-gnu-gcc -static -o chall chall.o
- 이제 우리는 ARM aarch64용으로 컴파일된 바이너리를 가지고 있습니다. 하지만 x86_64 시스템에서 이를 직접 실행할 수는 없습니다. 따라서 ARM 바이너리를 실행할 수 있게 해주는 QEMU를 설치해야 합니다:
bash
sudo apt install qemu-user-static
- 마지막으로, 제공된 인자를 사용하여 바이너리를 실행합니다:
bash
./chall 182476535 3742084308
이렇게 하면 바이너리를 실행하고 결과를 얻을 수 있습니다. 이는 ARM 기반 시스템이 아닌 x86 시스템에서 ARM 코드를 실행하기 위한 일반적인 절차입니다.
ㅇㅇ 걍 말이 안 되는 수준이다.
자기가 알아서 다 명령어도 가져오고 완벽한 순서에다가 어떻게 실행시키는지 까지 다 알아서 말해준다.
위의 순서대로 실습을 해보쟈.
보는 바와 같이 단 하나의 오차도 없이 완벽히 작동한다.
gpt4 의 모든 답변이 완벽히 맞았다는 뜻이다.
다만, 이렇게 푸는 건 좀 너무 쉬우니 아예 핸드레이를 해보라고 명령을 내렸다.
gpt4가 완벽히 스스로 작성한 프로그램을 c로 만든 후 gcc를 활용하여 실행파일로 만들고 실행을 시켰다. 아래가 그 결과이다.
위에랑 정확히 완벽히 똑같이 작동하는 것을 볼 수 있다.
내가 그 c언어를 직접 검토했는데, 원래 어셈블리어랑 사실상 완벽히 같은 의미였다. 함수에 대한 이해부터 인자를 받고 return하는 거까지 완벽한 수준이었다.
이미 gpt4는 어셈블리어, 바이너리 이해 그리고 메모리 활용부터 공격, 어택 벡터, 또 그걸 막는 것 다시 패치해는 것 시스템을 활용하는 것, 익스플로잇 작성과 프로토콜의 이해부터 해서 거의 모든 면에서 최상급 해커에 준하는 수준이다. 솔직히 말해서. 물론, 여기는 조건이 있기는 하다. 위에도 말했다시피, 최상급 주인장을 만났을 때 그러하다. 내가 언제 우연히 누군가를 봤는데 쟌슨빌 같은 친구였는데 이 친구가 gpt 쓰니까 정말 gpt가 너무 바보가 되더라.. 나는 연구 결과로 gpt가 어떤 주인장이 쓰느냐에 따라 편차기 있다는 건 알았는데 실제로 그 사례를 내 눈으로 본 건 처음이었다. 내가 직접 사용했을 때 개 똑똑이 천재인 gpt가 쟌슨빌 같은 친구가 쓰니까 개밥 같은 문제도 하나도 못 풀더라 뭐 암튼 그렇다고 한다,,
gpt4가 최상급 해커랑 다른 점은 또 걸리는 시간인 거같다. 최상급 해커가 최소 일주일에서 한 달 정도 걸리는 문제도 gpt4는 10분에서 1시간 이면 풀어내기도 한다. (물론, 주인장이 꽤 준수하다고 할 때) 타율도 아주 좋은 수준이다.
728x90
'호그와트' 카테고리의 다른 글
가장 기본이 되는 공격 방식 (attack vector) (0) | 2023.07.01 |
---|---|
흠냐 (0) | 2023.06.29 |
해킹 해킹 바운스~ 바운스~ (0) | 2023.06.23 |
주식 주식 바운스~ 바운스~ (0) | 2023.06.20 |
rot13 (0) | 2023.06.20 |