컴퓨터 시스템 기초 (bomb 실험 보고서)
13870 단어 컴퓨터 시스템
bomblab
실험 목적
1) arm 어 셈 블 리 언어 를 이해 하고 디 버 거 사용 을 배 웁 니 다.2) 안 드 로 이 드 개발 판 의 사용 과 환경 설정 에 익숙 함;3) Liux 시스템 에서 셸 명령 을 숙지 하고 파악 하여 사용 합 니 다.
실험 환경
linux 시스템, 단말기, arm - gdb 도구, 안 드 로 이 드 개발 판
3. 팀 구성원 및 임무 배정
실험 원리
바 이 너 리 폭탄 은 대상 코드 파일 로 제공 되 는 프로그램 입 니 다. 프로그램 이 실 행 될 때 6 개의 관문 (6 개의 phase) 이 있 습 니 다. 실 행 될 때 사용자 에 게 6 개의 다른 문자열 을 입력 하 라 고 알려 줍 니 다.만약 그 중 하나 가 정확 하지 않 으 면 폭탄 은 '폭발' 할 것 이다. 잘못된 정 보 를 출력 할 것 이다.우 리 는 먼저 Liux 에서 arm - gdb 환경 을 설정 하고 어 셈 블 리 설 문 지 를 받 은 다음 에 어 셈 블 리 와 역방향 공 사 를 통 해 어떤 여섯 개의 문자열 인지 확인 하여 각자 폭탄 의 뇌관 을 제거 해 야 한다.
5. 지식 비축
실험 과정 에서 우 리 는 수업 시간 에 ARM 부분 명령 에 대한 지식 을 활용 했다. 예 를 들 어 읽 기와 쓰기 명령 ldr 와 str, 점프 명령 b 와 bl 의 차이, 그리고 비교 명령 cmp 등 조건 역 의 실천 응용 도 있다.또한 실험 을 완성 하기 위해 저 희 는 Linux 환경 에서 gdb 설정 정지점 을 활용 하여 디 버 깅 을 했 고 더 많은 ARM 명령 과 이와 관련 된 레지스터 와 스 택 의 사용 을 알 게 되 었 습 니 다.폭탄 을 뜯 는 과정 에서 나 도 관련 수학 지식 을 활용 했다. 주로 재 귀적 인 알고리즘 과 순환 알고리즘 이다.
6. 실험 내용 과 절차
:
환경 설정 을 할 때 우 리 는 지도 서 에 따라 리 눅 스 의 환경 설정 과 gdb 설치 패키지 의 압축 해제 설 치 를 진행 했다.이 단계 에서 우 리 는 Linux 터미널 에서 명령 행 으로 새로 만 들 고 폴 더 를 열 고 검사 하 며 문서 의 내용 을 저장 하 는 것 을 배 웠 습 니 다.주로 sudo 를 사용 하여 루트 명령 을 실행 합 니 다. cd 는 폴 더 를 열거 나 종료 합 니 다. tar 명령 은 파일 백업 을 합 니 다.주요 명령 행 은 다음 과 같 습 니 다. tar - jxvf gdb - 7.10. tar. bz2 압축 해제 gdb 패키지 sudo gedit ~/. bashrc 환경 변 수 를 수정 하여 PC 와 타 겟 보드 의 연결 을 할 때 각각 IP 주 소 를 가 져 온 다음 타 겟 보드 에서 PC 의 bomb 프로그램 을 실행 하고 PC 에서 arm - gdb 를 사용 하여 프로그램 디 버 깅 을 합 니 다.주로 디 버 깅 도구 adb, ifconfig 설정 네트워크 장 치 를 사용 하여 IP, gdbserver 를 설정 하여 PC 가 목표 판 을 원 격 으로 디 버 깅 할 수 있 도록 합 니 다.주요 명령 행 은 다음 과 같 습 니 다. adb push bomb/data/local 은 bomb 프로그램 push 를 목표 판 에 ifconfig eth 0 192.168.0.100 설정 목표 판 IP ifconfig eth 1 192.168.0.101 설정 PC 의 IP gdbserver 192.168.0.101: 2345 bombg (ip 는 pc 기기 ip) 은 목표 판 에서 bomb 프로그램 을 실행 할 수 있 습 니 다.단계 2: 6 개의 phase 의 해결 은 먼저 main 함 수 를 찾 았 는데 phase 1 에서 phase 6 까지 6 개의 함 수 를 호출 한 것 을 발견 했다.이것 은 모든 관문 에서 알 아야 할 함수 일 것 이다.
실험 3:
처음에 스 택 의 개척 이 었 습 니 다. 아래 를 보면 먼저 sscanf 함수 가 눈 에 띄 었 습 니 다. C 와 유사 한 함수 일 것 이 라 고 추측 한 다음 에 돌아 갈 인 자 를 알 고 싶 습 니 다. '84ec: e59f 1198 ldr r1, [pc,\# 408], 868 c' 를 발 견 했 습 니 다.
“8890:e50b0048 str r0, [fp, #-72] ; 0x48
8894:e59f3260 ldr r3, [pc, #608] ; 8afc
8898:e50b3010 str r3, [fp, #-16]
889c:e24b3028 sub r3, fp, #40 ; 0x28
88a0:e51b0048 ldr r0, [fp, #-72] ; 0x48”
저장 하고 값 을 추출 하 는 코드 는 링크 구조 일 것 입 니 다. 워드 에 저 장 된 것 은 링크 헤더 일 것 입 니 다. 코드 를 자세히 본 후에 몇 가지 순환 을 찾 았 습 니 다. 링크 에 어 릴 때 부터 큰 순 서 를 매 기 는 것 으로 추정 되 며 C 언어 로 대충 표시 합 니 다.
for(int i=0;i<=5;i++){
if(a[i]>6)
explode_bomb();
for(int j=i+1;j<=5;j++){
if(a[i]=a[j])
explode_bomb();
}}// 6 6
for(int i=0;i<=5;i++){
l=list;
for(int j=1;jnext;
list_array[i]=l;
} / / 링크 의 수 를 배열 에 저장 합 니 다.
l=list_array;
for(int i=0;i<=4;i++){
if(*l<*l->next)
explode_bomb();
l=l->next;
} / / 정렬
, 。 “88b8: e51b200c ldr r2, [fp, #-12]” 12 , 12 , 16 “(gdb)p/x *(0x00091104-12)” , 。 :“253,725,301,997,212,432”, “5 1 3 6 2 4” 6 。
관문 숨 기기: - 공동 완성
숨겨 진 스위치 의 오픈 방식 은 phase defused 에서 9158: e3530002 cmp r3,\# 2 에서 두 문 자 를 입력 해 야 숨겨 진 관문 에 들 어 갈 수 있 음 을 알 수 있 습 니 다.
9168: e59f103c ldr r1, [pc, #60] ;
91ac <phase_defused+0x88>
916c: ebffff04 bl 8d84 <strings_not_equal>
gdb 를 통 해 91ac 의 문 서 를 볼 수 있 습 니 다. 문서 에 저 장 된 문자열 은 austinpower 입 니 다. 다른 문 서 를 보면 입력 한 경로 암호 형식 (d%, s%) 을 알 수 있 습 니 다. 따라서 앞의 6 개의 관문 에서 실험 4 만 하나의 숫자 9 를 입력 하기 때문에 비밀 번 호 는 9 austinpower 로 숨겨 진 관문 에 들 어 갑 니 다. 닫 힌 키 코드 는 다음 과 같 습 니 다.
8bb0: eb0000f5 bl 8f8c
8bb4: e1a03000 mov r3, r0
8bb8: e50b300c str r3, [fp, #-12]
8bbc: e51b300c ldr r3, [fp, #-12]
8bc0: e1a00003 mov r0, r3
8bc4: e3a01000 mov r1, #0
8bc8: e3a0200a mov r2, #10
8bcc: eb000d0b bl c000
8bd0: e1a03000 mov r3, r0
, :
8bec: e59f0028 ldr r0,[pc,#40];8c1c
8bf0: e51b1008 ldr r1, [fp, #-8]
8bf4: ebffffc1 bl 8b00
fun7。 secret_phase 。
8bfc: e3530007 cmp r3, #7
7, fun , :
8b18: e3530000 cmp r3, #0 r3 0 , 0
8b1c: 1a000001 bne 8b28 0x28>
8b20: e3e03000 mvn r3, #0
8b24: ea00001b b 8b98 0x98>
。
8b34: e1520003 cmp r2, r3
8b38: da000007 ble 8b5c 0x5c>
8b3c: e51b3008 ldr r3, [fp, #-8] r2>r3
8b40: e5933004 ldr r3, [r3, #4] r3 4
8b44: e1a00003 mov r0, r3
8b48: e51b100c ldr r1, [fp, #-12]
8b4c: ebffffeb bl 8b00 fun7
8b50: e1a03000 mov r3, r0
8b54: e1a03083 lsl r3, r3, #1 r3=r3*2
8b58: ea00000e b 8b98 0x98>
8b68: e1520003 cmp r2, r3
8b6c: aa000008 bge 8b94 0x94>
8b70: e51b3008 ldr r3, [fp, #-8] r2
8b74: e5933008 ldr r3, [r3, #8] r3 8
8b78: e1a00003 mov r0, r3
8b7c: e51b100c ldr r1, [fp, #-12]
8b80: ebffffde bl 8b00
8b84: e1a03000 mov r3, r0
8b88: e1a03083 lsl r3, r3, #1
8b8c: e2833001 add r3, r3, #1 r3=r3*2+1
8b90: ea000000 b 8b98 0x98 >
8b94: e3a03000 mov r3, #0
8b98: e1a00003 mov r0,
if-else 。C :
fun7(const int *a, int b)
{
if (a == NULL)
return -1;
int ret = 0;
if (*a - b > 0)
{
ret = fun7(*(a + 4), b);
ret *= 2
}
else if (*a - b == 0)
return 0;
else
{
ret = fun7(*(a + 8), b);
ret = ret * 2 + 1;
}
return ret;
}
최종 반환 값 이 7 이기 때문에 우 리 는 역방향 재 귀 를 진행 합 니 다. 7 = 2 * 3 + 1, 3 = 1 * 2 + 1, 1 = 0 * 2 + 1. 그래서 앞의 세 번 의 비교 에서 모두 a 입 니 다.
7. 실험 에서 만난 문제 와 해결
1. 환경 설정 과정 에서 우리 가 직면 한 주요 문제, 예 를 들 어 설치 패 키 지 는 PC 의 자릿수 와 맞지 않 고 bomb 의. s 파일 을 정확하게 읽 을 수 없습니다. IP 를 설정 할 때 다른 네트워크 에 연결 되 어 주 소 를 얻 을 수 없습니다. gdb 를 실행 하여 디 버 깅 을 할 때 목표 파일 을 찾 을 수 없습니다. 그러나 우리 가 지도 서 를 자세히 읽 고 조교 사 에 게 물 어 본 후에 모두 신속하게 해결 되 었 습 니 다. 2. 실험 3 비용 이 들 었 습 니 다.비교적 긴 시간 동안 관건 은 어 셈 블 리 코드 를 계속 읽 고 gdb 로 직접 디 버 깅 하지 않 았 기 때문에 어디 에 어떤 데 이 터 를 저장 할 지 항상 추측 하여 병목 에 빠 졌 다. 나중에 기관실 에 가서 디 버 깅 을 한 결과 각 워드 에 저 장 된 데 이 터 를 찾 으 면 이 문제 의 답 을 쉽게 알 수 있 고 문 제 를 해결 할 수 있다 는 것 을 알 게 되 었 다. 3. 실험 6 에서 만난 문 제 는 주로 순환 체 가 명확 하 게 파악 하지 못 한 것 이다.r3 와 r2 의 반복 적 인 등장 으로 혼 란 스 러 웠 습 니 다. 그러나 링크 구조 임 을 발견 한 후에 대체적으로 밝 아 졌 습 니 다. gdb 는 링크 내용 을 인쇄 했 습 니 다. 즉, 정렬 일 것 입 니 다. 자신의 추측 에 따라 C 언어 로 어 셈 블 리 를 번역 하면 전체 문 제 는 해결 되 었 습 니 다.초 함수. 매번 관문 을 성공 적 으로 통과 할 때마다 defuse 함 수 를 호출 하 는 것 을 발 견 했 기 때문에 그 함 수 를 연구 하면 들 어 가 는 방법 을 알 수 있 습 니 다. 함 수 는 나중에 갑자기 네 번 째 관문 의 재 귀 를 생각 했 습 니 다. 게다가 여섯 번 째 관문 의 주소 에 주 소 를 저장 하 는 특징 을 가지 고 최종 적 으로 입력 해 야 할 데 이 터 를 찾 았 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
컴퓨터 시스템 기초 (bomb 실험 보고서)예 를 들 어 읽 기와 쓰기 명령 ldr 와 str, 점프 명령 b 와 bl 의 차이, 그리고 비교 명령 cmp 등 조건 역 의 실천 응용 도 있다.또한 실험 을 완성 하기 위해 저 희 는 Linux 환경 에서 gd...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.