SMALL

Wargame/CodeEngn 6

[CodeEngn] Basic RCE L09

[문제] [풀이] 문제를 실행하면 error 메시지 출력 후 종료된다. 이에 IDA를 통해 UPX 패킹이 되어 있는 것을 확인할 수 있었고, unpacking을 진행한 뒤 ollydbg로 실행하였다. 6A0068002040006812204000 [핵심] StolenByte란? : 훔친 바이트란 의미, 프로그램의 한부분의 코드를 훔쳐내어 다른 부분으로 옮겨진 코드 - 주로 옮겨지는 코드는 엔트리 포인트위의 몇개의 코드임 - 옮겨진 코드들은 OEP 주소로 점프하기 전에 위치에서 PUSH 됨. -> 주로 OEP 주소의 코드를 따로 분리해서 OEP로 점프 직전에 PUSH로 넘겨주 - 패커가 이동시킨 코드의 윗부분 (보통 OEP 로부터 몇 개의 명령어) - 프로그램을 패킹 시 확인 가능. - 숨겨진 코드를 다시 ..

Wargame/CodeEngn 2021.08.11

[CodeEngn] Basic RCE L08

[문제] [풀이] 1. UPX 언패킹 후 디버깅 IDEA로 디버깅을 시도하니 upx 패킹이 되어있었다. 문제에서 구해야 하는 것이 OEP이므로 패킹만 풀어주면 쉽게 구할 수 있다. 이에 cmd에서 upx를 풀어주고 IDEA나 Ollydbg로 디버깅하였다. 언패킹 후 아이다에서 start함수를 열어주면 OEP를 한 번에 구할 수 있다. 2. 패킹 상태로 문제 풀이 패킹이 된 파일을 Ollydbg로 열면 PUSHAD와 POPAD를 찾아볼 수 있는데, POPAD부분에서 JMP분기문을 발견할 수 있다. 이는 패킹 후 실제 코드가 들어있는 부분이므로 분기문 속을 Stepin하면 OEP를 발견할 수 있다.

Wargame/CodeEngn 2021.08.04

[CodeEngn] Basic RCE L07

[문제] [풀이] 문제 파일을 다운하여 임의의 문자열을 넣고 실행해보면 error 메시지가 출력된다. GetDlgItemText 함수와 GetVolumeInformation함수, strcat함수가 눈에 띈다. GetDlgItemText 함수는 입력 값을 가져온다. 00401097 6A 00 push 0 ; RootPathName = NULL -> RootPathName = NULL이면 C:\를 말한다! GetVolumeInformation함수는 드라이버의 정보를 가져온다. 가져온 정보는 위의 버퍼에 저장된다! 004010A8 E8 94000000 call ; \lstrcatA -> strcat 함수: 문자열 붙여주는 함수, 인자 값으로 4562-ABEX와 07.0040225C 값을 가져와서 붙여준다. -..

Wargame/CodeEngn 2021.07.30

[CodeEngn] Basic RCE L05

[문제] [풀이] 파일을 다운하여 임의의 문자열을 넣을면 오류 메시지가 출력된다. IDA를 열어 start 함수를 보면 UPX로 패킹되어 있는 것을 알 수 있다. 이에 윈도우 cmd 창에서 upx 언패킹을 하여 ollydbg로 분석해보았다. ollydbg로 [Searchfor] - [All referenced text strings]를 확인하면 프로그램 속의 문자열만 추출하여 보여준다. 여기서 Enter a Serial! 아래에 Registered User와 GFX-754-IER-954가 위치하였고, 이 다음 성공 메시지를 출력하고 있었다. 해당 값들이 실제 정답인지 확인하고자 코드를 확인하였다. 코드를 보면 Registered User 아래에 조건 분기문으로 00440F8C로 분기하는 것을 볼 수 있는..

Wargame/CodeEngn 2021.07.29

[CodeEngn] Basic RCE L04

[문제] [풀이] 프로그램을 실행시키면 정상이라는 문자열이 출력된다. 이외에는 특별한 것이 없으므로 ollydbg를 실행시켜보았다. ollydbg에서 프로그램을 실행해보니(F9) 디버깅 당함이라는 문자열이 출력되는 것을 보아 안티디버깅이 적용되어 있는 것을 알 수 있다. 이에 한 줄씩 코드를 실행(F8)해보며 어떠한 과정을 거칠 때 디버깅 당함이라는 문자열이 출력되는지 확인해보았다. 프로그램을 실행하다보니 GetCommandLineA 라는 함수를 지나니 안티디버깅이 적용됨을 확인할 수 있었다. 이에 해당 함수 내부를 보기 위해 SetIn 과정을 수행하였다. GetCommandLineA 함수 내부에서 코드를 실행해보니 CALL 04. 0040100F 호출 후 안티디버깅이 적용됨을 알 수 있었다. 이에 St..

Wargame/CodeEngn 2021.07.22

[CodeEngn] Basic RCE L03

[문제] [풀이] 문제 파일을 실행하니 해독할 수 없는 문자열이 나왔고, 구글링하니 독일어라고 한다..! key 를 입력하는 창이 실행되었고, 아무 문자나 입력해보았다. 문자열 검증에 실패할 경우 error가 출력되었다. 이에 ollydbg를 통해 디버깅을 해보았다. 어셈블리를 확인하니 입력한 문자열을 비교해서 password가 맞고 틀림을 나타내주는 것 같았다. 비교의 성공 여부를 나타내는 문자열 앞에 unicode로 2G83G35Hs2를 push 한 후에 varStrCmp 함수를 호출하는 것을 보아 해당 문자열과 입력값을 비교함을 알 수 있다. 따라서 key 값으로 2G83G35Hs2을 입력해보면, 성공 메시지를 획득할 수 있다. 그런데, 문제는 스트링 비교 함수를 묻고 있으므로 정답은 varStrC..

Wargame/CodeEngn 2021.07.22
LIST