디스어셈블 라이브러리 "Zydis" 빌드하기
뻘짓

디스어셈블 라이브러리 "Zydis" 빌드하기

카카오톡 exe 파일을 까본 모습.

분석가들과 개발자, 해커들의 영원한 친구 OllyDBG 그리고 그의 친구 X64DBG 의 그것이다. 얘네들은 내부적으로 Zydis, XED 라는 디스어셈블/어셈블 오픈소스 라이브러리를 사용하여 사용자에게 UI로 보여준다. 라이센스 또한 MIT 허가서를 사용하므로 GPL에 대한 부담없이 사용하기 좋은 디스어셈블 라이브러리다. 제작자 일동에게 정말 경의를 표한다...

나는 리버싱을 해본 경험이 분석가들에 비하면 세발의 피이므로 이런식으로 먼저 맛을 보려고 한다. 음~

여러분도 함께 같이 찍어 먹어보도록 하자. 우선은 라이브러리를 받아야겠다.

github.com/zyantific/zydis

 

zyantific/zydis

Fast and lightweight x86/x86-64 disassembler library - zyantific/zydis

github.com

zip으로 받던 클론을 받던 재량껏 내려받아주자. 아마 msvc 라는 폴더가 있을것이다.

 

 

열어보면 개발자들이 정말 다양한 빌드 구성을 걸어둔것을 볼 수 있다.

여기까지 정성이 다 느껴진다. 이중에서 VC 런타임 DLL 없이 배포하고 싶은 사람은 MT 로 빌드하여 사용하면 되고, 그정도 DLL은 같이 배포해 줄 수 있다면 MD 로 빌드 해주면 된다. Debug / Release 철저히 나눠서 하고싶으신 분들은 두놈씩 쌍으로 빌드해주면 된다. 뭐 이정도는 여러분들도 잘 알테니 굳이 설명 안해도 되는 부분이다.

스펙터 완화 라이브러리가 없어 빌드가 되지 않는 경우도 많으므로 빌드중에 뜬금없이 링커 에러가 뜬다면 저녀석을 비활성화 해주는것은 굳이 말 안해도 알 것이다. 이제 빌드가 잘 될것이다.

그런데...

소스 파일을 열 수가 없댄다. 프로젝트 디렉터리를 싸그리 뒤져봐도 저런놈들은 당최 보이질 않는다. 알고보니, Zydis 말고 한놈이 더 필요했다...

github.com/zyantific/zycore-c

 

zyantific/zycore-c

Internal library providing platform independent types, macros and a fallback for environments without LibC. - zyantific/zycore-c

github.com

Zydis에서 사용하는 헤더 및 여러 정의들과 유틸리티들을 여기에 짱박아 둔 모양이다. 대체 왜 이렇게 나눠뒀을까? 오픈소스가 좋긴 해도, 이렇게 난생 처음 빌드해보는 입장에서는 불친절하게 다가오는것은 국룰인가보다... 아무튼 내려받아서 내용물을 한번 보자.

그리고 Zydis 프로젝트의 설정도 같이 까보자.

 

저 경로에 저녀석들이 박혀있어야 하는 모양이다. 수동으로 넣어주자.

해당 경로에 그대로 복붙 해주었다. 이제 다시 빌드해보자.

 

아~~~ 뭔데 ~~~~ 당황하지 말고 자세히 읽어보면 특정 리소스를 읽어올수가 없단다... zycore 에 저 녀석이 있는지 확인해보고 있다면 저 경로에 박아주면 되지 않을까?

 

역시나 있었고, 복붙해주자. 이제 빌드해보면?

 

양호.

 

빌드가 다 되고나면 아래와 같은 파일이 생성될것이다.

이제 외부 프로젝트에서 이 라이브러리를 링크시켜 헤더파일과 함께 적절히 사용하면 될것이다. 이 모든 과정이 귀찮으신 분들을 위해서 역시 또 미리 준비 해놨다. 자꾸 해주면 안되는데

zydis-master 수정본.zip
1.42MB

 

Zydis에 존재하는 예제코드들도 한번씩 빌드 해보면서 대충 뭐하는놈인지 겸사겸사 확인도 해보자. 아래 예제는 Formatter01 를 빌드해 실행한 화면이다.

늘 이야기 하지만 프로젝트 빌드중에 spectre 뭐시기 에러는 스펙터 완화 옵션때문에 발생하는것이므로, 해당 에러가 발생한다면 스펙터완화 옵션을 사용안함으로 돌려주는것은 VS2019 사용자라면 누구나 알고 있겠지만 혹시 모르니 다시 일러둔다.

 

2022.04.28 : Zydis 의 대안, Capstone 라이브러리에 대한 글도 작성 하였으니 참고 하시기 바랍니다. https://nitwit.tistory.com/29

 

디스어셈블 라이브러리 "Capstone" 빌드 및 사용법

 자... 지난번에는 디스어셈블 라이브러리로 Zydis를 소개 했었다. 이 라이브러리는 속도가 빠르고 가벼우며, 인스트럭션의 상세정보를 확인하기가 비교적 수월하다는 평을 받는다. 이 라이브러

nitwit.tistory.com