'정보이야기'에 해당되는 글 9건

  1. 독서 토론 진행과 방법 2
  2. 배치파일(.bat)에서 드래그 앤 드롭 파일 인식
  3. 무료 소스코드 난독화 서비스 코드잼(Codejam)
  4. 샌드박스(Sandbox) 개념 5
  5. 리버스 엔지니어링 툴 정리 1
  6. 괜찮은 IT 뉴스 사이트 - IT World Korea
  7. 2012 OLC Center 무료 공개 SW강좌
  8. 티스토리 최신버전 코드하이라이터 적용 8
  9. command, statement, instruction에 대해서

독서 토론은 우리의 지적 능력을 향상시키는데 큰 도움을 줍니다. 자기의 생각을 논리적이며 효율적으로 표현할 수 있게 해주고, 사고의 폭 또한 넓어지게 해줍니다. 그러나! 이 좋은 독서 토론을 막상 하려고 하면 토론 진행은 어떻게 해야 하는지, 또 어떻게 토론해야 하는지 막막할 따름입니다.

학계 방면에 연구한 자료가 있을것이라 생각하여 논문을 검색하였고, 독서 토론 진행과 방법에 대한 유용한 정보가 있어 포스트 합니다.


독서 토론 목적
  1. 책을 읽으면서 이해하지 못했던 내용들을 이해할 수 있다.
  2. 책을 아주 정확하게 읽는 습관을 기를 수 있다.
  3. 자기의 생각을 논리적이며 효율적으로 표현하는 능력을 기를 수 있다.
  4. 상대방의 의견을 존중하는 태도로 민주적인 소양을 기를 수 있다.
  5. 발표능력을 기르고 다른 사람의 의견을 듣는 미덕을 기를 수 있다.
  6. 독서 치료적인 차원에서 정신 건강에 크게 도움이 된다.

독서 토론 방법
  1. 자유토론식 : 원탁식 토론으로 사회자 중심으로 진행하는 형식.
  2. 세미나식 : 대 주제를 두고 소 주제 3~4개를 각각 발표자와 질문자가 발표하고 전 회원이 토론하는 형식.
  3. 심포지엄식 : 발표자와 질문자 각각 3~4명이 의견을 말하고 그 의견들을 바탕으로 참석자가 질의 응답하는 형식.
  4. 찬반론식 : 미리 주제와 결론을 정해 놓고 찬반을 논하는 형식.
  5. 포럼식 : 한 사람 또는 여러 사람이 발표하고 청중이 질문하면서 토론하는 형식.
  6. 패널식 : 4~6명이 대립되는 의견을 대표자 자격으로 청중 앞에서 논의하는 방식.
  7. 연극식 : 책 내용의 주인공역을 맡아 연극하는 형식이 있다.


토론 진행을 맡은 사회자 유념 사항

  1. 사회자 자신의 발언으로 너무 많은 시간을 낭비해서는 안 된다.
  2. 주제별로 토론할 때 한 주제에 시간을 많이 낭비하지 않도록 해야 한다.
  3. 토론에 참여한 회원 중에 발언을 않고 있는 회원에게는 유도 질문으로 참여하도록 해야 한다.
  4. 발언하는 회원들이 한 두 회원에게 집중되지 않도록 발언자들을 배려해야 한다.
  5. 회원들이 엉뚱한 이야기로 시간을 낭비할 때는 곧 조절해야 한다.
  6. 회원이 발언하면서 물증을 보일 경우 도와주고 확인 해 주어야 한다.
  7. 토론의 결과에 대하여 결론을 내리려 하지 말고 적당한 선에서 다음 주제로 넘어가도록 한다.


references

  • 김승환, “독서토론의 활성화를 위한 독서자료 활용에 관한 연구”, 2004.



임의의 파일을 드래그 앤 드롭하여 배치파일에 올려놓을 경우, 

배치파일에서 드래그 앤 드롭된 파일을 인식하는 방법입니다.

