해킹을 배우는 사람의 입장에서 자세하게 풀이법을 정리하고자 합니다. 


WOWHACKER WEBGAME SEASON2  Level 5 풀이법입니다. 


링크: http://webgame.wowhacker.com/UhaveToAuth


주어진 링크를 따라 들어가봅시다. 



다짜고자 이름과 비밀번호를 묻는 창이 뜨는군요. 

인증을 해야만 들어갈 수 있나 봅니다.


자! 단계별로 차근 차근 풀어봅시다.



추천은 저를 춤추게 합니다 ^^



  • 1단계: 취약점 알아보기  


아파치 서버는 웹 인증을 통해 접근을 제어할 수 있습니다. 

'<Limit GET POST PUT>' 처럼 특정 메소드(method)를 지정해주는게 가능합니다. 


문제는 이렇게 하면 지정한 메소드이외의 메소드에 대해서는 인증 절차를 거치지 않고 바로 접근이 가능한 취약점이 있답니다. 


기본적으로 인증 팝업창을 통해서 인증을 시도하게 되면 'GET' 메소드를 사용하게 되는데 이 메소드만 살짝 바꿔서 인증이 우회 되는지 확인해 봅시다. 



  • 2단계: 메소드 편집 툴 설치 


메소드를 변경하는 다양한 방법이 있겠지만 개인적으로 크롬(chrome)을 선호하기에 크롬에서 가능한 방법을 소개하고자 합니다. 

먼저 크롬 앱 스토어에서 'Dev HTTP Client'를 검색해서 설치해봅시다. 



설치를 완료했다면 실행해봅시다. 


플러그인이 아니므로 브라우저 우측 상단에 보이지 않습니다. 

새로운 탭에서 하단의 'Apps'를 선택해야 보입니다. 



위에 보이는 화살표 모양 아이콘을 클릭하면 실행 됩니다. 



정상적으로 실행 된다면 이런 화면이 뜰겁니다. 



  • 3단계: 아파치 인증 우회하기 


URL 입력창에 Level 5 주소를 입력하고 Method를 'POST'로 변경해서 'Send'를 해 봅시다. 



하단부에 결과가 나오는게 보입니다. 

역시나 'POST' 메소드도 제한이 걸려 있나 봅니다. 


여기서 포기하지 말고 다른 메소드로도 시도해 봅시다. 


'OPTIONS' 메소드로 하면.. 



지금까지와 달리 다른 메시지가 나오는걸 볼 수 있습니다. 

내용을 보니 Key 정보까지 보이는 군요. 


이번 레벨은 참 허무(?)하게 성공했네요. 

어쨌든 축하합니다. 


Posted by KT한
,

해킹을 배우는 사람의 입장에서 자세하게 풀이법을 정리하고자 합니다. 


WOWHACKER WEBGAME SEASON2  Level 4 풀이법입니다. 


링크: http://webgame.wowhacker.com/wlv4game/


주어진 링크를 따라 들어가 봅시다. 


로그인 화면이 나오는 군요. 



친절하게 guest 계정의 로그인 정보까지 적어놨군요.

자! 단계별로 차근 차근 풀어봅시다. 



추천은 저를 춤추게 합니다 ^^



  • 1단계: guest 세션키 정보 분석


먼저 guest 계정으로 로그인 해봅시다. 


여기저기 링크가 있군요. 기웃기웃 거려 봅시다. 

혹시 중요한 힌트가 숨겨져 있을지도 모르니깐요. 


'Query' 입력란도 있군요. (아쉽게도 함정입니다. 단순히 경고창만 띄워주도록 되어 있습니다.)

그외에는 별 다른게 없어 보입니다. 


그럼 쿠키 값을 살펴 봐야겠죠? 


크롬(chrome) 브라우저의  'Edit This Cookie' 플러그인을 설치해봅시다. 


크롬의 우측 상단에 쿠키 모양 아이콘을 클릭하면 아래와 같은 창이 뜹니다. 


'WOWSESSIONID' 필드에 보면 왠 값이 들어있네요. 

흠.. 왠지 MD5 해쉬 값인것 처럼 보이는 군요. 


구글에서 MD5 decrypt 를 해주는 사이트를 찾아 들어가봅시다. 

