블로그 이미지
fiadot_old

칼퇴근을 위한 게임 서버 개발 방법론에 대한 심도있는 고찰 및 성찰을 위한 블로그!

Rss feed Tistory
카테고리 없음 2009. 10. 18. 17:11

원고....

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력해주세요.

Technical Article 2009. 8. 15. 10:21

온라인 게임 보안툴 분석

게임 서버 프로그래머이지만 게임을 개발하는 사람으로써 우리가 원하는

컨텐츠를 사용자가 즐기는데 있어서 장애가 될만한 요소를 제거하는것이

의무가 아닐까?

서비스를 하게되면 일반적으로 게임전용 보안툴을 클라이언트와 같이 배포하게

되는데 정식 서비스를 하면서 게임 보안용 툴을 설치하지 않는 클라이언트는

별로 없을 것이다.

최근 몇가지 보안툴의 분석을 통해 알아본 몇가지 특정을 간략히 정리해

보고자 한다.


<기술적인 차단 기능>

1. App와 Driver의 통신에 사용되는 DeviceIO를 차단한다.

2. 전역후킹을 사용가능하지만 보안툴이 떠있는 중에 후킹을

Load, Unload하게 되면 Application 자체를 차단시킨다.

일반적으로 강제 프로세스 종료를 차단하고 기능을 동작하지 못하게 한다.

3. 기본적인 필터 드라이버를 차단한다.

4. 바이너리는 실행파일 압축을 하고 Anti-Debug가 붙어있다.

5. 바이너리의 해쉬를 서버에서 검증한다.


<문제점>

1. App와 Driver 통신시 DeviceIO이외의 방법을 사용하면 막지 못한다.

2. HID 드라이버로 구현했을때 막지 못한다.

3. 개발자가 디버깅하는데도 충돌한다.


,
마이크로소프트웨어 2009. 5. 21. 00:37

병렬처리 개발의 모든것 Intel Parallel Studio 리뷰(Part1. Composer)

[마이크로소프트웨어]  2009년 8월 초고

병렬처리 개발의 모든것

Intel Parallel Studio 리뷰(Part1. Composer)

-------------------------------------------------------------------

이근호 fiadot@gmail.com, http://www.fiadot.com | 현재 온라인 게임 개발 업체인 NeonSoft Inc.에서 근무중이며, 칼퇴근을 위한 게임서버 개발에 대한 블로그를 운영하고 있다.

-------------------------------------------------------------------


멀티코어가 점차 대중화됨에 따라 병렬처리에 대한 개발자의 관심도 급격히 높아지고 있다. 이에 인텔에서는 새로운 제품군을 내놓았는데 그것이 바로 Intel Parallel Studio(이하 IPS) 이다. IPS는 크게 3가지로 구성되어 있는데, 컴파일과 디버깅에 관한 Composer, 에러 검출을 위한 Inspector, 마지막으로 성능 튜닝을 위한 Amplifier로 구성된다.

제품 개발에 있어서 개발, 검증, 성능 등 개발자가 필요한 일련의 툴을 포함하고 있어, 개별 도구들을 조합해서 사용해야 하는 불편함을 덜 수 있는 통합 개발 환경이다.

베타 버전을 통해서 이에 대해서 알아보도록 하자.

<이하생략>


 

,
Diary 2009. 4. 20. 12:48

스킨 변경중...


한동안 제대로 출력이 안될 수 있습니다.

^_^

,
Technical Article 2009. 2. 13. 20:49

Boost 1.38.0 Test만 빌드하는 방법

UnitTest를 위한 프레임웍을 살펴보던중 UnitTest++과 Boost::Test가 가장 눈에 띄었다.

UnitTest++ 다운 후 간단히 빌드가 되지만 Boost::Test를 사용하기 위해서는 몇가지 빌드 과정이 필요하다.

<준비>
XP+sp3, VS2005, boost 1.38.0

1. http://www.boost.org/ 에서 download로 가서 boost_1_38_0 파일을 다운로드

