반응형




안녕들 하시죠 !


오늘은 컴퓨터 메모리를 저장하는 방식 ( 바이트 오더링 ) 에 대해 알아보겠습니다.


앞으로 리버싱 공부를 하는데 기초가 되는 중요한 부분이라고 합니다.

학교다닐때 컴퓨터 구조 시간에 배웠던 내용인데 하나도 기억이 안나서 다시 공부해보려고 합니다.


바이트 오더링에는 크게 두가지 방식이 있는데요.

빅 엔디언리틀 엔디언 입니다.

우리가 앞으로 자주 사용할 방식은 리틀 엔디언 이라고 합니다.


아래에 간단한 예제를 통해 빅 엔디언 과 리틀 엔디언의 차이를 알아보려고 합니다.


BYTE b    =            0x12;

WORD w    =         0x1234;

DWORD dw    =    0x12345678;

char str[]    =       "abcde";


첫번째 줄을 보시면 타입은 BYTE, 이름은 b, 사이즈는 1, 빅 엔디언 = [12], 리틀 엔디언 = [12] 로 표현됩니다.

여기에선 차이가 없지만 2바이트 이상을 표현할때 부터 달라집니다.


두번째 줄을 보시면 타입은 WORD, 이름은 w, 사이즈는 2, 빅 엔디언 = [12][34], 리틀 엔디언 = [34][12] 로 표현됩니다.

빅 엔디언 방식은 데이터를 사람이 앞에서부터 글을 읽는 방식으로 저장합니다.

리틀 엔디언 방식은 데이터를 역순으로 저장합니다. 저장되는 바이트의 순서가 뒤집어져 있는 것 입니다.


네번째 줄의 str 문자열은 엔디언 형식에 관계 없이 저장 순서가 동일한데요. 

문자열이란 char 배열이기 때문에 각 바이트를 하나씩 연속해서 저장해 나가기 때문입니다.

빅 엔디언 과 리틀 엔디언 둘 다 [61][62][63][64][65][00] 으로 저장이 되는데 맨 뒤에있는 [00]은 문자열의 마지막에 항상 들어가는 NULL값 입니다.

( 아스키 문자 ' a ' 는 0x61, ' e '는 0x65 입니다. )


빅 엔디언은 사람이 숫자를 읽고 쓰는 방법과 같기 때문에 메모리 값을 보기 편하고, 소프트웨어의 디버그를 편하게 해 주는 경향이 있습니다.

리틀 엔디언은 Intel x86 CPU에서 사용하는 방식이고 산술 연산과 데이터의 타입이 확장/축소될 때 더 효율적인 장점이 있습니다.


오늘은 여기까지입니다 감사합니다 !


 


참고서적 이승원 「리버싱 핵심원리」 인사이트(2018) p49~52

반응형




안녕들 하시죠 !


오늘은 기사를 읽다가 관심이 생기는 부분이 생겨 이렇게 포스팅 해보려고 합니다. 


러시아의 중앙화학역연구기관( CHIIHM ) 주도한 것으로 추측되는 "사우디 화학 공장 안전시스템을 공격한 트리톤 멀웨어"라는 주제였습니다.


멀웨어 ( Malware ) 란?


사용자의 PC, 테블릿, 모바일 폰 등의 디바이스를 감염시키는 악성코드입니다.

대부분 멀웨어의 목적은 경제적 이득이며, 보안 시스템을 우회하고 탐지를 피하도록 설계되어 있습니다.

트로이목마, 루트킷, 스파이웨어, 웜, 키로거, 랜섬웨어 등 우리가 자주 들어왔던 것들입니다.


저 또한 Metasploit 을 이용해 Malware 를 만들어봤는데 아주 간단하게 금방 만들 수 있었습니다.


배포방식은 매우 다양하며 피싱 이메일을 통해 악성파일 첨부, 악성 URL 링크, 반자동 다운로드, 포트가 열려 취약해진 PC에 네트워크로 직접 

투, 운영체제 또는 어플리케이션의 취약점을 통한 침투 등 방법도 정말 많습니다.

