두 개의 실행파일을 합쳤을 때, PE 구조가 어떻게 달라지는지 궁금하여 구글링을 하여서 두 개의 정보를 얻었다.

 

1. http://exe-joiner.winsite.com/ 에서 Exe Joiner v.1.20.7 을 다운로드 받아 실행함.

실행하면, 실행바에는 어플에 대한 정보가 나타나지만, 입력 관련 화면은 찾아 볼 수 없어서 실패...(혹시 악성코드 아닌가? 의심 중...)

 

2. http://sourceforge.net/projects/exefusion/files/ExeFusion-win32/ 에 가보면 소스 코드 & Binary를 다운로드 받을 수 있음.

해당 소스의 결과물이 Windows XP에서는 정상동작 하지만,  Windows7에서는 동작하지 않음

 

참고)

ZoneAlarm 에서 2개의 exe가 binding 되어 있는 파일을 Virus Name: Trojan-Dropper.Win32.Agent.ano  로 인식함.

 

'Biz > Reversing' 카테고리의 다른 글

ExeFusion-0_20-src 빌드시 error PRJ0019 발생  (0) 2013.10.07
리틀 엔디안 빅 엔디안  (0) 2013.07.06
by JNexOnSoft 2013. 10. 8. 13:46

두 개의 실행파일을 하나의 실행파일로 합치는 프로그램인 ExeFusion-0_20-src를 빌드하는데,

error PRJ0019: A tool returned an error code from "Copying files..." 라는 에러메시지가 출력되었다.

 

1. 에러로그 상세

 

VS에서 빌드시 아래와 같은 로그를 확인함.

 

1>Linking...
1>   Creating library .\FusionBase Debug/FusionBase.lib and object .\FusionBase Debug/FusionBase.exp
1>Embedding manifest...
1>Copying files...
1>지정된 경로를 찾을 수 없습니다.
1>        0개 파일이 복사되었습니다.
1>Project : error PRJ0019: A tool returned an error code from "Copying files..."
1>Build log was saved at "file://e:\998.HaHa\ExeFusion-0_20-src\FusionBase Debug\BuildLog.htm"
1>FusionBase - 1 error(s), 19 warning(s)
========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ==========

 

2. 원인

 

[project]-[property] 에서

[Configuration Properties]-[Build Events]-[Post-Build Event] 에

copy ".\FusionBase Debug\FusionBase.dll" ".\ExeFusion Debug\FusionBase.dll" 가 정의 되어 있는데,

.\ExeFusion Debug 디렉토리가 없어서 발생하는 문제임.

해당 디렉토리만 생성해 주면 정상적으로 빌드됨.

 

'Biz > Reversing' 카테고리의 다른 글

EXE Join  (0) 2013.10.08
리틀 엔디안 빅 엔디안  (0) 2013.07.06
by JNexOnSoft 2013. 10. 7. 16:26

정리가 잘된 내용이 있어서 퍼왔음...

바이트오더 하면 떠오르는게 리틀 엔디안(Little Endian) 과 빅 엔디안(Big Endian) 이다.

프로그램이나 리버싱 과정에서 헷갈리기도 하는 부분이다.
우선 리틀 엔디안은 주로 인텔(Intel)프로세스 계열에서 사용하는 바이트 오더 이다.
메모리 시작 주소가 하위 바이트부터 기록된다는 것이고 그 반대로 빅 엔디안은
메모리 시작 주소에 상위 바이트부터 기록된다. 주로 UNIX 시스템인 RISC 프로세서
계열에서 사용하는 바이트 오더이다. 이렇게 메모리에 저장하는 방식이 차이가 있다보니
가끔 혼돈 스럽기도 하다. 다음 도표는 메모리기 기록되는 것을 쉽게 이해할 수 있도록 기술되어 있다.


[도표] 레지스터와 메모리 위치 매핑 관계 , 출처 : 위키피디아(www.wikipedia.org)

우리가 패킷분석때 많이 보게되는 네트워크 프로토콜은 기본적으로 빅 엔디안 표현이다.
빅 엔디안을 표현하면 아래와 같다.

increasing addresses  →
... 0Ah 0Bh 0Ch 0Dh ...



[출처] 위키피디아

0x0A 는 메모리 하위 주소에 위치하게 되고 차례로 0x0B , 0x0C, 0x0D 가 온다.
읽는 순서는 왼쪽 -> 오른쪽 순서로 읽으면 되므로 사람이 보기에는 가장 편한 방식이다.

다음 리틀 엔디안은

increasing addresses  →
... 0Dh 0Ch 0Bh 0Ah ...



[출처] 위키피디아

빅 엔디안 과 반대로 0x0D 가 메모리 하위 주소에 오게된다. 상위바이트로 올라가면서
차례로 나머지 값이 들어간다. 리틀 엔디안 또는 빅 엔디안에 따라 받아 들이는 쪽에서
처리를 잘못하게 되면 엉뚱한 형태가 되므로 주의가 필요하다. 예를 들어, 취약점 등을
리버싱 하는 과정에서 해당 값 들이 기록되어 있는 형태를 제대로 이해할 필요가 있다.

일단 여기서는 쉽게 요약 정리하면,
빅 엔디안값은 왼쪽-> 오른쪽 순서로 읽고, 리틀 엔디안값은 반대로 오른쪽->왼쪽 순서로
읽으면 된다는 점이다. 그리고 네트워크 상에서 표준으로 이용되는 프로토콜은
네트워크 바이트 오더인 빅 엔디안으로 생각하자.

복잡한게 싫다면 이것만 알고 있으면 된다.

참고로 다음은 리틀/빅 엔디안을 이용하는 시스템이다.

[리틀 엔디안]
[빅 엔디안]
  • AIX on POWER
  • AmigaOS on PowerPC and 680x0
  • HP-UX on Itanium and PA-RISC
  • Linux on MIPS, SPARC, PA-RISC, POWER, PowerPC, 680x0, ESA/390, and z/Architecture
  • Mac OS on PowerPC and 680x0
  • Mac OS X on PowerPC
  • MVS and DOS/VSE on ESA/390, and z/VSE and z/OS on z/Architecture
  • Solaris on SPARC

우리가 주로 이용하는 시스템은 인텔 기반의 리눅스와 윈도우이므로 리틀 엔디안 방식이다. 단, 네트워크를 통해 전송되는 것은 빅 엔디안이다.

[참고]
1. 위키피디아
2. Understanding Big and Little Endian Byte Order
 

'Biz > Reversing' 카테고리의 다른 글

EXE Join  (0) 2013.10.08
ExeFusion-0_20-src 빌드시 error PRJ0019 발생  (0) 2013.10.07
by JNexOnSoft 2013. 7. 6. 07:44
| 1 |