rev-basic-7 풀이
·
Security/Reverse Engineering
문제 설명 문제 풀이IDA로 문제 파일을 열고 디컴파일을 하면 다음과 같은 코드가 나온다.바로 분기처리 담당 함수인 sub_140001000 으로 들어가보자.이를 통해 우리는 다음과 같은 연산식을 얻을 수 있다.byte_140003000[i] = (i ^ (unsigned __int8)__ROL1__(*(_BYTE *)(a1 + i), i & 7)) 식에서 ^ 연산과 & 연산은 알겠는데... 이상한 놈 하나가 중간에 끼어있다...__ROL1__이라는 놈인데 궁금해서 GPT 형님에게 물어봤다.  흠,,, 근데 함수 내부에서 두개의 인자를 받는 것으로 보아,,, 1바이트 순환하는게 아닌 *(a1 + i) 데이터를 i&7 만큼 순환하라는 의미 같았다. i&7만큼 왼쪽으로 순환해서 나온 결과를 다시 i와 xor..
rev-basic-4 풀이
·
Security/Reverse Engineering
문제 설명문제 풀이(x64dbg)문제에서 내려받은 파일을 x64dbg로 열었을 때의 모습이다. 먼저 문자열 참조 검색 기능을 사용하여 main 함수를 찾아보자.여기서 분기문을 찾아보자. 당연히 'Correct' 문자열을 출력하는 부분 위에 있지 않겠는가?노란 하이라이트 부분에 커서를 올려보며 cmp 명령어가 포함되었는지 확인해본다. 140001000에 커서를 두고 미리보기를 했을 때, cmp 명령어가 포함되어 있으니 클릭하여 들어가보자.함수의 시작 주소가 140001000이고 ret 주소가 14000106E까지라서 살짝 길지만,,, 모든 줄을 한번 분석해보자. 1. mov qword ptr ss:[rsp+8],rcx : rcx(첫번째 함수 인자)값을 rsp+8(스택)에 저장2. sub rsp,18 : r..
rev-basic-3 풀이(IDA)
·
Security/Reverse Engineering
문제 설명 문제 풀이- 사용했던 툴 : IDA 이전에는 x64dbg를 활용하여 문제를 풀었는데 이번에는 IDA를 사용하여 문제를 풀어보았다.IDA에서 문제 파일을 열면 다음과 같은 화면이 나온다.편리하게도 박스로 어셈블리 코드를 묶어주고 순서도를 그려준다. IDA를 사용하는 가장 큰 이유는 바로 디컴파일 기능 때문이다. F5 단축키를 통해 변환시킬 수 있다.디컴파일을 하면 main 함수를 편리하게 볼 수 있다. 마치 C언어 환경과 비슷하다.코드 자체는 단순하다. 사용자 입력을 받고 그 입력이 저장된 문자열과 일치하면 Correct, 일치하지 않는다면 Wrong을 출력한다. 하지만 문자열 비교 과정은 복잡하다. sub_140001000을 더블 클릭하여 들어가보면 다음과 같은 화면이 나온다.결국에는 한글자씩..