ssoL2 TISTORY

[reversing.kr] 1. Easy Crack / 극 초보자들을 위한 자세한 설명 ^_^ Coming~ 본문

challenge/reversing

[reversing.kr] 1. Easy Crack / 극 초보자들을 위한 자세한 설명 ^_^ Coming~

ssoL2 2020. 1. 3. 02:39

실행파일 아무거나 입력해봄 

 

ok

올리디버거 분석 ㄱㄱ

 

 

등장

 

스트링부터 찾아보자

 

congratulation 매우 의심 +

앞에 5y R3versing 이 매우 수상.

 

뭔가 합쳐서 잘 만들면 될 것 같은 느낌.

 

congratulation 가보자

더블클릭 

 

뭔가 수상해보이는구만 😎😎 

저 검은색 괄호 시작점 찾으러 위로 가보자

 

뭔가 시작점인 것 같아 이 주소. 괄호의 시작임.

여기 이 00401080 주소를 breakpoint로 잡아놓자. 단축키 F2번.

그리고 단축키 F9 눌러 실행 시작

 

맨 처음부터 실행하다가

중간에 입력 박스 받을 때 임의로 aa를 입력함.

 

그리고 breakpoint에서 멈췄지롱.

이제 단축키 F8을 누르면서 점점 나아갔지. 후후.

 

근데 여기서 함수 불러오고 그러는데,

GETDIgitemTextA를 불러오는거 같은데..? 이게 뭘까하고 구글링해봄

 

문자를 읽어 '문자수'를 리턴해주는 Win32 API 함수인가봄.

뭐지. 별로 안중요한가..

걍 넘어가짐....

ㅇㅋ..나도 넘어감..

 

 

근데 그 바로 다음에 비교문 등장 !!!!!!!!!!!👏👏👏👏👏👏

 

004010B0 주소에서 비교문이 발견됨.

ESP+5와 61을 비교하는데, 61은 소문자 a임.

 

JNZ는 TEST EAX, EAX (EAX=1)인데 의미는 JNE와 같음.

비교 후 같지 않으면 이동

 

현재 ESP는 0019FA64

스택에서 해당 ESP 주소를 보니

ESP + 5 위치에 61인 a가 들어있음을 볼 수 있음. 리틀앤디안으로 !

 

아 물론 0019FA64 + 5 = 0019FA69니까

00 00 61 61에서 오른쪽에서 두번째 자리를 말하는거야 헷갈리쥐뫄~~

 

암튼

내가 넣은 aa가 들어있넹. 

따라서 61이랑 같으므로 분기 실패로 점프하지 않음.

 

 

 

 

그대로 점프 안하고 바로 밑으로 이동한 것을 볼 수 있음. 

 

굿 ! 😎

정리하면 두번째 입력은 a라는 것 !!!

 

 

 

 

 

 

 

 

쭉쭉가보자

 

이후 또 하나의 관문

5y를 PUSH하고 나서 offset 00401150을 부르네.

 

여기선 단축키 F7로 함수로 들어가보자

슝슝🐱‍🏍

 

 

 

 

여긴 함수 내부 ✨

 

쭉 쭉 내려가다가 비교문 발견 !

근데 EDI-1이 뭐지? 위위위를 보니까

REPE CMPS BYTE PTR ES:[EDI], BYTE PTR DS:[ESI] 여기서 처음 나옴

 

말이 끊겨서 당황했죵 ^^;

핵심은

REP는 그냥 명령어가 아닌 ! 명령 접두어로 해당 명령어를 몇번 반복하게 하는건가봄.

그리고 그때 사용하는 레지스터가 ECX구만.

 

글고 찾아보니까

ECX를 한번 반복하고 -1해서 0이 될 때까지 반복한데.

 

 

아무튼간에 그러면 

REPE CMPS BYTE PTR ES:[EDI], BYTE PTR DS:[ESI]

 

둘이 비교 ?

