외규장각 도서 환수 모금 캠페인

Search Results for 'Study'

98 POSTS

  1. 2007.06.13 문자열 비교 - disassemble 2
  2. 2007.06.13 함수 호출과 스택 되돌리기
  3. 2007.06.13 영어 공부 2
  4. 2007.06.12 Obfuscated 악성코드 분석 by 혁민 2
  5. 2007.06.12 배영 - 팔돌리기

문자열 비교 - disassemble

Posted 2007. 6. 13. 16:30, Filed under: Study/Computer Science
// 문자열 비교하는 루틴
00401090                /$  8B4C24 04         MOV ECX,DWORD PTR SS:[ESP+4]
00401094                |.  53                PUSH EBX
00401095                |.  56                PUSH ESI
00401096                |.  8B7424 10         MOV ESI,DWORD PTR SS:[ESP+10]
0040109A                |.  33C0              XOR EAX,EAX
0040109C                |.  2BF1              SUB ESI,ECX                                ;  esi : 비교하려는 두 문자열 사이의 메모리상의 거리

0040109E                |>  8A11              /MOV DL,BYTE PTR DS:[ECX]                  ;  ecx : index
                                                 ---  종료 조건 ---
004010A0                |.  84D2              |TEST DL,DL
004010A2                |.  75 06             |JNZ SHORT Strcmp.004010AA      
004010A4                |.  803C0E 00         |CMP BYTE PTR DS:[ESI+ECX],0
004010A8                |.  74 17             |JE SHORT Strcmp.004010C1
                                      --------------------

004010AA                |>  8A1C0E            |MOV BL,BYTE PTR DS:[ESI+ECX]
004010AD                |.  3AD3              |CMP DL,BL                                 ;  문자 비교
004010AF                |.  7F 05             |JG SHORT Strcmp.004010B6
004010B1                |.  7C 0B             |JL SHORT Strcmp.004010BE
004010B3                |.  41                |INC ECX                                   ;  인덱스 증가
004010B4                |.^ EB E8             \JMP SHORT Strcmp.0040109E
004010B6                |>  5E                POP ESI
004010B7                |.  B8 01000000       MOV EAX,1
004010BC                |.  5B                POP EBX
004010BD                |.  C3                RETN
004010BE                |>  83C8 FF           OR EAX,FFFFFFFF
004010C1                |>  5E                POP ESI
004010C2                |.  5B                POP EBX
004010C3                \.  C3                RETN

ecx : 비교하려는 문자열 중에 하나의 시작 주소를 저장
esi :  비교하려는 두 문자열의 주소값의 차이

이렇게 해놓고 ecx를 증가시키면서 [ecx], [ecx+esi] 의 값을 비교.
아스키 문자열 비교를 위해 DL 레지스터를 사용하여 하위 8비트 값만 사용.

---

악성 코드에서 문자열 비교 루틴을 많이 사용하길래
공부 삼아 한번 해봤는데..;
이건 뭐 구현 언어나 방법에 따라 그 때 그 때 다르니까 크게 소용이 없을 수도 있겠다 ;

언제쯤 제대로 한번 해볼라나 ㅋ

Response : ,

함수 호출과 스택 되돌리기

Posted 2007. 6. 13. 15:19, Filed under: Study/Computer Science
// main 함수 내에서 printf 와 scanf 호출
00401006                |.  68 48804000       PUSH Strcmp.00408048                       ;  ASCII "first string: "
0040100B                |.  E8 D7000000       CALL Strcmp.004010E7          
00401010                |.  83C4 04           ADD ESP,4
00401013                |.  8D4424 00         LEA EAX,DWORD PTR SS:[ESP]
00401017                |.  50                PUSH EAX
00401018                |.  68 44804000       PUSH Strcmp.00408044           ;  ASCII "%s"
0040101D                |.  E8 AE000000       CALL Strcmp.004010D0
00401022                |.  83C4 08           ADD ESP,8
00401025                |.  68 34804000       PUSH Strcmp.00408034                       ;  ASCII "second string: "
0040102A                |.  E8 B8000000       CALL Strcmp.004010E7
0040102F                |.  83C4 04           ADD ESP,4