아래 설명할 맞춤형 Malware들은 안티멀웨어나 백신 기술을 무력화 시키기때문에 탐지가 어렵다고합니다.

 

이러한 Malware 공격을 예방하기위한 방법으로는,


ㆍ 직원들에게 이메일 및 사회공학적 기법에 대한 지속적인 교육과 실제로 훈련.

ㆍ 지속적인 업데이트 패치를 적용. ( 실제 회사에서는 패치적용을 하고싶어도 호환성과 예기치 못한 문제발생 때문에 적용하기 어렵다고합니다 )

ㆍ 멀웨어의 침입을 모니터링 하기는 힘들지만 수상한 행위를 시작한 멀웨어를 탐지하기위한 꾸준한 모니터링.

ㆍ 지속적인 데이터 백업이 있다고 하지만 완전한 방어란 없기때문에 경각심을 가지고 있어야할 것 같습니다.



트리톤은 산업 통제 시스템( ICS )만을 겨냥해 만들어진 멀웨어라고 합니다.

또한 현재까지 세상에 드러난 ICS 전용 멀웨어는 트리톤( Triton ), 스턱스넷( Stuxnet ), 인더스트로이어( Industroyer ) 이 세가지 뿐이라고 합니다.


스턱스넷은 2010년 6월경 발견된 웜 바이러스라고 합니다.

바이러스 코드 내에 " Sutxnet " 이라는 단어가 자주 등장하는 특징 때문에 " 스턱스넷 " 이라고 명명 되었다고합니다.

윈도우를 통해 감염되고, '지멘스 산업'의 소프트웨어 장비를 공격한다고 합니다.

실제로 산업시설을 감시하고 파괴한 악성 소프트웨어로서는 최초( 2010년 이란 부셰르 원전 ( 핵시설 )공격 )라고합니다.

스턱스넷은 '제로데이 취약점' 을 이용한 공격이기 때문에 패치도없고, 방어도 불가능하다고 합니다.

전문가들이 리버스 엔지니어링을 통해 6개월가량 분석할 정도로 복잡한 코드였다고합니다.

스턱스넷의 내부를 살펴본 사람들은 그 안에 구하기 힘들고 값도 비싼 제로데이 취약점이 4개나 들어있었다고합니다.

보통 제작자는 악성코드 1개에 제로데이 취약점 1개를 넣어 돈을버는데 이번은 달랐다고합니다.

전문가들은 이렇게 천문학적인 금액이 들고 조직적인 행위의 배후에는 이스라엘과 미국이 있다고 합니다.



지멘스사는 스턱스넷을 감지하고 제거하는 소프트웨어를 배포했고 제 3자에게서 받은 USB 플래시 드라이브를 사용하지 말고, 

마이크로소프트에서 제공한 취약점 패치를 설치하며, 스턱스넷이 발견될 경우 고객센터에 연락할 것을 권하는 것으로 대처했습니다. 


인더스트로이어는 2016년 우크라이나의 전력망을 공격했고, 트리톤같은 경우 발생한지 얼마 되지않은 사건이다 보니 정보가 부족하지만 

슈나이더 전자의 산업 안전 시스템에 침투하여 물리적인 피해가 발생할 정도의 조건을 발동시키도록 안전 시스템을 조작했다는 점에서 스턱스넷과 

비슷한 수법이라고 보입니다. 


이러한 사이버 공격은 보통 금전적인 목적으로 이루어진다고만 알고있었습니다.

이런 기사를 접해보니 국가와 국가간의 협력, 금전적인 지원 등등 말로만 듣던 ' 사이버 전쟁 ' 이 실감이 납니다.

많은 기사들이 공격기법과 배후에만 관심을 갖고있었고 예방하는 방법에 대해서는 관심이 많이 부족해보였습니다. 

정보보호를 공부하는 학생으로서 이러한 사건을 자주 찾아보고 예방하는 방법에 관심을 가져봐야겠다는 생각이 들었습니다.


