posted by 블르샤이닝 2014. 4. 30. 01:26
728x90

아놔 미친중국애들;;;;ㅠ 뱅커하나에 무슨 파일바이러스 로직으로 넣는다냐;;


파일 랜덤; 디렉토리 랜덤;;파일 헤더 랜덤;; 쓰레키 코드로 사이즈 크기 랜덤;; 그나마 다행인건 아직 잡을 수 있는 공통된 부분이 있다는점....레지스트리값 및 특정 바이너리값 공통된 부분...우선 내일 로직으로 만들어봐야하겠다. 후후.. 방패는 약하지않아요~


------------------------------------------------------


헤더 및 쓰레기 코드만 덫붙임...치료로직 간단. 그냥 중간 몸체 부분 crc값으로 삭제하면 모두 삭제 

가능...확인 후 그냥 패스 

728x90
posted by 블르샤이닝 2014. 4. 26. 10:50
728x90

해외에서 접수된 packer mpress로 팩킹된것으로 해외자료를 토대로 unpacking을 시도 중이다. 

 

 

 

 해당파일을 처음에 올리에 올리게되면 다음과 같은 바이너리가 존재한다. 처음 시작부분은 PUSHAD로 시작되며 다음 코드로 CALL이 존재하고 있다.

 

여기서 우리는 COMMAND 명령으로 BP를 건다.

 

bp VirtualProtect

 

해당 BP에 BREAK가 걸리면 다음과 같은 바이너리가 존재하는것을 확인 할 수 있다.

7C801AD4 >  8BFF             MOV     EDI, EDI                         ; NoStealt.0040015F
7C801AD6    55                  PUSH    EBP
7C801AD7    8BEC             MOV     EBP, ESP
7C801AD9    FF75 14          PUSH    DWORD PTR SS:[EBP+14]
7C801ADC    FF75 10         PUSH    DWORD PTR SS:[EBP+10]
7C801ADF    FF75 0C         PUSH    DWORD PTR SS:[EBP+C]
7C801AE2    FF75 08          PUSH    DWORD PTR SS:[EBP+8]
7C801AE5    6A FF            PUSH    -1
7C801AE7    E8 75FFFFFF  CALL    VirtualProtectEx
7C801AEC    5D                POP     EBP                              ; NoStealt.004076F3
7C801AED    C2 1000         RETN    10

 

해당 바이너리에서 RETN 10을 통해 본래 코드로 돌아오게 되면 스크롤을 밑으로 내려가면서 특정 바이너리를 찾아야 한다. 거진 맨 밑 부분의 코드 부분에 다음과 같은 바이너리들이 존재하는것을 확인 할 수 있다.

 

0040774D    E8 00000000         CALL    00407752
00407752    5F                       POP     EDI                              ; NoStealt.0040015F
00407753    81C7 EEFEFFFF   ADD     EDI, -112
00407759    B0 E9                   MOV     AL, 0E9
0040775B    AA                      STOS    BYTE PTR ES:[EDI]
0040775C    B8 1E010000         MOV     EAX, 11E
00407761    AB                      STOS    DWORD PTR ES:[EDI]
00407762    61                       POPAD
00407763  ^ E9 8D9AFFFF       JMP     004011F5

 

해당 바이너리는 OEP로 가기위한 JMP가 존재하며 JMP로 가면 OEP가 존재한다고 되어있는데...!!! 내가 보는건 OEP가 아니였다; 그래서 아직 진행중이다...ㅠㅠ

 

참조 사이트 : http://blog.kaffenews.com/2011/02/09/freeware-packers-mpress-part1/

---------------------------------------------------------------------------------

 

위에 글이 매우 써보니 길다...간단하게 확인하는 법

 

맨 아래 부분에서 이 바이너리를 찾으면 된다. 끝

 

00407762    61                       POPAD
00407763  ^ E9 8D9AFFFF       JMP     004011F5

 

728x90
posted by 블르샤이닝 2014. 4. 24. 10:07
728x90