C 스타일의 함수( __ cdecl )  호출 시 스택은 호출한 쪽에서 되돌려주며 이를 위해 ESP 레지스터에 ADD 연산을 수행한다.

// CopyFile API
77E5E4C1 >  55              PUSH    EBP
77E5E4C2    8BEC            MOV     EBP, ESP
77E5E4C4    51              PUSH    ECX
77E5E4C5    51              PUSH    ECX
77E5E4C6    56              PUSH    ESI
77E5E4C7    FF75 08         PUSH    DWORD PTR SS:[EBP+8]
77E5E4CA    E8 D2680000     CALL    KERNEL32.77E64DA1
77E5E4CF    8BF0            MOV     ESI, EAX
77E5E4D1    85F6            TEST    ESI, ESI
77E5E4D3    0F84 B0240200   JE      KERNEL32.77E80989
77E5E4D9    FF75 0C         PUSH    DWORD PTR SS:[EBP+C]
77E5E4DC    8D45 F8         LEA     EAX, DWORD PTR SS:[EBP-8]
77E5E4DF    50              PUSH    EAX
77E5E4E0    E8 C5A20000     CALL    KERNEL32.77E687AA
77E5E4E5    85C0            TEST    EAX, EAX
77E5E4E7    0F84 9C240200   JE      KERNEL32.77E80989
77E5E4ED    33C0            XOR     EAX, EAX
77E5E4EF    3945 10         CMP     DWORD PTR SS:[EBP+10], EAX
77E5E4F2    0F95C0          SETNE   AL
77E5E4F5    50              PUSH    EAX
77E5E4F6    6A 00           PUSH    0
77E5E4F8    6A 00           PUSH    0
77E5E4FA    6A 00           PUSH    0
77E5E4FC    FF75 FC         PUSH    DWORD PTR SS:[EBP-4]
77E5E4FF    FF76 04         PUSH    DWORD PTR DS:[ESI+4]
77E5E502    E8 BFB4FFFF     CALL    KERNEL32.CopyFileExW
77E5E507    8BF0            MOV     ESI, EAX
77E5E509    8D45 F8         LEA     EAX, DWORD PTR SS:[EBP-8]
77E5E50C    50              PUSH    EAX
77E5E50D    FF15 6810E577   CALL    DWORD PTR DS:[<&NTDLL.RtlFreeUni>; ntdll.RtlFreeUnicodeString
77E5E513    8BC6            MOV     EAX, ESI
77E5E515    5E              POP     ESI
77E5E516    C9              LEAVE
77E5E517    C2 0C00         RETN    0C

Windows API는 함수 호출 방식을 파스칼 방식으로 채택하여  VC++ 에서 스택 push 방식을 파스칼 방식으로 통일 - 호출된 쪽에서 스택을 정리(ret 사용)

 ret : 주어진 바이트 수만큼 스택 포인터를 감소시킨후 해당 함수로부터 리턴
Response : ,

영어 공부

Posted 2007. 6. 13. 09:50, Filed under: Study/English
해커스

LC

assortment : 모음
get well card : 병문안 카드
allergic : 알러지가 있는

Women like receiving candy or chocolate

RC

opulent : 호화로운
entourage : 측근

AM7

It is no use _______ to fix the computer now because the repariman will be arriving shortly

trying  - it is no use ~ing

I was taken aback by [the ______ of the crowd] [when i announced i was quitting]

A) reaction: 반응                       b) reception: 환영
c) repression: 진압, 억제           d) repudiation: 거절, 부인

be taken aback 크게 놀란
Response : ,

Obfuscated 악성코드 분석 by 혁민

Posted 2007. 6. 12. 09:54, Filed under: Study/Computer Science
같이 회사에서 인턴으로 일하고 있는 혁민이가 우리가 놀고 있는동안 열심히 일한 내용 ㅋ
나도 이런 멋진 걸 하고 싶지만 -_- 걍 혼자 놀고 있었다..;;