※ 이론적으로 MD5 해쉬는 복호화 할 수 없지만.. DB에 다양한 값들의 해쉬값을 가지고 있으면서 복호화를 수행해주는 사이트가 다수 존재합니다. 



디코드 필드에 복사해온 값을 붙여 넣고 복호화를 시도해봅시다. 


http://md5.web-max.ca/


어라? 복사한 값의 절반 정도만 붙여넣기가 되네요.  

오호라~ 값 2개가 붙어 있나봅니다. 생각중


어쨌든 앞 부분은 복호화를 했더니 'guest'라는 문자열이라고 나옵니다. 

접속 계정의 ID를 MD5 해쉬로 한 값이 앞 부분이라는걸 알아냈군요. 


뒷 부분을 마저 붙여넣기 하고 복호화 해봤더니 찾을 수 없다고 나옵니다. 잘 알려진 패턴은 아닌가 보네요. 



로그아웃 하고 다시 한번 'WOWSESSIONID' 값을 확인해봅시다. 


클릭하면 큰 그림을 볼 수 있어요~ 


'guest'에 해당하는 값은 그대로인데 뒷 부분 값은 변했네요. 

 왠지 접속 시간을 이용해서 'WEBSESSIONID'를 만드는것 같다는 느낌이 드는군요. 


접속 시간인 'LoginTime: 2013-06-05 09:26:27' 값을 timestamp로 변환해 봅시다. 


웹에서 하고 싶으시다면 아래 사이트에서 변환하면 됩니다. 


http://www.epochconverter.com/

local time으로 설정 한 후 timestamp를 생성하면 됩니다. 


물론, Linux(Ubuntu)에서 bash로 변환하는 방법도 있습니다. 

date 명령을 이용하면 쉽게 timestamp값을 구할 수 있죠. 


$ date +%s -d "20130605 09:26:27"

1370391987



여기서 나온 값을 가지고 MD5 해쉬를 구해봅시다. 



물론, MD5 해쉬도 Ubuntu(Linux) 에서 변환하는 방법이 있습니다. 

md5sum 명령어를 활용하면 손쉽게 구할 수 있죠. 


$ echo -n 1370391987 | md5sum

9c90960cf8ec5b1f4e32062884a33ec6  -


결과가 나왔네요. 


9c90960cf8ec5b1f4e32062884a33ec6 


WOWSESSIONID의 time 값과 일치하는 값입니다. 


이것으로 세션키는 접속 계정의 ID 와 접속 시간의 timestamp값의 MD5 해쉬 값이란걸 알게 됐습니다. 



※간혹 위와 동일하게 수행하더라도 결과값이 제대로 나오지 않는 경우가 있습니다. 

원인은 제가 문제 출제자가 아니다 보니 .. 잘 모르겠네요. 



  • 2단계: 관리자 세션키 - 앞 부분 구하기 


현재 접속해 있는 사람 중 'admin'이란 계정이 있는데, 딱 봐도 관리자 계정일거란 생각이 드네요. 

'admin'이란 문자열을 MD5 해쉬한 값을 구해봅시다. 


http://www.md5hashgenerator.com/



  • 3단계: 관리자 세션키 - 뒷 부분 구하기

 이제 'admin'의 접속 시간을 MD5 해쉬한 값을 구해서 세션키를 바꿔치기 해 봅시다. 

그런데.. 'admin'이 언제 접속했는지 어떻게 알아야 할까요?


보아하니 화면 중앙에 있는 공지글을 'admin'이 썼을 테니.. 

최소한 최초 글을 쓰기 이전에 접속을 했겠군요. 



이제 접속 시간을 알아내봐야 할 시간입니다. 


이제 저 삽질하는 이미지의 의미가 이해가 되면서 몸에 와닿기 시작하네요. 

'로그인 시간을 열심히 삽질해서 알아내 봐라!' 라는 의미겠죠? 부처



MD5해쉬 값을 구하기 어려우니 bash로 구해봅시다. 

시간을 넉넉히 잡아 9시 11분 부터 최초 글을 작성한 9시 12분 21초 까지 값을 MD5 해쉬를 수행해봅시다. 


저는 ubuntu에서 아래 명령어로 생성했습니다. 


$ for ((i = 1213056660; i < 1213056741; i++)) ; do  echo -n $i | md5sum  >> mf5_hash.txt; done


