ICEBEAR can pwn...

블로그 이미지

ICEB34R

공부하는 아이스베어는 귀엽습니다..!

'Pwnable/탐구'에 해당되는 글 2건

제목 날짜
  • [Java] Generic , Wild Card 정리 2019.06.11
  • libc를 통한 스택주소 릭 방법 2018.12.31

[Java] Generic , Wild Card 정리

Pwnable/탐구 2019. 6. 11. 15:43
[Java] Generic , Wild Card 정리 - HackMD

[Java] Generic , Wild Card 정리

Generic이란?

ArrayList<String> 처럼 받는 타입을 제한하는 것입니다.

사용하는 이유

각 타입별로 똑같은 코드를 짜지 않아도 되기 때문입니다.
예를 들어 이전의 ArrayList는 Object타입을 활용하여 만들어졌었고, 따라서 get할때 Casting이 필요했었습니다.
또한, Compile 단계에서 에러를 발생시켜 신뢰성있는 프로그램이 되도록 합니다.

차이점

기존의 방식

ArrayList files = new ArrayList();
// get 하는 경우 Casting이 필요합니다
String filename = (String)files.get(0);
// String만 받기를 원하지만 다른 타입들도 add가 가능합니다
files.add(new File("Some Path"));

Generic

ArrayList<String> files = new ArrayList<>();
//따로 Casting이 필요 없습니다.
String filename = files.get(0);
//Compile Error가 발생하여 잘못됨을 Compile단계에서 알려줍니다.
files.add(new File("Some Path"));

Generic Class

pyblic class Pair<T>{ // T는 Type variable이라고 불립니다.
    private T first;
    private T second;

    public Pair(){
        first = null;
        second = null;
    }
    public T getFirst(){
        return first;
    }
    public T getSecond(){
        return second;
    }
    public void setFirst(T first){
        this.first = first;
    }
    public void setSecond(T second){
        this.second = second;
    }

}

Pair라는 클래스가 위와 같이 정의되어있다면, Pair<String> pair = new Pair();처럼 인스턴스화 하게될때 Pair안의 T들은 모두 String으로 대치되게 됩니다.

public class Pair<T,U> {
    T first;
    U second;
}

위 처럼 여러개의 Type variable을 쓸 수도 있습니다.

Generic Method

class ArrayHandle
{
    public static <T> T getMiddle(T... a)
    {
        return a[a.length/2];
    }
}

위와같이 Method도 Generic을 사용할 수 있습니다.

String middle = ArrayHandle.<String>getMiddle("A","B","C");

위 처럼 Method이름앞에 T 타입을 명시해줘야하지만 컴파일러가 알아서 해줍니다.

Bounds

class PairHandle
{
    public static <T> String getMergedString(T pair){
        return T.getFirst+T.getSecond; // Compile Error
    }
}

위의 코드에서 에러가 나는 이유는 T타입이 정해지지 않았는데, T에 .getFirst(), .getSecond()가 정의되어 있는지 확신할 수 없기 때문입니다.

이와같은 문제를 해결하기 위해 Bounds를 사용합니다.

extends

public static <T extends Pair<String>> String......

위처럼 extends을 사용해서 T에는 Pair의 Sub type만 허용하도록 정의할 수 있습니다.

이때 extends 키워드는 상속받을 때 사용하는 extends와는 사용법도 조금 다른데, 의미적으로는 T가 subclass 라는 뜻이 아닌, Sub type임을 의미합니다. 또한 Interface도 받을 수 있습니다.

T extends Comparable & Cloneable

위 코드처럼 두 타입을 동시에 만족하는 타입만 받겠다는 의미로 사용할 수도 있습니다.

Wildcard

Generic간 상속관계

ArrayList<Manager> managerList= new ArrayList<>();
ArrayList<Employee> employeeList = new ArrayList<>();
employeeList.add(managerList); // Compile Error

Manager와 Employee는 상속관계에 있지만 제네릭으로 제한된 각 ArrayList끼리는 상속관계가 없기 때문에 Compile Error가 발생합니다.

