HighCode

블로그 이미지

프알못

모두를 위한 프로그래밍, 보안, IT 정보

'분류 전체보기'에 해당되는 글 28건

제목 날짜
  • [CrackMe] Delphi CrackMe #1(2) 2016.10.01
  • 서핑보드 타다가 봉변.. 2016.09.27
  • 프알못을 위한 Java 04. 조건문 if 와 switch 2016.09.27
  • [TIP] 정규표현식(Pattern Matching) 완전 정리!(6) 2016.09.22
  • [TIP] 두 날짜 사이의 차이 계산하기(1) 2016.09.21
  • 프알못을 위한 Java - 02. 문자열 출력 2016.09.04
  • 프알못을 위한 Java - 01. 프로젝트,클래스 생성 2016.09.04
  • 1. Python 시작하기 - 기본 1 - 2016.03.03

[CrackMe] Delphi CrackMe #1

UnderCode/Cracking 2016. 10. 1. 20:53

오랜만에 크래킹 연습을 위해 외국사이트에서 CrackMe를 하나 찾았네요..

한번도 시도 안해본 Delphi 로 짜여진 CrackMe 로 오래만에 크랙해보겠습니다.


[Description]

[파일] Volty's Delphi Crackme #1

[유형] key 찾기

[제작언어] Delphi

[난이도] 2




오늘 크랙할 프로그램입니다. 


많이본 CrackMe와 같은구조로 적절한 코드를 입력하고 아니면 아예 분기를 싹 다 통과로 바꾸던가... 버튼을 누르면 통과되는 프로그램입니다.

테스트로 아무 코드나 넣고 버튼을 눌러보겠습니다.



이렇게 아무렇게나 입력을 하고... Autheenticate 버튼을 누르면...



"아무 일도 일어나지 않았다."



제작자가 틀린코드는 아무것도 뜨지 않도록 해놨네요... 보통 틀렸을때 뜨는 메세지가 있을경우 string 값을 찾아서 쉽게 코드를 찾을 수 있는데 아쉽네요.


그럼 바로 ollydbg를 꺼내들고 크랙해보겠습니다.



▲ ollydbg로 열어본 해당 파일




우선 가장 만만한... string 파일을 뒤져보겠습니다. All referenced text string 을 들어가서 찾아보죠




바.로.발.견


다행히(?) 만만한 string 값 찾기로 바로 코드 오프셋을 알 수 있었습니다.

이제 해당 오프셋에 적절하게 breakpoint를 걸고 실행하면 되겠네요.





문자열 출력을 위해 파라메터를 준비하는 부분으로 예상할 수 있습니다.

이프로그램에서는 아예 틀린 값인경우 이 부분으로 넘어오지도 않습니다.



이 부분을 찾은것만으로는 해결 불가능하니 입력값을 받아서 키 값과 대조하는 부분을 찾아보죠



ㅋㅋ 간단하게 완료..!


한 opcode 씩 실행시켜서 키 값과 입력값이 일치하면 넘겨주는 부분을 찾으면 끝이겠네요


00537388     8B45 FC                 MOV EAX,DWORD PTR SS:[EBP-4]


해당 코드를 실행했을 경우 레지스터 결과



EAX 보시면 제가 테스트로 적은 코드값이 들어가 있네요 감이온다 감이...



0053738B     8B15 38E75400           MOV EDX,DWORD PTR DS:[54E738]


다음 라인. 54E738 ... Data Stack 을 바로 확인해보니 7DDE7C 라는 값 발견.

이걸 다시 타고 메모리 스택을 확인하니 ...



코드 중간 중간 보이던 유니코드 값들이 합쳐져있는게 보이네요. 아마도 이게 우리가 찾던... ㅎㅎ

쭉쭉 내려서 코드를 실행하다 보면


00537391    E8 CA06EDFF                   CALL Crack_Au.00407A60

00537396    75 23                             JNZ SHORT Crack_Au.005373BB

00537398    C705 50E75400 60EA000    MOV DWORD PTR DS:[54E750],0EA60

005373A2    C705 48E75400 2515030    MOV DWORD PTR DS:[54E748],31525

005373AC    C705 4CE75400 0000000    MOV DWORD PTR DS:[54E74C],0

005373B6    E8 99FEFFFF                     CALL Crack_Au.00537254

005373BB    33C0                              XOR EAX,EAX


값의 동일을 확인한후 분기하는 부분입니다. 여기를 손봐주면 이건 끝이네요




크랙완료



그럼 이제 키 값을 제 마음대로 바꿔보겠습니다.



제 블로그로 키값 변경





잘되네요!




크래킹, CrackMe, 델파이 크랙, 크랙하는법, 리버싱, 크래킹 하는법, 해킹


저작자표시비영리동일조건

'UnderCode > Cracking' 카테고리의 다른 글

[CrackMe] CrackR's KrakkRSR  (0) 2016.10.01
[CrackMe] Delphi CrackMe #1  (2) 2016.10.01
Posted by 프알못
리버싱, 크랙
  • ㅁㅁ
    2016.10.02 10:50

    어셈블리어 어디서 공부하셨나요??

  • craz_box
    2019.08.17 22:43 신고

    델파이개발하나요? 아니면 델파이리버싱만 하나요

