ReadInt 함수 분석 2 <test.first>
사용한 툴: x64/x32dbg , Visual Studio 2017
6. call <test.ReadConsoleA> 에서 cmd 에 값 입력
(10 입력)
-> cmp dword ptr ds :[<lpNumberof CharsRead>],0 에서 0과 비교 후
ZE=0, 따라서 je(0과 같으면 점프) / 0이 아니므로 점프하지 않고 그대로 넘어감
7. EAX 확인
-> al (eax) 에 A(10) 넣어짐
숫자 10 : cmd 에서 숫자 입력 후 쳤을 Enter 로 예상
8. repne scasb
: EDI가 가리키는 곳에 EAX에 저장되어 있는 값이 있는지 스캐닝
9. ECX 확인
-> ecx에 4c 확인 가능(80) / ZE=1 이므로 0임
(jne : 0이 아니거나 같지 않을때 점프) 이므로 점프하지 않음
10. <lpNumberof CharsRead>
-> dec 로 문자열 앞자리로 이동했다고 추측
11. jae
sub edi,2
cmp edi,edx
jae test.161c96
(jae : 0보다 크기가 같을 때 점프)
에서 점프.
12. mov byte ptr ds:[edi],0 후 ret 으로 함수(first) 리턴
-> 여기에서,
eax=2 가 된 것으로 보아, 입력한 수의 자릿수 임을 예측
13. 다시 재실행 해서 글자 100 입력한 후 eax=3 인지 확인
~위와 똑같은 과정 반복~
-> 따라서,
first 함수는 입력받은 문자열의 길이를 반환해줌을 알 수 있음
~ <test.second> 는 함수 분석 3에서 ~
'System & Reversing > 실습' 카테고리의 다른 글
ReadInt 함수 분석 3 <test.second> (0) | 2019.02.15 |
---|---|
ReadInt 함수 분석 1 <test.first> (0) | 2019.02.15 |