R136A1
[xcz.kr] PROB.9 Easy Reversing [codeEngn] Basic RCE L15 본문
[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 |