생각보다 usb나 원격을 작업할때 포터블 하나로 편하게 볼수있다. ~ㅎㅎㅎ 쓰는툴은 하나씩 올려야지...시간나면....


 n드라이브 30일 공유일겁니다~


http://me2.do/5dDprEoF

728x90

'리버싱 > ' 카테고리의 다른 글

SSDEEP - 해쉬 유사도 비교 툴  (0) 2015.09.04
한글 문서 분석할때 유용한 툴  (0) 2015.06.23
쉘코드 분석 툴  (0) 2014.10.22
64비트 올리디버거  (0) 2013.11.20
XueTr툴  (0) 2011.08.05
posted by 블르샤이닝 2014. 4. 21. 19:08
728x90

vb를 분석할때 방법.

 

DllFunctionCall 주소에서 함수마다 호출되는거 찾아들어가게되면 해당 파일에서 쓰이는 라이브러리 및 내용들을 확인할 수 있다.

 밑에 그림처럼 00401250에서 올리로 해당 부분에 bp걸고 간다음 분석을 진행하면 된다.

 

 

728x90
posted by 블르샤이닝 2014. 4. 17. 11:27
728x90

악성코드에서 자신의 프로세스를 관리자의 권한으로 상승시키기위해 쓰이는 코드로 생각되며, 해당 api 쪽에서 CreateWellKnownSid, EqualSid 두가지 함수를 잘 봐야할것같다...사실 잘 모르는 함수;;ㅎㅎ 이 두개 머지..ㄷㄷ 하며 검색

 

 

아래 다음과 같은 내용을 참조하여 추측한다.