2. 압축을 풀고 tools/jam/src에서 build.bat 실행
   혹시 에러가 발생한다면
   (1) Path가 너무 많을때
   (2) 시작-프로그램-Microsoft Visual Studio 2005-Visual Studio Tools-Visual Studio 2005 명령프롬프트를 실행해서 해당 경로로 이동해서 실행

3. 해당 경로 밑에 bin.ntx86/bjam.exe가 생성됨.

D:\boost_1_38_0\tools\jam\src\bin.ntx86>set path=%path%;D:\boost_1_38_0\tools\jam\src\bin.ntx86

4. bjam으로 test release/debug 모두 빌드
D:\boost_1_38_0\libs\test\build>bjam -sBUILD=boost_unit_test_framework --toolset=msvc --build-type=complete

  인자 : 빌드옵션(release +  debug = complete)


시간 무지하게 걸린다 ㅡㅡ;;
,
Diary 2009. 2. 12. 12:51

위메이드, 쯔바이 온라인 퍼블리싱 계약 체결!!

[ONLINE] 위메이드, 쯔바이 온라인 퍼블리싱 계약 체결



위메이드 엔터테인먼트는 2월 11일 본사에서 네온소프트와 조인식을 갖고 `쯔바이 온라인(ZWEI Online)`의 퍼블리싱 계약을 체결했다.

위메이드는 앞으로 `쯔바이 온라인`의 국내외 마케팅과 서비스 운영 전반을 맡게 되며, 네온소프트는 게임 개발을 담당하게 된다. 이번 계약으로 이미 아시아권에서 유명한 원작 `쯔바이`의 명성을 통해, 위메이드의 글로벌 시장 공략도 더욱 힘을 받게 될 전망이다.

원작 `쯔바이`는 이스(YS), 영웅전설 등을 개발한 팔콤 RPG시리즈로 동화 같은 그래픽과 탄탄한 스토리, 여기에 열렬한 지지를 받은 바 있는 아름다운 선율의 배경음악이 어우러진 패키지 게임 시절의 명작으로 꼽히고 있다.

`쯔바이 온라인`은 원작의 탄탄한 완성도에 온라인에서만이 구현 가능한 다양한 시스템을 추가해 이용자들을 새로운 RPG의 세계로 인도 할 예정이다.

개발사인 네온소프트 서영갑 대표는 “쯔바이 온라인은 모든 연령대에 사랑 받는 건전한 온라인게임이 될 것이며, 매일 부담 없이 접속할 수 있도록 유쾌한 게임으로 선보이겠다.”고 말했다.

위메이드 서수길 대표이사 역시 “위메이드의 2009년 첫 퍼블리싱 작품이자, 글로벌 시장을 공략하기 위한 최상의 게임 포트폴리오를 갖추게 되었다” 며 “이용자들에게 높은 수준의 서비스를 제공하기 위해 모든 열정을 다 할 것” 이라고 전했다.

한편, `쯔바이 온라인`은 2009년 내 비공개테스트를 통해 첫 선을 보일 계획이다.

 

 

우리회사 이사님과 위메이드 상무님 한컷~ 호호~ *^^*

,
Technical Article 2009. 2. 10. 16:27

Visual Studio 2005 단축키 설정이 제대로 바인딩 안될때 해결방법

Visual Studio 2005에서 도구-설정 가져오기 및 내보내기를 통해서 사용자가 지정한 단축키를 내보내기를 하고 재설치를 하거나 다른 컴퓨터에서 가져오기를 했을때 키보드 바인딩이 제대로 안되는 경험을 해보았을 것이다.

내보내기(export)한 파일(.vssettings)를 보게되면 지정된 단축키와 제거된 단축키와 관련된 전체 히스토리까지 저장되서 가져오기를 했을때 제대로 처리가 안된것이다.


1. 이를 방지하기 위해서 키보드 바인딩만 내보내기를 한다.

사용자 삽입 이미지