내용이 너무 길어서 접어뒀습니다. 보고 싶으신 분들은 아래 클릭! 


이제 'admin'의 해쉬값인 '21232f297a57a5a743894a0e4a801fc3'와 timestamp의 해쉬 값들을 조합해서 열심히 쿠키를 바꿔치기 할 차례입니다. 

진정한 삽질이죠. 


결과적으로 '67c90cd08d7a3d88f90e63fe768f5a8c'가 답입니다. 

관리자는 9시 12분 00초에 접속했나봅니다. 


'edit this cookie'의 'WOWSESSIONID' 필드에 지금까지 구한 두 MD5 해쉬 값을 붙여서 넣어봅시다. 


'21232f297a57a5a743894a0e4a801fc367c90cd08d7a3d88f90e63fe768f5a8c



쿠키값을 변조한 후 'Submit cookie changes'를 눌러주면 됩니다. 



  • 4단계: 숨겨진 정답 찾기 


쿠키값 변조를 통해 'admin'으로 접속을 하게 되면 아래와 같은 화면이 나옵니다. 



'guest'로 접속했을 때와 달리 접속 시간 하단부에 'Userlist'라는 링크가 하나 생겼네요. 

궁금하니 클릭해봅시다. 


두둥! 애타게 찾던 정답이 여기 숨어 있었네요. 


guest:guest
admin:nologin
level4:VeRY Good! My Friend!


축하합니다. 다음 단계로 넘어가봅시다! 


Posted by KT한
,


해킹을 배우는 사람의 입장에서 자세하게 풀이법을 정리하고자 합니다. 


WOWHACKER WEBGAME SEASON2  Level 3 풀이법입니다. 


링크: http://webgame.wowhacker.com/weblevel3/list.php


주어진 링크를 따라 들어가 봅시다. 



게시판이 보이고 글이 몇개 보이는 군요. 


첫번째 글을 클릭해봅시다. 



별 내용은 없는데 첨부 파일이 보이네요. 

한 번 클릭해 봅시다. 


새로운 링크페이지가 열리면서 첨부된 파일이 보입니다. 



경로를 보니 뭔가 냄새가 나는것 같죠. 


다른 글에 있는 첨부 파일도 열어 봅시다. 



역시나 비슷한 패턴을 가지고 있는게 보입니다. 

자! 단계별로 차근 차근 풀어봅시다. 



추천은 저를 춤추게 합니다 ^^



  • 1단계: 링크 주소의 비밀 밝혀내기 


링크 주소에 어떤 규칙이 있을 지 곰곰히 생각해 봅시다. 




아하! 글 작성 시간에 있는 값과 링크의 뒷부분 숫자가 같다는걸 알 수 있습니다. 


이제 앞에 있는 값만 알아내면 되겠군요. 


링크 주소 패턴이 MD5 패턴인것 같다는 생각이 듭니다. 

왠지 글을 작성한 시간을 가지고 MD5 해쉬를 수행하면 링크 주소와 같은 패턴이 나올것 같기도 하다는 생각이 듭니다. 



  • 2단계: time stamp값 구하기 


우선 시간값을 time stamp로 변환해봅시다. 

구글에서 'timestamp'로 검색해서 time stamp를 계산해 주는 사이트에 들어가봅니다. 


http://www.epochconverter.com/


게시글의 작성 시간을 입력하고 'Local time'으로 time stamp를 생성해봅시다. 

결과값이 '1161129925'라고 나왔네요



  • 3단계: MD5 해쉬값 구하기 


이 값을 MD5로 변환해봅시다. 

역시나 구글에서 'MD5 hash'로 검색해서 해쉬값을 구해주는 사이트에 들어가봅시다. 


http://www.md5hashgenerator.com/


위에서 구한 time stamp값을 넣고 MD5 해쉬를 구해보면.. 'b72776c5eb0c5a05a7188959a49e1f1b' 라고 나옵니다. 


왠지 낯익은 값이 나온것 같네요. 



빙고! 첨부파일 링크에 있는 값과 동일한 값이 구해졌네요. 



  • 4단계: 비밀글 첨부파일 링크 찾기 


비밀글의 첨부파일 경로를 찾기 위해 비밀글의 작성 시간을 봅시다. 



