문제:

OEP를 구한 후 '등록성공' 으로 가는 분기점의 OPCODE를 구하시오.
정답인증은 OEP + OPCODE
EX) 00400000EB03

 

immunity로 열어보니

패킹이 되어있는 것을 확인할 수 있었습니다.

패킹방식은 Aspack.. UPX 툴로는 언패킹하지 못할 것 같습니다.

 

대신 원리를 살펴보면 패킹을 한 바이너리는

PUSHAD -> POPAD -> OEP 이런 과정을 거쳐서 원래의 entry point로 가게됩니다.

POPAD를 찾아봅시다.

POPAD를 찾고 F8을 이용해서 456501 까지 가면 PUSH 했던 445834로 뛰는 것을 볼 수 있습니다. 이 곳이 OEP라고 할 수 있겠습니다.

445834로 가봤더니 이런식으로 되어있는데 ctrl + A 나 Analysis -> Analyse code 를 누르면 

이렇게 어셈블리어를 보실 수 있습니다.

여기서 문자열을 확인해보면

( 문자열 확인법은 ->

2020/02/23 - [Forensics/Reversing] - [CodeEngn 06] Basic RCE L06 )

 

[CodeEngn 06] Basic RCE L06

문제: Unpack을 한 후 Serial을 찾으시오. 정답인증은 OEP + Serial Ex) 00400000PASSWORD 무작정 실행을 해봤는데 틀렸다고 한다.. ㅎㅎ 그러면 디버거를 통해서 "Wrong serial" 문자열 검색 후 그 전 후를 살펴..

h32j00.tistory.com

뭔가 성공을 이야기하는 문자열이 보입니다. Enter나 더블클릭으로 가줍니다.

분기문의 OPCODE는 7555가 되겠네요.

그 조건을 만족 못할 시에는 '등록성공'으로 못갈 것 같습니다.

 

답: 004458347555

 

'Forensics > Reversing' 카테고리의 다른 글

[CodeEngn 08] Basic RCE L08  (0) 2020.02.23
[CodeEngn 07] Basic RCE L07  (0) 2020.02.23
[CodeEngn 06] Basic RCE L06  (0) 2020.02.23

문제:

OEP를 구하시오 Ex) 00400000

 

 

ExeinfoPE로 열어보니 UPX 방식으로 패킹되어있었다.

 

upx로 언패킹해보았다.

immunity debugger로 다시 실행했다.

잘 나온다.

 

OEP는 01012475다.

답: 01012475

 

'Forensics > Reversing' 카테고리의 다른 글

[CodeEngn 10] Basic RCE L10  (0) 2020.02.25
[CodeEngn 07] Basic RCE L07  (0) 2020.02.23
[CodeEngn 06] Basic RCE L06  (0) 2020.02.23

문제:

컴퓨터 C 드라이브의 이름이 CodeEngn 일경우 시리얼이 생성될때 CodeEngn은 'ß어떤것'으로 변경되는가

 

실행시켰는데

당연히 틀렸다고 한다.

 

immunity로 다시 실행시켜봤다.

Error! 를 문자열 검색해서 봤다. -> 하는 법 모르면 들어가보세여!

2020/02/23 - [Forensics/Reversing] - [CodeEngn 06] Basic RCE L06

 

[CodeEngn 06] Basic RCE L06

문제: Unpack을 한 후 Serial을 찾으시오. 정답인증은 OEP + Serial Ex) 00400000PASSWORD 무작정 실행을 해봤는데 틀렸다고 한다.. ㅎㅎ 그러면 디버거를 통해서 "Wrong serial" 문자열 검색 후 그 전 후를 살펴..

h32j00.tistory.com

00401117로 뛰게 만들면 될 것 같다.

조금 위를 살펴보니 lstrcmpiA 함수를 실행하고 그 반환 값이 eax에 저장되서 0과 비교후 같으면 뛸 수 있을 것 같다.

String2와 String1에 뭐가 들어가는 지 살펴봐야겠다.

 

아까와 같이 

이 이후에 확인을 눌렀더니 코드가 종료됐다.

하지만 저 부분을 다시 가보니

이전과는 다른 게 추가됐다.