트랙백

※ 스팸 트랙백 차단중 ...{ ? }

서핑보드 타다가 봉변..

잼잼 2016. 9. 27. 17:35


상어...

저작자표시비영리동일조건

'잼잼' 카테고리의 다른 글

서핑보드 타다가 봉변..  (0) 2016.09.27
Posted by 프알못

트랙백

※ 스팸 트랙백 차단중 ...{ ? }

프알못을 위한 Java 04. 조건문 if 와 switch

HighCode/Java 2016. 9. 27. 16:43

오늘은 if와 for문을 알아봅시다


조건문 if 


어디에 왜 쓰이나?


프로그램을 제작하다보면 특정 조건에서만 동작하게 하고픈 로직이 분명 존재하게 됩니다.

사용자 입력값에 따라 다른 값을 넘겨준다던가 할때 유용하게 사용할 수 있겠죠?


if 사용법


1
2
3
4
5
6
7
int var = 3;
 
if(var==3) // 조건문 if. 여기서는 var이 3이면 조건식을 만족한다.
    {
        // 조건식이 만족하면 실행되는 
        System.out.println("I'm "+ var);
    }

cs


3행에서 if문을 써서 조건을 확인하고 있습니다. 여기서는 var이 3일때를 조건으로 놓고 만족한다면 if 내부의 루틴을 실행하게 됩니다.

만약 만족하지 않는다면 if내부의 코드는 실행되지 않습니다.


여러가지 조건을 주기


if문을 통해 여러가지 조건을 충족하도록 조건을 줄 수 있습니다.


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
int var = 3;
 
if(var==3) 
    {
        System.out.println("I'm "+ var);
    }
else if(var==4) // 추가적인 조건
    {
        System.out.println(" I'm not executable :< ");
    }
else if(var==5)
    {
        System.out.println("blah blah");
    }
else // 아무 조건도 충족 못한다면?
    System.out.println("Fully not matched!");
cs


새로운 키워드가 등장했습니다. else if 와 else.


if else


if문으로 조건을 주고 그 외의 조건을 더 주고 싶다면 if else를 통해 조건을 주면 되겠습니다.

예제에서는 if문 외의 조건을 추가적으로 else if를 통해 2개 더 주고 있습니다.


else


else문은 만약 위 조건식이 모두 충족하지 않을 경우 실행되는 조건입니다. var이 3,4,5 중 하나도 충족하지 않는다면 else문 내의 코드가 실행될것입니다.



if문 내의 if?


if문 내에 if문을 추가적으로 사용할 수 있습니다.


1
2
3
4
5
6
7
8
9
10
int var = 3;
int var2 = 4;
 
if(var==3) 
    {
        if(var2==4) // 이중 if
            {
                System.out.println("var2: "+var2);
            }
    }

cs


if문을 2중으로 사용해서 이런식으로 조건을 줄 수 있습니다. var이 3일경우 처음 조건이 실행되며, 그다음 var2 4일 경우에만 8행의 출력문이 실행되게 됩니다.



if문을 이런식으로 다중으로 사용할 수 있지만 꼭 필요한 경우가 아니라면 이런 방식은 지양하고 코드를 작성하셔야 합니다.

위의 코드라면 이렇게 개선해볼 수 있겠죠?


1
2
3
4
5
6
7
int var = 3;
int var2 = 4;
 
if(var==3 && var2==4) 
    {
        System.out.println("I definitely agree what var is three and var2 is four.");
    }

cs


if문 처음에 조건을 다중으로 주는 방법으로 다중 if문을 회피할 수도 있습니다.

다중if문은 꼭 필요한 경우에만!




조건문 switch


또다른 조건문 switch 입니다.


사용하는이유는 if와 마찬가지로 특정코드실행에 조건을 주기 위함입니다.



swtich 문 사용법 - 예제1


1
2
3
4
5
6
7
8
int var = 3;
 
swtich(var)
{
    case 1: System.out.println(var); break;
    case 2: System.out.println(var); break;
    case 3: System.out.println(var); break;
}

cs


switch 외에 생소한 키워드 case와 break 가 보이는군요.


먼저 switch문의 괄호안에 확인할 타깃을 넣어주세요. -> switch(타깃)

예제에서는 타겟으로 var을 사용하고 있습니다.

그다음 switch문 안에 case라는 키워드를 이용해서 검사할 조건을 넣어주시면 됩니다.


5

6

7
// 타겟이 1일경우
case 1: System.out.println(var); break;
// 타겟이 2일경우
case 2: System.out.println(var); break;
// 타겟이 3일경우
case 3: System.out.println(var); break;
cs


case <조건> : <조건이 만족할때의 실행할 코드> 이런식으로 써주시면 됩니다.


예제에서는 var은 3이니까 case 3 조건을 만족 합니다.


