본문 바로가기

Programming/Python

Assemble, Disassemble, Search

Assebmble, Disassemble, Search


어셈, 디스어셈, 서치에 대해서 알아보도록 하겠습니다.

ImmunityDBG에서 어셈블리어를 Hex 값으로 Hex값을 어셈블리어로 변환하고, 해당 Hex 값이 어디에 위치해 있는지 찾아보도록 하죠.





간단히 리버스 엔지니어링을 하면 처음 접하는 abexcm1.exe를 ImmunityDBG로 실행 후 python shell을 실행 시킵니다. (python 인터프리터)



위 소스코드를 보죠.

JMP ESP와 JMP ESP \n RET 어셈 코드를 Hex 값으로 나타내었더니 위와 같은 값이 출력됩니다.






위 소스코드를 보면 해당 주소의 어셈블리어를 출력해주는 것을 알 수 있습니다.




그렇다면 반대로 어떤 어셈블리어가 어느 주소에 있는지도 알 수 있지 않을까요?



search()를 이용해서 해당 어셈블리어의 Hex값이 어느 위치에 어셈블리어가 존재하는지 찾을 수가 있습니다.


모듈도 찾을 수 있는데 findModule()을 이용해서 찾을 수 있습니다.








조금 더 깊게 들어가서 어떤 어셈블리어를 입력할 시 어떤 모듈에 어느 주소에 위치 하는지 찾아주는 소스코드를 작성해 보도록 하죠.




소스코드를 분석해 보도록 하죠.


4 : 디버거를 사용한다.


5 : 입력한 어셈블리어를 헥스 값으로 나타내어 assembledinstruction에 넣는다.


6 : 해당 로그를 남긴다.


7 : 만약 입력한 어셈 값이 없다면 어셈을 입력하도록 한다.


9 : 해당 어셈이 있는 곳을 찾아 addressList에 넣는다.


10 : 테이블을 만든다.


11 : 찾은 addressList를 이용해 해당 주소가 있는 모듈을 찾는다.


13 : 모듈이 없는 경우 출력한다.


19 : 주어진 주소값을 이용해 라인별로 어셈을 instruction에 넣는다.


20 : 만들어 놓은 테이블에 붙인다.

'Programming > Python' 카테고리의 다른 글

PE 분석  (0) 2016.03.15
Pyhook  (2) 2016.03.14
Immunity DBG 기초  (0) 2016.03.14
Exploit 기초  (0) 2016.03.14
Raw 소켓 스니핑  (0) 2016.03.14