출처는 혁민이의 블로그

Obfuscated 프로그램이란...

디스어셈블을 통한 분석을 어렵고 혼란스럽게 하기 위해서 여러가지 방법으로
코드를 어지럽혀 놓은것을 말한다.
Obfuscate 툴을 이용해서 코드를 난잡하게 여러개 생성하여
비슷한 껍데기로 알맹이를 감싸면, 언뜻 껍데기만 보기엔 디스어셈블링해 보았을때
같은 프로그램처럼 보이지만 완전히 다른 알맹이를 가지고 있을수도 있고,
같은 알맹이를 가지고 있지만 다른 껍데기가 씌워져 있어서
다른 프로그램처럼 인식할 수 있다.

악용하면 똑같은 악성코드 여러개를 복사해서 각각 Obfuscated툴로
난잡화(?) 시켜놓으면 AntiVirus 프로그램 입장에선 하나의 악성코드가
2000개의 다른 악성코드로도, 3000개의 다른악성코드로도
보일 수 있게 된다.
또는 다른 악성코드들을 비슷한 껍데기로 감싸서 같은 악성코드의
변형처럼 보이도록 할 수도 있다.

그래서 이런 눈속임(?)에 당하지 않기 위해서 이 난잡한 악성코드의
패턴을 찾아내서 패턴을 비교해 보는 방법으로 싸그리 진단을 하고자 하는
프로젝트가 진행되었고..

6월 들어오면서 내 주업무가 된 작업이 그 프로젝트가 되었다.
이 Obfuscated 악성코드의 일관된 패턴을 찾는것과 찾은 패턴을
이용해서 진단할 수 있도록 스캐너를 제작하여 진단률과
오진여부를 체크하는 것이었다.

설명을 엄청 어렵게 했는데... -_-;; 어쨌든 요 며칠사이 나는 아래와 같은 일을 했다.


패턴분석을 위해 2~3일은 하루종일 툴만 제작했고 남은 기간은

1. 디스어셈블한 어셈코드로 패턴 분석 및 주요시그니쳐 뽑아내기
2. 분석한 자료로 스캐너 제작
3. if 진단 안되는 샘플 생기면 안되는 샘플을 가지고 다시 1번으로.. -_-;;
4. 정상샘플로 오진이 나는지 검사
5. if 오진이 있을경우 다시 1번으로 -_-;;

이런짓과

타사 AntiVirus 프로그램이 Obfuscated를 어떻게 진단하는지 진단법을 알아내기 위해

1. 디스어셈블한 어셈코드로 패턴 분석 및 주요시그니쳐 뽑아내기
2. 타사에서 이용했는지 샘플을 만들어서 체크하기.
3. if, 만든 샘플을 타사 AntiVirus프로그램이 진단하면 성공! else goto 1번-_-;;

이런짓을 반복했다.

그 결과..... 드디어 오늘 빛을 보게 되었다...^_^ㅋㅋㅋㅋㅋㅋㅋㅋ
찾아낸 패턴으로 만든 스캐너는 현재까지 발견된 어떠한 변형 샘플도 모두
찾아내었고, 타사 AntiVirus 프로그램이 어떻게 진단하는지 진단법을
발견해 내었다... (만세.. ㅠㅠ)

자세한 내용도 함께 포스팅 하고 싶지만.. 회사에서 했던 일들에 대한 자료는
공개할 수 없는 관계로 이만....
Response : ,

배영 - 팔돌리기

Posted 2007. 6. 12. 00:05, Filed under: Study/Swim

오랜만에 수영을 하러 갔는데.. 자유영 호흡도 그렇다 치고 배영 팔돌리기가 너무 안된다.ㅠ

머리위로 팔을 들어서 뒤로 넘기면서 머리 뒷쪽의 물을 앞으로 끌어온다.
이 때 팔을 너무 옆으로 하면 안된다. 라고 강사 쌤이 이야기 해주셨는데