break는 각 조건식마다 맨 마지막에 적어주는 키워드로 현재 진행중인 switch문을 종료합니다.

종료를 시키지 않으면 다른 case문도 조건을 무시하고 실행시키므로 조심하셔야 해요.



나쁜 코드 - 예제 2


1
2
3
4
5
6
7
8
int num = 1;
 
switch(num)
{
    case 1: System.out.println("1만 나오겠지?");
    case 3: System.out.println("이건 실행 안될거야");
    case 5: System.out.println("ㅎㅎㅎㅎ");
}

cs


break문을 쓰지 않은 switch ~ case문 입니다.


[예제 2 실행결과]


1만 나오겠지?

이건 실행 안될거야

ㅎㅎㅎㅎ


break가 없으면 이런 참사가 일어나니 종료시점에서 꼭 써주세요.



if에는 else가 있다면 switch에는? - 예제 3


1
2
3
4
5
6
7
8
9
int num = 10;
 
switch(num)
{
    case 1: System.out.println("1"); break;
    case 2: System.out.println("2"); break;
    case 3: System.out.println("3"); break;
    default: System.out.println(num); break;
}

cs


switch문에도 if의 else 처럼 모든 조건을 충족하지 않으면 실행하는 default 문이 있습니다.

이 예제에서는 num은 조건식을 만족하지 못하므로 default가 실행이 될겁니다.




예제4


1
2
3
4
5
6
7
8
String s = "A";
 
switch(s)
{
    case "A": System.out.println(s); break;
    case "B": System.out.println(s); break;
    case "C": System.out.println(s); break;
}

cs


이렇게 문자열이 타겟이더라도 잘 돌아갑니다.



예제5


1
2
3
4
5
6
7
8
String s = "가나";
 
switch(s)
{
    case "가": System.out.println(s); break;
    case "가나": System.out.println(s); break;
    case "가나다": System.out.println(s); break;
}

cs


유니코드문자도 사용가능!


예제6 - 좋은 가독성


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int num = 10;
 
switch(num)
{
    case 1: 
        System.out.println("1");
        break;
    case 2: 
        System.out.println("2");
        break;
    case 3: 
        System.out.println("3");
        break;
    default: 
        System.out.println(num);
        break;
}
cs




저작자표시비영리동일조건

'HighCode > Java' 카테고리의 다른 글

[JSTL] Map에 있는 elements들을 원하는 순서대로 출력  (0) 2016.12.21
[Spring] Restful한 스프링 @ResponseBody vs @RestController  (1) 2016.12.21
프알못을 위한 Java 04. 조건문 if 와 switch  (0) 2016.09.27
[TIP] 정규표현식(Pattern Matching) 완전 정리!  (6) 2016.09.22
[TIP] 두 날짜 사이의 차이 계산하기  (1) 2016.09.21
프알못을 위한 Java - 02. 문자열 출력  (0) 2016.09.04
Posted by 프알못

트랙백

※ 스팸 트랙백 차단중 ...{ ? }

[TIP] 정규표현식(Pattern Matching) 완전 정리!

HighCode/Java 2016. 9. 22. 17:48

오늘은 자바에서 지원하는 정규표현식을 이용해서 사용자가 설계된 원하는 값만 입력할 수 있도록 코드를 짜보겠습니다.


먼저 예제를 보여드린 뒤 자세히 알아보아요


예제1) 숫자만 허용


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
import java.util.Scanner;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
 
public class OnlyInteger {
    
    public static void main(String[] args) {
        
        Pattern p = Pattern.compile("(^[0-9]*$)");
        
        int onlyNum;
        String inputVal;
        Scanner iStream = new Scanner(System.in);
        
        inputVal = iStream.nextLine();
        Matcher m = p.matcher(inputVal);
        
        if(m.find())
        {
            onlyNum = Integer.parseInt(inputVal);
            System.out.println(onlyNum);
        }
        else
        {
            System.out.println("숫자가 아닌데..?");
        }    
    }
}
Colored by Color Scripter
cs


▲ 사용자 입력값이 숫자인지 검증하는 OnlyInteger Class 입니다.


2
3
import java.util.regex.Matcher;
import java.util.regex.Pattern;
cs


▲ 정규표현식을 사용하기 위해 import해줍니다. 


10
Pattern p = Pattern.compile("(^[0-9]*$)");
cs


▲ 숫자만 허용하는 Pattern p 입니다.


17
Matcher m = p.matcher(inputVal);
cs


▲ inputVal의 값이 저희가 선언한 패턴 p 에 맞는 조건인지 검사해서 m에 저장합니다.


19
if(m.find())
cs


▲ m.find() 는 패턴이 일치하는경우 boolean 형으로 true를 아니면 false를 리턴합니다.


21
onlyNum = Integer.parseInt(inputVal);
cs


▲ inputVal을 int형으로 형변환 해줍니다.



정규표현식 설명


대충 구조는 알았고 그럼 패턴을 만드는 방법을 알아보겠습니다.


10
Pattern p = Pattern.compile("(^[0-9]*$)");
cs


