Delphi / C++ Builder STARTER EDTION 무료 프로모션 |
목요일, 10월 27, 2016
Posted by XeroNicHS on 오후 2:12 in 델파이, 무료, 스타터 에디션, C++ 빌더, C++ Builder, Delphi, programming, STARTER EDITION
Visual Studio 프로젝트 생성
Visual Studio 프로젝트 생성 단계 #1 |
"Visual C++" -> "Win32" -> "Win32 프로젝트" 를 선택하고 프로젝트 이름을 작성합니다.
저는 임의로 'x64dbg_basic_plugin' 이라고 했는데 입맛에 맞게 정하시면 됩니다. ^^;;;
또, 개인적인 편의상 '솔루션용 디렉터리 만들기' 도 해제했습니다...
Visual Studio 프로젝트 생성 단계 #2 |
Visual Studio 프로젝트 생성 단계 #3 |
플러그인은 DLL 형태의 모듈이기 때문에 "DLL" 로 지정을 하고,
'빈 프로젝트' 항목에 체크를 해준 다음 '마침' 버튼을 눌러서 프로젝트 생성을 마칩니다.
x64dbg 는 XP 에서도 동작을 하는 걸로 알고 있는데...
프로젝트 속성 옵션에서 XP 에서도 동작하는 바이너리를 생성하도록 설정을 변경해줍니다.
XP 지원하도록 프로젝트 속성 변경 |
플러그인 SDK 폴더를 프로젝트 폴더로 복사
프로젝트 생성이 완료되면 플러그인 SDK 폴더를 프로젝트 폴더로 복사해줍니다.
x64dbg 압축파일의 플러그인 SDK 폴더 |
x64dbg 는 친절하게도(?) 디버거와 플러그인 SDK 를 묶어서 제공하는데요...
x64dbg 압축파일을 다운로드 받아서 압축 해제 후, pluginsdk 폴더만 프로젝트 폴더로 복사합니다.
프로젝트 폴더에 플러그인 SDK 폴더 복사 |
플러그인 소스파일 작성
플러그인 소스파일 작성 |
소스파일의 이름을 입맛에 맞게 작성하신 다음 코드 작성을 시작하면 됩니다.
일단 DLL 파일이니까 "DllMain" 이 있어야겠죠...?
// plugin.cpp // //------------------------------------------------------------------- // basic plugin [ x64dbg plugin ] //------------------------------------------------------------------- #include <Windows.h> //------------------------------------------------------------------- // DllMain //------------------------------------------------------------------- BOOL WINAPI DllMain(HINSTANCE hInst, DWORD dwReason, LPVOID lpReserved) { return TRUE; }
이렇게만 작성하고 '빌드' 를 해보면 DLL 파일이 생성이 될겁니다 :)
이 텅 빈 DLL 을 x64dbg 플러그인 형태로 바꿔봅시다~ :)
먼저 pluginsdk 폴더의 "_plugins.h" 파일을 인클루드하고~
"x32dbg.lib" 라이브러리 파일을 포함하도록 코드를 추가해줍니다.
( 64비트용 플러그인을 만들때는 "x64dbg.lib" 라이브러리 파일을 포함하면 됩니다. )
#include "pluginsdk\_plugins.h" #pragma comment(lib, "pluginsdk\\x32dbg.lib")
다음은 플러그인 이름과 버전에 대한 내용을 설정해줍니다.
//------------------------------------------------------------------- #define plugin_name "BasicPlugin" #define plugin_version 1
이제 x64dbg 가 플러그인이라고 인식할 수 있도록 export 함수("pluginit")를 작성해줍니다.
int g_iPluginHandle; //------------------------------------------------------------------- extern "C" __declspec(dllexport) bool pluginit(PLUG_INITSTRUCT* initStruct); //------------------------------------------------------------------- __declspec(dllexport) bool pluginit(PLUG_INITSTRUCT* initStruct) { initStruct->sdkVersion = PLUG_SDKVERSION; initStruct->pluginVersion = plugin_version; strcpy_s(initStruct->pluginName, 256, plugin_name); g_iPluginHandle = initStruct->pluginHandle; return true; }
테스트를 해본 결과 "pluginit" 함수만 있어도 플러그인으로 인식을 하더라구요.. @_@;;
pluginit 함수는 위의 코드처럼 PLUG_INITSTRUCT 구조체의 값을 채우도록 구현을 하면 됩니다.
sdkVersion, pulginVersion, pluginName 의 세 항목들은 값을 넣어줘야하고...
pluginHandle 은 값을 넣는게 아니라 다른 변수에 값을 복사해둡니다. @_@;;;
이 코드들을 몽땅 합치면 아래와 같이 되겠네요...
// plugin.cpp // //------------------------------------------------------------------- // basic plugin [ x64dbg plugin ] //------------------------------------------------------------------- #include <Windows.h> #include "pluginsdk\_plugins.h" #pragma comment(lib, "pluginsdk\\x32dbg.lib") //------------------------------------------------------------------- #define plugin_name "BasicPlugin" #define plugin_version 1 int g_iPluginHandle; //------------------------------------------------------------------- extern "C" __declspec(dllexport) bool pluginit(PLUG_INITSTRUCT* initStruct); //------------------------------------------------------------------- __declspec(dllexport) bool pluginit(PLUG_INITSTRUCT* initStruct) { initStruct->sdkVersion = PLUG_SDKVERSION; initStruct->pluginVersion = plugin_version; strcpy_s(initStruct->pluginName, 256, plugin_name); g_iPluginHandle = initStruct->pluginHandle; return true; } //------------------------------------------------------------------- // DllMain //------------------------------------------------------------------- BOOL WINAPI DllMain(HINSTANCE hInst, DWORD dwReason, LPVOID lpReserved) { return TRUE; }
이렇게 작성한 코드를 빌드하면 DLL 파일이 나올텐데요~
이 DLL 파일의 확장자를 'dp32' 로 바꾸고 32비트용 디버거의 'plugins' 폴더에 복사한 다음...
32비트용 디버거를 실행시키면 다음과 같이 플러그인이 로딩되는 걸 확인할 수 있습니다.
플러그인이 로딩되었다는 로그 |
64비트 디버거용 플러그인을 빌드할 때는 라이브러리 파일을 "x64dbg.lib" 로 바꾸고 빌드를 합니다.
DLL 파일이 생성되면 확장자를 'dp64' 로 바꿔서 64비트용 디버거의 'plugins' 폴더에 복사하면 됩니다.
여기까지 플러그인 껍데기(?)를 만들어서 x64dbg 에 로딩시키는 걸 알아봤구요...
다음 내용부터는 조금씩 플러그인 알맹이를 채워나가 보도록 하겠습니다 ~ :)
[ BasicPlugin 소스 다운로드 ]
토요일, 10월 22, 2016
VirtualBox 에서 '직렬 포트' 설정
Guest OS '직렬포트' 설정 |
'존재하는 파이프/소켓에 연결' 에 체크가 되어있으면 오류 발생 |
Guest OS 의 부팅 옵션 설정
부팅 로더 추가 후 디버그 모드 활성화 |
- "/copy" 옵션으로 {current} 로더와 동일한 로더를 하나 추가합니다. - "/d" 옵션으로 부팅 시 화면에 보일 내용을 설정합니다. ※ 저는 기존의 description ("Windows 8.1") 뒤에 "[DEBUG]" 를 추가했습니다. |
- "/set" 옵션으로 복사한 로더에 디버깅이 가능하도록 설정합니다. |
디버그 환경 설정 |
- "/dbgsettings" 옵션으로 디버그 환경을 설정합니다. ※ "직렬 포트 : COM1" 을 이용하기 위해 SERIAL DEBUGPORT:1 로 설정합니다. |
Guest OS 의 부팅 옵션 설정이 정상적으로 되었다면 재부팅 시 멀티 부팅 화면이 뜰 겁니다.
'기본 부팅'과 '디버그 가능 부팅' |
WinDbg 에서 커널 디버깅 설정
"File -> Kernel Debug..." 메뉴를 실행 후 'COM" 탭으로 변경~
WinDbg 의 커널 디버깅 설정 |
'Baud Rate' 항목은 Guest OS 에서 설정한 값인 "115200" 로 지정을 하고...
'Pipe' 항목에 체크...!!!
'Port' 항목엔 VirtualBox 직렬 포트 설정에서 입력한 경로를 그대로 입력합니다.
'확인'을 누르면...
OS 연결 대기 상태 |
디버깅할 대상을 기다리는 대기 상태가 됩니다.
이 상태에서 Guest OS 의 '디버그 가능 부팅' 을 선택하면...
OS 인식 |
Guest OS 에 연결되었다는 메시지가 뜨면서 커널 디버깅이 가능해집니다 ~ :)
Posted by XeroNicHS on 오후 11:12 in 커널 디버깅, Kernel Debugging, programming, reverse engineering, VirtualBox, WinDbg
토요일, 10월 15, 2016
어제까지 멀쩡하게 동작하던 Visual Studio 2015 (Community) 가
오늘은 뭔가 상태가 이상해졌습니다... -_-;;
테스트 코드 작성을 위해 Visual C++ 프로젝트를 생성하려는데 ~
프로젝트 생성 단계로 넘어가지 않고 "새 프로젝트" 대화창만 반복해서 뜨더군요... o_O!?!?
딱히 오류 메시지가 뜨는 것도 아닙니다... 그냥 대화창만 반복해서 뜰 뿐..;;;
( 혹시나 해서 C# 프로젝트를 생성해봤는데 그건 또 잘되더군요..;;;; )
Visual Studio 자체에 뭔가 문제가 생겼나 싶어 곰곰히 생각을 해보니...
어제 Visual Studio 업데이트를 설치한 게 떠올랐습니다.
뭔가 구성요소 부분이 바뀌었나 싶어서 확인을 해봤습니다.
"제어판" -> "프로그램 및 기능" 에서 Visual Studio 2015 항목을 찾고~
마우스 오른쪽 버튼을 눌러 "변경" 클릭!
Posted by XeroNicHS on 오후 7:59 in 프로젝트 생성 실패, programming, Visual C++, VS2015
금요일, 2월 26, 2016
예전부터 "TitanEngine" 이라는 이름을 간간이 보긴 했지만
그냥 신경 쓰지 않고 지나쳤는데...
x64dbg 에서 "TitanEngine" 을 사용한다는 내용을 보고
다시 봤더니 리버싱 SDK 였군요...;;;
나온 지는 꽤 오래된 걸로 아는데 이런 SDK 라는 걸 이제야 알게 되다니... oTL;;;
오픈소스인지라 SDK 소스도 공개되어 있는데...
리버싱에 관심 많은 분들이 공부하는데 도움이 되지 않을까 싶네요 :)
TitanEngine |
[ 사이트 : http://reversinglabs.com/open-source/titanengine.html ]
Features
- Integrated x86/x64 debugger
- Integrated x86/x64 disassembler
- Integrated memory dumper
- Integrated import tracer & fixer
- Integrated relocation fixer
- Integrated file realigner
- Functions to work with TLS, Resources, Exports,
[ TitanEngine 을 이용한 Unpacker 구현 ]
Posted by XeroNicHS on 오전 12:59 in 리버싱, 오픈소스, 프로그래밍, programming, reverse engineering, ReversingLabs, SDK, TitanEngine
금요일, 2월 19, 2016
티스토리를 쓰다가 Blogger 로 넘어왔을 때...
가장 아쉬운 점이 '카테고리(Category)'의 부재였습니다.
티스토리의 카테고리 |
Blogger 레이아웃 메뉴에서 이것저것 만지다보니
"라벨(태그)" 가젯으로 카테고리처럼 꾸밀 수 있더군요 @_@;;;
태그(라벨) 가젯 설정 |
블로그의 게시물에 지정된 라벨들 중 원하는 일부만 표시하는 것이 가능한데...
보여줄 라벨을 선택한 다음 표시 방법을 '목록' 으로 지정하면...?
라벨(태그) 가젯을 이용한 카테고리 |
이렇게 보여집니다 :)
각 카테고리에 해당하는 게시물을 작성할 때는 라벨만 지정해주면 됩니다.
라벨 가젯을 이용하는 게 가장 쉽고 편하지만...
아쉬운 점이 있다면 표시되는 카테고리의 순서를 임의로 지정할 수가 없다는 건데요.
HTML/JavaScript 가젯에 HTML 코드를 입력해서 카테고리를 만들 수도 있습니다.
라벨 가젯을 이용한 카테고리 HTML 소스 |
HTML/JavaScript 가젯에 카테고리 HTML 코드 입력 |
HTML 코드를 직접 입력하면 화면에 표시되는 카테고리의 순서를 바꿀 수도 있고
카테고리명을 실제 라벨과 다르게 지정할 수도 있습니다 :)
<script type="text/javascript"> //<![CDATA[ function getPostCount(json) { document.write(json.feed.entry.length); } //]]> </script> <ul> <li> <a dir="ltr" href="http://www.xeronichs.com/search/label/game">game</a> <span dir="ltr">(<script src="http://www.xeronichs.com/feeds/posts/default/-/game?&alt=json-in-script&callback=getPostCount"></script>></span> </li> <li> <a dir="ltr" href="http://www.xeronichs.com/search/label/music">music</a> <span dir="ltr">(<script src="http://www.xeronichs.com/feeds/posts/default/-/music?&alt=json-in-script&callback=getPostCount"></script>)</span> </li> <li> <a dir="ltr" href="http://www.xeronichs.com/search/label/programming">programming</a> <span dir="ltr">(<script src="http://www.xeronichs.com/feeds/posts/default/-/programming?&alt=json-in-script&callback=getPostCount"></script>)</span> </li> <li> <a dir="ltr" href="http://www.xeronichs.com/search/label/reverse%20engineering">reverse engineering</a> <span dir="ltr">(<script src="http://www.xeronichs.com/feeds/posts/default/-/reverse%20engineering?&alt=json-in-script&callback=getPostCount"></script>)</span> </li> </ul>
각 카테고리에 포함된 게시물 수를 가져오기 위해 JavaScript 를 썼는데...
카테고리마다 호출하는 것이 내키지 않아서 실제로 적용은 하지 않았습니다. oTL;;;
게시물 수를 보여줄 수 있는 더 깔끔한 방법이 없는지 찾아보는 중입니다.
일단 결론은 Blogger 에서도 카테고리 구현이 가능한 걸로... @_@ !!!
화요일, 2월 16, 2016
대략 3년 전...
지인 블로그를 구경하다 이 에디터를 처음 알게 되었습니다.
[ 에디터 열전 | 괴짜 프로그래머의 일상사~ ]
글 처음부터 대세 에디터라고 소개를 해두셔서~
호기심에 이것저것 찾아봤던 기억이 나네요.
Subliime Text 사이트 화면 |
사이트에 실려있는 기능 소개 영상(?)에 감동받고 바로 다운로드했습니다. ㅋㅋㅋㅋ
처음 실행했을 때의 느낌은 '막막함' 이랄까요...?
글꼴도 바꾸고 글꼴 크기도 조절하고 입맛에 맞게 변경하고 싶은데
'설정 창' 같은 게 없어서 꽤나 당황하기도 했습니다.
Sublime Text 3 ~ 설정 값 (JSON 형식) |
메뉴 'Preferences -> Settings - User' 를 클릭하면 설정파일이 열리는데~
해당 파일에 원하는 항목들을 한 글자 한 글자 직접 입력을 해야하더군요... @_@;;;
Vim 에서 ".vimrc" 파일을 직접 수정하는 것과 같은 방식이라고 보면 될 듯 합니다.
초기 설정부터 다소 애를 먹긴 했지만... 그 과정을 지나니 신세계가... @_@!!!
덕분에 구매까지 하게 되었네요... :)
윈도우에서도 Sublime Text 3 |
리눅스에서도 Sublime Text 3 |
Sublime Text 3 장점
- 윈도우즈, 리눅스, OS X 의 다양한 운영체제 지원
- "Package" 설치를 통해 기능 확장 가능
- 다중 커서 편집
- 가벼움
- 비등록 상태에서도 기능상 제약 없음
Sublime Text 3 단점
- 한글 IME 지원 문제 ( 리눅스에서는 '한글' 을 입력하기가...;;; )
=> 우분투 계열이라면 "uim-byeoru" 입력기 설치로 해결 가능
- EUC-KR 인코딩 지원 문제 ( Sublime Text 3 는 기본적으로 "UTF-8" 지원 )
=> "ConvertToUTF8" 패키지 설치로 해결 가능
마치며...
'한글' 지원이 미약하다는 단점이 있지만 해결 방법이 있어서 크게 불편하지는 않습니다.
구매한 이후로 쭉~ 메인 에디터로 사용 중인데 상당히 만족스럽습니다 :)
개발자용 에디터를 찾는 분들께 Sublime Text 3 강력 추천합니다 !!
Posted by XeroNicHS on 오후 4:55 in 개발자용, 서브라임 텍스트, 에디터, programming, Sublime Text
월요일, 2월 08, 2016
Blogger 를 처음 만든게 1월 28일...
이것저것 꾸미기 시작한지도 열흘 정도 지났네요 @_@;;;
티스토리에 너무 익숙해져 있다보니 적응이 덜 되어 불편하게 느껴지는 부분도 다소 있구요. (ㅠㅠ)
Blogger 에서 제공해주는 기본 템플릿이 적용하긴 편하지만...
뭔가 가려운 곳을 확 긁어내주는 그런 느낌이 부족한지라
고민하다가 템플릿을 바꾸기로 결정 ~ !!
New Blogger Themes |
New Blogger Themes 라는 사이트가 있길래 들어가보니
"Busby" 라는 템플릿이 눈에 딱 들어오더군요... @_@
Template Name : Busby
Author : NewBloggerThemes
Designer : WP Lift
Published Date : March 19, 2013
Updated Date: January 27, 2016
Advanced Details:
http://newbloggerthemes.com/busby-blogger-template/
템플릿 파일을 받은 후, 블로그 설정 -> '템플릿' 메뉴에서 '백업/복원' 을 통해
내려받은 템플릿 xml 파일을 복원시키니 적용이 되더군요... (우와 +_+ )
일단 전체적인 템플릿 틀은 적용이 됐는데, 세세한 설정이 생각보다 번거롭더군요... oTL;;;
가젯들도 일일이 다시 설정해줘야 되고...
특히나 번거로운 부분은 기본 제공 템플릿이 아니다보니
템플릿 '맞춤설정' 이 지원되지 않는 점 이랄까요;;;
HTML 코드 하나하나 뒤져가면서 이것저것 손을 봐야 했습니다.
설정이 어느 정도 마무리가 됐다 싶을때...
' 뭔가 설정을 잘못했나? ' 싶은 생각이 드는게...
undefined ..!? @_@;; |
날짜를 보여줘야 되는 노란 원에 "undefined" 라는 문자열이 뜨더군요...;;;
템플릿의 소스코드에는 이렇게 되어있는데...
<data:post.timestamp/> 값의 형식에 따라서 date_dd, date_mmm 값이 들어가지 않을 수도 있고...
제 블로그가 딱 그 상황이더군요.
해당 값 형식은 블로그 설정 -> '언어 및 서식' 에서 변경이 가능합니다.
원하는 걸로 설정 ~ |
아... 참고로 저는 '시간형식' 대신 '날짜형식'을 변경하고 스크립트를 살짝 수정했습니다.
<data:post.timestamp/> 부분을 <data:post.dateHeader/> 으로 변경~
날짜가 딱~! 수정 성공적~! |
날짜가 딱~! 보일 때의 그 뿌듯함이란...ㅋㅋㅋㅋㅋ
HTML, CSS 이런 웹쪽은 잘 몰라서 매번 어버버하고 있지만...
그런만큼 입맛에 맞게 변경해 나가는 재미는 더 큰 거 같아요~!
오늘은 여기까지...
Posted by XeroNicHS on 오후 10:36 in 프로그래밍, blogger, busby, NewBloggerThemes, programming, template, web
화요일, 2월 02, 2016
티스토리 시절부터 계속 써오던 SyntaxHighlighter 를 이 곳에도 적용했습니다.
Blogger 는 임의로 css / js 파일 등을 업로드 할 수가 없는 것 같아서...
호스팅 버전을 그대로 끌어와서 쓰는 걸로... =_=;;;
( 참고 : http://alexgorbatchev.com/SyntaxHighlighter/hosting.html )
설정 방법은 복잡하진 않네요.
Blogger 설정 -> '템플릿' -> 'HTML 편집' 에서 필요한 코드를 추가하면 끝 !
int main() { // =_=;;; return 0; }
Posted by XeroNicHS on 오후 1:47 in 프로그래밍, blogger, programming, SyntaxHighlighter, web
카테고리
- ...My Story... (6)
- game (6)
- music (13)
- programming (20)
- reverse engineering (11)
블로그 보관함
가장 많이 본 글
-
안드로이드쪽 공부하면서 바이너리 분석도 같이 보고 있는데... ELF 포맷에 ARM 타입의 바이너리가 많더군요.. @_@;;; IDA Pro 를 장만할(?) 여력은 안되고... -_-;;; 이것저것 뒤져보다 ARM 지원하는 디스어셈블 엔...
-
[ 와룡전 다운로드 링크 ] 이 게임을 처음 접한건 95년 ~ 96년 쯤이었던 걸로 기억합니다. 그 당시 PC 를 286 흑백 AT 에서 펜티엄으로 바꿨는데... 게임이 몇 개 설치(라 쓰고 복사라 읽...)가 되어 있더군요. 범피,...
-
업무 특성상(?) Hex 값을 다루는 경우가 많은데... 이번에 파이썬용 Hex Dump 함수를 간단하게 만들어 봤습니다. 앞으로 파이썬으로 작업하다가 Hex 값이 필요할 땐 이 함수를 우려먹는 걸로... :) def print_hex...