[ 리버싱 / 프로그래밍 / 음악 / 게임 / 그 외... ]



수요일, 2월 15, 2017



Pin 3.2 버전이 올라왔군요... @_@ !!!

[ Pin - A Binary Instrumentation Tool 다운로드 페이지 ]


Pin 2.14 버전은 VS2015 를 지원하지 않고~

Pin 3.0 은 작년에 올라왔다가 어느 순간 윈도우 버전 다운로드 링크가 사라져서 난감했는데...

Pin 3.2 버전으로 다시 올라왔네요~ :)


Pin 3.x 로 넘어오면서 프로젝트 생성 시 손봐줘야 될 것들이 많아졌는데~

기록보관 차원에서 포스팅해봅니다.


시작하기 전에


준비물 : Visual Studio 2015 Community, Pin 3.2 (윈도우용)

Pin 3.2 는 다운로드 페이지에서 받은 후, 원하는 곳에 압축을 풀어두면 됩니다.


프로젝트 생성 및 Pin 설정


Win32 응용 프로그램 - DLL - 빈 프로젝트

PinTool 은 DLL 형태이기 때문에~ DLL 을 선택한 후 "빈 프로젝트" 로 프로젝트를 생성합니다.

프로젝트에 파일이 하나도 없으면 '프로젝트 속성' 페이지에 'C/C++' 항목이 안보이니...

편의상 비어있는 cpp 파일이라도 하나 만들어서 프로젝트에 추가해줍니다.


이제 '프로젝트 속성' 페이지를 열어서~ 하나하나 만져주면 됩니다.

구성속성 - 일반
'구성속성' - '일반' 페이지에서 '문자 집합'"멀티바이트 문자 집합 사용" 지정해줍니다.


다음은 'C/C++' - '일반' 페이지의 '추가 포함 디렉터리' 에 Pin 관련 Include 폴더들을 추가해줍니다.

C/C++ - 일반 - 추가 포함 디렉터리
PinTool 프로젝트 생성시 제일 귀찮은 부분이 아닐까~ 싶네요.

이번 버전에 비해 포함시켜줘야 되는 폴더들이 많아졌습니다. oTL;;;;

압축을 풀어둔 폴더가 PIN_ROOT 라는 가정하에 아래의 폴더들을 추가하면 됩니다.
( 제 PC 의 경우 PIN_ROOT=E:\Work\Source\pin-3.2-81205-msvc-windows 가 되겠죠~ )

------------------------------------------------------------------------------------------------
%PIN_ROOT%\source\include\pin
%PIN_ROOT%\source\include\pin\gen
%PIN_ROOT%\extras
%PIN_ROOT%\extras\components\include
%PIN_ROOT%\extras\crt
%PIN_ROOT%\extras\crt\include
%PIN_ROOT%\extras\crt\include\arch-x86 (64비트용은 arch-x86_64)
%PIN_ROOT%\extras\crt\include\kernel\uapi
%PIN_ROOT%\extras\crt\include\kernel\uapi\asm-x86
%PIN_ROOT%\extras\libstdc++\include
%PIN_ROOT%\extras\stlport\include
%PIN_ROOT%\extras\xed-ia32\include\xed
( 64비트용은 %PIN_ROOT%\extras\xed-intel64\include\xed )
------------------------------------------------------------------------------------------------

일단 이 정도는 최소한으로 포함이 되어야 되는 걸로 보입니다.

없어도 되겠지 싶어서 폴더를 없애보면 컴파일 에러가... -_-;;;;;


C/C++ - 전처리기
'C/C++' - '전처리기' 페이지에서 아래 값들을 추가해줍니다.

------------------------------------------------------------------------------------------------
TARGET_IA32
(64비트용은 TARGET_IA32E)
HOST_IA32
(64비트용은 HOST_IA32E)
TARGET_WINDOWS
__PIN__=1
PIN_CRT=1
__i386__
(64비트용은 __LP64__ )
------------------------------------------------------------------------------------------------


다음은 'C/C++' - '코드 생성' 페이지~

