블로그 이미지
Flying Mr.Cheon youGom

Recent Comment»

Recent Post»

Recent Trackback»

« 2024/5 »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

 

 

1. 암호해제

암호 해제하는데 생각보다 짧은 시간이 요구된다. 현재 키보드의 문자수는 95개이다. 평균 암호 문자수는 8글자다. 암호 검출 경우의 수는 95^8이다. 약 30분의 시간이 필요하다.

asm에서 xor를 이용하여 초기화로 활용한다. xor eax eax; 는 eax가 모두 같은 비트이므로 0으로 초기화한다.

 

2. PE 구조

기본 분석 ( PE 구조 ) [ PE : Portable Executable ]

- PE는 MS의 기본 파일 구조, Unix COFF파일 포멧형식에 근간을 둔다.

- PE_format_layout 파일을 참고하여 구조체 확인

 

3. PE 작성 트레이닝

Hex Workshop을 이용하여 PE구조 확인, 16bit/32bit.

물리적 메모리주소 진입점은 ImageBase + OffSet = AddressOfEntryPoint 이다.

PE_View 툴를 이용하여 PE구조를 살펴본다.

PE_View에서 보는 것과 같이 ImageBase:0x400000, OffSet:0x1000, AddressOfEntryPoint의 시작주소가 0x401000 시작하는지 확인하기 위해 OllyDBG를 활용해 본다; OllyDBG는 바이너리를 분석하고 싶을 때 사용하는 도구다. OllyDBG에서 Registers정보의 EIP값이 0x401000임을 확인할수있고, Ctrl+G를 눌러서 0x400000을 입력하여 해당 주소의 HEX값을 확인해 본다.

바이너리는 기본적으로 암호화시키거나 인증하는 부분에 대해 고려되지 않았다. 바이너리코드 인증과 서버 업데이트 인증이 필요하다.

RSA가 최근에 뚫렸다. RSA에 활용되는 OTP의 설계도도 노출되었다.

일반적으로 IMAGE_SCN_MEM_READ권한만 허용한다. WRITE가 있는 경우, 악성코드일 가능성을 둔다. 정상적인 프로그램중에 Packing된 바이너리도 WRITE권한이 있다. 자체적으로 unpacking해야 하기 떄문이다.

 

3.

바이너리 코드에서 import한 ( DLL ) 함수명들을 확인하여 해당 프로그램의 용도 및 분석 접근방법을 유추한다. 그래서 함수명이 정적으로 볼수 없고, 런타임시에 Decode되어 나타나도록 해서 리버싱 분석 시간을 지연시킨다.

 

4.

Packing된 바이너리의 Entry Point를 찾는 것이 중요하다.

Unpacking하는 방법이다.

PUSHAD한 후 POPAD한 다음 JMP로 O.E.P로 간다; OEP : Original Entry Point.

OEP에 Pause를 걸어두고, plugins - OllyDBG dump를 이용해서 저장한다.

저장한 후 importREC를 이용해서 Pause걸어두었던 OEP 주소를 재설정해주고 조금전에 저장한 파일에 저장한다.

 

5. IDA

multi processor 지원.

IDAScript는 javasciprt와 C++를 활용. IDAPython은 순수 Python으로 모든 기능을 활용.

 

6.

AES, SHA256을 활용해 암호화를 구성해서 통신을 하더라도, key관리가 되어야 한다. 보통 소프트웨어 내부에 키를 저장해두고 사용한다. 이 key를 안전하게 관리하기 위하여 SSL을 구축하여 암호화 통신을 해야 한다. SSL은 Client와 Server측의 X, Y 키 값을 서로 나누어 가지고 연결 때 마다 새로운 세션을 구성한다.

SSL 을 구성하지 않는다면, 리버싱 엔지니어링으로 해당 키를 검출해 낼 수 있다.

 

7. IDA

모든 것을 분석하면 초록불이 뜬다. ( Ready ), Lib, Data 부분은 분석할 필요가 없으며, Regular function과 instruction 부분에 대해 분석이 필요하다.

IDA viewA : 분석된 ASM 정보

Hex ViewA : 헥사 정보

Exports :

Imports : Lib 정보

Name : IDA의 특성을 알 수 있다. 숫자를 대신함.

functions window :

strings window : ascii, ... 에 대한 문자 내용

Structures : 스트럭쳐 구조를 Reverser가 재정의하여 관리 할수 있는 창

Enum : 위 스트럭처와 같은 목적. Enum 재정의.

Windows - Reset Desktop : 윈도우 창들 재정리 해주는 메뉴

 

IDA에서 접근이 될만한 부분 ( String )에 대해 확인 후 Break 건 다음에 해당 위치에서 어떤 값이 들어가는지 확인한다. 확인 후 값을 수정하거나 명령어를 HexEditor를 활용하여 바꿔준다.

 

 

 

 

 

 

 

: