Reversing/Reversing (Wargame)
[Reversing.Kr] Easy Keygen
파일 확인 실행 이렇게 Name과 Serial을 입력하는 창이 뜨고, Serial까지 입력하고 나면 종료되는 프로그램이다. ➕ 문제 파일을 다운로드 받을 때 같이 첨부되어 있는 ReadMe.txt 파일을 열어보면 Serial 값이 "5B134977135E7D13"일 때의 Name 값을 찾아야 한다. 추측해보면,, Name 값을 암호화해서 Serial 값을 만들어내는 문제이지 않을까 싶다. serial 값을 만들어내는 알고리즘..?을 찾아내는 게 핵심일 듯 하다. - detect it easy 파일 분석 pseudo code (IDA) v9: 사용자의 입력값을 저장 >> Name, Serial 첫 번째 scanf(aS, &v9)에서는 Name을 입력받는다. 입력받은 문자열 v9(name)에 대하여 이것..
[Reversing.Kr] Easy Unpack
파일 확인 실행 제대로 실행되지 않는다. - detect it easy 현재 파일의 entry point는 0040a04b이다. 파일 분석 x32dbg를 사용했다. 실행[F9]을 하면 위에서 확인한 entry point인 0040a04b에서 멈춘다. 코드들을 쭉 살펴보면 0040A04B부터 0040A1FB까지 특정 명령 그룹(?)들이 반복되고 가장 아래 두 개의 점프문 아래로는 opcode가 0으로 비어있는 공간임을 알 수 있다. 이 부분이 아마 unpacking code가 아닐까?라는 생각을 했다. 그리고 가장 마지막의 명령어 주소인 0040A1FB에 break point를 걸고 스텝오버를 해봤다. 스택 프레임의 형태(?)로 넘어갔다! OEP라고 추측해볼만 하다! 뭔가 좀 운이 좋게 풀린 느낌..?이지..
[CodeEngn] BASIC RCE L14
파일 확인 실행 - detect it easy upx 로 패킹된 파일이다. 우선 그럼 upx로 언패킹을 해봐야겠다. upx 파일 분석 디버깅 ( 어셈블리 코드 확인 ) 문자열을 먼저 찾고 "Good Job" 문자열이 있는 위치로 이동해서 코드를 살펴봤다. jne 14_unpack.401353을 기점으로 "Good Job" 또는 "Wrong Serial" 문자열과 관련한 코드들이 나오는 걸로 봐서 cmp eax, esi 에서 사용자가 입력한 serial 값과 비교하는 듯 하다. 이 때 EAX에 저장된 값 0x2b67 = 11111로 입력한 값이다. ESI에 저장된 값 0x129A1 = 76193이다.
[CodeEngn] BASIC RCE L13
파일 확인 실행 password를 입력받고 비교하여 적절한 메시지를 출력하는 프로그램이다! - detect it easy 패킹되지 않은 파일이다. - PEiD C#으로 작성된 프로그램이다! 파일 분석 디버깅 (어셈블리 코드 확인) C#으로 작성된 코드라서 그런가.. 익숙한 형태의 어셈블리 코드가 아니다. 그래도 나름대로 해석을 해보자면,, 사용자로부터 password를 입력받고, op_Equality를 호출해 두 개의 string 즉, 사용자가 입력한 password와 실제 password를 비교해 일치하는 경우 "Well Done!"메시지가 출력되도록, 일치하지 않는 경우 loc_202로 이동해서 (아마도 branch if false가 아닐까..) "Bad Luck!"메시지를 출력하도록 한다. ✔ ..
[CodeEngn] BASIC RCE L12
파일 확인 실행 사용자로부터 KEY를 입력받고 정답 KEY와 비교하는 프로그램이다. 파일 분석 문자열들 중 "Congratulation,~"을 찾아 해당 문자열을 참조하는 위치로 이동한다. 해당 코드 주변을 살펴보면 사용자가 입력한 값을 원본 key값과 비교하고 비교 후 "Congratulation"으로 넘어가는 cmp문이 있을텐데 cmp esi, 0보다는 cmp eax, 7A2896BF가 더 key값 비교하는 명령같다. 16을 입력해봤다. eax 레지스터에 입력한 값 16 (=0x10)이 저장된 것을 알 수 있다. 그렇다면, 0x7A2896BF (=2049480383)을 입력해보면 Congratulation 창이 뜬다! >> Key: 2049480383 HxD 이 영역이 Congratulation 메시..
[CodeEngn] BASIC RCE L11
파일 확인 처음 실행하고 "확인"을 누르면 Error 창이 뜬다. - Detect It Easy UPX로 패킹된 파일이다! 그냥 바로 upx로 언패킹해줬다. 파일 분석 언패킹하고 바로 실행하면 깨진 문자들이 보인다. 문제에서도 알 수 있듯, 이는 "Stolen Bytes(Remove OEP)"때문에 생긴 현상이다. ✔ Stolen Bytes(Remove OEP) 원본 코드의 일부, 주로 OEP 코드 부분을 패커/프로텍터가 생성한 메모리 영역에 가져다 두는 기법이다. 덤프를 시켰을 때 제대로 stolen bytes를 복구하지 못하면 제대로 실행되지 않고, 언팩했을 때 우리가 아는 그런 익숙한 코드가 아닌 다른 형태의 코드들이 나타난다. >> POPAD와 jmp OEP 사이에서 PUSH 하는 모든 코드들을 ..
[HackCTF] strncmp
◾ 실행환경: IDA pro x64 check 64bit ELF 파일이다. analyze #main call strcmp_함수를 호출한다. mov [rbp+var_54], eax: rbp+var_54 위치에 eax 값을 저장한다. 이 때 eax에 저장되는 값은 strcmp_에서 리턴한 값으로, 만약 비교한 두 문자열의 값이 동일하다면 0을 리턴하고 같지 않은 경우 0이 아닌 값을 출력한다. cmp [rbp+var_54], 0: rbp+var_54에 저장된 값(strcmp_의 리턴값)과 0을 비교한다. rbp+var_54에 저장된 값이 0인 경우 ZF = 1로 설정된다. jnz short loc_400849: ZF가 1이 아닌 경우(not zero), 0x400849로 점프한다. #strcmp_ strnc..
[CodeEngn] BASIC RCE L08
이 문제파일도 IDA로 열어보니 이런 창이 뜨는 걸로 봤을 때 패킹된 파일인 듯 하다. UPX로 패킹된 파일인 것을 확인했다. upx를 이용해 언패킹된 파일 08_unpack.exe를 만들어준다.
[CodeEngn] BASIC RCE L06
◾ 파일 형식: exe (32bit) 실행 먼저 IDA로 바로 열어보면 사용자로부터 Serial을 입력하는 창이 뜨고, 버튼을 누르면 결과에 따라 다른 메시지창이 뜬다. 06.exe 파일 분석 현재 06.exe 파일이 패킹된 파일이라는 것을 확인할 수 있다. 그래서 이 파일을 upx로 언패킹 해줬다! 이렇게 06.exe를 언패킹한 06_unpack.exe를 만들어줬다. 언패킹된 파일을 IDA로 열었다. 이 때 사실 헷갈려서 [Shift] + [F12]로 String window로 연결한 후, 뭔가... 결과값으로 출력되는 듯한 문자열을 골라서 해당 문자열을 참조하는 위치로 갔더니 serial key와 사용자 입력값을 비교하는 분기문을 찾을 수 있었다. >> Serial Key 획득 IDA에서 [Ctr..
[CodeEngn] BASIC RCE L05
실행 이 상태에서 Register now! 를 누르면 이런 오류 메시지가 뜬다. 분석 IDA에 PE 파일을 띄우면 이런 메시지 창이 뜬다. (IAT가 현재 파일의 메모리 범위 밖에 존재한다.. >> Detect It Easy로 파일을 확인해보자. 현재 문제파일 05.exe가 UPX로 패킹된 파일이라는 것을 확인할 수 있다. upx로 패킹됐으니까 upx로 쉽게 언패킹도 할 수 있다. 이제 언패킹된 05_unpack.exe를 IDA에 올려보면 이런 식으로 패킹된 파일에서는 볼 수 없었던 원본 코드들을 볼 수 있다. [Shift] + [F12]로 Strings window를 열어 결과값에 해당하는 문자열을 찾아 역참조를 한다. 그렇게 거슬러 올라가면 사용자 입력값과 등록키를 비교하는 코드들을 찾을 수 있다.