본문 바로가기
728x90

해킹34

시스템 해킹 별 찍기 프로그램 구현 이와 같은 별 찍기를 어셈블리어로 작성해봅시다. 먼저 c 언어 코드로 작성을 해보았습니다. 이제 이걸 어셈블리어 코드로 옮겨볼겁니다. n = 높이 = r8 i = 큰 = r9 j = 작은 = r10 으로 할당해주겠습니다. 다음과 같이 '*' 문자열을 가리키는 STAR 와 0x0a - 줄바뀜 변수인 EMPTY 를 선언해줍니다. WRITE 를 해야하기 때문에 rax 에는 1을 넣어주고 rdi 모드도 1로 선언해줍니다. 별을 하나씩 출력해줄거기 때문에 rdx 에는 1을 넣어주어야합니다. r10 는 위에서 말했듯이 j 이기 때문에 0으로 초기화를 해줍니다. 스택 프레임이 받은 변수 7, RET , RSP 이렇게 깔립니다. 64비트기 때문에 각자 8비트가 됩니다. 그래서 입력된 수를 받기 위해서는 RSP + 16.. 2020. 8. 4.
어셈블리어로 반복문 구현 다음은 100회 반복하면서 A 를 출력하는 반복문이다. for(int i = 0; i write 해야하기 때문에 rdi 도 write 니깐 1을 넣어주고 msg 를 출력해야하기 때문에 rsi 에 넣음 또 변수 r10 에 1을 넣어줌. 이는 for 문에서 index 와 같은 역할을 함. 3. again 함수 정의 cmp 은 A 와 B를 비교해주는 명령어이다. je 는 비교 결과가 같으면 다음 주소로 점프해주는 명령어다 . 즉 r10이 100과 같으면 don.. 2020. 8. 3.
어셈블리어 문법 간단 정리 오늘은 리버싱을 할 때 많이 보는 어셈블리어를 간단하게 살펴보도록 하겠습니다. 예전에 처음 배울 땐 참 많이 헷갈렸었는데 이제는 잘 알아보게 됐으니... 정리를 해야겠어요 -MOV A B : B의 값을 A에 옮깁니다. 만약 MOV RAX 100 같은 경우에는 RAX = 100; 과 같이 생각하시면 됩니다. 하지만 연산을 포함할 수는 없습니다. 연산을 포함 시키는 MOV 를 LEA 라고 할 수 있습니다. -LEA : A 의 값을 B의 값으로 연산을 포함하여 복사 LEA EAX, [EAX + 1000] 다음과 같으면 EAX + 1000을 넣은 값을 EAX 에 다시 넣어줍니다. LEA EBX, [EAX + 1000] 만약 다음과 같다면 EAX 의 값 차이는 없겠죠? -JMP : 특정 위치로 건너 뛰어서 코드 .. 2020. 8. 3.
시스템 해킹 echo 구현 오늘은 어셈블리어 코딩으로 echo 구현해봅시다. nano echo.s 를 열어봅시다. 함수 _start를 실행시켜줍니다. xor 를 동일한 변수로 하면 반드시 0이 나옵니다. 첫번째 줄이 지나면 rax 에는 0이 들어있고 두번째 줄 부터 세번째 줄 까지는 레지스터를 다 초기화 시킨겁니다. rsp 에서 64 를 sub 해주는건 스택이 64에 공간을 마련한 겁니다. rdi = 0 rsi = rsp rdx = 63 시스템 콜을 하는데 rdi 에 0 이 들어있고 rsi 가 포인터니깐 스택의 위치를 가리키고 rdx 에 들어 있는 수 만큼 read 한다. rax 에 1 rdi 1 rsi 에 스택 포인터 위치 rdx 에 63 하면 read 했던 걸을 화면에 63 길이 만큼 출력해주는 syscall 을 부르는 겁니다.. 2020. 8. 3.
728x90