아까 예제1) 에서 사용한 Pattern 을 보면  "(^[0-9]*$)" 이 부분이 바로 패턴 부분입니다.


각각 의미를 알아보면..


표현식

 설명 

 ^

 문자열의 시작

$ 

 문자열의 종료

 .

 임의의 한 문자 (문자의 종류 가리지 않음)

 단, \ 는 넣을 수 없음

 *

 앞 문자가 없을 수도 무한정 많을 수도 있음

+ 

 앞 문자가 하나 이상

? 

 앞 문자가 없거나 하나있음

 []

 문자의 집합이나 범위를 나타내며 두 문자 사이는 - 기호로 범위를 나타낸다. []내에서 ^가 선행하여 존재하면 not 을 나타낸다.

 {}

 횟수 또는 범위를 나타낸다.

 ()

 소괄호 안의 문자를 하나의 문자로 인식 

 |

 패턴 안에서 or 연산을 수행할 때 사용

 \s

 공백 문자

 \S

 공백 문자가 아닌 나머지 문자

 \w

 알파벳이나 숫자

\W 

 알파벳이나 숫자를 제외한 문자

\d 

 숫자 [0-9]와 동일

\D 

 숫자를 제외한 모든 문자

\ 

 정규표현식 역슬래시(\)는 확장 문자
 역슬래시 다음에 일반 문자가 오면 특수문자로 취급하고 역슬래시 다음에 특수문자가 오면 그 문자 자체를 의미

(?i) 

 앞 부분에 (?i) 라는 옵션을 넣어주면 대소문자를 구분하지 않음

▲ 출처 : http://lng1982.tistory.com/141


이렇게 되시겠습니다.


예제의 ^[0-9]*$ 를 분석해보면 


^ 으로 우선 패턴의 시작을 알립니다.

[0-9] 괄호사이에 두 숫자를 넣어 범위를 지정해줄 수 있습니다.

* 를 넣으면 글자 수를 상관하지 않고 검사합니다.

$ 으로 패턴의 종료를 알립니다.


즉 , 0부터 9 까지의 수를 글자 수 제한을 하지 않고 검사하는 패턴입니다.


[자주 쓰이는 패턴]


1) 숫자만 : ^[0-9]*$

2) 영문자만 : ^[a-zA-Z]*$

3) 한글만 : ^[가-힣]*$

4) 영어 & 숫자만 : ^[a-zA-Z0-9]*$

5) E-Mail : ^[a-zA-Z0-9]+@[a-zA-Z0-9]+$

6) 휴대폰 : ^01(?:0|1|[6-9]) - (?:\d{3}|\d{4}) - \d{4}$

7) 일반전화 : ^\d{2,3} - \d{3,4} - \d{4}$

8) 주민등록번호 : \d{6} \- [1-4]\d{6}

9) IP 주소 : ([0-9]{1,3}) \. ([0-9]{1,3}) \. ([0-9]{1,3}) \. ([0-9]{1,3})



예제2) 영어만 허용 (Not Case Sensitive)


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
import java.util.regex.Pattern;
 
public class EngPattern {
    
    public static void main(String[] args) {
        
        String pattern = "^[a-zA-Z]*$";
        String input = "ABzzzDAWRAWR";
        
        
        
        boolean i = Pattern.matches(pattern, input);
        if(i==true)
        {
            System.out.println(input+"는 패턴에 일치함.");
        }
        else
        {
            System.out.println("패턴 일치하지 않음.");
        }
        
        
    }
    
}
 
Colored by Color Scripter
cs


패턴분석


^[a-zA-Z]*$


a-z 까지 그리고 A-Z 까지 즉, 알파벳은 모두 허용.

* 글자 수 상관하지 않음


-> 알파벳이기만 하면 패턴에 맞음.



예제3) 파일 확장자 확인 1


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
package Pattern;
 
import java.util.regex.Pattern;
 
public class ExtendtionPattern {
    
    public static void main(String[] args) {
        
        
        String pattern = "^\\S+.(?i)(txt|pdf|hwp|xls)$";
        String input = "abc.txt";
        
        
        
        boolean i = Pattern.matches(pattern, input);
        if(i==true)
        {
            System.out.println(input+"는 패턴에 일치함.");
        }
        else
        {
            System.out.println("패턴 일치하지 않음.");
        }
    }
 
}
 
Colored by Color Scripter
cs


패턴분석


^\\S+.(?i)(txt|pdf|hwp|xls)$


^ : 시작

\ : \ 가 왔기 때문에 다음에 올 문자는 특수문자로 취급하고 , \다음 특수문자고 오면 그 자체로 취급.

\S : 공백 아닌 문자

+. : .이 반드시 한개는 와야한다.

(?i) : 대소문자 구별하지 않음.

(txt|pdf|hwp|xls) : txt 혹은 pdf 혹은 hwp 혹은 xls 만 허용. | 을 이용한 or 연산!

$ : 끝


-> 공백아닌 문자와 .이 반드시 와야하고 뒤에는 txt, pdf, hwp, xls 만 허용.