내가 쓴 문자열이 String2에 저장되고, String1이 아마도 올바른 시리얼 넘버같다.

 

시도해보면

오우~ 성공!!

 

생각해보니 문제를 풀기보다는 그냥 c드라이브의 이름이 로컬 디스크 일때 해버렸다..

드라이브 이름을 CodeEngn으로 바꾸고 똑같이 해보면 답을 구할 수 있을 것이다.

(궁금해서 해봄)

이 때의 나의 볼륨 이름은

그 때의 serial은 

답: L2C-5781EqfgEngn4562-ABEX

 

'Forensics > Reversing' 카테고리의 다른 글

[CodeEngn 10] Basic RCE L10  (0) 2020.02.25
[CodeEngn 08] Basic RCE L08  (0) 2020.02.23
[CodeEngn 06] Basic RCE L06  (0) 2020.02.23

문제:

Unpack을 한 후 Serial을 찾으시오.
정답인증은 OEP + Serial
Ex) 00400000PASSWORD

 

무작정 실행을 해봤는데

틀렸다고 한다.. ㅎㅎ 그러면 디버거를 통해서 "Wrong serial" 문자열 검색 후 그 전 후를 살펴보면 되겠다.

 

immunity debugger를 통해 열어봤더니 PUSHAD라는 명령어를 보았다,, 패킹 되어있단 뜻이다!! (문자열검색이 안된다.)

exeinfope를 통해 확인해본 결과이다. 

upx 를 가지고 언패킹해보았다. (upx -d 파일경로)

그리고 나서 immunity debugger를 가지고 다시한번 실행해보았다.

OEP가 뭔지 몰라서 찾아보니까 프로그램 실행 시작점인데 처음 켜보니 저기였다.

OEP: 00401360 이다.

 

이제 "Wrong serial!!!" 이라는 문자열을 검색해보겠다. (Search for -> all referenced text strings -> search for text)

엔터키를 이용해서 돌아올 수 있다.

Wrong serial!!! 말고 You got it ;)으로 가기위한 노력을 해보도록 하자,,

 

00401030에 F2를 이용해서 break point를 걸고 F9를 이용해 그 곳까지 빠르게 실행해보도록 하겠다.

아까와 같은 메세지 박스가 뜨는데 왠지 수상해보이는 저어기 아스키값을 넣고 Check Serial을 눌러보자.(AD46DFS547)

F8을 이용해 계속 가다가 GetDlgItemTextA 라는 함수를 만났다. 뭔지 몰라서 검색해보니 

내가 쓴 저 문자열을 가져오는 함수같다. return 값으로 문자열의 길이를 eax에 저장한다.

직후의 eax 값이다. 내가 쓴 문자열의 길이가 10이니까 0xA가 저장된다.

그리고 004235D4에 내가 쓴 값을 저장하고 stack에 push 한다.

이 함수 직후의 eax값은 0이다. 같으면 0 아니면 FFFFFFFF를 반환한다. ( 일반적으로 반환값을 eax에 저장한다. )

난 같으니까 0이 저장되었다.

TEST EAX, EAX를 통해서 EAX가 0인 것을 확인하고 0이면 JNZ을 만족하지 않아서 jmp 하지 않는다.

004010A3은 Wrong~~~~~~~~을 띄워주는 메세지 박스 준비코드 ㅜㅜ

 

TEST 명령어는 and 연산으로 진행한다. 이렇게 되면 eax & eax 니까 eax가 0인지를 확인하는 것이다.

JNZ는 zero flag가 0일때 뛰는 건데 TEST 명렁어에 의해 ZF가 1이 되어버려서 안뛰게 되었다.

jmp하지 않고 계속 실행되는 코드를 보면 You got it ;) 을 담는 메세지박스를 준비하는 코드다~~

MessageBoxA 함수까지 실행시키고 보면

기분 좋은 메세지를 얻을 수 있다~

 

답: 00401360AD46DFS547

'Forensics > Reversing' 카테고리의 다른 글

[CodeEngn 10] Basic RCE L10  (0) 2020.02.25
[CodeEngn 08] Basic RCE L08  (0) 2020.02.23
[CodeEngn 07] Basic RCE L07  (0) 2020.02.23