EYEN
DIVA 2단계 본문
#1 문제 분석
가. 목적
뭐가 하드코딩되고 어디에 있는지 알기
나. 활용
소스코드, adb
#2 취약점 정보
가. 취약점
하드코딩된 비밀키=> 소스코드에 대놓고 비밀키 공개됨
나. 취약점 확인법
소스코드 확인시 암호화되지 않은 키를 확인할 수 있음
다. 소스코드에 비밀키가 있는 게 취약점인 이유
루팅과 난독화 해제 등을 통해 소스코드를 볼 수 있는 단계까지 가면 바로 권한 획득 가능
라. 하드코딩하는 이유
1. 일회성으로 사용되는 값인 경우
ex)
for (int i = 0; i < 10; i++)
public void processInput(String input)
//input을 processInput 메서드가 실행되는 동안에만 사용
boolean isTemporary = true;
if (isTemporary) {//임시적으로 설정된 상태 플래그
System.out.println("어쩌구저쩌구.");
}
int result = calculateResult();
//임시 결과 값
System.out.println("계산 결과: " + result);
2. 상수 값일 경우
int SECONDS_IN_MINUTE = 60;
int MINUTES_IN_HOUR = 60;
int HOURS_IN_DAY = 24;
// 시간과 날짜를 다룰 때
int MAX_INTEGER_VALUE = Integer.MAX_VALUE;
int MIN_INTEGER_VALUE = Integer.MIN_VALUE;
// 정수 데이터 타입의 최대/최소 값
등등... 음
#3 코드 분석(1과 다른 부분)
1.
setContentView(R.layout.activity_hardcode);
setContentView: android 애플리케이션에 화면을 설정하는 데 사용되는 메서드
activity_hardcode.xml을 화면에 표시
12.
public void checkout(View view) {
버튼이나 다른 뷰를 클릭했을 때 호출되는 이벤트 핸들러 메서드
View는 클릭된 뷰, 이게 view 파라미터로 전달된다.
그래서 이 메서드 내에서는 클릭된 뷰에 대한 작업을 수행한다.
13.
EditText hckey = (EditText) findViewById(R.id.hcKey);
액티비티나 프래그먼트에서 XML 레이아웃 파일에서 정의한 EditText 요소를 참조하는 코드
EditText hckey: hckey라는 텍스트입력칸 객체를 참조하는 변수 선언
findViewByid: XML 레이아웃에서 hckey라는 id를 가진 뷰를 찾아
(EditText): EditText 클래스로 형변환(굳이? EditText 클래스의 인스턴스임을 보장하기 위함)
14.
if (hckey.getText().toString().equals("vendorsecretkey")) {
hckey라는 객체에서 getText로 문자열을 가져와 String형으로 바꿔서 제시된 문자열과 같은지 비교함
15.
Toast.makeText(this, "Access granted! See you on the other side :)", 0).show();
this: 토스트 메시지를 표시할 컨텍스트로 액티비티(HardcodeActivity)의 인스턴스(class HardcodeActivity의 객체 그냥 화면 레이아웃) 를 전달한다.
0=Toast.LENGTH_SHORT(<=>Toast.LENTH_LONG)
#4 취약점 예방
변수로 할당!