C/C++ - 코드 생성
'C++ 예외 처리 가능' 항목을 "아니요" 로~

'런타임 라이브러리' 항목을 "다중 스레드(/MT)" 로~

'보안 검사' 항목을 "보안 검사 사용 안 함(/GS-)" 으로 지정해줍니다.


C/C++ - 언어
'C/C++' - '언어' 페이지에선 '런타임 형식 정보 사용' 항목을 "아니요(/GR-)" 로 지정합니다.


그리고 'C/C++' - '명령줄' 페이지의 '추가 옵션' 부분에~

"/FIinclude/msvc_compat.h" 를 입력해줍니다.

C/C++ - 명령줄



다음은 '링커' 항목입니다.

'링커' - '일반' 페이지의 '추가 라이브러리 디렉터리' 에 Pin 관련 라이브러리 폴더를 추가해줍니다.

링커 - 일반 - 추가 라이브러리 디렉터리
PIN_ROOT 를 기준으로 아래의 폴더들을 추가해줍니다.

------------------------------------------------------------------------------------------------
[ 32비트 ]

%PIN_ROOT%\ia32\lib
%PIN_ROOT%\ia32\lib-ext
%PIN_ROOT%\ia32\runtime\pincrt
%PIN_ROOT%\extras\xed-ia32\lib


[ 64비트 ]

%PIN_ROOT%\intel64\lib
%PIN_ROOT%\intel64\lib-ext
%PIN_ROOT%\intel64\runtime\pincrt
%PIN_ROOT%\extras\xed-intel64\lib
------------------------------------------------------------------------------------------------

라이브러리 폴더를 추가한 다음~ 실제 사용할 라이브러리를 지정해야되는데요...

링커 - 입력 - 추가 종속성

'링커' - '입력' 페이지의 '추가 종속성' 항목에 아래의 라이브러리들을 추가해줍니다.

------------------------------------------------------------------------------------------------
pin.lib
pinvm.lib
xed.lib
kernel32.lib
ntdll-32.lib (64비트는 ntdll-64.lib)
c-static.lib
m-static.lib
os-apis.lib
stlport-static.lib
crtbeginS.obj
------------------------------------------------------------------------------------------------

라이브러리 추가 후엔 '모든 기본 라이브러리 무시' 항목을 "예(/NODEFAULTLIB)" 로 지정합니다.

링커 - 입력


'링커' - '고급' 페이지에도 만져줘야 될 항목들이 있습니다.

링커 - 고급

'진입점' 항목에 "Ptrace_DllMainCRTStartup%4012" 를~ (64비트는 "Ptrace_DllMainCRTStartup" 만)

'기준 주소' 항목에 "0x55000000" 을~ (64비트는 "0xC5000000") 입력하고

'이미지에 안전한 예외 처리기 포함' 항목을 "아니요(/SAFESEH:NO)" 로 지정합니다.


마지막으로 '링커' - '명령줄' 페이지의 '추가 옵션'"/export:main" 을 입력~!!

링커 - 명령줄



꽤 번거롭긴(?) 하지만  일단 여기까지하면~

Pin 코드를 작성해서 테스트 해볼 수가 있습니다. @_@

빌드 성공


다음엔 게임 해킹툴 분석 시 도움이 될만한 PinTool 을 만들어보는 걸로~~ ㅋ :)








화요일, 2월 14, 2017



안드로이드쪽 공부하면서 바이너리 분석도 같이 보고 있는데...

ELF 포맷에 ARM 타입의 바이너리가 많더군요.. @_@;;;

IDA Pro 를 장만할(?) 여력은 안되고... -_-;;;

이것저것 뒤져보다 ARM 지원하는 디스어셈블 엔진(Capstone Engine)이 있길래...

요걸로 간단한 디스어셈블러 만들어보자~~ 는 생각으로 작업을 했습니다.


디스어셈블 엔진을 사용하려는데 파일의 어느 부분이 코드영역인지 몰라서... -_-;;;;;

또 ELF 포맷 문서를 한참 들여다봤네요...