저 시간을 time stamp로 변환해보면.. '1161499792' 가 나옵니다. 

이 값을 MD5 해쉬를 구해보면 'fb6e412cf733d6b9cdf777cbcafa35c3'가 나옵니다. 


그렇다면 첨부파일의 링크는 어떻게 될까요? 


http://webgame.wowhacker.com/weblevel3/down/fb6e412cf733d6b9cdf777cbcafa35c3.85428900


위의 링크로 들어가 봅시다. 


Level3 key: iwantknowmoreMrjones!


축하합니다. Level 3의 답을 구했군요.  슈퍼맨


Posted by KT한
,

해킹을 배우는 사람의 입장에서 자세하게 풀이법을 정리하고자 합니다. 


WOWHACKER WEBGAME SEASON2  Level 2 풀이법입니다. 


링크: http://webgame.wowhacker.com/levelii



level 2 링크를 따라 들어가면 아래와 같은 게시판이 보입니다. 


글을 처음 부터 차례대로 클릭 해보면 몇개의 글은 내용을 볼 수 있는데, "Level 5 이상 읽을 수 있습니다!"와 같은 메시지의 경고창이 뜨면서 읽을 수 없는 글이 몇개 있다는걸 알게 됩니다. 


자! 단계별로 풀어봅시다. 



추천은 저를 춤추게 합니다 ^^



  • 1단계:  쿠키 변조 툴 설치 

chrome 브라우저 'edit this cookie'라는 플러그인을 설치 합니다. 



쿠키를 추가/삭제/편집 등등 할 수 있다고 설명이 나와있네요. 



  • 2 단계: 권한(level) 상승 


브라우저 우측 상단에서 쿠키 아이콘을 클릭하면 설정 창이 뜹니다. 



보면 'user_level'이라는 쿠키가 보이고 값을 입력 할 수 있게 되어있네요. 

레벨의 value를 5로 수정하고 우측 하단의 'submit cookie changes' 버튼을 클릭합니다. 


그리고 4번째 글 'Answer.txt' 을 클릭해봅시다. 좀 전과 달리 글을 볼 수가 있게 됐습니다. 



글을 보니 'Download'를 클릭하면 첨부파일을 다운 받을 수 있게 되어 있습니다.  

첨부파일을 받아서 내용을 보니 password는 아니군요. 


그럼 3번째 글 'Password.txt'를 보면 될것 같다는 생각이 듭니다. 

다시 cookie를 변조해서 'user_level'을 7로 올리고 3번째 글을 클릭해봅시다. 

이상하게 여전히 권한이 없다고 나옵니다. 

아무래도 이 글을 다른 방법을 써야 할것 같네요. 



  • 3단계: 첨부파일 다운 받기


다시 3번째 글을 클릭해봅시다. 

첨부파일의 링크를 복사해서 보니.. 


http://webgame.wowhacker.com/levelii/download.php?table_id=free&page=1&no=3&path=Answer.txt


download.php라는 파일에서 no는 3이고.. 경로는 Answer.txt 라고 되어있군요. 


그럼 4번째 글의 첨부파일 경로가 뭘지 고민해봅시다. 

머리를 조금만 굴리면 아래와 같이 유추가 가능하겠죠?


http://webgame.wowhacker.com/levelii/download.php?table_id=free&page=1&no=4&path=Password.txt


역시나 3번 글의 첨부파일이 다운받아 집니다. 

파일을 열어보니.. password와는 조금 거리가 멀어 보이는 문자열만 잔뜩 들어있네요. 헉4



  • 4단계: base64 디코딩


Password.txt 파일의 내용물은 다음과 같습니다. 


VlVkR2VtTXpaSFpqYlZGblQybENXR0ZIVm5sYVUwSndZM2xDYlZreWRIWmpiVlpvVUhsRg


내용의 패턴을 자세히 보니.. 영문 대/소문자와 숫자로만 이루어져 있군요. 

base64 인코딩 된것 같은 느낌이 듭니다. 생각중


자 디코딩을 해봅시다. 

구글에가서 'base64 decode'를 검색해보면 많은 사이트가 나옵니다. 

그중 하나를 선택해 들어가봅시다. 