2. 저장된 파일을 텍스트 에디터를 이용해 Shortcut Command만 남기고 모두 삭제한다. 중복된 부분도 보이는데 이런 부분은 현재 사용중인것만 남기고 삭제한다.

3. 그리고 단축키를 제외한 파일을 만들어서 단축키와 환경설정에 대해서 별도로 관리를 하면 된다.
LEEGUNHO_VS2005_Keybinding.vssettings
LEEGUNHO_VS2005_WithoutKeyBinding.vssettings


■ 지정 단축키 ■

[code]
    <UserShortcuts>
     <Shortcut Command="VisualAssistX.SurroundSelectionWithComment" Scope="전역">Ctrl+/</Shortcut>
     <Shortcut Command="VisualAssistX.ReparseCurrentFile" Scope="전역">Ctrl+Shift+W</Shortcut>
     <Shortcut Command="Project.SetasStartUpProject" Scope="전역">Ctrl+Shift+'</Shortcut>
     <Shortcut Command="Window.CloseAllDocuments" Scope="전역">Ctrl+Shift+C</Shortcut>  
                   <Shortcut Command="Build.BuildSelection" Scope="전역">F7</Shortcut>
     <Shortcut Command="Build.RebuildSelection" Scope="전역">Ctrl+Shift+A</Shortcut>    
     <Shortcut Command="Project.AddNewItem" Scope="전역">Ctrl+Shift+N</Shortcut>
     <Shortcut Command="Project.AddClass" Scope="전역">Ctrl+Shift+M</Shortcut>
     <Shortcut Command="ClassViewContextMenus.ClassViewProject.Debug.Startnewinstance" Scope="전역">Ctrl+Alt+F6</Shortcut>
     <Shortcut Command="View.ErrorList" Scope="전역">Ctrl+1</Shortcut>
     <Shortcut Command="View.Output" Scope="전역">Ctrl+2</Shortcut>
     <Shortcut Command="View.FindResults1" Scope="전역">Ctrl+3</Shortcut>
     <Shortcut Command="View.CodeDefinitionWindow" Scope="전역">Ctrl+4</Shortcut>
     <Shortcut Command="File.GetLatestVersion" Scope="전역">Alt+1</Shortcut>
     <Shortcut Command="CheckIn" Scope="전역">Alt+2</Shortcut>
     <Shortcut Command="View.PendingCheckins" Scope="전역">Alt+3</Shortcut>
    </UserShortcuts>
[/code]

,
Book 2009. 1. 28. 20:53

테크니컬 라이터를 꿈꾸는 사람에게 어울리는 책-명쾌한 이공계 글쓰기

명쾌한 이공계 글쓰기명쾌한 이공계 글쓰기 - 10점
김성우 지음/제우미디어

월간 <마이크로소프트웨어>에 몇번의 기고를 통해서 느낀것이 있다면 '지식을 글로 전달하기 위해 글을 쓴다는것은 참 어렵구나' 하는 것이다. 평소 원고를 준비하면서 느낀 주제선정과 그 폭의 선택, 독자의 수준등 여러가지를 고민하게 된다. 이것이 또 잘 전달될 수 있는 문장의 연결과 설명 방법과 같은것도 간과할수 없는 부분이다.

이 책에서는 그동안 고민해왔던 이러한 여러 부분들에 대해 다양한 예를 들어 이해하기 쉬우면서 가볍지 않게 전해주고 있다. 또 사고의 폭을 넓힐 수 있는 다양한 추천도서를 담고 있는데 대부분 소장하고 있는 책이 거론되서 왠지모를 저자 김성우씨와의 정신적 교감이 이루어지는 듯한 기분도 들었다.

마지막 페이지에 기억나는 문구가 하나 있다.
"만약 지금 공부하고 익히는 것이 다른 것으로 설명된다면 곧 없어질 것이라고 봐도 좋다."
기술적인 글을 쓰기 위해 준비하거나 쓰고있는 사람들에게 꼭 추천하고 싶은 서적이다.
http://www.fiadot.com/TatterTools2009-01-28T11:53:330.31010
,
Hardware 2009. 1. 28. 13:11