Example:

만약 배치 파일을 다음과 같이 작성한다면,

echo file: %1
pause


배치파일에 임의의 파일을 드래그 앤 드롭하였을때 다음과 같은 결과를 얻을 수 있습니다.

file: filename.ext



 
Introduction

CodeJam은 한국 저작권위원회에서 프로그램 저작권 관리와 코드 난독화 등을 제공하는 사이트이다.

사이트주소: http://www.codejam.or.kr/


프로그램 저작권 관리는 저작자를 식별할 수 있는 워터마크(watermark)정보를 자동으로 생성하여 이를 프로그램 소스코드에 삽입하고 향후 삽입된 저작자 정보를 자동으로 추출하여 검증해 주는 서비스이다. 본 서비스의 목적은 소프트웨어 소스코드의 유출 및 도용 시에도 삽입된 저작자 식별 정보를 검증하여 저작권 침해 사실을 용이하게 입증함으로써 저작권자 권리 구제의 실효성을 확보하여 소프트웨어 지적재산권 관련 분쟁의 위험을 최소화 하는 것이다.



프로그램 코드 난독화는 특정 난독화 알고리즘(Layout, Data, Control Obfuscation)을 적용하여 소스코드를 분석하기 어렵게 변환해주는 시스템이다. 본 시스템의 목적은 상세설계에 준하는 설계구조와 주석문, 프로그램 처리방식, 기능 배치, 구성 등의 설계아이디어 또는 해당하는 알고리즘이나 성능 및 최적화를 위한 구현 노하우 등이 내포되어 있는 SW 소스코드의 원천기술 유출을 방지하는 것이다.



Method

CodeJam의 저작권 워터마크, 난독화등의 코드 변환은 모두 사이트에서 이루어진다.


먼저 로그인을 하고,



서비스 이용으로 들어가 코드 변환을 한다.



ActiveX가 아닌 Java로 구현되어 있다.



자바 설치가 완료되면 다음과 같은 화면이 나타난다. 

변환하기 위한 소스 폴더 선택과 보호강도를 지정하고, 난독화 실행을 클릭하면 난독화가 수행된다.



난독화 결과 화면



Conclude

코드 난독화 결과물이 보호강도를 가장 높게 하더라도 전문적인 난독화 서비스보다는 높지 않다.

하지만 저작권 관리, 난독화등 코드변환을 사이트에서 쉽게 무료로 변환 가능하므로 유용하게 사용할 수 있을것으로 보인다.


난독화된 c코드

#include <stdio.h>

#define MABANG_SIZE 5 

int MABANG[MABANG_SIZE][MABANG_SIZE]; void init_MABANG(); void move_MABANG(int &row, int &col, int count); void process_MABANG(); void print_MABANG(); void main() { init_MABANG(); process_MABANG(); print_MABANG(); } void init_MABANG() { for(int Rc2hTbzn2xMmQYcV=0; Rc2hTbzn2xMmQYcV<MABANG_SIZE; Rc2hTbzn2xMmQYcV++) { if(0<MABANG_SIZE){ MABANG[Rc2hTbzn2xMmQYcV][0] = 0; }if(1<MABANG_SIZE){ MABANG[Rc2hTbzn2xMmQYcV][1] = 0; }for(int fNbUnAITfcUEkNDz=2; fNbUnAITfcUEkNDz<MABANG_SIZE; fNbUnAITfcUEkNDz++) { MABANG[Rc2hTbzn2xMmQYcV][fNbUnAITfcUEkNDz] = 0; } } } void move_MABANG(int &row, int &col, int count) { MABANG[row][col] = count; row -= 1; col += 1; if(row < 0 && col > MABANG_SIZE-1) { row += 2; col -= 1; } else if(row < 0) { row = MABANG_SIZE-1; } else if(col > MABANG_SIZE-1) { col = 0; } else if(MABANG[row][col] != 0) { row += 2; col -= 1; } else { } } void process_MABANG() { int CBbtF1gJvMzPdA7c = 0; int R7R5hHlcgu6tTD6p = MABANG_SIZE/2; for(int Vz1JrpWh_SwYjvMZ=1; Vz1JrpWh_SwYjvMZ<=MABANG_SIZE*MABANG_SIZE; Vz1JrpWh_SwYjvMZ++) { move_MABANG(CBbtF1gJvMzPdA7c, R7R5hHlcgu6tTD6p, Vz1JrpWh_SwYjvMZ); } } void print_MABANG() { for(int lHXsEid3LaTqU3oN=0; lHXsEid3LaTqU3oN<MABANG_SIZE; lHXsEid3LaTqU3oN++) { if(0<MABANG_SIZE){ printf("%4d", MABANG[lHXsEid3LaTqU3oN][0]); }if(1<MABANG_SIZE){ printf("%4d", MABANG[lHXsEid3LaTqU3oN][1]); }for(int dSdb3Zlsgje_bG59=2; dSdb3Zlsgje_bG59<MABANG_SIZE; dSdb3Zlsgje_bG59++) { printf("%4d", MABANG[lHXsEid3LaTqU3oN][dSdb3Zlsgje_bG59]); } printf("\n"); } 

}