제가 들어간 곳은 사이트 이름도 base64 decode랍니다. 


http://www.base64decode.org/


값을 넣고 'DECODE'를 해봅시다. 


어라? 기대했던 password가 아니네요. 


VUdGemMzZHZjbVFnT2lCWGFHVnlaU0JwY3lCbVkydHZjbVZoUHlF


그런데 결과값을 보니 길이는 좀 짧아졌지만 여전히 base 64 인코딩된 값 같다는 느낌을 지울 수가 없네요. 


원래 삼세번이라 했던가요... 다시 decode 해봅시다. 


UGFzc3dvcmQgOiBXaGVyZSBpcyBmY2tvcmVhPyE


역시나 아니네요. 

마지막으로 한 번만 더 해봅시다. 


Password : Where is fckorea?!


다행히도 우리가 기대했던 password가 나왔네요! 슈퍼맨


level 2 클리어! 


Posted by KT한
,
'clang'에 대해 들어보셨나요? 

아이폰 어플 개발 하신 분들이라면 한 번 쯤은 들어보셨을 텐데요. 

clang은 Apple의 Xcode에 포함되어 배포되고 있는 정적 소스 분석기(Static analyzer)입니다. 

물론, 무료(오픈소스)로 배포중입니다. 


물론, 윈도우(Window)나 우분투(Ubuntu)혹은 페도라(Fedora) 같은 다른 OS에서도 사용이 가능합니다. 


설치는 각 OS에서 제공하는 패키지(rpm, deb, 등)을 설치하는 방법과 사이트에서 소스를 다운 받아 직접 빌드해서 사용 하는 방법이 있습니다만.. 빌드하는데 매우 오랜 시간이 걸리므로 소스를 수정해서 사용하실게 아니라면 패키지 파일을 설치하는걸 추천합니다. 


자세한 정보는 clang 사이트 에서 확인이 가능합니다. 



추천은 저를 춤추게 합니다 ^^



clang의 가장 큰 장점은 다른 컴파일러와 비교해서 오류에 대한 정보가 매우 친절하다는 점입니다. 



warning이나 error의 위치를 정확하게 밑줄까지 쫙~ 그어주는 친절함!! 대박


특정 파일에 대해 문법 검사를 하고자 할 때 사용법은 매우 간단합니다. 


$ clang --analyze test.c


그런데, 정적 소스 분석을 할 때 소스 파일을 낱개로 검사하지 않고 Makefile을 작성해서 'make'명령으로 한방에 검사하고 싶을겁니다. 

이럴때 쓰는게 'scan-build' 입니다. 

clang 패키지에 포함되어 있으므로 따로 설치 해야 하는건 아닙니다. 


실행 방법은 간단합니다. 


$ scan-build make


default로 꺼져있는 추가적인 체커를 수행하고 싶다면 이렇게 하면 됩니다. 


$ scan-build --use-analyzer <clang path> -enable-checker <추가한 체커 이름> -v -v -v -k make


빌드가 성공하고 나면 마지막에 아래처럼 발견된 버그에 대한 결과가 나옵니다. 



'scan-view' 로 버그 리포트를 보라고 친절하게 알려주는 군요. 

'scan-view'는 clang이 찾아낸 오류들을 웹 화면으로 보기 좋게 보여주는 툴입니다. 

이 또한 clang 패키지에 포함되어 있답니다. 


명령을 실행해 봅시다. 


$ scan-view <scan-build 결과 파일>


웹 서버가 정상적으로 설치 되어 있다면 아래와 같은 웹 페이지가 뜨게 됩니다. 


다양한 타입의 버그에 대한 리포트가 보여지는 군요. 



세부 내용을 보고 싶다면 'View Report' 링크를 클릭합니다. 


해당 소스와 친절한 메시지가 함께 보여집니다. 

결과적으로 메모리 누수가 있을 수 있는지 다시 한번 확인해 보면 되겠죠? 


Posted by KT한
,

Snort는 다양한 전처리기(Preprocessor)를 제공 함으로써 여러가지 패킷 전처리 기능을 수행합니다. 

HTTP Inspection 은 HTTP 패킷의 URI에서 encode된 값을 찾아 decode하는 작업을 수행하게 됩니다. 


