(혼자 공부하며 참고하기 위해 본문 내용을 그대로 가져왔습니다. 문제시 삭제 조치 하겠습니다.)


IDA pro 에서 "C" 단축키가 해주는 일~

Sality.L이 3주동안 내 머리를 미치게 만들고 있다...
슬슬 본체와 바닥이 드러나려고 하고있다.. 머지 않아 좋은 결과물이 나오지 않을까 하는 기대심이 한가득이다.

IDA는 디어셈블 툴중에서도 단연 으뜸으로 인정받고 있는 도구이다.
강력한 기능들과 더불어 Hexrays plugin은 IDA를 더욱더 빛나게 해주는 디컴파일 플러그인이다.
만든사람이 천재로 불린다는..ㅋ
이런 강력한 IDA에 대해서 작은 기능( __)ㆀ 하나 소개하려 한다.

악성코드들중에 정상 파일을 감염시켜 숙주를 잡고 그 숙주에 기생을 하는 형태를 "파일 바이러스" 라고 지칭한다. 이 파일 바이러스들은 정상적인 PE의 개념(?)과는 조금 다른점이 있다.

 - 정상적인 PE들은 보통 각 섹션의 특성에 맞게 코드들이 위치해 있다. 즉, 므슨 말인고 하니..
   .text 섹션 에는 실지로 실행되는 코드들이..
   .data 섹션 에는 코드실행에 있어 쓰이는 각종 데이터들이 위치해 있게 된다.
   물론 여타 다른 섹션들도 그들만의 특성들과 특징들로 데이터들을 담고 있다.

자.. 하지만 파일 바이러스는 그렇지 않다.
자신의 코드로 실행의 흐름을 변경하기 위해, 원래의 정상 코드를 좀 수정을 하게 된다.
수정된 코드는 감염된 시스템이 순차적으로 opcode들을 한줄 한줄 실행하면서 결국엔 바이러스가 하고자 하는 본래의 목적을 위한 코드로 실행의 흐름을 바꾸게 된다.

물론 이 바이러스의 코드들은 여러가지 방법으로 기생하게 된다. 섹션을 한개 더 생성하거나 또는 원래의 섹션을 늘려서 그곳에 코드를 넣거나.. 하는 방법들로 말이다.

이렇게 기생하게 되는 바이러스 코드안에는 수정된 원래의 코드들도 포함되어 있다.
왜?! 제대로 만든 또는 제대로 감염된 파일 바이러스는 자신의 코드를 실행하고도, 숙주파일의 정상 실행을 위해 수정한 코드를 원복시키기 때문이다. 물론 이는 숙주가 실행되어 메모리에서 일어나는 일련의 과정을 말하는 것이다.
코드를 원복시키는 이유는 사용자가 감염의 여부를 쉽게 알아차리지 못하게 하기 위함이다.

서두가 길었다.... 이렇게 바이러스 코드는 기존의 text코드 섹션이 아닌 자신의 코드는 엉뚱한 데이터 섹션의 형태로 기생하게 된다.
물론 ollydbg에서는 코드 섹션이 아닌 다른 부분들도 analysis를 대부분 해준다.
하지만 ida는 code섹션만을 디어셈블 해준다.
데이터로 분석된 코드들을 opcode 로 analysis하고자 한다면 분석을 위한 루틴의 시작 offset으로 이동해서
과감히 "C"를 눌러보자. 다음과 같이 IDA가 분석을 해준다. 물론 2번째 그림의 주석은 안달아 준다.. -0-




[ analysis 되기전의 데이터 형태의 코드 ]

[ analysis 된 코드 ]


출처 : http://mylabs.tistory.com/2

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

[Solution] Decompilation failure from IDA Decompiler  (0) 2019.01.06

(혼자 공부하며 참고하기 위해 본문 내용을 그대로 가져왔습니다. 문제시 삭제 조치 하겠습니다.)


IDA 디컴파일러(F5)로 디컴파일 하다보면 가끔 스택 문제도 실패하는 경우가 있습니다.


'Decompilation failure: xxxxxx: positive sp value has been found"




오류가 발생한 주소 앞 (여기서는 0x401018)으로 가서 [Alt + K] 로 Chage SP value 를 실행합니다.





이 값을 Current SP value 와 맞춰주면 됩니다.




다시 F5로 디컴파일 해보면 디컴파일된 내용이 나옵니다.





출처 : http://www.devblog.kr/r/8y0gFPAvJ2u8XI5QweIKkJ3zHCYK0j87F3yvJe4SbzF8

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

data code 분석을 위한 ida의 사용법 & Sality.L  (0) 2019.01.06

(혼자 공부하며 참고하기 위해 본문 내용을 그대로 가져왔습니다. 문제시 삭제 조치 하겠습니다.)


악성코드 분석을 하다보면 여러가지 팩커를 만나는데 너무 힘들게 하는 패커는 더미다 이다.

분석을 편하게 완벽하게 만들수는 없지만 간단한 방법으로 언팩하는 방법을 기술 한다.


# 이방법은 단순히 메인 함수를 찾는 방법이다 . 더미다의 분석 방해 기법인 API리다이렉트 등에 대한 해결책은 제시 되어 있지 않다.


1. 더미다 안티 디버깅 우회

종종 이런것들이 힘들게 한다 PhamtOm플러그인으로 우회를 할껀데 귀찬으니까 옵션을 다켠다.




2. ZwFreeVirtualMemory 에 BP

ZwFreeVirtualMemory 에 BP를 건다.





3. 코드섹션 값 확인


Shift + F9 를 눌러가면서 코드섹션 값을 확인한다.





코드섹션 값이 코드로 변하면 ZwFreeVirtualMemory 에 BP 없엔다.




