ReadInt 함수 분석 3 <test.second>
사용한 툴: x64/x32dbg , Visual Studio 2017
14. call <test.second> 들어가기
15. cmp ecx, 0
-> ecx 와0을 비교해서 0이 아니면 점프
-> 점프
**
je: jump equal - 비교 결과가 같을 때 점프
jne: jump not equal - 비교 결과가 다를 때 점프
**
16. cmp al, 20
-> al(eax) 과 20(‘ ‘)을 비교, eax=31 “1”
-> 20과 다르므로 점프하지 않음
17. cmp al, 9
-> 밑에 cmp al(eax) , 9(\t) 도 비교
-> 9과 다르므로 점프하지 않음
18. loop
-> 그 다음 점프해서 글자 자릿수 만큼 loop
19. cmp al, 2D / cmp al, 2B
-> '-' 연산자와 비교 후 값이 다르면 점프
-> 다름
-> 점프
-> 왼쪽으로 넘어와 '+' 연산자와 비교
-> 다름
-> 점프
**
'+' : 2B / '-' : 2D
**
20. Enter 값 지우기 (추측)
-> 이 밑에 식들은 cmd 에서 숫자 입력 후 엔터를 치기 때문에
같이 입력 된 Enter 값(10) 을 없애는 과정으로 추측
21. imul
그리고 입력 받은 첫번째 수 숫자부터 뽑아와
imul 로 숫자 계산
-> 이 부분에서 각 자리수가 무엇인지 알아내어 edx 레지스터에 저장
22. cmd 에 1234 입력
-> cmd 에 1234 를 입력한후 edx 에 들어온 값 확인
-> loop 를 돌고 있기 때문에 계속 확인
-> loop 를 돌면서 3도 뽑아냄을 알 수 있음
-> 따라서
second 함수는 loop 돌면서 입력 받은 숫자 반환
'System & Reversing > 실습' 카테고리의 다른 글
ReadInt 함수 분석 2 <test.first> (0) | 2019.02.15 |
---|---|
ReadInt 함수 분석 1 <test.first> (0) | 2019.02.15 |