마이크로마우스 Jina의 캐릭터 LCD(LC1621) 제어 소스 공개

2007년에 만들었던 프로젝트 소스들이 다 날아간걸로 생각하고 있었는데, 어느분의 OCR관련 메일을 계기로 백업해두었던 DVD, CD를 모두 뒤져 보고 마이크로마우스 관련 소스를 다시 찾게 되었다.

예전에 LC1621의 소스를 요청하셨던 분이 계셨는데 시간이 많이 지났으니 해결하셨으리라 생각하지만, 이제 시작하는 다른 분들에게 도움이 됐으면 하는 바람에서 소스를 올린다.


fiaavr_def.h : 포트별 연결된 정보와 기본 정의를 담고 있다.
[code]
/**                                                                 
 @file        fiaavr_def.h
 @date    2007/3/7
 @author 이근호(fiadot@gmail.com)
 @brief    Atmega128 개발용 공통 헤더 헤더 
*/


/*****************************************************
This program was produced by the
CodeWizardAVR V1.24.8d Professional
Automatic Program Generator
?Copyright 1998-2006 Pavel Haiduc, HP InfoTech s.r.l.
http://www.hpinfotech.com

Project : jINa
Version : 1.2.0
Date    : 2007-03-04
Author  : LEE GUNHO
Company :                   
Comments: Started at 2007.1.7

Chip type           : ATmega128
Program type        : Application
Clock frequency     : 16.000000 MHz
Memory model        : Small
External SRAM size  : 0
Data Stack size     : 1024
*****************************************************/

#ifndef  __FIAAVR_DEF_H__
#define  __FIAAVR_DEF_H__

///////////////////////////////////////////////////////////
// [Ports Information]
///////////////////////////////////////////////////////////


/*           

Port A
0 -  (LCD)RS
1 -  (LCD)RW
2 -  (LCD)E
3 -  (부저)
4 -  (LCD)DB4
5 -  (LCD)DB4
6 -  (LCD)DB4
7 -  (LCD)DB4
  
Port B
0 -
1 - (ISP) SCK
2 - (ISP) MOSI - 확실치 않음 --;; 회로보고 검증해봐!
3 - (ISP) MISO
4 -
5 -
6 -
7 -

Port C
0 - (MotorL) A B A' B' 2 0 3 1
1 - (MotorL)
2 - (MotorL)
3 - (MotorL)
4 - (MotorR) A B A' B' 6 4 7 5
5 - (MotorR)
6 - (MotorR)
7 - (MotorR)
 
Port D
0 -
1 -
2 -
3 -
4 - (초음파1) Triger Pulse 앞
5 - (초음파2) Triger Pulse 우 (위에서 봤을때)
6 - (초음파3) Triger Pulse 좌
7 -  

Port E
0 - 테스트용 LED
1 -
2 - (블루투스)RX1
3 - (블루투스)TX1
4 - (초음파1) Echo Pulse - 인터럽트 4   앞
5 - (초음파2) Echo Pulse - 인터럽트 5   우 (위에서 봤을때)
6 - (초음파3) Echo Pulse - 인터럽트 6   좌
7 -  

Port F (ADC)
0 - (가스센서) ADC0
1 - (온도센서) ADC1
2 -
3 -
4 -
5 -
6 -
7 -  

*/

///////////////////////////////////////////////////////////
// [Headers]
///////////////////////////////////////////////////////////
#include <mega128.h>      
#include <delay.h>
#include <stdio.h>
#include <stdlib.h>    
#include <string.h>


///////////////////////////////////////////////////////////
// [Definitions]
///////////////////////////////////////////////////////////


// Boolean
#define FALSE  0
#define TRUE   1   
                
// 테스트 LED ON, OFF       
#define DEBUG_LED_ON          PORTF.1 = 1;      // LED On
#define DEBUG_LED_OFF         PORTF.1 = 0;
              