4. 메인 함수 찾기


코드섹션에서 B8 4D5A0000 바이너리를 찾고 BP를 걸고 Shift + F9 를 누른다.





이후 F8을 누르면서 진행하다 보면 메인 함수로 들어가는 곳을 발견할수 있다.




출처 : http://dandilab.tistory.com/30

(혼자 공부하며 참고하기 위해 본문 내용을 그대로 가져왔습니다. 문제시 삭제 조치 하겠습니다.)


#PlugX Malware


보통의 경우 최초 드럽퍼가 실행되면 exe, dll, data 파일(확장자는 제작자 마음) 이렇게 3종류의 파일이 특정 폴더에 설치가 된다. 최초 드럽퍼가 어떻게 실행되는 지 확인하지 못 했지만, 방법이야 다양하니 생략,,


예)

C:\Program Files\Common Files\Nv.exe

C:\Program Files\Common Files\NvSmartMax.dll

C:\Program Files\Common Files\NvSmart.mp3


같은 폴더에 나란히 3가지 파일이 설치되면 먼저 exe파일이 실행되고 DLL이 로드되며 해당 DLL이 다시 남은 data 파일(위의 NvSmart.mp3)을 로드하는 방식이다. 설치를 위해 각각의 파일이 반드시 존재해야하는 것이다.


그런데 3가지 파일이 반드시 필요한 이유가 더 있다. 자세히 살펴보면...


일단 DLL 파일의 Main코드를 살펴보면 다음과 같은 코드들을 볼 수 있다.






처음부터 '20120101'을 현재 실행되고 있는 PC의 System시간과 비교한다. 이 부분은 상기 언급한 반드시 필요한 부분에 포함되지 않지만, 굳이 비교하는 이유가 궁금해서.. 이유가 뭘까.





위 그림을 보면 Module EP를 찾아서 EP의 Page를 R/W하게 변경한다. 그리고 다음과 같이 하드 코딩된 주소(_DataLoad_Routine_)와 EP의 거리를 계산해서 Module EP부분에 덮어쓴다. 해당 어셈코드는 "E8 A6 18 00 00"에서 "E8 8A F8 8F 0F"로 변경되면서 점프되는 곳이 _DataLoad_Routine_ 주소로 바뀌는 것이다.



[DLL Main 코드에 삽입된 EP 수정코드]


어쨌건 정리하면, exe는 쓰고자하는 DLL을 import하고..




DLL이 로드되면 DLL Main코드가 실행되면서 exe의 EP가 수정되며(exe 시작전) 다시 DLL의 특정 주소로 점프가 된다(exe 시작 직후). exe는 dll 실행히켜주고 dll은 exe 수정해주고 다시 exe는 dll을 통해 data 파일을 호출하는...완벽한 호흡을 자랑한다..;;


그리고 첨부해서.. exe 원래 EP 코드를 보면 CRTStartup 보다 먼저 어떤 Call이 실행 되는 것을 볼 수 있다. 그래서 exe를 그냥 메인코드 먼저 디버깅하거나 IDA같은 Disassembler로만 보면 놓치는게 있을 수도..



출처 : 출처 : http://arisri.tistory.com/entry/%EC%95%85%EC%84%B1%EC%BD%94%EB%93%9C-PlugX-Dropper%EC%9D%98-%EC%84%A4%EC%B9%98-%EB%B0%A9%EC%8B%9D

'Analysis > Theory' 카테고리의 다른 글

Ollydbg_Back To User Mode  (0) 2019.01.06
Themida 단순 Unpack  (0) 2019.01.06
중복 실행 방지 코드_CreateMutex( )  (0) 2019.01.06
프로세스와 스레드(Process & Thread)  (0) 2019.01.06

(혼자 공부하며 참고하기 위해 본문 내용을 그대로 가져왔습니다. 문제시 삭제 조치 하겠습니다.)



 악성코드나 특정 프로그램에서는 중복(다중) 실행을 방지하기 위해 뮤텍스를 사용합니다.


TEST 프로그램이 있습니다. 이 프로그램은 실행했을 때 CreateMutex( ) API를 호출해서 뮤텍스를 생성하고 정상 종료되었을 때 ReleaseMutex( ) API를 호출해서 핸들을 반환합니다. 그리고 중복 실행 방지 코드가 포함되어 있다고 보겠습니다.

여기서 TEST 프로그램이 정상적으로 종료된다면 추후 동작에 아무런 문제가 없습니다. 그러나 또 다른 TEST 프로그램을 다중으로 실행시키거나 동작하고 있는 TEST 프로그램을 강제로 종료시키고 난 뒤에 다시 실행시키려고 할 경우, 동작하지 않습니다.

그 원리는 다음과 같습니다. 뮤텍스는 커널 오브젝트이기 때문에 모든 프로세스를 통 틀어서 하나만 존재합니다. 동일한 뮤텍스가 이미 있는 상태에서 CreateMutex( ) 또는 OpenMutex( )를 호출하면 에러가 발생하고 GetLastError( )를 사용하면 ERROR_ACCESS_DENIED나 ERROR_ALREADY_EXISTS 값이 나옵니다. 이 값을 확인해서 프로그램 실행 여부를 결정하는 것이 Mutex를 이용한 중복 실행 방지 코드입니다. 다음은 간단하게 작성된 중복 실행 방지 코드 입니다.




출처 : http://securityfactory.tistory.com/296

'Analysis > Theory' 카테고리의 다른 글

Ollydbg_Back To User Mode  (0) 2019.01.06
Themida 단순 Unpack  (0) 2019.01.06
악성코드 'PlugX Dropper'의 설치 방식  (0) 2019.01.06
프로세스와 스레드(Process & Thread)  (0) 2019.01.06

+ Recent posts