Reversing/Reversing.kr

[Reversing.kr]Easy_KeygenMe

dcho 2019. 7. 25. 04:04
SMALL
두근두근 두번째 Easy문제는 KeygenMe이다.

실행해보니 Input Name 과 Input Serial 을 입력하라고 나온다.


그럼 뭔지 모르니 디버깅시작!


쭉쭉 디버깅을 하다보니 여기서 실행이 되서 여기가 Main이 되는 함수라는 것을 추측하였다.

분석하다고 궁금한 어셈블리 명령어가 보였는데 

STOS : EDI가 가리키는 값에 EAX를 쓴다
보통은 스택영역(EDI가리키는 주소)을 0으로 초기화 할때 이렇게 쓴다고 한다
요런느낌 char a[256]={0};
(REP (Repeat String) : ECX 레지스터를 카운터로 사용해서 문자열 관련 명령을 ECX>0인 동안 반복한다, 한번 진행될 때마다 ECX 레지스터값이 -1 된다.)

TEXT명령어는 왜 쓸까?
test가 영향을 미치는 플래그는 SF, ZF, PF가 이고, test 명령어는 같은 피연산자를 가지게 되는데 그러므로 중요한것은 피연산자가 0이냐, 0이 아니냐하는 것이다. 0이면 ZF가 1로 세트되고, 0이 아니면 ZF가 0으로 세트된다.


10,20,30을 스택에 넣는데 입력한 값과 차례로 XOR연산을 해준다 3개가 넘어가면 다시 10으로 해주고

그런담에 스택에 넣어준다.


그러면 1234로 입력한것 String 으로 받기때문에 ASCII 값으로 XOR 연산을 하면 ASCII (21,12,03,24)로 바뀐다. 

Serial 비교를 해준다.

와우 Correct!


정답이닷?

아 리드미가 있었다..! 


아 이거였구나하고 다시 마음 가다듬고 XOR은 교환법칙이 성공하니 거꾸로 다시 차근차근 XOR연산을 해주었다.









'Reversing > Reversing.kr' 카테고리의 다른 글

[Reversing.kr]ImagePrc  (0) 2019.07.26
[Reversing.kr]Ransomware  (0) 2019.07.25
[Reversing.kr]Position (미완성)  (0) 2019.07.24
[Reversing.kr]Easy_CrackMe  (0) 2019.07.24
[Reversing.kr]Easy_UnpackMe  (0) 2019.07.24