포렌식

[Whois] 정보보안교육 - 리버싱 어셈블러 핸드레이(1)

美味코드 2021. 10. 13. 22:38

코드 분석을 쉽게하기 위해 2-3줄 단위로 끊어주었다.

스택은 LIFO 구조이다. 메모리를 적재할 때 주로 사용되는 방법이다.

어셈블러는 16진수만 좋아한다 16진수로 입력을 받기 때문에 10진수로 변환하면 위와 같다. 또한 하드웨어에 변수라는 공간을 만들기 위해 원하는 변수 개수 x 변수 크기 만큼을 만들어 준다.(ex. int(4byte) 4개 == 4x4)

사용한 공간을 ebp에서 빼주었다.

하드웨어는 계산을 못하는 멍청이들 모임이다 못하기 떄문에 cpu에서 계산을 할 것이다. cpu의 구조는 제 블로그에서 확인하실 수 있습니다. *^^* 간략하게 설명하면 cpu에는 연산장치가 있기 때문에 이동해 준다. 

(기계어 -> 어셈블러 (<< c언어 <<<<<<<<<<<<<< 파이썬) -> 자연어 이기 때문에 cpu는 어셈블러를 0101로 뚱땅뚱땅 바꿔서 연산을 잘 수행할 것이다. 당신의 클록속도는?!?!)

위에서 b = 10 이라고 해주었기에 10 x 0x17 == 10 x 23 이기에 b는 현재 230의 값을 가지고 있다.

다시 메모장으로 만들어 주는 거 같다. 뇌피셜이지만 cpu에 내놓은 아이 다시 메모리로 데려오는 이 느낌.

단순 연산이다.

* =은 같다라는 의미가 아니고 값을 넣어준다는 의미이다. a = 10 => a에 10이라는 숫자를 입력(담음)

잘 이해가 안 가는 줄이었다. a / 라는게 함축적으로 a /= a 라는 의미인가 싶었다. 식을 완성하기 위해선 a가 / 를 가지고 c와 합성한 것으로 해석했다. 

내가 잘 알고 있을 거라고 착각하는 함수 중 하나이다 return 0; 저 의미는 함수 종료를 의미한다.

* return 1, -1: 해당 값 반환

  return 0: 정상종료

 

puts의 내용은 없었으나 a, b, c 값 확인을 위해 임의로 출력해 주었다.