ㅇㅋ

 

 

보니까 ESI는 ASCII '5y'라니까 5일꺼고, (5가 먼저 적혀있으니까)

EDI는 저 주소에 있다는건데.

 

EDI 0019FA6A는 0019FA6C - 2잖아.

그니까 0019FA6C 윗 줄에서 리틀앤디안으로 00@@6161 인데

@@자리에 ASCII로 '5'가 들어가 있냐 없냐 비교한다는 거지

 

 

그 다음에

 

또 MOV로 ESI-1을 AL로 옮긴다음 EDI-1이랑 비교하는 걸 보면

대충 y도 비교하다보다 생각할 수 있어.

 

 

 

여기서 넘어 가도 좋아. 근디 !!

더 자세히 살펴보자

 

 

 

위에 잠깐 다시 보면

 

사실 밑에 작은 정보가 담겨져있었어.

비교하는 두 개의 정보가 있는데, DS[ESI]는 5고 ES[EDI]는 0이래.

ECX는 1이고.

 

그리고 한번 더 비교하는 부분에서는 또 5랑 0이랑 비교하는거야. 

그리고 ECX가 1이였잖아 위위사진에서는.

그래서 왜 또 비교하는 거지? 싶어서 실험을 해봤어.

 

 

 

위에는 aa였으니까

aa5해서 맞게 해보자 하는 마음으로

입력 박스에 aa5를 입력해보니까

 

ECX가 2에다가 

 

 

다시 비교하는 부분에 이번엔 y랑 비교하길래 

ECX를 이용해서

처음 비교할 때 같지 않으면 그냥 끝내버리려고

ECX를 1로해서 다음꺼는 비교도 안해버리게 하는구나 깨달았음.

김천재 납셨어. 진짜루. 🤦‍♀️

 (아니면 피드백좀....😂😂)

 

 

 

 

후 그렇게 해서

a 다음에 5y가 와야하는 구나 알게 되었찌.

 

 

 

후 힘들다

 

 

 

 

 

 

암튼간에 

aa5y로 다시 입력해서 했더니

 

JE로 갔더니 !!

jump is taken이 떴당

고고싱

 

 

 

 

바로 아래였어......ㅎ

결론적으론 return하고 함수 탈출 샤샷

 

 

 

 

복귀하고

다시 쭉쭉 내려가더니

 

R3versing을 ESI에 넣고 

ESP+10에 있는 걸 EAX에 넣은 다음

 

ESI랑 EAX랑 비교하네?

쭉 저 검은색 괄호가 계속 바이트단위로 나눠서 비교하는거야.

 

 

음^^ 대충 눈치 챘지?

 

 

 

 

ESP+10이 어딜까 봤더니

ESP는 0019FA5C고

 

0019FA5C + 10 은 10칸 뒤가 아니라

(ㅠㅠ헷갈렸었음 나도..

주의주의!! 👀👀)

0019FA6C 이므로 !!

 

입력했던 aa5y다음부터 쭉 쓰여지면 된다는 소리 !!!

 

 

 

 

거의 다온것 같은 예감~~

첫번째 만 구하면 될 것 같은디 ?!?!?

 

 

 

 

 

다시 입력박스에 aa5yR3versing입력 후 

 

계속 이어서 가는즁

 

그리고 나서 마지막 비교문이 나오는데

ESP+4와 45인 E와 비교..

ㅇㅋ. 

 

 

ESP는 0019FA64

ESP+4는 61자리 !!

 

 

 

 

 

후 끝났다

 

고로 E + a + 5y + R3versing

 

해서 

끝!!

 

 

 

끝.

 

 

 

질문있으면 댓글에 남겨놔용 !💕

 

 

 

 

 

'challenge > reversing' 카테고리의 다른 글

[reversing.kr] 3. Easy Unpack  (0) 2021.03.06
[reversing.kr] 2. Easy Keygen / 간단 설명  (0) 2020.01.03
Comments