CodeEngn(3)
-
Advance 03
먼저 DIE를 통해 분석한 결과 MASM32로 컴파일된 것을 확인할 수 있습니다. MASM은 인텔 문법을 사용하는 MS-DOS 및 마이크로소프트 윈도우용 x86 어셈블러입니다. 프로그램 실행 화면입니다. Name과 Serial을 입력할 수 있습니다. 이번 문제는 Name이 CodeEngn일 때 Serial를 찾는 문제입니다. 현재 프로세스의 핸들 값을 얻고 DialogBoxParamA API를 실행합니다. 해당 API는 대화 상자를 만드는 함수입니다. 3번째 인자는 lpDialogFunc로 대화 상자 프로시저에 대한 포인터입니다. 해당 프로시저를 분석해보도록 하겠습니다. 먼저 Name의 길이가 3 미만이면 "You failed..."라는 구문을 띄웁니다. 401277 함수가 실행된 뒤 0x403000에 ..
2022.04.30 -
Advance 02
문제에서 제공되는 파일을 분석한 결과입니다. 따로 패킹되지 않았습니다. x32dbg로 분석을 해보도록 하겠습니다. 디버깅 중 해당 부분에서 에러가 발생해 다음 부분으로 넘어가지 못합니다. 해당 함수는 dll의 이름을 추출합니다. 0x40653C 함수 종료 뒤 dll의 이름을 인자로 전달되는 함수가 있는데 해당 함수의 결과 값을 0x1171과 비교합니다. 틀리다면 0x402C94로 점프하게 됩니다. 0x40653C 함수가 3번째에 eax가 0이 되어 에러가 발생하게 됩니다. 그래서 2번째 반복됐을 때 sub_402BE0 함수의 리턴 값을 ax와 비교하게 만들어 조건문을 통과시킬 수 있습니다. 패치한 파일을 실행시키면 위와 같은 문자열이 뜨면서 프로그램이 시작합니다. 비밀번호를 입력한 뒤 어떻게 진행하는지 ..
2022.04.30 -
Advance 01
먼저 PE 파일 분석을 하니 UPX로 패킹된 것을 확인할 수 있습니다. 그래서 먼저 언패킹을 하였습니다. 언패킹을 한 뒤 x32dbg로 분석을 하니 위와 같은 에러 메시지가 뜨면서 종료되었습니다. 그래서 자세히 분석을 해보니 IsdebuggerPresent라는 안티 디버깅 함수가 사용되는 것을 확인하게 되었습니다. 그래서 test eax, eax를 xor eax, eax로 변경하여 우회를 하였습니다. 패치한 파일을 다시 분석해보도록 하겠습니다. 먼저 컴퓨터가 켜진 뒤 실행된 시간을 출력하는 api인 timeGetTime에 break point를 걸고 진행하였습니다. 여기서 멈췄는데 timeGetTime 주소를 edi로 옮긴 뒤 실행합니다. eax(결과 값)의 값을 esi에 옮깁니다. 그리고 Sleep 함..
2022.04.29