(참조 url : http://ddiggam.tistory.com/130)

 

-----------------------------------------------------------------------------------------

 

다음 내용은 윈도우즈 환경에서 "권한상승의 형태와 관리자 권한으로 수행되었는지의 여부를 확인하는 방법"에 대해서 설명하고 있습니다.

#include <stdio.h>
#include <windows.h>
#include <shlobj.h>                  // for IsUserAnAdmin() function.
#pragma comment(lib, "shell32.lib")  // for IsUserAnAdmin() function.

BOOL GetProcessElevation(TOKEN_ELEVATION_TYPE *pElevationType, BOOL *pIsAdmin)
{
    HANDLE hToken = NULL;
    BOOL bResult = FALSE;
    DWORD dwSize = 0;

    // 현재 프로세스의 토큰을 얻는다.
    if ( !OpenProcessToken(GetCurrentProcess(), TOKEN_QUERY, &hToken) )
        return FALSE;

    // 권한상승 형태에 대한 정보를 얻는다.
    if ( GetTokenInformation(hToken, TokenElevationType, pElevationType, sizeof(TOKEN_ELEVATION_TYPE), &dwSize) )
    {
        BYTE adminSID[SECURITY_MAX_SID_SIZE];
        dwSize = sizeof(adminSID);
        
        // 관리자 그룹의 SID 값을 생성한다.
        CreateWellKnownSid(WinBuiltinAdministratorsSid, NULL, &adminSID, &dwSize);

        if ( *pElevationType == TokenElevationTypeLimited )
        {
            HANDLE hUnfilteredToken = NULL;
            
            // 연결된 토큰의 핸들을 얻는다.
            GetTokenInformation(hToken, TokenLinkedToken, (void *)&hUnfilteredToken, sizeof(HANDLE), &dwSize);

            // 원래의 토큰이 관리자의 SID를 포함하고 있는지 여부를 확인한다.
            if ( CheckTokenMembership(hUnfilteredToken, &adminSID, pIsAdmin) )
                bResult = TRUE;
            
            CloseHandle(hUnfilteredToken);
        }
        else
        {
            *pIsAdmin = IsUserAnAdmin();
            bResult = TRUE;
        }
    }

    CloseHandle(hToken);
    return bResult;
}

int main(int argc, char **argv)
{
    TOKEN_ELEVATION_TYPE t;
    BOOL bAdmin = FALSE;
    char szUser[0xFF] = {0};
    DWORD dwUser = _countof(szUser);
    GetUserName(szUser, &dwUser);

    if ( GetProcessElevation(&t, &bAdmin) )
    {
        if ( bAdmin )
            printf("%s is admin, ", szUser);
        else
            printf("%s is not admin, ", szUser);

        switch (t)
        {
        case TokenElevationTypeDefault:
            printf("기본 사용자이거나, UAC 기능이 OFF 된 상태임.\n");
            break;
        case TokenElevationTypeFull:
            printf("권한상승되었음\n");
            break;
        case TokenElevationTypeLimited:
            printf("필터된 토큰에 의해 제한된 권한으로 수행되었음.\n");
            break;
        default:
            break;
        }
    }

    return 0;
}


 

728x90

'리버싱' 카테고리의 다른 글

[진행중]MPRESS unpacking  (0) 2014.04.26
vb 분석할때 방법  (0) 2014.04.21
가상머신인지 확인하는 어셈코드  (0) 2014.04.07
PEcompect 언팩킹  (0) 2014.03.27
ASPACK 언팩  (0) 2014.03.24
posted by 블르샤이닝 2014. 4. 7. 14:01
728x90

감염된 pc가 가상머신인지 실pc인지 확인할때 쓰는 방법중 하나로

 

cpuid를 가져와 그값에 and연산을 한다.

 

 

 

참조 글

http://isc.sans.edu/diary/When+the+FakeAV+coder(s)+fail/11260

 

cpuid에 대한 정보

http://www.flounder.com/cpuid_explorer2.htm

(이놈은 좀 많이 어렵;;;)

728x90

'리버싱' 카테고리의 다른 글

vb 분석할때 방법  (0) 2014.04.21
관리자 그룹으로 권한 상승위함 코드(CreateWellKnownSid, EqualSid )  (0) 2014.04.17
PEcompect 언팩킹  (0) 2014.03.27
ASPACK 언팩  (0) 2014.03.24
thmida 2.xx 버젼 언팩 튜토리얼  (0) 2014.02.04
posted by 블르샤이닝 2014. 3. 27. 14:51
728x90

간단하다....매우 간단하다...하지만 요즘 기억력이 좋지않은 관계로 걍 정리해둔다.

 

1. 처음 파일을 올리에 올리면 ep부분에 다음과 같을것이다.

   mov     eax, xxxxxxxxx  (oep의 위치를 스택에 저장하기 위해 쓰이는 것이다. xxxxxxxx가 oep가 된다

   push    eax

 

 

2. xxxxxxxx를 위에 올리에서 보이는 주소로 하면 잘 안보여도 00cf9518이다. 이주소로 예를 들겠다.

  해당 주소에 그냥 bp를 건다. 걍 f2

 

3. 그리고 run시키면 jmp가 아래에 보일것이다. 걍 근처에서 쭉 살펴보면 특정 바이너리 어셈코드가 있다.

 JMP     EAX

 

 

해당 어셈명령어는 거의 밑에쯤에 있다 뒤에보면 00이 줄기차게 있는것을 알수있다.(아닌경우도 있다ㅎ)

 

JMP EAX는 해당 OEP로 이동을 뜻한다.

 

여기서 조금 더 설명하면 POP EDX, POP, ESI, EDI 등 모든 레지스터들을 POP 해주는데 이것은 팩킹에서 주로 쓰이는 방법으로 저장되었던 레지스트리들을 가져오는것이다.

설명을 잘 못하니 해당부분은 PUSHAD ~ POPAD 부분에 대해 검색해서 찾아보면 이해될것이다.

 

이상 끝~~~~~~~~(IAT 복원은 심슨 아저씨 툴로 하면되고, 그부분은 요즘 설명잘된 블로그가 많으니 참고 하시면되요 ㅋ)

 

(오타나 태클부분 환영합니다. 잘못된 점 가르쳐 주시면 좋은 배움이 됩니다. )

 

728x90