'정보이야기 > 보안정보' 카테고리의 다른 글

샌드박스(Sandbox) 개념  (5) 2012.05.29
리버스 엔지니어링 툴 정리  (1) 2012.05.24


보안과 관련하여 스터디를 하던중 샌드박스라는 말을 처음 접하게 되었습니다.

샌드박스에 데이터를 저장한데는데 좀처럼 와닿지 않더군요. 

그래서 정리해본 샌드박스(Sandbox) 입니다.


샌드박스는 미국의 가정집 뒤뜰에서 어린이가 다치는 것을 방지하기 위해 만든 모래통(Sandbox)에서 유래하였습니다.


실제 샌드박스는 이렇게 생겼습니다.

나무 틀을 박스처럼 만들어 모래를 집어 넣고 아이들이 그 안에서 안전하게 놀수 있게끔 만들어준 것이죠.

마치 작은 놀이터 같습니다. 한국에서는 놀이터가 따로 존재하기에 샌드박스를 좀처럼 보기 힘듭니다.

그래서 처음보고 이런게 있었다니!! 매우 기발하다라고 생각했습니다.


이제 본론으로 넘어와서 이러한 샌드박스가 어떻게 프로그래밍 기술에 도입이 되었을까요 ?

또한 이것이 보안과 어떠한 연관이 있을까요 ?


