'전체 글'에 해당되는 글 128건

  1. 2020.04.16 프로그램 실습 레포트 5
  2. 2020.04.05 비주얼 스튜디오 꿀팁 1
  3. 2020.04.05 PE 파일구조 복습1차 (구조체!)
  4. 2020.04.05 EAT
  5. 2020.04.03 강의 3강,레포트3
반응형

오늘은 연산자에 대해서 자세히 배우는 시간을 가졌습니다. 특히 나머지 값의 경우 우리는 배웠지만 크게 사용한 일이 없었고 정수 실수 배수에 대해서 계산법을 알고 있지 정의를 이해하고 활용할 수 있는 능력이 매우 낮다고 생각을 했습니다.

======

꿀팁 

 

반응형

'동국대 경주 프로그램 실습 수업' 카테고리의 다른 글

레포트 11: 배열  (0) 2020.06.13
중간고사 후기...  (5) 2020.04.29
비주얼 스튜디오 꿀팁 1  (0) 2020.04.05
강의 3강,레포트3  (0) 2020.04.03
대학교 레포트에 대해서  (0) 2020.03.30
Posted by 53C
,
반응형

보통 공부를 하면서 열심히 적은 소스 인데 저장해두고 싶고 또는 나중에 레포트에 적고 싶은 내용이 있지만 화면을 분활해서 쓰기는 뭔가 답답 하다. 나는 듀얼 모니터를 쓰지만 그래도 불편하다.

그래서 방법을 찾았다.

많이 하는 실수는 이 프로젝트 파일 안에 다른 c파일을 만들게 되면 오류가 일어난다. 그러므로

이런식으로 프로젝트 파일내에 .txt파일을 만들어서 사용을 하면된다.

또한 이 텍스트 파일도 만들어지기 때문에

 

이 텍스트 파일만 보는것도 가능하다!

반응형
Posted by 53C
,
반응형

서론

 

사실 저는 c언어를 거이 모릅니다... 제가 프로그램을 접하게 된 계기는 아마 고등학교 수업시간에 배우기 시작했고 관심을 가지고 파이썬을 독학 하기 시작했습니다. 하드웨어에 관심이 많아서 아두이노 그러니까 C++ 기반의 아두이노를 많이 다루었습니다. 해킹은 램 섬웨어에 걸리면서 안전한 사이버 환경을 만들자는 꿈을 가지고 배우기 시작했습니다.

그러면서 파이썬으로 많은 프로그램도 제작을 하고 자료구조도 공부했습니다 자바는 객체 지향을 공부하기 위해 공부를 했습니다 그리고 램 섬웨어가 자바스크립트로 짜인 코드라 자바스크립트를 배우기 전에 한번 공부해봤습니다. 알고 보니 완전 다른 언어지만요 ㅎㅎ.... c언어는 학교 방과 후 학교에서 배웠는데 방과 후 수업은 포인터 전까지 수업을 진행했습니다.

그 이후에 리버싱을 배웠는데 리버싱을 하면서 가장 많이 알게 된 것은 컴퓨터의 구조와 메모리였습니다. 메모리를 학습하니 그 어렵다고 사람들이 말하는 포인터는 정말 쉽고 매우 기초적인 것이란 것을 알게 되었고 리버싱을 배우면서 하나하나 배워가고 있습니다.

최근 대학교 수업 중에 pi를 써야 하는 과제가 있어서 math.h 라이브러리를 불러오는 계기가 있었고 특히 PE 파일에서 도대체 어떻게 저게 4바이트 고 왜 저게 2바이트인지 저는 전혀 몰랐는데 오늘 우현이 알게 되었습니다.

오늘 PE 파일 구조를 끝내고 한 번 더 복습을 하기로 결정을 하게 되었습니다.

 

많은 사람들이 말하길 PE 파일 포맷은 2번 보고 3번 봐도 알 수 없지만 그러면 조금씩 보이기 시작한다고 말합니다.

사실 원래의 계획되로라면 조금 더 진도를 나가고 복습을 할 예정이었으나 워낙 기초적이고 중요한 내용이라 생각이 돼서 빠르게 복습을 하게 되었습니다. 저번에는 이론이 중심이었다면 이번에는 실습을 위주로 복습이 진행이 될 것 같습니다.

 

1. 구조체

 

자료형에 의 정보를 저장하는 의미를 가집니다.

이로 인해서 자료형을 구조체로 정의하여 프로그램을 제작하면 매번 변수를 선언하지 안 해도 된다는 장점이 있습니다.

 

 

 

 

이런식으로 사용이 간단합니다.

 

그리고

 

이런식으로 전역 변수를 설정할 수도 있습니다.

 