기본적으로 패킷을 decode하지 못하면 공격 명령을 encode함으로써 간단하게 Snort와 같은 IPS/IDS를 우회할 수 있게 됩니다. 

이런 우회 패킷에 대한 탐지를 수행하기 위해 꼭 필요한 HTTP Inspection 모듈의 정규화 과정에 대해 알아봅시다. 


HTTP Inspection Preprocessor에서는 HTTP패킷이 들어오면 기본적으로 다음과 같은 순서로 정규화 처리를 수행합니다. 


HTTP Inspection에 의해 설정에 따라 최대 2번 까지 '%' decode를 수행합니다. 

또한, 설정에 따라 unicode 및 '%U' decode를 수행 할 수 있습니다. 



'decode'나 '정규화'가 뭘 의미하는지 잘 모르시는 분들은 이 글을 보시면 됩니다. 


[스노트-snort] HTTP Inspection 전처리기의 모든 것



혹시 잘못된 정보가 있거나 궁금한 점이 있으시면 댓글 남겨주세요~ ^^


Posted by KT한
,

리눅스 장비에서 파일을 압축하거나 푸는 방법은 다양합니다. 

압축 방식별 장/단점과 사용법에 대해 알아봅시다.



1. ZIP

가장 일반적으로 사용되는 압축 확장자입니다.

장점: 거의 모든 OS환경에서 호환이 됩니다. 

단점: 최고 레벨의 압축을 지원하지 않습니다. (tar.gz이나 tar.bz2 보다 압축 레벨이 낮습니다.)


  • 압축 하기:

# zip -r FILENAME.zip FILENAME


  • 압축 풀기:

# unzip FILENAME



2. TAR

리눅스(Linux)환경에서 가장 일반적으로 사용됩니다.

장점: 압축에 소비되는 시간, CPU 가 적습니다.

단점: 압축이 거의 되지 않습니다. 주로 여러 파일을 하나의 파일로 묶는 용도로 사용됩니다. 


  • 압축 하기:

# tar -cf FILENAME.tar  FILENAME


  • 압축 풀기:

# tar -xf FILENAME.tar


  • 지정된 위치에 풀기:

# tar -xvf FILENAME.tar  -C  /tmp/dest_extract_path/ 



3. TAR.GZ

리눅스 환경에서 사용하기 가장 좋은 압축 옵션 중 하나 입니다.

장점: 압축률은 높은 편이지만, CPU는 많이 소비되지 않습니다.

단점: 최고 레벨의 압축을 지원하지 않습니다. 


  • 압축 하기:

tar -zcvf FILENAME.tar.gz FILENAME


  • 압축 풀기:

# tar -zxvf FILENAME.tar.gz


  • 지정된 위치에 풀기:

# tar -zxvf FILENAME.tar.gz -C /tmp/dest_extract_path/



4. TAR.BZ2

리눅스 환경에서 사용하기 가장 적합한 압축 옵션 중 하나 입니다.

장점: 최고의 압축률을 자랑합니다.

단점: 시간과 CPU사용률이 적지 않습니다. 


  • 압축 하기:

# tar -jcvf FILENAME.tar.bz2 FILENAME


  • 압축 풀기:

# tar -jxvf FILENAME.tar.bz2


  • 지정된 위치에 풀기:

# tar -jxvf FILENAME.tar.bz2 -C /tmp/dest_extract_path/



추천은 저를 춤추게 합니다 ^^



  • 요약 정리 


확장자  압축  압축 풀기 

비고 

 .zip

 zip -r FILENAME.zip FILENAME

 unzip FILENAME

 'r' 옵션은 하위 폴더까지 모두 압축 하도록 함.

 .gz

 gzip FILENAME

 gzip -d FILENAME.gz
 gunzip FILENAME.gz


 .bz2

 bzip2 -k FILENAME

 bzip2 -dk FILENAME.bz2

 bunzip2 -k FILENAME.bz2

 'k' 옵션으로 입력 파일을 삭제하지 못하게 함.

 .tar

 tar -cvf FILENAME.tar  FILENAME

 tar -xvf FILENAME.tar

 'v' 옵션으로 실행 과정 출력

 .tar.gz

 tar -zcvf FILENAME.tar.gz FILENAME

 tar -zxvf FILENAME.tar.gz

 'z' 옵션이 gz 파일 압축풀기 옵션

 .tar.bz2

 tar -jcvf FILENAME.tar.bz2 FILENAME

 tar -jxvf FILENAME.tar.bz2

 'j' 옵션이 bz2 파일 압축풀기 옵션 