오늘은 여기까지입니다 감사합니다 !




사우디 화학공장의 사이버공격, 러시아가 했다 ", 보안뉴스, 2018년 10월 24일 

'보안 > News' 카테고리의 다른 글

페이스북 사진유출 사건  (0) 2018.12.17
'홍석천도 당했다 ! 카톡 지인사칭 피싱'  (0) 2018.12.12
윈윈소프트 개인정보 유출사건  (0) 2018.11.25
반응형

 

 

 

안녕들 하시죠 !

 

오늘은 VMware update tools / Linux 계열 설치 방법을 해보겠습니다.

 

우선, 본인 VMware 에 본인 Linux 를 올려주세요.

 

맨위에 있는 탭에서 VM -> update VMware tools 를 눌러줍니다.

그럼 아래와 이미지와 같이 나올겁니다.

 

 

자, 이제 터미널을 켜주시구요, 아래 이미지를 참조하여 명령어들을 순서대로 입력해주세요.

 

cd /media/  →  ls  →  cd VMware Tools ( VM만 치신 후에 Tab키를 누르면 자동완성됩니다. )    cp VM[Tab] ~/    cd ~  →  ls

 

media 폴더로 이동하세요.                                                                    

 

ls 명령어를 통해 VMware tools 폴더가 있는지 확인해주세요.                        

 

VMware tools 폴더로 이동해주세요.                                                         

 

VMware tools 알집을 복사 ( cp ) 해서 홈디렉터리( ~/ )로 이동시키겠습니다.  

 

홈디렉터리로 이동해주시구요.                                                               

 

ls 명령어를 통해 복사가 잘 되었는지 확인.                                                

 

 

복사가 잘 되었나요?

자, 이제 알집을 풀어봅시다.

 

tar xvf VM[tab] 을 쳐보시면 아래와 같이 나옵니다.

 

 

이번에도 아래 이미지를 참조하여 순서대로 입력해주세요.

 

ls  →  cd vm[Tab]  →  ls  →  sudo ./vm[tab] 

 

ls 명령어를 통해 vmware-tools-distrib 폴더가 생성되었는지 확인.              

 

vmware-tools-distrib 폴더로 이동                                                                               

 

ls 명령어를 통해 vmware-install.pl 파일 생성 확인                                               

 

sudo 명령어로 현재경로의 .pl파일 실행                                                                

 

 

.pl 파일을 실행하게 되면 업데이트가 진행되는데 중간 중간에 멈추면 [Enter] 나 [Yes] 를 입력하게 되면 알아서 진행이 됩니다.

 

Enjoy ! 가 뜨게되면 설치가 완료된 것이므로 reboot명령어를 통해 재부팅을 하시면 설치 적용됩니다.

 

오늘은 여기까지입니다 감사합니다 !

 

 

'꿀팁' 카테고리의 다른 글

Visual studio 설치  (2) 2018.12.11
구글 애드센스 광고넣기  (0) 2018.11.25
Atom 설치와 python 설정  (0) 2018.11.17
구글 애드센스 신청하기  (1) 2018.11.09
리얼 꿀 파일검색기 Everything 설치법  (0) 2018.10.22
반응형




안녕들 하시죠 !


오늘은 저번 시간에 이어 문자열패치 두번째 방법 다른 메모리 영역에 새로운 문자열을 생성하여 전달 을 살펴보겠습니다.


저번 시간에 공부했던 문자열 버퍼를 직접 수정방법은 원본 문자열보다 긴 문자열로 수정하게되면 큰 문제가 생길수도 있다고 합니다.

 

우선 저번시간과 동일하게 Hello World.exe 파일을 실행시켜주시구요.

저번시간에 캠프로 사용했던 401000 위치까지 가서 F9로 그 위치까지 실행시켜줍시다.



401007 주소에서는 PUSH 411AF0 명령으로 MessageBox() 함수에게 411AF0 주소의  “ Hello World!” 문자열을 파라미터로 전달하고있습니다.

 