typedef로 구조체를 정의할 경우에는 strucy 없이 사용이 가능합니다. 

 

typedef는 별칭을 붙이는 용도로 사용을 하는데 많이 쓸 일은 없을 것 같습니다.

 

2. 자료형

저는 c언어를 잘 몰라서.. 잘 보시면 WORD가 보입니다.

아마 자료형의 종류겠죠?

 

WORD란 typedef로 재정의된 정수형 자료형입니다.

운영체제를 만든 사람들이 만든 자료형으로 win API에 정의된 WORD

이름 크기
BYTE 2bit
WORD 16bit
DWORD 32bit
QWORD 64bit

이제 PE파일 포맷을 다시 공부하면 되겠군요!

 

===================================================================

아 시발 자취하는게 생각보다 ㅈㄴ 안정적이다. 정말 하루하루가 긴장의 나날들이었는데.... 혼자만의 시간을 가지고 혼자만의 독립된 공간을 가진다는 게 이렇게 행복할 줄 몰랐다. 그렇다고 먹고 싶을 때 자고 싸고 일어나는 것은 아니다. 오히려 전보다 엄격하게 시간을 관리하고 있다. 3시 세끼 밥을 해서 먹는다. 진짜 매일 패스트푸드만 먹고 어떻게 사는지 모르겠다. 밤에는 편안하게 독서도 하고 저번에 꽃병에 꽃아 둔 개나리는 너무 잘 자라서 뭔가 좋다. 파도 잘 자라다가 요즘 천천히 자란다. 내가 많이 잘라먹어서 그런 것 같기도 하고 어쩃든 채소도 길러볼 계획이다. 문제는 이 일상의 행복이다. 일상의 행복에 젖어서 그냥 하루하루 보내면 안 된다. 매일 수업에 열심히 임하고 자기 관리에 힘써야 한다. 근데 그러기가 너무 힘들다... 미치겠다.

반응형

'리버싱 > 리버싱 핵심원리' 카테고리의 다른 글

EAT  (0) 2020.04.05
IAT  (0) 2020.03.29
RVA to RAW  (0) 2020.03.11
PE File Format : PE Heder  (0) 2020.03.09
도대체 리버싱을 어떻게 공부해야 하나요?  (0) 2020.03.04
Posted by 53C
,
반응형

EAT(Export Address Table)

라이브러리 파일(함수를 모아 놓은 파일(ex:ELL,SYS))에서 제공하는 함수를 다른 프로그램이 가져다 사용할수 있도록 하는 핵심 매커니즘을 말한다.

1. EAT 를 이용해야 해당 라이브러리에서 익스포트하는 함수의 시작 구소를 정확하게 알수있다.

2. PE파일내에 특정 구조체 (IMAGE_EXPORT+DIRECTORY)에 익스포트 정보를 저장하고 있다.

 

 

반면에 PE파일은 여러개의 라이브러리를 동시에 임포트할수 있기 때문에 IAT(프로그램이 어떤 라이브러리에서 어떤 함수를 사용하고 있는지를 기술한 테이블)를 설명하는 IMAGE_IMPORT_DECRIPTOR 구조체는 여러개의 멤버를 가진 배열의 형태로 존재한다.

 

IMAGE_IMPORT_DIRECRTORY 구조체의 시작주소 : IMAGE_OPTIONAL_HEADER32.DataDirectory[0]의 RAV값

IMAGE_OPTIONAL_HADER32 는 NTHEADER - OptionalHader에 위치한다.

kernel32.dll

0000262C = RAV(VitualAddress)

0000C6FD = Size 멤버

 

하... 시발 좃같네 일단 다시 PE해더부터 다시 공부하면서 해야겠다..

 

반응형

'리버싱 > 리버싱 핵심원리' 카테고리의 다른 글

PE 파일구조 복습1차 (구조체!)  (0) 2020.04.05
IAT  (0) 2020.03.29
RVA to RAW  (0) 2020.03.11
PE File Format : PE Heder  (0) 2020.03.09
도대체 리버싱을 어떻게 공부해야 하나요?  (0) 2020.03.04
Posted by 53C
,
반응형

a=a+2;

printf("%c",a);

이번시간에는 자료형을 공부하고 실습을 주로했습니다.

자료형을 공부하면서 바이트 비트와 같은 단위가 많이 나왔는데 이부분을 정리해보겠습니다.

 

.

컴퓨터는 0과 1밖에 연산하지 못합니다. 컴퓨터 공학에서는 많이 다루는 내용으로 컴퓨터의 메모리는 콘덴서로 이루어 졌있습니다. 콘덴서는 축전기를 뜻하고 축전기는 전기를 모으고 방출을 하는 역활을 하는데 이떄 축전기가 차있으면 컴퓨터는 1이라고 비어 있으면 0이라고 인식을 하기 때문입니다. 