예제4) 파일 확장자 1, 2


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
32
33
import java.util.regex.Pattern;
 
public class extensionPattern {
    
    public static void main(String[] args) {
    
        String pattern = "^\\S+.(?i)(txt|pdf|hwp|xls)$";
        String input = "Java.pdf";
        
        String pattern2 = "(.+?)((\\.tar)?\\.gz)$";
        String input2 = "library.tar.gz";
        
        
        vaildPattern(pattern, input);
        vaildPattern(pattern2, input2);    
    }
 
    
    public static void vaildPattern(String pattern, String input)
    {
        boolean i = Pattern.matches(pattern, input);
        
        if(i==true)
        {
            System.out.println(input+"는 패턴에 일치함.");
        }
        else
        {
            System.out.println("패턴 일치하지 않음.");
        }
    }
}
 
Colored by Color Scripter
cs


새로 이중 확장자를 구분하는 표현식을 추가했습니다. 여기서는 tar.gz 인지 구분합니다. 한번 테스트 해보세요



저작자표시비영리동일조건

'HighCode > Java' 카테고리의 다른 글

[Spring] Restful한 스프링 @ResponseBody vs @RestController  (1) 2016.12.21
프알못을 위한 Java 04. 조건문 if 와 switch  (0) 2016.09.27
[TIP] 정규표현식(Pattern Matching) 완전 정리!  (6) 2016.09.22
[TIP] 두 날짜 사이의 차이 계산하기  (1) 2016.09.21
프알못을 위한 Java - 02. 문자열 출력  (0) 2016.09.04
프알못을 위한 Java - 01. 프로젝트,클래스 생성  (0) 2016.09.04
Posted by 프알못
  • 복실이
    2018.07.25 10:42

    좋은 내용 감사합니다. 혹시 "일반전화" 패턴 내용 중 "일반전화 : ^\d{2.3} - \d{3,4} - \d{4}$" 에서 "^\d{2.3} 괄호 안의 .가 ,로 바꾸는게 맞는지 문의드립니다.

    • Carpe D!em
      2018.08.03 10:29

      , 콤마가 맞습니다.
      우연히 방문했다가 글 보고 댓글남겨봅니다

    • 프알못
      2018.08.25 17:13 신고

      ,(콤마) 가 맞습니다. 지적 감사드려요!

  • Rudy
    2018.09.07 11:47

    패턴 중 "^\\S+.는 \ 하나가 맞는 듯...

    • Perit
      2018.10.08 16:07

      문자열 내라서 \\\\ 쓰는 게 맞고, 오히려 .이 아니라 \\\\. 이 맞을 듯

  • 정규식어려워
    2018.10.11 16:25

    .바로 뒤에 공백 혹은 줄바꿈 문자가 있는 경우를 찾고싶은데 도저히 모르겠네요 ㅠ^ㅠ 어떻게하면 될지 혹시 조언 구해도 될까요??

트랙백

※ 스팸 트랙백 차단중 ...{ ? }

[TIP] 두 날짜 사이의 차이 계산하기

HighCode/Java 2016. 9. 21. 12:07

프로그래밍을 하다 보면 날짜 계산을 할 경우가 생기게 되는데요..


그럴때 사용할 수 있는 방법을 소개하겠습니다.


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
public void calDateBetweenAandB()
{
    String date1 = "2016-09-21";
    String date2 = "2016-09-10";
 
    try{ // String Type을 Date Type으로 캐스팅하면서 생기는 예외로 인해 여기서 예외처리 해주지 않으면 컴파일러에서 에러가 발생해서 컴파일을 할 수 없다.
        SimpleDateFormat format = new SimpleDateFormat("yyyy-mm-dd");
        // date1, date2 두 날짜를 parse()를 통해 Date형으로 변환.
        Date FirstDate = format.parse(date1);
        Date SecondDate = format.parse(date2);
        
        // Date로 변환된 두 날짜를 계산한 뒤 그 리턴값으로 long type 변수를 초기화 하고 있다.
        // 연산결과 -950400000. long type 으로 return 된다.
        long calDate = FirstDate.getTime() - SecondDate.getTime(); 
        
        // Date.getTime() 은 해당날짜를 기준으로1970년 00:00:00 부터 몇 초가 흘렀는지를 반환해준다. 
        // 이제 24*60*60*1000(각 시간값에 따른 차이점) 을 나눠주면 일수가 나온다.
        long calDateDays = calDate / ( 24*60*60*1000); 
 
        calDateDays = Math.abs(calDateDays);
        
        System.out.println("두 날짜의 날짜 차이: "+calDateDays);
        }
        catch(ParseException e)
        {
            // 예외 처리
        }
}    
        
Colored by Color Scripter
cs


18 line 이해 안되시는 분. getTime() 에 대한 문서를 보게되면..


Declaration

public long getTime()

Return Value

This method returns how many milliseconds have passed since January 1, 1970, 00:00:00 GMT


번역: 이 메소드는 해당 날짜가 1970년 1월 1일 00:00:00시 부터 얼마나 지났는지를 리턴합니다.


