간단한 구구단 코딩을 java로 제작해 보았습니다

 

출력할 구구단 수를 입력하면 1부터 9까지의 구구단이 출력됩니다

 

초록색 부분이 입력한 부분으로 6단이 출력된 것을 확인할 수 있습니다

package good;

import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		
		Scanner input = new Scanner(System.in);
		
		int num1 = 0;	// 출력할 단수를 입력 받을 변수
		
		System.out.println("#########구구단#########");
		System.out.print("출력할 구구단 수 입력: ");
		
		num1 = input.nextInt();
		
		for (int i = 1; i < 10; i++) {
			System.out.printf("%d * %d = %d \n", num1, i, num1*i);
		}
	}
}

'JAVA' 카테고리의 다른 글

Port 스캐너 (JAVA)  (0) 2020.11.13
IP 스캐너 코딩 (JAVA)  (0) 2020.11.13
생성자 (JAVA)  (0) 2020.11.13
프로세스 관리 코딩 ( JAVA )  (1) 2020.11.12

값을 교환해주는 함수를 c언어로 제작해 보았습니다

 

변수 a와 b에 저장된 값들을 교환해주는 change함수를 만들어 사용합니다

 

변수 a와 b의 값이 교환된걸 확인할 수 있습니다

 

#include<stdio.h>

void change(int *num1, int *num2)
{
	int tmp = 0;	// 보관용 변수

	tmp = *num1;
	*num1 = *num2;
	*num2 = tmp;
}

int main()
{
	int a = 10;
	int b = 20;

	printf("a = %d, b = %d \n", a, b);

	change(&a, &b);		//값을 바꿔주는 함수에 값이 들어가있는 변수에 주소를 넘겨준다

	printf("a = %d, b = %d \n", a, b);

	return 0;
}

 

'C언어' 카테고리의 다른 글

간단한 구구단 코딩 (C언어)  (0) 2020.11.05
로또 게임 제작 (C언어)  (0) 2020.11.04
가위바위보 게임 제작 (C언어)  (0) 2020.11.04

구구단 프로그램을 c언어로 코딩해 보았습니다

 

실행시 구구단 수를 입력 받고 입력한 구구단 수를 출력해줍니다

 

입력란에 원하는 구구단 수를 입력해주세요

 

입력란에 입력한 구구단 수가 출력됩니다

 

#include<stdio.h>

int main()
{
	int num1 = 0;	// 단수를 입력 받을 변수
	int num2 = 1;	// 1부터 9까지의 곱셈을 위한 변수
	
	printf("############ 구구단 ############\n\n");

	printf("출력할 구구단을 입력하세요 : ");
	scanf("%d", &num1);

	printf("\n");

	for (; num2 < 10; num2++)
	{
		printf("%d * %d = %d \n", num1, num2, num1*num2);
	}
	printf("\n");

	return 0;
}

'C언어' 카테고리의 다른 글

값을 교환해주는 함수 (C언어)  (0) 2020.11.05
로또 게임 제작 (C언어)  (0) 2020.11.04
가위바위보 게임 제작 (C언어)  (0) 2020.11.04

 

Shellcode(쉘코드) 정의

- Shellcode란 시스템의 특정 명령을 실행할 수 있는 기계어 코드이다

- 아래에서 제작한 Shellcode는 쉘을 떨어뜨리기 위한 쉘코드이다

 

Shellcode(쉘코드) 제작 순서

  1. c언어로 구현

  2. gdb로 역 어셈블링하여 필요한 부분 찾기

  3. 시스템 콜에 필요한 필수 부분만으로 어셈블리어 구현

  4. 컴파일 후 objdump로 기계어를 출력

  5. null이 존재할 시 null값을 변환 처리하여 없앤다

  6. 기계어 코드들을 하나의 문장으로 완성

 

1. c언어로 구현

 

vi를 사용하여 shellcode.c라는 파일로 쉘을 떨어뜨리기 위한 위 코드를 작성해준다                 #execve(const char *path, char*const argv[], char envp[]);
static 옵션을 꼭 사용하여 컴파일을 해준다

 

2. gdb로 역 어셈블링하여 필요한 부분 찾기

 

gdb를 이용하여 execve함수의 동작 내용을 확인하고 int 0x80 부분에 브레이크를 걸어준다

 

run으로 프로그램을 시작한뒤 명령어로 변수의 값들을 확인해준다

eax ebx ecx edx
execve(11번)
16진수 - 0b
/bin/sh 배열의 시작 주소
(/bin/sh의 주소)
0
함수 호출 번호 첫 번째 인자 자리  두 번째 인자 자리  세 번째 인자 자리

 