공부한 내용을 바탕으로 C++ Builder 로 뚝딱뚝딱~~ (이라 쓰고 삽질이라고 읽...;;; )


ELF 포맷 - Info View

Hex View

Disasm View


디스어셈블은 섹션 중 Execute 플래그가 있는 부분만 하도록 했는데...

ELF 포맷에 대한 이해도가 부족하다보니 요렇게 하는게 맞는건지 모르겠네요...ㅋ ^^;;;

좀 더 공부를 해야겠어요... @_@;;...



[ Simple ELF View 다운로드 ]






일요일, 2월 05, 2017



안드로이드 앱을 만들어 보고 싶어서 '안드로이드 스튜디오 (2.2.3)'를 설치하고~

버벅대며 이것저것 만져봤습니다.


버튼 위젯을 하나 올려놓고 테스트를 하던 중...

버튼 텍스트를 영어로 할 땐 문제가 없는데, 한글로 할 떄 글자가 깨지는 현상이 발생하더군요.. @_@;

한글이 안보인다.. oTL


구글을 통해 찾아보니 기본 한글 폰트 설정이 잘못되어 있어서 폰트를 읽어오지 못하기 때문에...

글자가 깨진다고 하더군요.


안드로이드 스튜디오 레이아웃 폰트 관련 폴더

fonts.xml 파일의 내용


안드로이드 스튜디오가 설치된 폴더의 "plugins\android\lib\layoutlib\data\fonts" 폴더의

fonts.xml 에 레이아웃 디자인 시 사용되는 폰트들이 설정되어 있는데...

한글인 경우 "NotoSansCJK-Regular.ttc" 폰트로 되어 있습니다.

그런데 이 폴더에는 "NotoSansCJK-Regular.ttc" 폰트가 없더군요... =_=;;;; ??

한글을 처리할 수 있는 폰트가 없어서 글자가 깨지는거죠... oTL;;

그럼 한글을 처리할 수 있는 폰트를 지정해주면 문제가 해결이 되겠죠~? :)



가장 간단한(?) 방법은 기본 지정된 폰트를 다른 걸로 바꿔주는 겁니다.

"나눔고딕" 폰트를 사용하기


다행히도 레이아웃 폰트 관련 폴더에 "나눔고딕(NanumGothic.ttf)" 폰트가 이미 포함되어 있습니다.

fonts.xml 파일에서

<family lang="ko">
    <font weight="400" style="normal" index="1">NotoSansCJK-Regular.ttc</font>
</family>
이렇게 되어있는 부분을

<family lang="ko">
    <font weight="400" style="normal">NanumGothic.ttf</font>
</family>
이렇게 바꿔주면 되는거죠~ :)

일단 요렇게만 해도 레이아웃 화면에서 한글은 잘 나오더군요...



다른 방법으로는 "NotoSansCJK-Regular.ttc" 폰트를 추가해주는 방법이 있습니다.

"NotoSansCJK-Regular.ttc" 폰트를 추가하기


"NotoSansCJK" 폰트는 구글의 NotoSansCJK 페이지 에서 구할 수 있습니다.

[ NotoSansCJK-Regular 폰트 다운로드 ]


ZIP 파일 압축을 풀고 "NotoSansCJK-Regular.ttc" 파일을 레이아웃 폰트 폴더에 복사를 한 다음..

레이아웃 폰트 폴더의 "fontsInSdk.txt" 파일을 열어서 내용을 추가해줍니다.

fontsInSdk.txt 파일에 "NotoSansCJK-Regular.ttc" 추가

폰트만 복사하고 "fontsInSdk.txt" 파일에 내용 추가를 하지 않으면 인식이 되지 않으니...

꼭~ 추가해 주셔야 됩니다 @_@;;


두 방법 중 입맛에 맞는 방법으로 해결을 하시면 되겠습니다. ^^:;;

한글이 잘보인다.. @_@





카테고리

가장 많이 본 글

통계

Copyright © XeroNic(HS) BLOG | Powered by Blogger
Design by WP Lift | Blogger Template by NewBloggerThemes.com