우리는 이제 411AF0 주소의 문자열 대신 다른주소에 있는 다른 문자열을 전달할 것입니다.


밑에 있는 dump창에서 Go to ( ctrl + G ) 명령으로 411AF0 주소로 가주시구요.

저번시간 Hello World ! 문자열을 패치했던 주소에서 조금만 밑으로 스크롤을 내려보세요.


그럼 아래 이미지와 같은 00 으로 가득찬 공간이 나올껍니다. 이부분은 프로그램에서 사용되지 않는 NULL padding 영역 입니다.



자 이제 이 널널한 부분에 문자열을 써줍시다.



정말 널널하군요...


이제 해줄작업은 버퍼를 새로 구성하였으니 MessageBoxW() 함수에게 새로운 버퍼 주소 412940을 알려줘야합니다.

위에있는 Code창에서 Assemble 명령어를 사용하여 코드를 수정해야합니다.


아까 “Hello World !” 가 있던 곳의 주소에 커서를 놓고 space을 누르면 Assemble이 나옵니다.

그곳에 우리의 새로운 문자열의 주소 412940을 입력해줍니다.



F9를 눌러 실행하게되면



, 이렇게 주소를 바꿔주어 더 긴 문자열 패치에 성공했습니다.


오늘은 여기까지입니다 감사합니다 !




참고서적 이승원 「리버싱 핵심원리」 인사이트(2018) p41~47

반응형




안녕들 하시죠 !


지금까지 리버싱을 배우기 위한 준비를 했다면 본격적으로 공부를 해볼까 합니다.

 

우선, 오늘은 문자열 패치에 관한 내용입니다.

 


패치란?


기존 응용 프로그램의 버그를 수정하거나 또는 새로운 기능을 추가시킬수 있다.

패치 대상은 파일 혹은 메모리가 될 수 있으며, 프로그램의 코드와 데이터 모두 패치가 가능하다.


 

저번시간에 저희는 Main() 함수를 찾았고, 그 안에있는 “Hello World !” 문자열을 찾았습니다.


이제 “Hello World !” 문자열을 다른 문자열로 변경시키는 패치 작업을 해보겠습니다.

 

Ollydbg를 실행시켜주시구요, Main() 함수 시작주소까지 가보겠습니다.



다들 잘 이동하셨죠?

 

, 그럼 이제 Main() 함수 시작주소 ( 401000 ) F2Break Point를 설정하고 F9를 눌러 실행하겠습니다.

 

문자열을 패치하는 방법은 두가지가 있습니다.


첫번째, 문자열 버퍼를 직접 수정.


두번째, 다른 메모리 영역에 새로운 문자열을 생성하여 전달.


가장 쉬운 부분이라고 하니 우선 확실히 익히고 넘어가야 할 것 같습니다.

 

문자열 버퍼를 직접 수정하는 방법인데요

아래 이미지에 빨간 화살표로 보이는 부분 덤프창 )을 클릭한 후에 Go to (Ctrl + G) 명령으로 “Hello World !”의 함수 전달인자 주소로 갑니다.

“Hello World !” 의 함수 전달인자 주소가 밑에 이미지 처럼 ??_C@_1BK@EKFA.... 으로 되어있으실 경우 더블클릭하면 해당하는 주소가 나옵니다.



OK를 누르게 되면 아래와 같은 이미지가 나오게 됩니다.



“Hello World !” 부분을 마우스로 드래그하신 후에 맨 왼쪽 주소부분을 보시게 되면,

우리의 문자열은 411AF0 ~ 411B00 부분을 차지하고 있습니다.

 

Ctrl + E (Edit 다이얼로그) 를 띄워봅시다.



저는 이미 수정을 했는데요. 주황색 포인트 부분을 보시면 될것같습니다.


우선 왼쪽 하단 Keep size 부분의 체크를 해제시켜주시구요, UNICODE 부분의 “Hello World !” Hello Reversing으로 바꿔줍니다.

 

이때 주의 할점은 유니 코드 문자열은 2바이트 크기의 NULL로 끝나야 한다는 것입니다.