출처 : https://www.tutorialspoint.com/java/util/date_gettime.htm


getTime() 을 한번 써보시면 알게될거예요..



20 line에서는 Math.abs() 를 통해 음수 결과일 경우 양수로 바꿔주었습니다.


날짜 차이만 구하는 거라면 이 방법이 깔끔하게 값을 이용할 수 있습니다.










저작자표시비영리동일조건

'HighCode > Java' 카테고리의 다른 글

[Spring] Restful한 스프링 @ResponseBody vs @RestController  (1) 2016.12.21
프알못을 위한 Java 04. 조건문 if 와 switch  (0) 2016.09.27
[TIP] 정규표현식(Pattern Matching) 완전 정리!  (6) 2016.09.22
[TIP] 두 날짜 사이의 차이 계산하기  (1) 2016.09.21
프알못을 위한 Java - 02. 문자열 출력  (0) 2016.09.04
프알못을 위한 Java - 01. 프로젝트,클래스 생성  (0) 2016.09.04
Posted by 프알못
  • Mc
    2018.10.15 22:02

    7번줄 SimpleDateFormat format = new SimpleDateFormat("yyyy-mm-dd");
    mm은 분이고 MM이 월입니당!

트랙백

※ 스팸 트랙백 차단중 ...{ ? }

프알못을 위한 Java - 02. 문자열 출력

HighCode/Java 2016. 9. 4. 16:56

간단하게 자바를 이용해서 원하는 내용을 출력하는 간단한 프로그램을 만들어 봅시다.


예제 먼저 보여드리고 설명해드리겠습니다.


예제1)

1
2
3
4
5
6
7
8
9
10
11
12
13
 package highcode;
 
public class test {
 
    public static void main(String[] args) {
        System.out.println("Hello JavaWorld");
        System.out.print("Hello JavaWorld\n");
        System.out.printf("Hello JavaWorld");
    }
 
}
 
 
Colored by Color Scripter
cs


코드에서 보이는 생소한 3줄 각각 알아보겠습니다.


1. (line : 6)


6
System.out.println("Hello JavaWorld");
cs


System.out.println() 함수 입니다. 괄호안에 입력된 내용을 출력하는 함수이고 평문은 ""이용해서 wrapping 시켜줘야 합니다.

특징은 자동으로 개행(줄을 바꿈. 자동엔터라고 생각하세요)이 되는 함수 입니다.

다양한 응용법은 변수를 배우고 추가적으로 알려드리겠습니다.


2. (line : 7)


7
System.out.print("Hello JavaWorld\n");
cs


System.out.print() 함수 입니다. System.out.println() 함수와 마찬가지로 괄호안에 입력된 내용을 출력하며 평문은 ""으로 감싸줘야 합니다.

System.out.println()와는 다르게 자동으로 개행하지 않습니다. 그래서 위 예제에는 개행문자 \n을 따로 기입해주었습니다.

개행문자와 같은 이스케이프 시퀀스(escape sequence)는 따로 정리해드리겠습니다.


3. (line : 8)


8
System.out.printf("Hello JavaWorld");
cs


System.out.printf() 함수 입니다. 위의 함수들과 마찬가지로 괄호안에 입력된 내용을 출력할때 사용하고 평문은.. 알죠?

System.out.print() 함수처럼 자동으로 개행하지 않습니다. 개행문자(\n)을 통해 개행시킬 수 있습니다.

위 두 출력함수와의 차이점은 C언어 스타일의 출력을 지원한다는 것입니다. 

이 스타일은 차차 알아보도록 합시다.



여기서 중요한 포인트 1. 줄마다 끝에 ;(세미콜론) 이 붙는데 이거 뭔가요?


컴퓨터에게 "끝"을 알려주기 위해 사용합니다. 변수의 선언, 함수의 사용 등 거의 모든 문법 뒤에 온다고 알아두세요. 예외도 있답니다.



출력함수 응용



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package highcode;
 
public class test {
 
    public static void main(String[] args) {
        System.out.println("Hello I'm System.out.println()");
        System.out.println();
        System.out.print("Nice to meet you.\n I'm System.out.print()\n\n");
        System.out.printf("Hi guys. My name is System.out.print()\n\n");
        
        System.out.println("안녕 나는 한국인이야.");
        System.out.print("こんにちは。私は日本人です。\n");
        System.out.printf("你好。我是日本人。");
    }
 
}
 
 
 
Colored by Color Scripter
cs


1. (line : 7)

System.out.println();


System.out.println() 함수가 자동으로 개행한다는것을 응용해서 단순히 개행을 위해 호출할 수도 있습니다.


2. (line : 8)


개행문자는 얼마든지 여러번 써도 상관없습니다. 이런식으로 사용하면 한 함수로 여러줄을 만드는것도 가능합니다.


3. (line : 10)

(빈공간)


아무리 파일내에서 엔터를 쳐도 개행되지 않습니다. 개행을 위해서는 개행문자 혹은 자동으로 개행을 하는 함수를 이용해주세요.


4. (line : 11, 12, 13)


