패킹 - 프로그램 코드 크기를 줄이기 위해 압축하거나 프로그램분석을 어렵게 하기위해 암호화하는것
- Compressing 압축
ex) Petite ASPack MEW FSG UPX
- Protecting 암호화
ex) Themeda Yoda ASProtect armadillo
UPX(Ultimate Packer for Executables) - 오픈소스실행압축파일
upx를 이용해서 전에 쓴 abexcrackme1을 압축한 모습이다.
각 파일을 Detect It Easy로 확인해보면 그 차이를 비교해 볼 수 있다.
코드를 언패킹 할 Entry Point가 달라진다.
패킹된 프로그램을 언패킹된 상태에서 저장할 수도 있지만 중요한 것은 실제 엔트리 포인터를 찾아야 된다는것이다.
그중 Original Entry Point 실제 엔트리 포인트를 찾는 것이 중요하다고 한다.
ollydbg 에는 자동 언패킹 기능이 있지만 이를 빼고 수동으로 unpacking을 따라 가보았다.
패킹된 프로그램은 4071B0에서 시작한다.
UPX로 패킹된 프로그램은 PUSHAD로 시작한다 - 모든 레지스터값을 스택으로 백업
언패킹이 끝나면 POPAD로 다시 복구한다.
그리고나서 00401000 원본 코드로 점프해서 본래 기능을 수행한다.
ollydbg plugin에 메모리 덤프하는 기능이 있다.
윈도우응용프로그램 - DLL 형태 시스템 라이브러리사용
어떤 DLL 어떤 함수 쓰는지를
PE헤더 IAT(Import Address Table)에 저장
IAT는 쉽게 손상되서 LoadPE프로그램을 사용한다.
다음은 Lena 20강 자료를 이용하여 ESP레지스터를 이용하여 위처럼 OEP를 찾는 것이다.
시작부를 한줄씩 실행하면서 EBP, ESP의 변화를 보고 서브루틴이 실행되는 모습을 볼 수 있다.
- EBP를 스택에 저장해놓고 ESP와 같게 하여 사용
Software BreakPoint
설정한 명령어 맨 앞을 CC로 대체(인터럽트 발생)
ollydbg 같은경우에 udd파일에 기록하여 디버깅을 잠시 정지
Hardware BreakPoint
디버거 레지스터에 breakpoint 주소 입력
ESP에 저장된 주소에 breakpoint를 메모리에 설정한 것이다.
이렇게 실행하면 EBP레지스터를 사용하는 지점에서 자동으로 break가 걸린다.
이 지점에서 실행하면 옮겨지는 4271B0가 OEP일 것이다.
'정보보안 > 리버싱 입문' 카테고리의 다른 글
지뢰찾기 게임해킹 (0) | 2022.03.06 |
---|---|
리버싱, 좀 더 깊숙이 (0) | 2022.03.01 |
리버싱에 익숙해지기 (0) | 2022.02.25 |
리버싱시작하기(2) (0) | 2022.02.22 |
리버싱 시작하기(1) (0) | 2022.02.21 |