원본인 “Hello World !” 보다 “Hello Reversing” 문자열의 길이가 더 길고, 원본 문자열 뒤쪽에 어떤 데이터가 존재할 수 있기 때문에 원본 길이를 넘는 

문자열로 덮어쓰는 것은 위험하여 주의하여하 할 것 같습니다.

 

이제 위에있는 코드창으로 가서 F9를 눌러 실행시켜봅시다.



, 우리가 원하는 대로 문자열 패치를 성공시켰습니다 .

하나하나 따라서 해보니 너무 재미있어서 시간가는줄 모르겠습니다.

 

이제 우리가 패치한 파일을 저장하는 단계만 남았습니다.


아래 dump창에서 변경된 내용 ( “Hello Reversing” ) 문자열을 블록 잡고 우측 클릭하여 Copy to executable file 메뉴를 선택하면 Hex창이 나옵니다. 

여기서 다시 마우스 우측 버튼의 Save file 메뉴를 선택하고 이름을 원하는대로 바꾸어주면 저장이됩니다.

다시 실행하여 문자열 값이 잘 변경되어있는지 확인해주시면 됩니다.



다음시간에는 문자열 패치 두번째 방법 다른 메모리 영역에 새로운 문자열을 생성하여 전달부분을 진행해보겠습니다. 


오늘은 여기까지입니다 감사합니다 !




참고서적 이승원 「리버싱 핵심원리」 인사이트(2018) p37~41

반응형


안녕들 하시죠 !


이번시간에는 베이스캠프를 지정하는 4가지 방법에 대해 공부해보겠습니다.

 

베이스 캠프란?


디버거를 재실행(Ctrl + F2) 할 때 마다 첫 화면으로 돌아가서 굉장히 불편합니다

그래서 디버깅을 실행하는 중간중간에 중요 포인트를 지정해놓고 그 포인트로 빠르게 이동할수 있도록 도와주는 기능입니다.



이번 실습에서는 PUSH 14 명령어가 있던 주소( 2F104F )를 베이스캠프로 지정하는 연습을 해보겠습니다.


저번 시간에 사용했던 HelloWorld.exe 파일을 열어주시면 아래와 같은 화면이나오죠.



여기에서 F9번을 눌러 실행을 시키게되면 아래와 같이 나옵니다.



F8번을 눌러 JMP 2F104F 명령어가 있는 2F11A6주소로 이동 후에 F7번을 눌러 함수로 들어가보겠습니다.



이곳이 우리가 베이스캠프로 이용하게될 곳입니다.

주소는 2F104F이구요.


이젠 다들 볼줄 아시죠?

 


자, 우선 첫번째  Go to ( Ctrl+G ) 명령 이 있습니다.

 

Ctrl+G 를 입력하게 되면,



이런 식으로 나오게 되고 OK를 누르면 해당 주소로 이동하게 됩니다.

그 후에 Execute till cursor ( F4 ) 명령으로 그곳까지 실행하게 됩니다.

이제는 주소만 알고있다면 쉽게 찾아갈수 있을것같습니다.

 



, 이제 두번째로 BP(Break Point)설치 입니다.


BP를 설치 ( F2 )하고 실행 ( F9 )하게되면 현재 실행 위치에서부터 실행하다가 BP에서 멈추게 됩니다.

저자께서는 이방법이 가장편하고 많이 사용하는 방법이라고 말씀하십니다.



메인 메뉴의 View – BreakPoints ( Alt+B )를 누르면 BP목록이 나오고 더블클릭하면 그 주소로 이동하게됩니다.

 



, 다음 세번째는 주석입니다.

 

( ; ) 단축키로 주석을 달고 이 주석을 찾아가는 방법입니다.

원하는 라인에서 ; 를 누르게되면 다음과 같은 화면이 나옵니다.



그 다음 OK를 누르게되면,



자 이렇게 >>>베이스캠프 라고 주석이 달리게됩니다.


잠시 커서를 다른곳에 두고 마우스 우클릭을 한 후에 Search for -> user-defined comment 항목을 선택하면,