11
12
13
System.out.println("안녕 나는 한국인이야.");
System.out.print("こんにちは。私は日本人です。\n");
System.out.printf("你好。我是日本人。");
cs


출력함수들은 유니코드를 지원하기 때문에 영어뿐 아니라 다양한 charset을 지원합니다. 이때 파일은 UTF-8형식으로 저장되어야 합니다.



출력함수를 여러 가지로 스스로 응용해보시길 바랍니다. 오늘은 여기까지 하고 다음시간에는 변수에 대해 알아보겠습니다.







저작자표시비영리동일조건

'HighCode > Java' 카테고리의 다른 글

[Spring] Restful한 스프링 @ResponseBody vs @RestController  (1) 2016.12.21
프알못을 위한 Java 04. 조건문 if 와 switch  (0) 2016.09.27
[TIP] 정규표현식(Pattern Matching) 완전 정리!  (6) 2016.09.22
[TIP] 두 날짜 사이의 차이 계산하기  (1) 2016.09.21
프알못을 위한 Java - 02. 문자열 출력  (0) 2016.09.04
프알못을 위한 Java - 01. 프로젝트,클래스 생성  (0) 2016.09.04
Posted by 프알못

트랙백

※ 스팸 트랙백 차단중 ...{ ? }

프알못을 위한 Java - 01. 프로젝트,클래스 생성

HighCode/Java 2016. 9. 4. 15:58

시작하기 전에 준비물


Java JDK : (다운로드)[각주:1]


Java JRE : (다운로드)


저는 IDE를 이클립스를 사용했습니다. 입맛에 맞는걸로 사용해주세요. 포스트는 이클립스를 바탕으로 포스팅되었습니다.


(이클립스 IDE 다운로드)




저는 자바의 장점같은 서론은 전부 스킵하고 바로 본론으로 넘어가겠습니다.


1. 프로젝트 생성


(이클립스 Java IDE)


File - New - Project를 해서 자바 프로젝트를 생성할 수 있습니다.


New Project 창이 뜨면 Java Project를 눌르고 Next.


Project 이름을 지정해준다음 Finish를 눌러주세요.


Open Associated Perspective? 뜨면 yes[각주:2]



(생성된 프로젝트. algorithm 프로젝트는 기존에 필자가 만들어놓은 프로젝트이니 신경쓰지 마세요.)



2. 클래스 생성


만든 프로젝트에 마우스 오른쪽버튼 > New > Class 를 이용해서 Class를 만들 수 있습니다.



Name 필드에 원하는 이름을 지어줍시다.

밑에 public static void main(String[] args) 박스는 옵션입니다. 체크하면 메인함수를 자동으로 작성해서 class가 생성됩니다. 

하나는 체크하고 생성하고 하나는 체크풀고 생성해서 차이점 확인해보세요.

다하셨으면 Finish.



(생성된 class)



앞으로 모든 프로그래밍은 이 생성된 클래스 파일내에서 이루어집니다. 다음 포스팅부터 본격적으로 코딩을 해봅시다.



  1. 1. Accept Licence Agreement 체크 2. 컴퓨터에 맞는 버전 다운로드 [본문으로]
  2. Project Explorer가 Package Explorer로 바뀝니다. 이건 아직 몰라도 됩니다. [본문으로]
저작자표시비영리동일조건

'HighCode > Java' 카테고리의 다른 글

[Spring] Restful한 스프링 @ResponseBody vs @RestController  (1) 2016.12.21
프알못을 위한 Java 04. 조건문 if 와 switch  (0) 2016.09.27
[TIP] 정규표현식(Pattern Matching) 완전 정리!  (6) 2016.09.22
[TIP] 두 날짜 사이의 차이 계산하기  (1) 2016.09.21
프알못을 위한 Java - 02. 문자열 출력  (0) 2016.09.04
프알못을 위한 Java - 01. 프로젝트,클래스 생성  (0) 2016.09.04
Posted by 프알못
자바, 프로그래밍 언어

트랙백

※ 스팸 트랙백 차단중 ...{ ? }

1. Python 시작하기 - 기본 1 -

HighCode/Python 2016. 3. 3. 23:51

해당 포스트는 Cpython 3.5.1 그리고 IDE는 PyCharm 을 기준으로 작성되었습니다. 다른 언어를 먼저 접한 사용자에게 적합한 강의 입니다.


파이썬 다운로드(클릭)


PyCharm 다운로드(클릭)

(PyCharm의 경우 Community 버전만 무료이므로 잘 보고 다운로드 합시다!)



우선 Python은 인터프리터 언어의 일종입니다. Python은 우수한 자료형과 많은 모듈을 바탕으로 빠르게 개발을 할수있다는것이 큰 장점입니다. 그 외에 유니코드를 완벽하게 지원한다는것?


단점이라면 인터프리터 언어의 태생적 한계인 연산처리속도 그리고 멀티쓰레딩 문제 정도입니다.


본론으로 넘어와서 Python 을 이용하여 간단한 예제를 이용한 학습을 진행하겠습니다.

