| $Zero |
어떤 언어로 작성되든 컴퓨터는 결국 0,1과 같은 이진수로 연산을 합니다.
그리고 이 0과 1의 연산들을 사람이 보기 쉽게 바꾸면 어셈블리어가 되겠지요 ?
디버거가 바로 이 0과 1의 연산들을 어셈블리어로 바꿔 사람에게 보여주는 툴입니다.
프로그램의 동작방식이야 중간에 가상머신이 끼던 어떤 언어로 했던 다 똑같잖아요 컴퓨터라면, 그 근원부터 추적하는걸 리버싱이라고 하며 디버깅한다라고도 할 수 있습니다.
다만, 사람이 알아보기 힘들게 안티디버깅이나 여러 트릭을 첨가하기도 하지요 . 프로그램 데이터를 모두 암호화 시켜놓고 실행하면 첫 헤더나 중간부분에서 스스로 암호를 해독해 해당 데이터로 실행하는 등.. 여러가지 언팩기술이나 안티디버깅 기술들이 있습니다. 이것도 역시 사람이 알아보기 힘들게 할 뿐 내부적으론 0과1의 연산뿐이니까요 .
결국 오픈소스가 아니어도 프로그램의 동작방식을 알아낼 순 있다는소리입니당.
리버스엔지니어링을 배워보시면 신세계가 열립니다. |
2011/10/12 |
|