비트는 하나의 콘덴서를 의미한다고 생각하면 쉽습니다.

비트가 8개 모이면 1바이트가 됩니다.

 

진수변환에 대해서는 저도 어려웠던 부분입니다. 잘정리가 된 블로그가 있습니다.

https://xn--ex3bt1ov9l.kr/5

 

2진수 8진수 16진수 10진수 변환

2진수(binary) - 0~1을 나타낼 수 있음 - 가장 큰 수 1의 값은 : 1 - 따라서 2진수는 1개의 비트만 있으면 모두 표현 가능 8진수(octal) - 0~7을 나타낼 수 있음 - 가장 큰 수 7의 이진수 값은 : 111 - 따라서 8진..

xn--ex3bt1ov9l.kr

 

언더 플로와 오버플로

 

약간의 저의 생각을 적으면...

c언어는 스택이라는 자료구조로 데이터가 쌓이게 되는데 오버플로를 이용해서 프로그램에 오류를 발생시티는 해킹기법인 스택 오버플로우 공격이 있습니다. 오버 플로우는 우리가 배우는 모든 언어에 공격이 가능합니다. C언어는 스택이라는 자료구조를 사용합니다. 반면에 자바는 힙이라는 자료구조를 사용하는데 그래서 자바에서는 힙 오버플로라는 공격이 존재하죠 해킹뿐만 아니라 개잘에 있어서도 오버플로를 발생하지 않개 예외처리하거나 미리 오버플로를 방치하는 코드가 있어야합니다. 안그러면 프로그램음 오류를 발생시킵니다.

우리는 자료형의 크기를 배웠습니다. 예를 들어서 char형을 예로 들어 보겠습니다. char 은 1byte의 크기를 가집니다.

1바이트로는 01111111 즉 127까지 나타낼수 있는데 127을 넘어가면 다시 초기 값인 -128이 나타나고 반대로 -128은 127이되는 언더플로 현상이 나타나게 됩니다.

 

 

 1의 보수 와 부동 소수점

 

011111111111 +1 =32768

100000000000 = -32768

1의 보수를 취하게 되면 오버플로에의해서 -값으로 변하는 것을 알수 있습니다.

 

여기서 가장 앞자리는 컴퓨터에서 부호 비트로 사용이 되기 때문입니다.

실수형 자료형의 비트를 확인해보면

부호비트와 지수부 가수부로 나뉘는 것을 알 수 있습니다.

 

이번 레포트에 대해서 약간의 팁을 적어보겠습니다.

1. 포인터의 원리와 c언어가 변수를 저장하는 방법

모든 프로그램은 변수를 메모리에 저장을 합니다.

이때 포인터란 변수가 저장된 메모리의 위치를 말합니다.

 

printf(1+1);

int a = 10;
printf(a);

이렇게 코드를 짜면 아마 오류가 일어날 가능성이 높습니다.

a는 변수 10이 아닌 변수 10이 저장된 메모리의 위치를 저장합니다.

메모리는 2진법으로 저장이 되어 있습니다.

00001010 이렇게 저장이되는데 이걸 출력하라고 하면 이것이 실수를 출력하라는 건지 정수를 출력하는 것인지 우리는 정의 해주어야 합니다.

그래서 서식 지정자가 존재하죠

그래서 정수형으로 변수를 선언 했으니 정수형을 출력하도록 조치를 해주어야 합니다.

printf("%d",10);

이런 식으로 처리를 해주어야 프로그램이 올바르게 실행이 됩니다.

 

앞서 변수는 메모리 즉 2진수로 저장된다고 말했습니다.

char 변수를 예로 들어 보겠습니다.

char a= 'A'

이렇게 코드를 코드를 작성해주면 변수 a에는 무엇이 저장될까요?

a에는 a의 변수를 저장한 메모리주소이고 그 메모리 주소의 값은 이진의 형태인 1000001 로 저장이 됩니다.

즉 컴퓨터는 비트 연산을 합니다. 그래서 형변환 없이 정수 2를 더해주면1000011로 변하게 됩니다.

그리고

a=a+2;
printf("%c",a)

이런식으로 문자를 출력하도록 서식 지정자를 정해주면

1. a의 메모리 값을 불러온다.

2. 메모리 값을 문자로 출력하다.

로 우리가 원하는 값을 출력할 수 있습니다.

 

혹시 카이사르 암호, 시저 암호에 대해서 알고 계신가요?

궁금하다면 한번 찾아보고 이번에 배운 내용과 수학적 원리를 이용하면 쉽게 해독하는 프로그램을 제작할 수 있습니다.

반응형
Posted by 53C
,