print('Hello')

많은 분들이 익숙한 Hello World 예제입니다!!! 너무 우려먹나..


Python의 명령어는 기존의 언어보다 간결한 명령어들을 제공하고 있습니다. 자바 지못미..


예제2) Python 을 이용한 간단한 연산 예제

print(1+1)
print(3+1*8)
print(5.9*3.22221*4)
결과

2
11
76.044156


간단한 계산을 하는 예제를 만들었습니다. 기본적으로 Python 역시 덧셈, 뺄셈, 곱셈 등 다양한 연산을 지원합니다.


예제3) 변수 이용

x = 2
y = 3
z = 10

print(x+z*y)
결과

32


다른 언어는 int 등의 변수 타입을 지정해줘야 하지만 Python은 따로 타입 지정을 해주지 않아도 됩니다.


예제4) 다중 선언문

arr = ["A",42,78,"Just a String"]
for abc in arr:
 print(abc)

결과


A
42
78
Just a String


다양한 자료형을 가진 데이터를 쉽게 출력할수 있는것을 확인할수 있습니다.


예제5)활용 1

( 'a'*10)


A='John'
B=A
C=B
print(C)

결과


aaaaaaaaa

John


C를 print 하게 되면 C안에 들어있는 B를 확인하고 B안에 들어있는 A를 확인한뒤 최종으로 A에 들어있는 John을 확인하여 출력하게 됩니다.





1강은 예제를 중심으로 한 맛보기로 강의를 해드렸습니다. 2강에서는 본격적으로 문법과 개념을 가지고 알아보도록 하겠습니다.

저작자표시비영리동일조건

'HighCode > Python' 카테고리의 다른 글

1. Python 시작하기 - 기본 1 -  (0) 2016.03.03
Posted by 프알못
Python, 파이썬, 프로그래밍 언어

트랙백

※ 스팸 트랙백 차단중 ...{ ? }
이전페이지 다음페이지
블로그 이미지

모두를 위한 프로그래밍, 보안, IT 정보

by 프알못

공지사항

    최근...

  • 포스트
  • 댓글
  • 트랙백
  • [SPRING] JSP 주석 정리
  • [Spring] 이클립스(eclipse) 톰캣.. (3)
  • [C] Anti Sandbox
  • 2017년 1월 토렌트 트래커 모음(201..
  • [Spring] Controller 에서 ModelAnd..
  • 더 보기
  • 델파이개발하나요? 아니면 델파이리..
    craz_box ㆍ 2019
  • 7번줄 SimpleDateFormat format = n..
    Mc ㆍ 2018
  • .바로 뒤에 공백 혹은 줄바꿈 문자..
    정규식어려워 ㆍ 2018
  • 문자열 내라서 \\\\ 쓰는 게 맞고,..
    Perit ㆍ 2018
  • 패턴 중 "^\\S+.는 \ 하나가 맞는..
    Rudy ㆍ 2018

태그

  • 토렌트
  • 컴퓨터 청소
  • 악성코드무료치료
  • 자바
  • 맬웨어
  • 백신
  • .트래커
  • 이클립스
  • 소프트웨어
  • CCleaner
  • IT
  • 트렌드
  • 랜섬웨어
  • 2016
  • Python
  • c언어
  • 포털사이트
  • 크랙
  • 파이썬
  • 프리웨어
  • 프로그래밍 언어
  • 악성코드
  • 토렌트 사용법
  • 리버싱
  • 스프링

글 보관함


  • 2018/09
    (1)

  • 2018/08
    (1)

  • 2017/03
    (1)

  • 2017/01
    (1)
«   2020/06   »
일 월 화 수 목 금 토
  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        

링크

카테고리

분류 전체보기 (28)
HighCode (14)
C/C++ (1)
Python (1)
Java (11)
C# (0)
Other (1)
UnderCode (6)
Malware (3)
Hacking Tool (1)
Exploit (0)
Cracking (2)
Software (5)
Torrent (3)
Game (0)
Freeware (2)
App (0)
News & Issue (2)
IT꿀팁 (0)
잼잼 (1)

카운터

Total
327,760
Today
21
Yesterday
404
방명록 : 관리자 : 글쓰기
프알못's Blog is powered by daumkakao
Skin info material T Mark3 by 뭐하라
favicon

HighCode

모두를 위한 프로그래밍, 보안, IT 정보

  • 태그
  • 링크 추가
  • 방명록

관리자 메뉴

  • 관리자 모드
  • 글쓰기
  • 분류 전체보기 (28)
    • HighCode (14)
      • C/C++ (1)
      • Python (1)
      • Java (11)
      • C# (0)
      • Other (1)
    • UnderCode (6)
      • Malware (3)
      • Hacking Tool (1)
      • Exploit (0)
      • Cracking (2)
    • Software (5)
      • Torrent (3)
      • Game (0)
      • Freeware (2)
      • App (0)
    • News & Issue (2)
    • IT꿀팁 (0)
    • 잼잼 (1)

카테고리

PC화면 보기 티스토리 Daum