이렇게 주석을 단 주소와 명령어가 나오게되고 더블클릭시에 그 주소로 이동하게 됩니다.

 



, 이제 마지막 네번째 레이블 방법입니다.

 

레이블은 특정 주소에 이름을 붙여 코드를 매우 직관적으로 변경해주는 기능입니다.

 

원하는 주소에 커서를 위치시킨 다음 ( : ) 키를 누르게 되면,



이렇게 창이 뜨게되고 OK를 누르면,





이렇게 베이스캠프의 주소 ( 2F104F ) base camp로 매우 직관적으로 바뀐 것을 확인할 수 있었습니다.

 

, 마우스 우측버튼 더블클릭 후 Search for -> user defined labels 탭에 들어가보시면,




이렇게 확인되고 원하는 레이블을 더블클릭해서 해당 주소로 이동한 후, Execute till cursor ( F4 )를 누르게 되면 그 위치에서부터 디버깅을 할수 있다니... 


너무나도 편리한 것 같습니다.


오늘은 여기까지입니다 감사합니다 !




참고서적 이승원 「리버싱 핵심원리」 인사이트(2018) p24~36


반응형




안녕들 하시죠 !


오늘은 가볍고 간단한 설치만으로 파일검색을 할수있는 Search everything 이라는 프로그램 설치법에 대해 알아보겠습니다.

가끔 파일 검색을 하려고 윈도우 검색기능을 사용하면 안나오는것들이 있어 답답했었는데 everything을 사용하면 속 시원하게 나옵니다.



우선 네이버에서 everything 이라고 검색해주시구요.  


귀찮으신분들은 URL을 타고 들어가주세요. https://software.naver.com/software/summary.nhn?softwareId=MFS_120816#


다운로드를 받으신후에 설치 폴더로 들어가셔서 everything.exe 를 실행시켜줍니다.






언어는 한국어로 선택해주신 후에 다음 다음 다음을 누르면 아주 간단하게 설치가 끝납니다.


간단하게 제 pc에 있는 HelloWorld 를 검색해봤습니다.





조만간 정리한번 해야겠네요...


오늘은 여기까지입니다 감사합니다 !

'꿀팁' 카테고리의 다른 글

Visual studio 설치  (2) 2018.12.11
구글 애드센스 광고넣기  (0) 2018.11.25
Atom 설치와 python 설정  (0) 2018.11.17
구글 애드센스 신청하기  (1) 2018.11.09
VMware update tools 설치 / Linux 계열  (0) 2018.10.24
반응형




안녕들 하시죠 !


오늘은 HelloWolrd.exe 파일을 가지고 리버싱 첫번째 공부를 시작해 보려 합니다.

 

우선 아래 보이는 이미지처럼 Hello World !MessageBox로 출력되는 코드를 하나 작성해주세요.


코드는 아래에 있는 텍스트 파일을 받으시면됩니다.


HelloWorld !.txt





코드를 작성하신 후에 위에있는 이미지의 노란부분을 Release로 바꾸신 후에 빌드를 해주시면 HelloWorld.exe 가 생성됩니다.

( Release 모드로 빌드하면 코드가 더 간결해져서 디버깅하기에 편하다고합니다 ! )

 

HelloWorld.exe가 어디에 있는지 잘 모르시겠다면 윈도우의 검색기능을 통해서 찾아보세요

( 혹은 제 블로그 꿀팁 카테고리에 있는 Search Everything 설치를 봐주세요 ! )

 

, 이제 드디어 Ollydbg로 가봅니다.

Ollydbg를 실행시킨후에, File -> Open 하신 후에 HelloWorld.exe 파일의 경로로 들어가 열어줍니다


그럼 아래와 같은 화면이 나오게 됩니다.




1.     16진수 메모리 주소 창


2.     기계어를 보여주는 창 ( IA32 CPU명령어 )


3.     어셈블리어( OP code를 어셈블리로 변환한 코드 ) ( 왼쪽 ), 주석( 오른쪽 )