Posted by KT한
,

젠킨스(Jenkins)를 사용해서 빌드를 관리하다보면 여러 개의 프로젝트가 서로 디펜던시(dependency)가 존재하는 경우가 있습니다. 

그럴경우 매번 여러개의 작업이 순차적으로 수행 되도록 관리하는것은 번거롭고 자칫 휴먼 에러가 발생 할 수도 있습니다. 

이런 경우 효율적으로 관리 할 수 있는 플러그인이 있습니다. 


'Build Pipeline' 플러그인은 디펜던시가 존재하는 복수개의 프로젝트를 관리하는데 매우 효율적입니다. 



추천은 저를 춤추게 합니다 ^^


  • 설치 절차


1. '젠킨스 관리'  > '플러그인 관리'에서 '설치 가능'탭을 선택 한 후 'Build Pipeline'을 검색합니다.

 



2. 플러그인이 정상적으로 설치되었는지 확인 한 후.. 



3. 메인 화면에서 뷰 탭의 '+' 표시를 눌러 '새 뷰'를 추가합니다. 




4. 뷰 타입을 'Build Pipeline View'를 선택하고 이름을 지정해줍니다. 



5. 시작하는 job을 선택해 줍니다. 

그외에 pipeline의 타이틀과 화면에 보여질 갯수 정도만 설정 해주면 됩니다. 



6. 적용을 하고 나면 초기 화면이 보여집니다. 

시작하는 job이 등록되어 보여집니다. 



7. 순차적으로 실행 될 다음 job을 등록하기 위해.. 

'first-job'의 설정 화면으로 들어갑니다. 


'Add post-build action' 버튼을 클릭해서 'Build other projects'를 선택해줍니다. 


8. 다음으로 수행할 job을 입력한 후 'Trigger only if build succeeds'를 선택해서 빌드가 성공 했을 때만 다음 빌드를 수행 하도록 설정해줍니다. 



9. 적용하고 나면 '하위 프로젝트'에 등록한 프로젝트가 보여지게 됩니다. 



10. 'pipeline-view' 탭에 들어가보면 새롭게 등록한 프로젝트가 등록된걸 확인 할 수 있습니다. 



11. 이제 마지막으로 수행할 job을 등록해 줍시다. 



12. 모두 정상적으로 등록되었군요. 

'Run'아이콘만 클릭하면 4개의 빌드가 알아서 순차적으로 수행될겁니다. 


이제 프로젝트 관리가 한결 수월해지겠군요. 



간혹 수동으로 다음 빌드를 수행하고자 한다면 'trigger'아이콘을 클릭해 주셔도 됩니다. 



  • 유용한 플러그인 배워보기

[프로그래밍] 젠킨스(Jenkins) 플러그인 활용 - Groovy Postbuild

Posted by KT한
,

젠킨스를 사용해서 소스 빌드를 수행하다 보면 간혹 빌드에 실패하는 경우가 발생하게 됩니다. 

이럴 경우 최대한 빠르게 수정된 소스를 반영하여야 같이 일하는 다른 개발자 분들이 받는 피해가 최소화 될 수 있겠죠. 


이를 위해 'Groovy Postbuild' 플러그인을 활용해서 빌드가 실패한 위치를 보기 쉽게 보여주는 방법에 대해 다뤄보고자 합니다. 


'Groovy Postbuild' 플러그인은 삼성전자 서초사옥에서 진행된 젠킨스(Jenkins) 사용자 모임에서 새롭게 알게되었는데요 사용법이 다양하더군요. 

그래서 저희 회사 프로젝트에 어떻게 적용 시키면 좋을까 고민하다가 빌드에 실패했을 때 원인파악에 조금이나마 도움이 될 수 있도록 적용해 보았습니다. 


사실, 그루비(Groovy)로 할 수 있는 일은 훨씬 더 다양할겁니다. 



추천은 저를 춤추게 합니다 ^^


  • 설치 절차 


1. 먼저 'Jenkins 관리' > 'Plugin 관리' 화면으로 들어갑니다. 

