Delphi / C++ Builder STARTER EDTION 무료 프로모션 |
목요일, 10월 27, 2016
얼마전에 스타터 에디션 무료 프로모션 진행을 한 걸로 아는데...
지금까지 진행이 되고 있는건지... 새로 시작한건지는 모르겠지만 @_@...
일단 공유해봅니다~ :)
C++ Builder : [ C++ Builder 10.1 Berlin STARTER EDITION 등록하러 가기 ]
아... 이 프로모션 제품들은 1인당 등록횟수가 3회로 제한되어있으니 참고하시기 바랍니다. ^^;;;;
Posted by XeroNicHS on 오후 2:12 in 델파이, 무료, 스타터 에디션, C++ 빌더, C++ Builder, Delphi, programming, STARTER EDITION
예전에 "x64dbg" 에 대한 내용(http://www.xeronichs.com/2016/01/x64dbg.html)을 포스팅 한 이후로...
틈틈이 x64dbg 를 사용하면서 이것저것 익혀보고 있는데요...
이번에 x64dbg 의 '플러그인' 개발에 대해 포스팅을 해볼까~ 합니다 :)
OllyDBG v1.10 의 경우는 플러그인 SDK 안에 SDK 사용법에 관한 참고자료가 있어서 비교적 쉽게 익혔는데...
x64dbg 는 그런게 없어서 예제 플러그인 소스를 참고하며~ 하나 하나 해보면서 익히고 있는 중입니다.
( 혹시라도 x64dbg 플러그인 개발 관련 내용이 정리되어 있는 곳 아시면 공유 좀... ^^;;;;; )
자~ 그럼 이제 시작합니다 ~ !!!
오늘의 주제는 '내가 개발한 플러그인을 x64dbg 에 로딩시키기' 입니다... @_@
'천리길도 한걸음부터...' 라고 프로젝트 생성부터 시작해봅시다~
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
이전 블로그에 해당 주제를 정리해 둔 포스팅(http://iam-hs.com/146)이 있지만~
내용을 조금 업데이트해서 새 블로그에도 올려봅니다. ^^;;;
VirtualBox 에서 '직렬 포트' 설정
먼저 VirtualBox 에서 Guest OS 의 '직렬포트' 를 설정합니다.
Guest OS '직렬포트' 설정 |
'직렬 포트 사용하기' 체크 박스를 클릭해서 활성화 시키면 하위 항목들에 대한 추가 설정이 가능해집니다.
'포트 번호' 는 그대로 "COM1" 로 두고, '포트 모드' 를 "호스트 파이프" 로 변경하고...
'존재하는 파이프/소켓에 연결' 항목을 클릭해서 체크 표시를 없애줍니다. (꼭!!!)
'경로/주소' 는 "\\.\pipe\[원하는이름]" 의 형태로 설정합니다.
참고로 '존재하는 파이프/소켓에 연결' 항목이 체크되어 있으면...
Guest OS 구동 시 아래와 같은 오류가 발생합니다. -_-;;;
'존재하는 파이프/소켓에 연결' 에 체크가 되어있으면 오류 발생 |
Guest OS 의 부팅 옵션 설정
VirtualBox 에서 '직렬 포트' 설정을 마친 후엔...
실제 Guest OS 안에서 커널 디버깅이 가능하도록 부팅 옵션을 변경해줘야 합니다.
WinXP 까지는 boot.ini 파일을 편집해서 설정이 쉬웠지만,
비스타 부터는 "BCDEDIT" 를 이용해야 되기에 다소 귀찮아졌습니다. oTL;;;
관리자 권한으로 '명령 프롬프트' 를 실행해서 "BCDEDIT" 를 이용해봅시다~~ :)
부팅 로더 추가 후 디버그 모드 활성화 |
"BCDEDIT" 를 실행하면 기본적으로 'Windows 부팅 로더' 에 {current} 하나가 있을 겁니다.
이 {current} 로더를 이용해도 되지만, 저는 커널 디버깅용 로더를 따로 구성하는 방식으로 진행했습니다.
- "/copy" 옵션으로 {current} 로더와 동일한 로더를 하나 추가합니다. - "/d" 옵션으로 부팅 시 화면에 보일 내용을 설정합니다. ※ 저는 기존의 description ("Windows 8.1") 뒤에 "[DEBUG]" 를 추가했습니다. |
- "/set" 옵션으로 복사한 로더에 디버깅이 가능하도록 설정합니다. |
디버그 환경 설정 |
- "/dbgsettings" 옵션으로 디버그 환경을 설정합니다. ※ "직렬 포트 : COM1" 을 이용하기 위해 SERIAL DEBUGPORT:1 로 설정합니다. |
Guest OS 의 부팅 옵션 설정이 정상적으로 되었다면 재부팅 시 멀티 부팅 화면이 뜰 겁니다.
'기본 부팅'과 '디버그 가능 부팅' |
WinDbg 에서 커널 디버깅 설정
마지막으로 WinDbg 에서 커널 디버깅을 설정합니다.
"File -> Kernel Debug..." 메뉴를 실행 후 'COM" 탭으로 변경~
'Baud Rate' 항목은 Guest OS 에서 설정한 값인 "115200" 로 지정을 하고...
'Pipe' 항목에 체크...!!!
'Port' 항목엔 VirtualBox 직렬 포트 설정에서 입력한 경로를 그대로 입력합니다.
'확인'을 누르면...
디버깅할 대상을 기다리는 대기 상태가 됩니다.
이 상태에서 Guest OS 의 '디버그 가능 부팅' 을 선택하면...
Guest OS 에 연결되었다는 메시지가 뜨면서 커널 디버깅이 가능해집니다 ~ :)
"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 항목을 찾고~
마우스 오른쪽 버튼을 눌러 "변경" 클릭!
위와 같은 창이 뜨면~ "수정" 클릭!
왜 그런지는 모르겠지만 "Visual C++ 2015용 일반도구" 부분이 체크가 해제되어 있더군요;;
처음 설치할 때는 당연히 선택을 해줬고...
그 후 업데이트를 할 때도 저 항목 대한 옵션을 변경한 적은 없는데 말이죠... @_@;;;
암튼... 다시 "Visual C++ 2015용 일반도구" 항목을 체크하고 진행합니다.
이렇게 구성요소를 새로 설정을 해주니 프로젝트 생성이 잘 되더군요~~ :)
잘되던 프로젝트 생성이 업데이트 후 갑자기 안된다~ 싶으신 분들은
구성요소 확인을 해보시기 바랍니다.
Posted by XeroNicHS on 오후 7:59 in 프로젝트 생성 실패, programming, Visual C++, VS2015
금요일, 10월 07, 2016
자정에 공개된 젝스키스의 신곡 '세 단어' !!!
젝스키스의 신곡을 듣게될 줄은 상상도 못했는데... @_@
무려 16년만에 이렇게 듣게 되는군요...
곡이 잔잔하고 듣기 편안해서 좋네요 :)
젝스키스 - 세 단어
다신 볼 수 없을 것만 같던
그대가 내 앞에 서 있네요
지킬 수 있을지 모르며 약속했던
그 언젠가가 지금인 거군요
단 하루도 널
널 잊었던 적 없다는
말은 거짓말이겠지만
그대가 곁에 있지 않을 때
외로웠죠
한 순간도 널
널 잊었던 적
없다는 말이 무슨 의미겠어요
지금
여기
우리
세 단어면 돼요
I just wanna be with you
내가 사는 이유
다시는 멀리 가지 않을게요
I'll always be here for you
세월이 지난 후
세상이 다시 우릴 갈라놔도
떠나야만 해도
멀리 있진 않을게요
참 멀리 멀리 멀리도
돌아왔네요
지독한 세월과 세상에게
수없이 꺾이고
발밑엔 낙엽이 뒤덮이고
이 야윈 모습이지만
여기 여전히
그대 곁에 서있죠
I missed you
한 순간도 편히 잠든 적 없어
잘 지낸 것 같겠지만
I missed you
한 순간도 진짜 웃은 적 없어
한 순간도 널
널 잊었던 적
없다는 말이 무슨 의미겠어요
지금
여기
우리
세 단어면 돼요
I just wanna be with you
내가 사는 이유
다시는 멀리 가지 않을게요
I'll always be here for you
세월이 지난 후
세상이 다시 우릴 갈라놔도
떠나야만 해도
멀리 있진 않을게요
시간은 참 무섭게도 가네요
붙잡으려 해도
잡히지 않을 거예요
언젠가
다시 헤어지게 되어도
여기
가까이 서있을게
지금
여기
우리
I just wanna be with you
내가 사는 이유
다시는 멀리 가지 않을게요
I'll always be here for you
세월이 지난 후
세상이 다시 우릴 갈라놔도
떠나야만 해도
멀리 있진 않을게요
멀리 있진 않을게…
목요일, 9월 22, 2016
며칠전(9월 9일;;;)에 방송한 '유희열의 스케치북' 을 보던 중 ~
귀를 사로잡은 노래가 있어 살포시 포스팅해봅니다.
몽환적인 느낌에 독특한 보컬음색이 어우러져 제대로 취향저격을...@_@ ;;;
더울 때 들으면 시원해지는 듯한 느낌도 있고,
늦은 밤이나 새벽에 볼륨을 낮춰서 조용히 들어도 좋을 듯 합니다 ~ :)
볼빨간사춘기 - 우주를 줄게
커피를 너무 많이 마셨나 봐요
심장이 막 두근대고 잠은 잘 수가 없어요
한참 뒤에 별빛이 내리면
난 다시 잠들 순 없겠죠
지나간 새벽을 다 새면
다시 네 곁에 잠들겠죠
너의 품에 잠든 난 마치
천사가 된 것만 같아요
난 그대 품에 별빛을 쏟아 내리고
은하수를 만들어 어디든 날아가게 할거야
Cause I’m a pilot anywhere
Cause I’m a pilot anywhere
lighting star shooting star 줄게 내 Galaxy
Cause I’m a pilot anywhere
Cause I’m your pilot 네 곁에
저 별을 따 네게만 줄게 my Galaxy
Like a star 내리는 비처럼
반짝이는 널 가지고 싶어
Get ma mind
엄지와 검지만 해도 내 마음을 너무 잘 표현해
붙어 안달 나니까
마냥 떨리기만 한 게 아냐
준비가 되면 쏘아 올린 인공위성처럼
네 주윌 마구 맴돌려 해
더 가까워진다면 네가 가져줄래
이 떨림을
어제는 내가 기분이 참 좋아서
지나간 행성에다가 그대 이름 새겨 놓았죠
한참 뒤에 별빛이 내리면
그 별이 가장 밝게 빛나요
지나간 새벽을 다 새면
다시 네 곁에 잠들겠죠
별빛 아래 잠든 난
마치 온 우주를 가진 것만 같아
난 그대 품에 별빛을 쏟아 내리고
은하수를 만들어 어디든 날아가게 할거야
Cause I’m a pilot anywhere
Cause I’m a pilot anywhere
Lighting star Shooting star
줄게 내 Galaxy
Cause I’m a pilot anywhere
Cause I’m your pilot 네 곁에
저 별을 따 네게만 줄게 my Galaxy
Cause I’m a pilot anywhere
Cause I’m a pilot anywhere
Lighting star Shooting star 줄게 내 Galaxy
Cause I’m a pilot I’m your pilot
Lighting star Shooting star 줄게 my Galaxy
라라라라라 라라라라라
금요일, 4월 08, 2016
지난 달 29일에 방송된 '투유 프로젝트 - 슈가맨' 에서 '로코베리' 팀이 나오더군요.
이날 방송에서 '태양의 후예 OST' 중 한 곡인 'Always' 를 이 팀이 작업한 걸 알고 감탄했습니다.
그전까지는 '로코베리' 라는 팀이 있다는 것만 아는 정도였는데...
방송을 본 후로 급 관심이 생겼습니다.
발표한 노래들을 듣던 중 ~
곡 전체적인 분위기와 보컬 음색이 딱 제 스타일인 곡이 있길래 살포시 포스팅해봅니다.
로코베리 - 계절 끝 (잠 못 드는 밤 2)
니 맘은 차가워
쓸쓸한 긴 겨울처럼
사랑은 또 계절을
닮았나 봐
봄바람 불어와
너의 향기가
날리면 사랑한다
그때 고백해야지
초록 지붕아래
우리 살던 공간 속에는
이젠 나 혼자
쓸쓸히 있네요
어두운 새벽 정적만
흐르는 밤사이로
외롭게 들리는 tv소리 (I miss u)
I`ll never let you down
I can`t smile without...boy
서랍 속 오래된 일기장 이야기
I`ll never let you down
I can`t smile without...boy
또 어느새 입가에 떨림이
다시 니 맘은 차가워
쓸쓸한 긴 겨울처럼
사랑은 또 계절을
닮았나 봐
봄바람 불어와
너의 향기가
날리면 사랑한다
그때 고백해야지
나를 떠나가지 말아요
나의 그대여
나를 떠나가면 안돼요
나의 그대여
겨울 향기 밀려오는
바람 그 거리에는
나만의 니가 아직 존재해
횡단보도 걸려있는
슬픈 빨간 불빛이
니 마음처럼 날
멈추게 해 I need u
I`ll never let you down
I can`t smile without...boy
내 마음을 뿌리치던 널 안았지
I`ll never let you down
I can`t smile without...boy
너는 날 사랑하지 않았지
다시 니 맘은 차가워
쓸쓸한 긴 겨울처럼
사랑은 또
계절을 닮았나 봐
봄바람 불어와
너의 향기가
날리면 사랑한다
그때 고백해야지
나를 떠나가지 말아요
나의 그대여
나를 떠나가면 안돼요
나의 그대여
피드 구독하기:
글 (Atom)
카테고리
- ...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...