R136A1

[xcz.kr] PROB.9 Easy Reversing [codeEngn] Basic RCE L15 본문

REVERSING/codeEngn

[xcz.kr] PROB.9 Easy Reversing [codeEngn] Basic RCE L15

r136a1x27 2021. 2. 18. 22:46

[xcz.kr] PROB.9 Easy Reversing

다시 작성

처음 프로그램을 load하면 이 위치에서 시작됨.

cmd에는 아무것도 뜨지 않음

▶를 누르면 프로그램이 실행되면서 수동(F8)으로 넘길 수 없게 됨 → 사용자의 입력 대기 중

입력 후 F8 누를 수 있음

+ Break Point 걸어놨을 때 ▶를 누르면 다시 진행 가능

추적이 잘 안될 때는 *를 통해 현재 위치로 돌아가기

ID, PW 순서대로 입력하면

너무 빠르게 지나가서... 관찰할 수가 없다

인내심을 갖고 천천히 한 단계씩 눌러보면 Input ID : 가 있는 코드 영역으로 JMP해준다

밑부분을 보면 Input ID 표시하고 scanf 로 문자열을 입력받는다

 

또는 그냥 실행 후 Input ID : 라는 문자열에 주목해서, 문자열을 찾아본다(문자열 검색 기능은 없나?)

Search for All referenced text Strings

 

 

 

될 수 있을 만큼 BP를 다 걸고(특히 JNZ, MOV부분에...) 한 단계씩 확인해보면

 

ECX 레지스터에 XCZ가 들어옴

코드에서 ECX가 쓰이는 부분: LEA ECX,DWORD PTR SS:[EBP-48] 로, stack 영역에서 해당 주소를 가져오는 듯


다시!!! 저렇게 중구난방으로 해놓으니 어디가 문제인지 핵심인지 모른다

PW가 안뜸...BP 삭제해놓고 다시 찾아보기

CALL이랑 JMP!

CMP랑 JNZ가 있는 여기가 비교하는 부분인듯. 여기에 주목하자...

scanf printf는 딱히?

아무 BP 없이 그냥 입력 후 가면 BP 설정한 부분 맨 위에서 멈춤

▶가 아닌 안전하게 F7로 한 단계씩 이동해주면... 됨

PW에서 안멈추길래 밑부분에 좀 더 추가해줬다.

여기가 PW 필터링 부분인듯!

CMP 에서 해당 바이트와 비교하기 위해 ECX를 불러올 때 레지스터에서 관찰 가능하다.

저걸 안 상태로 BP 다 해제하고 XCZ / UNL1M1T 입력해주면 Flag를 알려준다

굉장히 어려웠다 이게 가장 기초문제라는데ㅎㅎ...



[codeEngn] Basic RCE L15

210225

Name이 CodeEngn일때 Serial을 구하시오

 

일단 프로그램 쌩으로 열어보기

Serial은 상수값인듯

패킹도 없고 안티 디버깅도 없음

 

바로 main

코드는 적지 않은 편

Search 해야할듯

 

Try Again 타고 올라가보면 조건분 있음

CMP EAX,DWORD PTR DS:[45B844]

JNZ SHORT <실패코드>

 

시리얼을 알아내니까 단순히 JE 로 고쳐서는 안됨

일단 BP걸고 위까지 진행해보기

DWORD는 4Byte니까 00 00 61 60

10진수는 24928...

완료. 사실 10진수는 추측이라서

어느 코드를 사용해서 바꾸는지 알아봐야겠음

 

+ 다른 분들 라이트업을 봤는데

CALL ~

CMP ~

즉, 호출하는 함수에서 22222 (10진수) 값을 56CE (16진수) 값으로 변환시키고

그 값을 CMP에서 name별로 생성된 key값과 비교하는 듯 함

 

 

다른 문제들 푸는 동안 실력이 많이 늘었는지 3분만에 푼것같다.

'REVERSING > codeEngn' 카테고리의 다른 글

[codeEngn] Basic RCE L02  (0) 2021.02.23
[codeEngn] Basic RCE L06 (수동언패킹)  (0) 2021.02.20
[abex] crack me #2  (0) 2021.02.19
[abex] crack me #3  (0) 2021.02.17
[abex] crack me #1  (0) 2021.02.17
Comments