본문 바로가기
리버싱

리버싱 8

by 윤라경 2024. 8. 20.

[2024.08.20]

 

[Swtich문]

 

 

 

 

오늘 실습은 switch문을 생성하여 진행한다

원래라면 Information Sercurity가 출력되어야 하지만 코드를 조작하여 값을 변경할 수도 있다

 

 

먼저 첫 번째로 CMP EAX,1로 되어 있는 것을 2로 변경시켜 값을 임의로 조작했기 때문에

점프문에서 바로 151D로 넘어가고 CALL을 하게 되면 Thank you가 출력된다

 

 

두 번째로 MOV 명령어에서도 값을 1이 아닌 2로 변경시켜 주면 Thank you를 출력하게 된다

 

 

JLE의 경우 비교 결과가 작거나 같을 때 점프하는 명령어로,

이 명령어는 두 값이 같은 경우에 특정 위치로 점프하는 명령어기 때문에 JE로 변경시킨다

변경시키면 마찬가지로 Thank You를 출력한다

 

 

마지막으로 Zero Flag를 변경하기 위해 해당 코드에서 멈춘 다음 Z가 1인 것을 확인한다

 

 

더블 클릭을 하게 되면 1에서 0으로 변경되고,

0으로 변경된 시점부터 값이 바뀌어서 반대의 값이 출력되는 형식이다

 

 

Zero Flag로 값을 변경하여 출력하는 것을 마지막으로 진행했다

 

 

이번에는 scanf를 사용하여 값을 입력하였을 때 해당 문장이 출력되는 Switch문을 진행한다

현재 구문에서는 1을 입력하면 Information Security가 나오고,

2를 입력하게 되면 Thank You를 출력하도록 되어 있다

 

 

ollydbg에서도 파일을 불러 해당 코드를 실행시키고,

현재 화면에서는 local 8에 메모리 값을 저장한다

 

 

현재 상태에서 출력값에 숫자를 입력해 줘야 코드에서 다음으로 넘어갈 수 있다

 

 

그런 다음 마지막까지 실행시키게 되면 Information Security를 출력하게 된다

 

 

1이 아닌 2를 입력하게 되면

 

 

Thank You가 나오는 형식이다

 

 

이번에는 문장을 하나 더 추가하여 Switch3 파일을 만들고 진행한다

 

 

현재 구간에서 1을 입력하고 넘어가게 되면

JE SHORT 0040153E와 같다는 뜻으로 해석되기 때문에

 

 

마지막까지 실행시켰을 때 Hello World를 출력하게 된다

 

 

2를 입력하게 되면 당연히 Information Security가 나오게 된다

 

 

3을 입력 시에는 Thank You가 나오는 것을 연습하고 반복하는 시간을 가졌다

 

 

키값 찾기라는 미션을 내 주셨다

헥사값으로 키값은 10, 20, 50, 100, default의 값이 나오게 된다

 

 

역순으로 출력하라는 문제까지 내 주셔서 변경된 코드값을 첨부한다

현재 코드로 이용하면 역순으로 default, 100, 50, 20, 10 순으로 출력된다

 

 

[For문]

 

 

 

 

이번에는 for문을 진행한다

1부터 5까지 차례대로 출력하는 for문을 만들었다

 

 

ollydbg로 파일을 부르게 되면 해당 부분에서 코드가 나오는데,

현재 for문의 경우 반복문이기 때문에 5와 같지 않을 시 다시 401518 구간으로 돌아가서

반복되어 결국 값을 찾아내는 식으로 반복되며 결과값이 출력된다  

 

 

반복되는 과정을 거치고 나서는 현재 Dev C++에서 생성했던 구문의 출력값과

같은 1에서 5까지 나열되는 출력값이 나오는 걸 확인할 수 있다

 

 

이번에는 1에서 5까지의 숫자를 전부 더하는 sum 명령어를 이용하여 구문을 생성했다

값을 다 더하게 되면 15라는 값이 출력된다

 

 

현재 ollydbg로 코드를 확인 시에도 아까와 비슷한 코드인 것을 확인할 수 있다

현재 401520 부분에서 차츰 더해지면서 마지막 40152D 부분에서 5보다 작으면 다시 반복되고,

5보다 클 시 다음 명령어가 실행되며 결과값이 출력되는 형식이다

 

 

그렇게 되면 실제 15라는 값이 출력되어 나오는 걸 확인할 수 있다

 

 

마지막으로 실제로 반복하여 15라는 값이 나오는지

메모장을 통하여 직접 계산하는 시간을 가졌다

이런 식의 방법으로 확인해 보는 것도 좋다

 

 

 

강의 소감

오늘은 Switch문에서 이해가 되지 않는 부분이 많아서 헤맸다

아직 코드가 어떤 식으로 흐르는지, 코드를 수정할 수도 없어서 답답했다

먼저 Switch가 아니더라도 코드가 어떻게 흐르는지를 먼저 파악하는 게 우선 순위인 것 같고,

또 어떤 부분에서 시작과 값이 출력되는지도 알아야 될 것 같다

아직 미숙한 부분이 많지만 차차 보완해서 익히는 게 현재 가장 먼저 할 일이다

'리버싱' 카테고리의 다른 글

리버싱 10  (0) 2024.08.23
리버싱 9  (0) 2024.08.21
리버싱 7(수정 예정)  (0) 2024.08.19
리버싱 6  (0) 2024.08.16
리버싱 5  (0) 2024.08.14