이 질문에 대한 답은 Sandboxie(http://www.sandboxie.com/)에서 찾을 수 있었습니다.

먼저 Sandboxie 사이트에서 나타나는 이미지를 보겠습니다.


이 이미지는 샌드박스의 개념을 잘 설명해 주고 있습니다.

빨간색 화살표가 움직이면서 하드디스크안에 리소스들을 채우게(저장) 됩니다.

이를테면 인터넷 익스플로러의 경우 웹페이지 접속에 의해 해당 페이지를 받아오는 과정이라 할 수 있습니다.


일반적으로 리소스를 채우게 되는 과정에서 하드디스크에 직접적인 접근이 가능해 

Hard disk (no sandbox) 그림과 같이 될수있는데 여기서 바로 보안 이슈가 발생합니다. 

악의적으로 OS 일부분을 홰손시킬 수도 있고, 다른 어플리케이션의 정보를 홰손시킬수 있는 문제가 발생합니다.


따라서, 이러한 문제를 해결하는 방안으로 샌드박스가 등장합니다.

Hard disk (with sandbox) 그림과 같이 하드디스크에 특정 영역을 샌드박스로 지정하고 

이 영역에 대해서만 리소스를 사용하고 접근하도록 합니다. 

즉, 샌드박스는 OS와 같은 중요한 영역에는 영향을 주지 않도록 각자의 박스(영역)에서만 리소스를 사용하도록 한 것입니다.


또한 반대의 개념으로도 사용가능해, 샌드박스 안에 있는 리소스에 외부 접근을 거부하여 보호할 수도 있습니다.

마치 아이들을 주변의 위험으로부터 보호하듯이 말이죠.



리버스 엔지니어링(Reverse Engineering)은 완성된 제품을 분석하여 제품의 기본적인 설계 개념과 적용 기술을 파악하고 재현하는 것입니다. 설계 개념→개발 작업→제품화의 통상적인 추진 과정을 거꾸로 수행하는 학문입니다. 보통 소프트웨어 제품은 판매 시 소스는 제공하지 않으나 각종 도구를 활용하여 컴파일된 실행 파일과 동작 상태를 정밀 분석하면 그 프로그램의 내부 동작과 설계 개념을 어느 정도 추적할 수 있습니다.

이러한 정보를 이용하면 크랙, 즉 실행 파일을 수정하거나 프로그램의 동작을 변경할 수 있고, 또 유사한 동작의 복제 프로그램이나 보다 기능이 향상된 프로그램도 개발할 수 있습니다. 소프트웨어에 대한 역공학 자체는 위법 행위가 아니지만, 대부분의 제품이 이의 금지를 명문화하고 있어 이러한 수법으로 개발한 제품은 지적 재산권을 침해할 위험성이 있습니다. (네이버 지식사전)

개인적으로 조사한 PC환경에서 리버스 엔지니어링을 돕는 툴은 다음과 같습니다.

No Attack Tools Attack Type Description Reference
1 ShowString Binary Analysis 프로그램 내부 스트링 보여줌 http://jok3.tistory.com/
2 Resource Hacker Plus Binary Analysis 소프트웨어 리소스 편집 http://jkblog.tistory.com/
3 ResHacker Binary Analysis 소프트웨어 리소스 편집 http://honollulu.tistory.com/18
4 softICE Debugger    
5 TRW2000 Debugger    
6 Ollydbg Debugger, Disassembler 가장 범용으로 사용되는 툴   
7 IDA Pro Debugger, Disassembler    
8 VBDE Decompiler 비주얼베이직으로 만들어진 프로그램 분석 http://jkblog.tistory.com/
9 sothink SWF Decompiler Decompiler 플래시 디컴파일러  
10 Reflector Decompiler 닷넷 프로그램 디컴파일러  
11 DeDe Decompiler 델파이 디컴파일러  
12 JAD Decompiler 자바 디컴파일러  
13 W32dsm9b Disassembler   http://jkblog.tistory.com/
14 UltraEdit Hex Editor    
15 WinHex Hex Editor    
16 Filemon Monitoring    
17 Regmon Monitoring    
18 TcpView Monitoring    
19 Procexp Monitoring    
20 Process Hacker Monitoring   http://processhacker.sourceforge.net/
21 티서치 Patching 메모리 패치  
22 치트엔진 Patching 메모리 패치  
23 GMER Rootkit Detection    
24 IceSword Rootkit Detection    
25 Exeinfo PE Unpacker   http://jok3.tistory.com/
26 ImportREC Unpacker   http://jkblog.tistory.com/
27 Themida Unpacker Unpacker   http://jkblog.tistory.com/
28 UPX Unpacker    
29 Universal Extractor Unpacker    
30 VMUnpacker Unpacker    
31 PEiD Unpacker, Binary Analysis   http://jok3.tistory.com/


Attack Type에 대한 설명입니다.

No Attack Type Description
1 Binary Analysis 프로그램 바이너리를 분석한다.
2 Debugger 디버거(debugger)는 디버그를 돕는 도구이다. 디버거는 주로 원하는 코드에 중단점을 지정하여 프로그램 실행을 정지하고, 메모리에 저장된 값을 살펴보며, 실행을 재개하거나, 코드를 단계적으로 실행하는 등의 동작을 한다. 고급 디버거들은 메모리 충돌 감지, 메모리 누수 감지, 다중 스레드 관리 등의 기능도 지원한다.
3 Disassembler 어셈블리어를 기계어로 번역하는 것이 "어셈블러"(assembler)이며, 거꾸로 기계어를 어셈블리어로 바꾸는 것은 "디스어셈블러"(disassembler)이다.
4 Decompiler 실행코드에서 소스코드를 역으로 추출한다.
5 Hex Editor 헥사에디터는 기존의 일반 컴퓨터의 워드프로세서 및 편집기 소프트웨어에서 읽을 수 없는 이진 파일을 읽을 수 있는 프로그램을 통틀어서 말한다.
6 Monitoring 프로그램 상태를 감시한다.
7 Patching 프로그램 메모리 영역에 데이터를 덫붙(Patching)인다.
8 Rootkit Detection 해커들이 시스템을 해킹할 때 시스템 이용자가 해킹당하고 있음을 알지 못하도록 하기 위해 사용하는 도구(프로그램 등)를 말한다. 루트킷을 설치하는 목적은 해커들이 나중에 시스템에 접근할 때 들키지 않으려는 것이다. 즉, 해커들은 이 도구를 사용해서 컴퓨터의 제어권을 가로채고 자신들이 하는 일을 감출 수 있다.
9 Unpacker 일반적인 SW들은 리버스 엔지니어링을 막기 위해서 암호화를 하거나 압축을 하여 소스코드를 볼수 없도록 하고 있습니다. 이러한 과정을 패킹이라고 한다. 소스코드를 보기 위해서는 이렇게 패킹된 코드를 풀어야 하는데 이러한 과정을 언패킹이라고 한다.



IT World Korea: http://www.itworld.co.kr/


이곳저곳에서 IT관련 자료를 찾던중 괜찮은 뉴스 사이트를 발견해 글을 작성합니다.

최신 IT 뉴스들이 발빠르게 업데이트 되며, 특히 좋은점은 외국의 IT 정보들도 빠르게 번역하여 올리는듯 합니다.

또한 관련 기사와 관련 라이브러리들을 받을 수 있어 유용합니다. 완소 사이트 ^^


티스토리에서 최신버전의 코드하이라이터를 적용해보자!

포스트 일자 기준 최신 버전(SyntaxHighlighter 3.0.83) 적용은 아래와 같이 나타난다.

또한 적용을 하면서 문제가 됬던 부분들에 대해서 해결 방안들을 제시하고자 한다.

  
#include <stdio.h>

void main()
{
	printf("코드하이라이터 테스트\n");
}


코드 하이라이터의 최신 버전에서는 심플하고 다양한 테마들을 적용할 수 있게 해준다.

코드 하이라이터의 적용은 다음 블로그를 참조하였다.

참조: http://twoday.me/entry/티스토리-SyntaxHighlighter-3x-적용하여-꾸미기


게시글에 코드를 넣고자 한다면 HTML 편집기에서 다음과 같이 작성한다.

brush의 경우 자신이 원하는 코드 타입을 넣어준다.

<pre class="brush: cpp;">  
<!--하이라이트할 소스-->
</pre>


이제 적용하면서 문제가 됬던 부분들을 정리해본다.


1. First Problem

HTML 편집화면에서 pre태그를 이용하여 코드하이라이터를 잘 적용하였다.

하지만 테스트로 C코드를 추가하였는데 다음과 같은 문제가 발생하였다.

#include 

void main()
{
	printf("코드하이라이터 테스트\n");
}


7번째 라인에서 원하지 않는 </stdio.h>가 추가되었다.

크게 문제가 되지는 않지만 거슬린다. 또 지우고 포스트를 업데이트 시켜도 마찬가지다.

추후 버전이 업데이트 되면 해결될거 같지만 현재 해결할 수 있는 방법이 있기 때문에 이를 적용해보자.

<pre class="brush: cpp;">  
#include &lt;stdio.h&gt;

void main()
{
printf("코드하이라이터 테스트\n");
}
</pre>


<stdio.h> 부분을 아마도 태그로 인식하고 자동으로 </stdio.h> 추가하는 모양이다.

따라서 "<" ">" 기호를 태그로 변경해주었다.

< → &lt;

> → &gt;

태그로 변경해 주면 문제가 해결된다. 하지만 모든  "<" ">" 기호가 들어간곳을 일일이 변환해 주기란 어렵다.

이를 빠르게 변환해주는 툴을 찾아보았다. 역시 있었다! (SimpleLayoutConverter.jar 툴)

참조: http://androidhuman.tistory.com/264


2. Second Problem

코드하이라이터를 적용하고 크롬 브라우저에서 보면 스크롤바가 생긴다.

또한 익스플로러에서 마우스를 이용하여 코드하이라이터 내용을 드래그해도 히긋히긋? 움직인다.

이와 관련된 문제는 구글에서 찾을수 있었다.

참조: https://bitbucket.org/alexg/syntaxhighlighter/issue/177/superfluous-vertical-scrollbars-in-chrome


해결하기위한 좋은 방법은 스크롤을 없에는 것인데...

스킨 html 파일에 다음과 같은 코드를 추가하는 것이다.

<style type="text/css">
.syntaxhighlighter { padding-bottom: 1px; }
</style>


이와같이 스킨파일을 수정하고 보면 크롬에서 나타나는 스크롤바와 익스플로러에서 히긋히긋? 거리는 현상이 사라진다.


개발과 관련된 영문 스펙이나 가이드를 읽다보면 command, statement, instruction을 자주보게 된다. 뜻도 찾아보면 다같은 명령이라는 뜻이라 좀처럼 구분하기 쉽지 않다. 이와 관련된 정보를 찾다가 잘 정리된 것을 찾아 작성한다.

 

1. command

유닉스에서 어떤 프로그램을 자식 프로그램(child program)으로서 실행하기 위해 셸(shell)에 부여하는 명령을 말한다. 입출력 조작에서 입출력 채널이 실행하는 명령을 말함.

사용자가 직접적으로 수행하는 명령을 나타낸다고 이해를 하세요.

 

2. statement

프로그램 작성 언어에서, 일련의 동작들의 한 단계 또는 한 조의 선언을 나타내는 구문상의 구성 요소. 보통 그 언어의 문맥 내에서는 완결되어 있는 것을 말한다. 보통 어느 프로그램의 각 행은 하나의 개별적인 문장이며, 하나의 개별적인 명령(instruction)으로 간주된다. 프로그램 작성 언어에 따라서 문장의 정의가 똑같지는 않으나, 대부분의 언어에서 대입문(assignment statement), 제어문(control statement), 주석문(comment statement) 등의 개념을 지원하고 있다.

프로그램에서 사용하는 명령어로 이해를 하세요.

 

3. instruction

컴퓨터는 일정한 문법과 용어, 즉 컴퓨터가 이해할 수 있는 언어인 기계어(machine language)로 작성된 프로그램을 받아들인 후, 그 지시에 따라 움직인다. 이 기계어 프로그램에서 사용하는 동작 지시가 명령(instruction)이다. 그러므로 명령은 컴퓨터 프로그램의 기본으로서 컴퓨터 동작을 지시하는 부호 단위인 셈이다.

하드웨어에서 이루어지는 명령어로 이해를 하세요.

 

 

Instruction(하드웨어적인 명령) < statement(소프트웨어적인 명령) < command(유저명령)

  

참조: http://kin.naver.com/qna/detail.nhn?d1id=1&dirId=10302&docId=69777995&qb=aW5zdHJ1Y3Rpb24=&enc=utf8&section=kin&rank=3&search_sort=0&spq=0