3. 시스템 콜에 필요한 필수 부분만으로 어셈블리어 구현

 

shellcode.asm 파일로 필수요소만 어셈블리어로 작성해준다

 

컴파일을하고 잘 실행이되나 한번 실행시켜 본다

 

4. 컴파일 후 objdump로 기계어를 출력

 

objdump로 열어서 기계어 코드에 null 값이 있나 확인해준다

 

5. null이 존재할 시 null값을 변환 처리하여 없앤다

null 값 이후에 값들을 복사하지않아 정상적으로 동작하지 않는다는 문제점이 있기 때문에 null값을 다 지워준다

- 레지스터 너비 수정 ( 8비트, 16비트 레지스터 사용)

ex) 32bit : eax, 16bit : ax, 8bit : al 

- XOR ( 자기 자신을 XOR하여 0삽입)

ex) xor eax, eax 

 

위에서 작성 shellcode.asm 코드를 오른쪽과 같이 수정하고 다시 한번 컴파일해준다

 

컴파일 후 다시 objdump로 shellcode를 열어보면 null 값이 사라진걸 확인할 수 있다

 

6. 기계어 코드들을 하나의 문장으로 완성

추출 명령어

for i in $(objdump -d ./shellcode | grep "^ "|cut -f2);do echo -n \\x$i;done

 

명령어를 사용하여 objdump 안에서 기계어 코드만 \x를 붙여서 뽑아낸다

 

7. 6번에서 추출해낸 기계어 코드를 테스트해 본다

 

위에 code 배열 안에 추출한 기계어 코드를 넣어주고 test.c로 저장후 컴파일해준다

 

test 파일을 실행해보면 쉘코드가 잘 작동하는걸 확인할 수 있다

 

 

'시스템 해킹' 카테고리의 다른 글

ASCII Armor  (0) 2020.11.10
ASLR ( Address Space Layout Randomization )  (0) 2020.11.10
RTL ( Return to Libc )  (0) 2020.11.06
DEP (Data Execution Prevention)  (0) 2020.11.06
Stack Buffer Overflow (스택 버퍼 오버플로우)  (0) 2020.11.06

로또 게임을 c언어로 제작해보았습니다

 

처음 화면에서 출력할 만큼의 게임 횟수를 입력하면 다음 화면에서 그 결과를 반환해주고 끝나는 프로그램입니다

 

출력할 게임 횟수를 숫자로 입력해주세요
입력한 횟수만큼 게임 결과가 출력되고 종료됩니다

#include<stdio.h>
#include<stdlib.h>
#include<time.h>

int main()
{
	int num = 0;		// 1~45의 랜덤 값을 담는 변수
	int lotto = 0;		// game배열의 번짓수를 결정해주는 변수
	int check = 0;		// game배열 숫자와 새로 뽑은 숫자가 중복되는지 체크할때 쓰는 변수
	int check_ok = 0;	// 중복 여부를 통해 새로운 숫자를 game배열에 담을 때 쓰는 변수
	int input = 0;		// 사용자의 입력을 담는 변수
	int game[6];		// 로또 번호를 담는 배열
	int list = 0;		// 사용자의 입력에 따라 출력될 게임 횟수를 정하는 변수
	int list_num = 1;	// 출력될 게임에 번호를 붙어주는 변수

	unsigned int localtime = (unsigned)time(NULL);
	srand(localtime);
	
	printf("############### 로또 ############### \n\n");

	printf("출력할 게임 수를 입력해주세요 : ");
	scanf("%d", &input);
	printf("\n");
	list = input;

	while (input)
	{
		for (; list > 0; list--)
		{
			printf("%02d 게임 - ", list_num++);

			for (lotto = 0; lotto < 6; lotto++)
			{
				game[lotto] = 0;
			}

			for (lotto = 0; lotto < 6; lotto++)
			{
				num = rand() % 45 + 1;

				for (check = 0; check < 6; check++)
				{
					if (game[check] == num)
					{
						check_ok = 0;
						break;
					}
					else
					{
						check_ok = 1;
					}
				}
				if (check_ok)
				{
					game[lotto] = num;
				}
				else
				{
					lotto--;
				}
			}
			for (lotto = 0; lotto < 6; lotto++)
			{
				printf("%02d ", game[lotto]);
			}
			printf("\n");
		}
		input--;
	}
	printf("\n");

	return 0;
}

'C언어' 카테고리의 다른 글

값을 교환해주는 함수 (C언어)  (0) 2020.11.05
간단한 구구단 코딩 (C언어)  (0) 2020.11.05
가위바위보 게임 제작 (C언어)  (0) 2020.11.04

+ Recent posts