'설치 가능' 탭에서 'Groovy Postbuild'를 검색해서 설치 합니다. 




2. 아래처럼 'Groovy Postbuild'가 설치 되었는지 확인합니다. 




3. 'Groovy Postbuild'를 설정하고자 하는 'job'의 설정 화면에 들어갑니다. 

Post-build Actions 에서 'Add post-build action' 버튼을 클릭하면 추가 가능한 action list가 나옵니다. 

'Groovy Postbuild'를 선택하시면 됩니다. 




4. 스크립트 박스에 원하는 내용을 넣어줍니다. 

자세한 설명과 예제코드는 아래의 페이지를 참고하시면 됩니다. 


젠킨스 위키 - Groovy Postbuild


저는 'getLogMatcher' 함수를 사용해서 로그에서 원하는 문자열을 찾아 'addShortText' 함수로 출력하도록 작성하였습니다. 

스크립트 실행 결과 unittest 수행 중 fail 난 파일 명을 출력해주게 됩니다. 



5. 결과를 확인해 봅시다. 

빌드에 실패한 경우 해당 작업 오른편에 노란 상자로 파일명이 출력되고 있죠?

이런 식으로 원하는 값을 출력해주도록 설정 하시면 됩니다. 



Groovy Postbuild 스크립트를 활용해서 좀 더 편하게 빌드를 관리해보세요~ ^^


Posted by KT한
,

국산 오피스 프로그램인 한컴 오피스는 군대시절 가장 많이 사용한 소프트웨어 입니다. 

하지만, 회사에 취업을 하고 보니 항상 MS 워드만 사용하고 있습니다. 

아무래도 외국 회사들은 모두 MS 오피스를 사용하기 때문이기도 하겠죠. 


문제는, 간혹 한글 파일(hwp)을 받게 되면 뷰어만 있어서 편집을 할 수가 없어서 난감할 때가 있더라구요. 

물론, 회사에서 한컴 오피스 라이선스가 있다면야 별 문제가 되지 않겠지만 간혹 라이선스가 없는 경우... 그리고 잠깐 편집할껀데 오피스를 설치하느라 시간을 낭비하고 싶지 않다면 이 방법을 활용해 보세요. 


별도의 프로그램 설치 없이도 쉽게 편집 및 워드 파일로 변환이 가능합니다. 


참고로, 'MS 오피스 2007' 이후 버전에서는 한글 파일(hwp)를 지원합니다. 그런데 아쉽게도 '한글 97' 까지만 지원하는군요. 

결국 '한글 2000'으로 작성한 파일이라면.. 안타깝게도 호환이 되지 않습니다. 



추천은 저를 춤추게 합니다 ^^



1. 네이버me 에 접속 

사실, 이 방법은 네이버(NAVER)에서 제공하는 서비스를 활용하는 것입니다. 

링크를 따라 우선 네이버me 에 접속해봅시다. 


2. 워드 메뉴 선택

네이버me 에 접속해서 보면 좌측 메뉴에 '워드'라고 있습니다. 

해당 메뉴를 클릭합니다. 



3. 열기 

'네이버 Word'에 접속이 되면 화면 상단의 '열기' 아이콘을 선택합니다. 



4. 변환할 문서 선택 

변환할 문서, 즉 한글(hwp)파일을 선택해줍니다.

N드라이브에 있다면 N드라이브에서 선택하면 될 테고, PC에 있는 파일을 변환 할 꺼라면 '내 PC'탭에서 파일을 찾아서 선택해주면 됩니다. 


친절한 설명이 나와 있는걸 볼 수 있습니다. 

지원 가능한 파일 형식에 한글(hwp)가 보이네요. 


5. 저장

편집창에서 한글 문서를 편집하셔도 되고, 워드로 변환 후 편집하셔도 됩니다. 


워드 파일로 저장하려면 화면 상단의 '저장' 메뉴에 마우스를 가져가면 아이콘 아래 화살표가 나타납니다. 

화살표를 클릭하면 하위 메뉴가 보여집니다. 

'PC로 내보내기' 에서 'Microsoft word 2003 형식(*.doc)' 를 선택하면 됩니다. 



이제 MS 워드로 맘 편히 편집하시면 됩니다. 


Posted by KT한
,