4.     레지스터


5.     덤프


6.     스택

 


아래에는 알아둬야할 Ollydbg 기본 명령어





, 그럼 이제 main문을 찾는 것을 목표로 삼고 진행해 보겠습니다.


이제 여기서 실행( F9 )를 누르게 되면 다음과 같은 화면이 나옵니다.




맨위에 2줄을 보면 이런식으로 나타나게됩니다. 이 내용을 해석해보자면


“2F284C 주소의 함수를 CALL한 후 2F104F 주소로 점프(JMP) 해라 라는 뜻입니다.

 

혹시, 주소가 아래와같이 나오신다면 명령어부분(CALL HelloWor.__security_init_cookie) 이부분을 더블클릭 하시면 아래 이미지처럼 주소가 

나옵니다.




, 그럼 F7을 눌러 이 코드안으로 들어가봅시다.




뭔가 알수없는 코드들이 나왔습니다.

여기에서 가장 오른쪽에 빨간글씨가 있는 부분 보이시죠? 이부분이 주석(comment) 부분 입니다.


이 빨간색 글씨로 된 부분은 코드에서 호출되는 API 함수 이름이라고 합니다.

이름만 살펴보게되면 원본 코드에서 사용된적 없는 API들이 호출되고있습니다.

책에 있는 설명을 보면 지금 우리가 들어와있는 이 공간은 Visual C++ 에서 프로그램 실행을 위해 추가시킨 Stub Code 라고 합니다.

 

Stub Code ?


사용자가 추가한 코드가 아닌 컴파일러가 프로그램을 만들때 추가한 코드라고 합니다.

실행 정보를 가져오고 프로그램을 실행하는데 필요한 정보를 얻어오는 코드라고 합니다.

그러니, 우리는 Stub Code를 구분하여 넘기고 Main 함수를 찾는 연습을 해봐야할 것 같습니다.

 

.

스크롤을 아래로 조금만 내려보면 RETN 명령어가 보입니다.



RETN 명령어는 우리가 알던것처럼 함수의 끝에서 사용되며 이 함수를 실행하게되면 다시 원래의 주소쪽으로 되돌아갑니다.

아마 이 Stub Code가 있는 공간을 탈출하는 것 같습니다.

 

, 그럼 RETN 명령어 위치까지 Ctrl + 9로 한방에 가보겠습니다

그리고 F8을 눌러 RETN을 실행하겠습니다.




그럼 처음에 봤던 2F11A6주소로 돌아오게되었습니다.

이제, F8을 눌러 JMP 2F104F 명령을 실행해 보겠습니다.




JMP 2F104F 명령을 실행하고나니 2F104F 주소로 이동하게되었습니다. 이또한 Stub Code라고합니다.

 

그럼 이제부터는 조금 무식한 방법으로 함수호출 명령어를 하나하나 따라가 보며 찾고있는 Main문을 향해 가보는 연습을 해보겠습니다.

 

F7로 들어가서 Stub Code들을 만나면 Ctrl + 9를 눌러 빠져나오고 또 F8삽질에 삽질을 반복 또 반복 하다보니 아래 이미지의 코드를 지나고 나면 MessageBox가 실행이 되는걸 파악했습니다.





F7로 들어가보게되면




찾은 것 같습니다 !

 

2F1000 이라는 주소에 MessageBoxW() API 호출 코드가 있고 PUSH를 통해 MessageBox에 표시될 문자열들을 스택에 저장하는 부분을 보니 맞네요.

 

역시 쉽지가 않네요ㅠㅠ

하지만 직접 해보는 내내 너무 흥미롭고 재밌다는 생각이 들었습니다.

 

다음 글에서는 베이스캠프를 설치하고, 원하는 코드를 빨리 찾아내는 방법을 사용하여 더 능숙하게 다루는 연습을 해보겠습니다.


오늘은 여기까지입니다 감사합니다 !



참고서적 이승원 「리버싱 핵심원리」 인사이트(2018) p13~23

+ Recent posts