// 부저 ON,OFF
#define SPEAKER_ON            //PORTD.5 = 1;   PORTD.6 = 1;
#define SPEAKER_OFF           //PORTD.5 = 0;   PORTD.6 = 0;
          
// 이동 방향
#define    DIR_FORWARD      0
#define    DIR_RIGHT            1
#define    DIR_LEFT              2
#define    DIR_TOTAL           3


///////////////////////////////////////////////////////////
// [Variables]
///////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////
// [Functions]
///////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////
// [Etc]
/////////////////////////////////////////////////////////// 

// [Reference Sites]
// http://cafe.naver.com/carroty
// http://en.wikipedia.org/wiki/Atmel_AVR


#endif // __FIAAVR_DEF_H__

[/code]


fiasvr_lcd.h : 캐릭터LCD 관련 정의부
[code]
/**                                                                 
 @file        fiaavr_lcd.h
 @date    2007/3/4
 @author 이근호(fiadot@gmail.com)
 @brief    jINa - LCD출력및 디버깅 4비트 제어
*/

#ifndef  __FIAAVR_LCD_H__
#define  __FIAAVR_LCD_H__


///////////////////////////////////////////////////////////
// [Ports Information]
///////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////
// [Headers]
///////////////////////////////////////////////////////////
#include "fiaavr_def.h"


///////////////////////////////////////////////////////////
// [Definitions]
///////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////
// [Variables]
///////////////////////////////////////////////////////////
extern flash unsigned char *Logo;    //  로고 글귀
extern unsigned char pszData[16];  // LCD출력을 위한 스트링

///////////////////////////////////////////////////////////
// [Functions]
///////////////////////////////////////////////////////////

void fialcd_Init(); // LCD초기화 작업!
void fialcd_DrawLogo();
void fialcd_Debug(int nSeq, int nMsg);  // 숫자값을 출력하기 위해서
// 글자하나 찍어볼때   lcd_putchar(getchar1())

///////////////////////////////////////////////////////////
// [Etc]
/////////////////////////////////////////////////////////// 

#endif // __FIAAVR_LCD_H__


[/code]

fiasvr_lcd.cpp : 캐릭터LCD 관련 구현부
[code]
/**                                                                 
 @file        fiaavr_lcd.c
 @date    2007/3/4
 @author 이근호(fiadot@gmail.com)
 @brief    jINa - LCD출력및 디버깅
*/                


///////////////////////////////////////////////////////////
// [Headers]
///////////////////////////////////////////////////////////
#include "fiaavr_lcd.h"


///////////////////////////////////////////////////////////
// [Definitions]
///////////////////////////////////////////////////////////


///////////////////////////////////////////////////////////
// [Variables]
///////////////////////////////////////////////////////////
flash unsigned char *Logo="   Hello!            I'm jINa"; //  로고 글귀
unsigned char pszData[16];  // LCD출력을 위한 스트링


///////////////////////////////////////////////////////////
// [Functions]
///////////////////////////////////////////////////////////

// LCD초기화 작업!

void fialcd_Init()
{
   lcd_init(16);
}
                                       
void fialcd_DrawLogo()
{
   lcd_clear(); 
   lcd_gotoxy(0,0);
   lcd_putsf(Logo);  
}

// 숫자값을 출력하기 위해서
// ex) 초음파 센서 거리출력!
void fialcd_Debug(int nSeq, int nMsg)
{
   lcd_clear(); 
   lcd_gotoxy(0,0);       
   sprintf(pszData, "%d : %d ", nSeq, nMsg);  
   lcd_puts(pszData);
}         


///////////////////////////////////////////////////////////
// [Etc]
/////////////////////////////////////////////////////////// 


[/code]


jina_ver120.c  : 메인 파일에 해당한다.
[code]
/**                                                                 
 @file   ver120.c
 @date  2007/3/4
 @author 이근호(fiadot@gmail.com)
 @brief  jINa
*/

///////////////////////////////////////////////////////////
// [Headers]
///////////////////////////////////////////////////////////
#include "fiaavr_def.h"

