-
[2021/08/31][짤막한 이야기 - 코드 패킹(예시)]짤막한 이야기 2021. 8. 31. 19:22728x90반응형
[2021/08/31][짤막한 이야기 - 코드 패킹(예시)]
“코드 패킹(Code Packing)”이란 소프트웨어 보호 기술 중 하나이며, 코드를 알아볼 수 없도록 변형하는 것이라고 하였다.
그림의 왼쪽이 아벡스크랙미의 “원본 코드”이고 오른쪽이 “패킹된 코드”이다.
패킹은 여러 방식으로 수행될 수 있지만, 예시에서는 가장 단순하게 모든 바이트에 1을 더한다.
0x401000 ~ 0x401050까지의 어셈블리어가 모두 이상하게 해석되는 것을 볼 수 있다.
그러나 CPU에서는 패킹된 코드를 읽어들이면 잘못된 명령어로 강제종료될 가능성이 높다.
따라서 패킹된 코드는 반드시 실행 직전에는 원본 코드로 복원되어야 한다.
실행 직전 자동으로 원본 코드로 복원하는 과정이 “언패킹”이며, 0x401069 ~ 0x401079까지의 어셈블리어가 “언패킹 코드”이다.
언패킹 루틴은 단순 for문으로 구성되는데 이 경우에는 0x401000부터 0x55번을 반복하며 각 바이트에 1을 빼는 코드이다.
(= for(EAX = 0x401000; EAX <= EAX + ECX; EAX++) *EAX = -1;)
원본 코드로의 복원은 패킹의 역연산을 수행하는 것이다.
이렇듯 패킹된 코드는 실행 중에 언패킹되는데도 왜 미리 언패킹하는 것이 중요할까?
[관련된 짤막한 이야기 - 코드 패킹[2021/01/15]]
[관련된 문서 - 핀툴 프로그래밍 기본서[제3부. 핀툴로 UPX 언패킹하기]]
#이야기 #루니프 #핀 #핀툴 #패킹 #언패킹 #분석 #개발 #구현
[2021/08/31][Short Story - Code Packing(Example)]
“Code Packing” is one of the software protection technologies, and it is said that the code is transformed so that it cannot be recognized.
The left side of the figure is the “Original Code” of AbexCrackMe, and the right side is the “Packed Code”.
Packing can be done in several ways, but the simplest example is every byte plus 1.
You can see that all assembly in 0x401000 ~ 0x401050 is interpreted strangely.
However, in the CPU, if the packed code is read, there is a high possibility of being forcibly terminated with an incorrect instruction.
Therefore, the packed code must be restored to the original code immediately before execution.
The process of automatically restoring the original code just before execution is “Unpacking”, and assembly in 0x401069 ~ 0x401079 is “Unpacking Code”.
The unpacking routine consists of a simple statement. In this case, it starts from 0x401000 and repeats 0x55 times, and subtracts 1 from each byte.
(= for(EAX = 0x401000; EAX <= EAX + ECX; EAX++) *EAX = -1;)
Restoring to the original code is to perform packing's inverse operation.
Why is it important to pre-unpack code, even though it is unpacked during execution?
[Related Short Story - Code Packing[2021/01/15]]
[Related Documents - Basics Book for PinTool Programming[Part3. Unpacking UPX with PinTool]]
#Story #LootNiP #Pin #PinTool #Packing #Unpacking #Analysis #Development #Implementation728x90반응형'짤막한 이야기' 카테고리의 다른 글
[2021/09/02][짤막한 이야기 - 인덱스 트리] (0) 2021.09.02 [2021/09/01][짤막한 이야기 - 언패킹(필요성)] (0) 2021.09.01 [2021/08/30][짤막한 이야기 - 동형 검사] (0) 2021.08.30 [2021/08/29][짤막한 이야기 - 동형] (0) 2021.08.29 [2021/08/27][짤막한 이야기 - 좌측자식 우측형제] (0) 2021.08.27