일단 팔을 들면서 내 팔에서 떨어진 물이 내 코랑 입으로 다 떨어진다 -_-
죽을꺼 같다 진짜 ;
그리고 팔을 뒤로 넘긴담에 다시 리커버리 하는 동작이 뭔가 부자연스럽고..
팔을 당겨서 몸에 붙일 때 마다 몸이 휘청휘청 기울어진다 (이걸 롤링 이라고 하는건가보다)
이게 굉장히 당황스럽고 이때 발차기가 제대로 안되서 가라앉게 된다.

http://www.finflier.com/back_str/middle.htm

요 사이트에 보니까 각 동작들이 그림과 함께 잘 나와있다.
팔이 완전히 뒤로 넘어가서 앞으로 물을 당겨 올 수는 없으니까 ( 배영의 자세 특성상)
롤링을 이용해서 사이트 스트로크를 하라는게 포인트 인가보다.

배영의 킥

배영의 킥에서는 골반 동작이 중요한 역할을 한다.

차올리기 전에는 반드시 그 쪽으로 골반이 올라간다. 당연히 그때 반대쪽의 차 내리기 골반은 내려가는데, 차올리는 쪽은 마지막에 강한 펴기를 완료한 때는 골반이 내려가 그 파워를 돕고 있다.
 
차 내리기의 경우는 크롤과 같이(크롤의 경우는 차올리기) 골반방향과 다리 방향이 일치하는데, 차올리기(크롤의 경우는 차 내리기)에 들어가기 직전에 골반은 반대방향으로 회전한다.
 
이것은 이전부터 말해왔듯이, "허리부터 들어가는 차올리기"가 일류선수가 되는데 필수조건이었으며, 때로는 그 시점에서 행해지는 엉덩이 아래쪽에서의 푸시를 쉽게 한다. 또 이 차기법은 엉덩이 위쪽의 홈에서 일어나는 물 저항을 제거하는데 도움이 되는 듯 하다. 이 골반 동작이 없으면 허리가 잘 펴지는 자세를 얻을 수 없다.
 
이 "허리부터 들어가는 킥"은 사이드 킥에서는 더욱 중요하다. 사이드 킥에서는 그저 골반이 옆을 향하고 있을 뿐만 아니라, 그 상태에서 골반이 미묘하게 다리 동작을 리드하고 있는 것이다. 이것이 하반신의 끌어당김을 없애는데 효과적인 동작을 한다. 만일 골반의 리드가 없으면, 무릎의 구부렸다 펴기의 킥이 되면 오히려 허리부터 아래의 난류를 만들지도 모른다.

사이트 스트로크

 킥이 손을 사용하는 수영보다 빨랐던 것은 손의 추진파워가 팔 동작에 의한 저항을 웃돌 수 없었기 때문이다. 그 원인은 손 스트로크를 몸 밑에서가 아니라 옆에서 하기 때문이다.
 
    옆쪽으로 힘이 들어가기 때문에 롤링으로 몸을 옆으로 하면 같은 힘을 몸 아래에서도 얻을 수 있다. 수면 위의 팔 동작을 그리고 있지 않은 것은, 물위의 팔 동작은 제 2의 동작인 것으로 롤링에 의한 수중 스트로크(물 속에서 몸 아래를 젓는)가 안되면 수면 위에서의 팔 동작도 못하기 때문이다.

사이드 킥

 롤링이 큰 배영은 사이드 킥이 중요한 역할을 하지만, 그것은 결코 연속한 사이드 킥이 아니다. 플랫(Flat)에서 사이드(Side)로 변하면서 소위 골반을 중심으로 한 롤링 킥이다.

연습 연습!!

Response : ,

« Previous : 1 : ··· : 9 : 10 : 11 : 12 : 13 : 14 : 15 : ··· : 20 : Next »

Recent Posts

Recent Comments

Recent Trackbacks

Total hit (Today , Yesterday )

Admin Write Post