검색
검색
공개 노트 검색
회원가입로그인

[UCA울산코딩아카데미] x64dbg로 하는 SW 리버스 엔지니어링 --(2)

올리디버거/ 이뮤니티 디버거와 함께 최강으로 꼽히는 x64dbg 이다.

일단 사용 방법이 올리디버거랑 동일해 예전 올리디버거 버전에 익숙한 사용자는 단축키를 배울 필요가 없고, 손에 착착 감긴다. 한글화도 되어있으며. 디컴파일을 지원하는 snowman등 추가 플러그인도 풍부하다.

debugger

리버싱KR의 Easy_Crack 문제를 해결하려면 3가지 방법이 있다.

첫번째로 윈도 메시지박스 출력에 대해 무조건 NOP로 대체인데, 사실 생각대로 잘 안되고 일단 실패하게 되어있다.

assembly-2

문자열을 찾는 곳에서 Incorrect Password 라는 메시지를 찾아도 되고, 모듈에서 MessageBox()만 찾아 두 군데에 먼저 브레이크포인터를 거는 방법도 유효하다.

assembly-3

call sub_401150 같은 곳에 다다르면 F7로 함수 내부 진입을 해야한다. 안에 보면 다시 추가 cmp구문을 찾을 수 있다.

assembly-4

추가로 브레이크포인트를 걸고 cmp 비교 구문을 실행해보면 w와 a를 비교하는 명령어를 통해서 2번째 암호가 a 임을 찾을 수 있다.

assembly-6

두 번째는 나락으로 가는 모든 위치를 파악한 후, 조건부 점프를 전부 강제 점프로 바꿔서 틀린 패스워드를 넣어도 성공하게 만드는거다.

보통 리버싱 문제들이 원하는 조건이다.

여기선 IDA Free 8.4등에도 제공되는 양방향 레퍼런스인 XREF 기능을 써서 금방 해당 위치로 오는 모든 모듈들의 위치를 찾아서 강제 점프로 만든다.

세 번째는 cmp 구문에 일일이 브레이크 포인트를 걸어서 값들을 비교하는 부분을 찾아서 살짝 비틀어버리는거다.

이제 X64DBG를 이용해서 솔루션을 진행해보자.

패스워드를 모르기 때문에 qwertyuiop 를 입력해보기로한다. 세계인들이 쓰는 패스워드중 가장 많은게, qwer과 asdf, 1234라는 얘기도 있다.

sol-1

그러면 브레이크포인트를 건 곳에서 실행이 멈추게 되고, 문장을 비교하는 파트를 찾아낼 수 있다.

앞으로 더 비교하려는 문구가 전부 다 훤히 보이긴한다.

sol-2

F7키로 SUB_401150 펑션 안으로 진입한다.

sol-3

세번째 자리부터 비교하는 곳이다.

sol-5

알아낸 부분 암호를 중간 적용해보자.

sol-6

반복문이 돌면서 글자들을 비교하는 모듈

sol-7

마지막 맨 첫자인 "q"와 "E"를 비교하는 구문이다.

sol-8

나락으로 가는 곳을 건너뛰어 천국으로 가는 계단에 도착했다.

sol-9

qwertyuiop로 시작했지만, 두 번째 글자 값이 "a"임을 알았고, cmp 비교 구문에서 드러나는 곳을 일일이 비교해서 다음은 "5", "y"

qa5yR3versing

Ea5yR3versing

마지막은 "E"를 q와 비교하는 부분을 통해 최종 패스워드를 알아낼 수 있었다.

디지털포렌식, 모의침투 및 OS 해킹, 침해 분석, 도커, 리눅스 서버 시스템 운영등 정보보안과목의 수강을 원하는 분들은 연락을 기다립니다.

ulsancoding.com

052-708-0001

공유하기
카카오로 공유하기
페이스북 공유하기
트위터로 공유하기
url 복사하기
조회수 : 120
heart
T
페이지 기반 대답
AI Chat