이와 같은 문제를 해결하기 위해 Wildcard를 사용합니다.

    • [Java] Generic , Wild Card 정리
      • Generic이란?
      • 사용하는 이유
      • 차이점
        • 기존의 방식
        • Generic
      • Generic Class
      • Generic Method
      • Bounds
        • extends
      • Wildcard
        • Generic간 상속관계
    Expand allBack to topGo to bottom
  • [Java] Generic , Wild Card 정리
    • Generic이란?
    • 사용하는 이유
    • 차이점
      • 기존의 방식
      • Generic
    • Generic Class
    • Generic Method
    • Bounds
      • extends
    • Wildcard
      • Generic간 상속관계
Expand allBack to topGo to bottom

'Pwnable > 탐구' 카테고리의 다른 글

libc를 통한 스택주소 릭 방법  (0) 2018.12.31
Posted by ICEB34R

libc를 통한 스택주소 릭 방법

Pwnable/탐구 2018. 12. 31. 22:34

libc를 통해 스택주소를 얻어내는 방법이 있다고 얼핏 들은적이 있었습니다.


오늘은 그것을 알아내는 방법에 대한 글입니다.


우선 http://researchport.tistory.com/43 여기의 글을 참고했다고 밝힙니다.



libc.so.6을 IDA로 보면 __environ이라는 영역이있습니다.


이 부분은 어떨때 사용되나 봤더니

getenv함수를 호출할때 사용된다던지 _libc_start_main에서도 사용이 되는 것을 확인했습니다.


결론적으로는 저 environ이라는 포인터 안에는 환경변수들이 로드되는 주소가 담겨있습니다.


0x7ffff7ffe100이라는 포인터 안의 값은

0x7fffffffe358이라는 스택의 값을 가르키고 있고


그 안에는 환경변수의 테이블들이 있어 환경변수를 가르키고있습니다.  

따라서 해당값을 릭을 했다면 offset을 계산을 통해 스택이 로드된 주소를 알 수 있습니다.

'Pwnable > 탐구' 카테고리의 다른 글

[Java] Generic , Wild Card 정리  (0) 2019.06.11
Posted by ICEB34R
이전페이지 다음페이지
블로그 이미지

공부하는 아이스베어는 귀엽습니다..!

by ICEB34R

공지사항

    최근...

  • 포스트
  • 댓글
  • 트랙백
  • 더 보기

태그

  • hackerone #버그 바운티 분석 #css injection #slack
  • InsecureBank
  • 안드로이드
  • 안드로이드모의해킹
  • 앱모의해킹
  • malloc
  • fastbin dup
  • 앱취약점
  • 안드로이드취약점
  • 인시큐어뱅크
  • 0ctf
  • write-up
  • babyheap
  • fastbin
  • pwnable

글 보관함

«   2025/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 30 31

링크

카테고리

ICEBEAR's workbench (27)
Web Hacking (6)
메모장 (1)
hackerone 바운티 분석 (1)
Pwnable (15)
낙서장 (0)
탐구 (2)
Write-up (1)
Window Exploit (1)
Whois pwnable assignment (7)
안드로이드 (5)
InsecureBank (5)
IoT (1)
잡담 (0)

카운터

Total
Today
Yesterday
방명록 : 관리자 : 글쓰기
ICEB34R's Blog is powered by daumkakao
Skin info material T Mark3 by 뭐하라
favicon

ICEBEAR can pwn...

공부하는 아이스베어는 귀엽습니다..!

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

관리자 메뉴

  • 관리자 모드
  • 글쓰기
  • ICEBEAR's workbench (27)
    • Web Hacking (6)
      • 메모장 (1)
      • hackerone 바운티 분석 (1)
    • Pwnable (15)
      • 낙서장 (0)
      • 탐구 (2)
      • Write-up (1)
      • Window Exploit (1)
      • Whois pwnable assignment (7)
    • 안드로이드 (5)
      • InsecureBank (5)
    • IoT (1)
    • 잡담 (0)

카테고리

PC화면 보기 티스토리 Daum

티스토리툴바