#include "fiaavr_lcd.h"     
#include "fiaavr_sensor_gas.h"              
#include "fiaavr_sensor_supersonic.h"              
#include "fiaavr_serial.h"              
#include "fiaavr_stepmotor.h"              
#include "fiaavr_util.h"    
     
     
// LCD부분은 다른곳에 넣으면 안됨!     
// Alphanumeric LCD Module functions
#asm
   .equ __lcd_port=0x1B ;PORTA
#endasm
#include <lcd.h>

///////////////////////////////////////////////////////////
// [Definitions]
///////////////////////////////////////////////////////////

///////////////////////////////////////////////////////////
// [Variables]
///////////////////////////////////////////////////////////
                   
unsigned char pszGasData[16];


///////////////////////////////////////////////////////////
// [Functions]
///////////////////////////////////////////////////////////


// Port initialization
void InitPorts()
{
// Input/Output Ports 초기화
 
//   DDRA=0xFF;  
//   PORTA=0x00;

   DDRC = 0xFF;
   PORTC = 0x00;                 

   DDRD = 0xFF;
   PORTD = 0x00;

   DDRE = 0x00;
   PORTE =0x00;

//   PORTA = 0xFF;
}


// Entry Point!
void main(void)
{
   // Declare your local variables here       
   InitPorts();
  
   fialcd_Init();    
   fialcd_DrawLogo();
   delay_ms(1500);
   lcd_clear(); 

   UARTInit(9600);
     
   SS_InitSensor();       
   InitMotor();
   SS_InitTimer();  
         
   // Timer(s)/Counter(s) Interrupt(s) initialization
   TIMSK=0x41;     // 0,2번 타이머 사용!
   ETIMSK=0x00;

   InitGas();
 
  
   #asm("sei")  // Global enable interrupts


   
  Tx1_String2("jINa Start \r\n");    
 
  while(1)
  {
    
  };
}

[/code]




관련 링크

Atmega128 마이크로마우스 위험인식로봇(http://www.fiadot.com/TatterTools/1849)
16x2캐릭터 LCD(LC1621)에 글자찍기 성공!!!(http://www.fiadot.com/TatterTools/1835)

,
Technical Article 2009. 1. 15. 14:39

OpenSSL 0.9.8j Window에서 빌드 방법

What about OpenSSL

C기반 오픈소스 암호화 라이브러리


설치준비

openssl-0.9.8j.tar

http://www.openssl.org/source/openssl-0.9.8j.tar.gz


Active Perl (ActivePerl-5.10.0.1004-MSWin32-x86-287188.msi)

http://www.activestate.com/store/download.aspx?prdGUID=81fbce82-6bd5-49bc-a915-08d58c2648ca


Nasm

http://www.nasm.us/pub/nasm/releasebuilds/2.06rc2/nasm-2.06rc2-win32.zip


빌드방법 (Windows + Visual studio 2005 )

1] Microsfot Visual Studio 2005 - Visual Studio 2005 Tools - Visual Studio 2005 명령 프롬프트 실행

2] C:\OpenSSL_Install\openssl-0.9.8j\crypto\x509v3\v3_pcia.c 를 Visual studio로 열어서 주석부분을 지운후 유니코드(949)로 다시 저장한다.
v3_pci.c, v3_pica.c 를 C:\OpenSSL_Install\openssl-0.9.8j\crypto\x509에 복사한다!

3] C:\OpenSSL_Install\openssl-0.9.8j에서

perl Configure VC-WIN32

ms\do_ms

static library 생성은   nmake -f ms\nt.mak

dll 생성은 nmake -f ms\ntdll.mak


4] 빌드가 성공하면 out32, inc32 에 프로젝트에서 사용할 library와 include할 헤더가 생성된다.


5] 제대로 빌드가 되었는지 확인하기 위해

C:\OpenSSL_Install\openssl-0.9.8j\out32 에서

..\ms\test

실행한다.

,
TOTAL TODAY