보안에서 리버싱(Reversing)은 어떤 프로그램의 내부를 뜯어 분석하는 것을 말합니다.
사실 마인크래프트 모드도 리버싱해서 만든 겁니다.
Windows에서는 리버싱할 때 x64dbg 같은 걸 사용합니다.
보안에서의 리버싱은 그 의미만 봐도 간단한 작업이 아니라는 게 티가 나겠죠.
거의 기계어에 가까운 어셈블리어 같은 언어를 이용해서 합니다.
...네, 그 어셈블리어라는 언어의 문법을 알아야 한단 뜻입니다.
Intel, AT&T, EAX, EBX 등등 많습니다.
가장 대표적인 문법을 한번 보죠.
EAX, EBX, EBP와 같이 원래 그 명칭 그대로 사용하는 걸 Intel이라 합니다.
Intel에서 %를 붙이는 거라 보시면 됩니다(%EAX, ...).
범용, 인덱스, 포인터 레지스터
CPU 연산 데이터의 임시 저장 공간...인데 전공자는 다 알고 있겠죠.
산술 연산에 사용(or 함수 리턴값 처리)
산수나 변수 등을 저장할 때 사용
루프 문에서 count 역할을 수행할 때 사용
몫: EAX, 나머지: EDX
출발지 주소 저장
목적지 주소 저장
다음 실행할 명령어의 주소를 가진다(컴구에서 PC 생각하면 됩니다).
마지막 Stack Pointer의 주소를 저장합니다.
Stack Pointer의 기준점을 저장합니다.
솔직히 어셈블리를 전공자가 모를 리는 없으니(RET, CMP, INT, PUSH, POP 이런 거라) 넘어갑니다.
뭐, 문제 푸는 곳이겠죠. 근데 일단 x64dbg부터 먼저 설치하도록 합니다.
누르면 바로 설치 진행합니다: https://sourceforge.net/projects/x64dbg/files/latest/download
사용법은 CodeEngn 문제 보면서 차차 알아가도록 하죠.
오늘은 01부터 05까지 풀어보도록 합시다(는 이미 이 시점엔 이미 다 푼 상태에서 작성 중이라 카더라).
자, 일단 알집 같은 압축 파일 여는 거 없는 사람들은 헤매게 될 건데 깔읍시다. 아니면 방법이 없어요.
그리고 아마 보안 문제 때문에 막 자기 마음대로 프로그램 삭제되는 경우도 있는데 방화벽 상태를 약간 느슨하게 하시거나 허용 리스트에 넣으셔도 됩니다.
아무튼 01 깔고 x32dbg 실행시키면(프로그램이 64비트를 지원하지 않는 모양입니다)

이런 화면이 뜨는데 그냥 파일 끌어오시면 됩니다.
참고로 이 프로그램은 다른 것보다 Function 키를 많이 쓰게 될 겁니다.
각 Function 키가 어떤 역할을 하는지 실행할 때 쓰는 순서로 한번 봅시다.
F9는 이 프로그램의 처음부터 디버깅을 본격적으로 시작하겠단 뜻입니다.
F7은 줄 하나하나 이동하는 녀석입니다. F9 여러 번 누르시면 뭐 금방 지나가 버리니까 쓰겠죠?
F9는 대신에 코드 왼쪽에 원이 있는데 누르면 중단점이 설정됩니다. 한 번에 넘어갈 때 유용하겠죠?
사실 이것만 알아도 무관하긴 합니다. 그러니까 넘어가죠.

여기부터 시작입니다.
HDD를 CD-Rom으로 인식시키기 위해서는 GetDriveTypeA의 리턴값이 무엇이 되어야 하는가
가 문제죠? 보면 cmp eax, esi가 있는데 eax랑 esi가 같으면 YEAH가 뜨는 걸 볼 수 있네요. 그러면 같게 만들기 위해 앞서 esi와 eax의 초깃값이 무엇인지 한번 보죠.

오른쪽 보시면 이런 게 있어요.
eax는 0019FFCC인데요, 아직 모르죠. 가다 보면 더하고 빼기 직전, 00000003이 뜹니다. 그렇다면 여기서 ESI랑 값을 동일하게 하면 되지 않을까요?

이런 작업을 수행한 뒤에 검토를 하니 esi는 일단 3을 더하고 eax는 -2를 하는 과정이 들어가니 eax는 00000001이 되고 esi는 00401003이 돼 있겠네요.
그렇다면 오른쪽 화면에 있는 FPU에서 00000003이었을 때 00401005로 바꿔 준다면 통과하지 않을까요? 수정은 더블 클릭하시면 됩니다.
...네, 통과됐네요.
얘는 좀 특이합니다. 코드 실행도 안 되고 넣을 수도 x64dbg로 리버싱할 수도 없어요. 잘못된 PE 파일이라는 게 뜨게 되죠. 그래서 HxD를 사용합니다.

패스워드를 대놓고 알려주네요? 뭐 다음으로 넘어가죠.
비주얼베이직에서 스트링 비교함수 이름은?
이 언어를 배운 사람들은 아실 건데 전 왜 배워도 한 번도 쓴 적이 없을까요...?(InStr만 써 왔는데) 아무튼 해석해 봅시다.

그런데 뭐가 없다고 하네요? 저건 그냥 dll 파일 들고 오시면 되겠습니다.