2014. 11. 7. 16:57
728x90
완전 쉬운 nspack....이걸 써야할지 말아야할지 생각도 안하고 ..그냥 올려본다..
해당 특징이라하면 특정 어셈 명령어에 대한 지식을 알면 쉽게 이해 할수 있다.
누구나 아는 upx에서 pushad 의 어셈명령이 무엇인지 기억하는가? 모든 레지스터에 대한 값을 저장하는것이였다.
여기서는 pushfd를 쓴다. PUSHFD 는 'push flags double-word' 의 약어로, 플래그를
더블워드로 스택에 넣는다.[ 출처 : http://gnudevel.tistory.com/404]간단히 말해서 기능을 비슷하다.
------------------------------------------------------------------------------------
pushad 명령어
- 레지스터를 한꺼번에 저장하는 명령어이다.
한꺼번에 저장되는 순서
EAX->ECX->EDX->EBX->ESP->EBP->ESI->EDI
이 순서대로 stack에 저장된다.
실습)
ESP자리에는 pushad 하기 전 ESP 주소값이 대입된다.
popad
- 레지스터의 값을 한꺼번에 들고오는 명령어
레지스터 들고오는 순서
EDI->ESI->EBP->EBX->EDX->ECX->EAX
* ESP는 들고 오지 않는다.
실습)
pushfd
- 플레그값을 저장하는 명령어
실습
- stack에 EFL 값 대입
popfd
- 플레그값을 들고오는 명령어
실습)
popfd 하기 전 EFL 값
popfd 한후 EFL값
- stack에 있던 값을 들고와 EFL에 대입
출처 : http://index2014.tistory.com/126
-----------------------------------------------------------------------------
자 여기까지가 이 팩에 대한 알아야할 기본 지식이다. 이 팩에서는 pushfd, pushad를 연속으로 씀으로써 플래그값 및 레지스터 정보를 다 저장하였다가 언팩하여 jmp 할때 해당 레지스터값을 복원하여 동작한다.
nspack 확인
nspack에서 ep부분에 보이는 pushfd와 pushad 값을 확인할 수 있다.
아래 보면 popad, popfd 후에 jmp를 하는것을 알 수 있다.
참고로 보면알겠지만 그냥 ctrl+f 눌러서 popfd하면 바로 나온다;; jmp에 bp걸고 ㄱㄱ 하면 끝
이상 매우 쉬운 nsunpack에 대한 확인 및 언팩이였다....너무쉽다ㅣ
728x90
'리버싱' 카테고리의 다른 글
Servicemain으로 호출되면서 해당 service main에서 팩킹되어있을 때 (0) | 2015.06.26 |
---|---|
unpackingyoda'scrypter1.3 (1).pdf (0) | 2015.05.27 |
Exe32Pack 1.4x (Unpacking) (0) | 2014.10.30 |
RunAsInvoker 로 UAC 우회 (0) | 2014.10.23 |
Other AntiDebug tricks (0) | 2014.10.22 |