기본 콘텐츠로 건너뛰기

AndroidHacking 2 : Android InsecureBankv2

AndroidHacking 2 : Android InsecureBankv2

저번에 이어서 step3를 해보자.

APK파일을 하는 단계다.


일단 저번에 다운받아서 압축을 풀었던 폴더에 들어간다.


설명서에 나왔던 파일(노란색)이 보인다. adb install을 통해 설치를 하려 했다. 하려는데 뭐가 설치 안돼있다는 내용이 나와서 설치 해주고 보니 이번에 또 다른 오류가 떴다.


애뮬레이터가 안된다고 한다. 여기서 부터가 시작이었다. 음..... 처음에는 PATH의 문제인가 싶었다. 여기에 경로를 추가하면 될 줄 알고 환경변수를 수정해줬다. (나는 export를 통해 수정했다. 이 방법은 임시적인 방법이어서 완전히 환경변수에 추가하고 싶다면 bashrc혹은bash_profilel 파일을 수정해야 한다.)


하지만 이번에는 다른 오류가 떴다. 캡쳐본이 없어서 정확히는 잘 기억이 안 나는데 아마 실제 프로그램을 돌릴 수 있는 기계가 없다고 나왔던 것 같다.  그런데 분면 step1에서 avd를 만들었던 기억이 있는데...?
안드로이드 스튜디오에 들어갔다. 아래쪽에 보니 코드를 가상 기계에 적용시키는 부분이 있었는데 아무 기계도 뜨지 않았다.
알고보니 저번에 만든건 프로젝트 였다. 안드로이드 프로젝트. 실제 기계를 만들어 주지 않았다.
avd를 만드려면 위 tools를 눌러 avd manager을 선택한다.


그러면 아무 avd도 만들지 않았다는 확인사살을 받는다. 어떤 avd도 나오지 않고 create new avd만 나오기 때문이다. 새로 만들기 버튼을 누른다.


가상 기계를 선택한다. 이 부분에 있어선 설명서의 1번 순서를 다시 돌아가서 참고하면 된다. 문제는 기게에 설치하는 안드로이 부분이다. system image였었나. 거기서 오류가 나면서 설치 할 수 있는 게 아무것도 없어졌다.
구글링을 했다. stack overflow 에 보니까 나와 동일한 오류가 떴던 사람이 있었다. 답변은 간단했다. Sdk 폴더를 새로운 경로에 만드라고 나와있었다.
다시 안드로이드 스튜디오로 가서 이번엔 tools --> sdk manager로 이동한다. 위쪽을 살펴보면 Sdk파일의 경로가 있다. 옆에 있는 ... 버튼을 눌러 위치를 수정할 수 있다. 나는 newSdk라는 폴더를 새로 만들고 여기에 sdk파일들을 다 다시 다운 받았다. (시간 업청 거린다.)
이제 다시 avd manager 에 들어가 새로운 avd만들기를 눌러준다. 이것 저것 선택하고 이제 완성!!
이제 만든 avd를 실행시켜보자.


실행이 되지 않는다.
해결방법1 - 안드로이드 기계사용하지 --> 이게 가능했으면 avd 안 썼다.
해결방법2 - 윈도우나 맥으로 가라--> 윈도우에서 안돼서 우분투로 왔다.
이제 남은 건 3번과 4번이다.
먼저 3번을 시도했다. 전에 책에서 봤기 때문에.
설치해야 할 것은  intel haxm 이다. 이는 cpu accelerator로 avd의 속도를 조금 더 빠르게 돌아갈 수 있도록 도와준다.
https://software.intel.com/en-us/articles/intel-hardware-accelerated-execution-manager-intel-haxm

로 들어간다.  스크롤을 내리다 보면 linux에선 어떻게 설치하는 방법이 써진 링크가 나온다. 누른다.
들어가면 친절하게 설치 방법이 나온다. 따라하다 보니 문제가 생겼다.
알고보니 cpu에선 설치가 불 가능하다고 한다. 구글링을 하다보면 나오겠지만 intel haxm은 설치가 가능한 cpu 가 있고 불가능한 cpu 가 있다.
결국 4번 문제가 남았다. arm system image 사용. 원래 설명서를 보면 이걸 사용했는데 내가 avd만들 때는 보지 못했다.
구글링해도 라이베리파이만 계속 나오길래 일단 arm 을 다운 받았다.
https://www.ubuntu.com/download/server/arm
sever를 다운받았다. 이즘되니 vm에서 경고창이 뜨기 시작했다. 용량이 모자라다면서. arm을 다운 받는데 시간이 너무 걸렸다.
기다리다보면 언젠가 다 되겠지 라는 생각을 가지고 기다린다.
설치가 됐으면 다시 안드로이드 스튜디오를 키고 다시 새로운 avd를 만들어 줘야 한다. 아까와 동일한 방식이나 이번에는 arm을 넣어줘야 한다.
근데 선택하는 곳이 없다. 없다. 일단 없는 상태로 다시 완성을 시키고(그러면 아까와 다를 바가 없다.) 일단 만든 걸 확인했다. 잘 보면 CPU/ABI라고 써진 부분이 있는데 이 부분이 X86으로 써져있다. 근데 이 부분은 system image를 선택할 때 정해져 있는 거라서 어떻게 바꿀 수 가 없다.
구글링을 해보니 같은 문제로 stack overflow에 올린 사람이 있었지만 해결 답이 올라오지 않아있었다. 일단 댓글이라고 확인해 보니 원래는 arm이 디폴트라고 말하는 사람도 있었는데 만들 때 보면 잘 모르겠고.
다시 설명서를 보면서 확인해 보니 avd를 만들 때 선택해야 하는 ABI가 armeabi-v7a이다. system image에서 other 부분을 살펴보니 있다. 문제는 선택이 불가능 했다.


armeabi-v7a에 해당하는 system image를 누르면 next버튼이 눌리질 않는다.

다른 방법을 더 알아봐야 할 것 같다.


댓글

이 블로그의 인기 게시물

C언어 - 1~100 사이의 소수 구하기

  C 문제 정수 값을 인자로 받아서 소수인지 판단하는 IsPrime 함수를 정의하고 이 함수를 이용해 1 부터 100 사이의 소수를 모두 구해서 출력하는 프로그램을 작성하시오 .   1.main 함수 만들기 IsPrime 이라는 함수에 인자를 2 부터 99 로 넣어주는 함수를 만들어야 한다 . 반복을 위해 for 함수를 사용한다 . main 함수의 타입이 int 이기 때문에 return 값을 적어줘야 함 .   2.IsPrime 함수 만들기 딱히 반환해야 할 값이 없기 때문에 타입은 void 경우를 2 가지로 나눔 . ①if  인자가 2 일 경우 --> 2 는 소수이기 때문에 2 를 출력함 ②else  인자가 2 가 아닐 경우 --> 2 부터 ( 인자 -1) 까지의 수로 인자를 나눠서 모든 경우에 나머지가 0 이 아니면 소수임 . 즉 어떤 숫자로 나눠 떨어지면 소수가 아니라는 의미로 더이상의 경우를 확인할 필요가 없음 . 따라서 반복하던 for 문을 빠져나옴 . for 문이 끝난 후 인자의 값과 count 의 값이 같다면 count 의 어떠한 숫자로도 인자가 나누어지지 못했다는 의미이다 . 이는 소수라는 뜻과 마찬가지이기 때문에 이 경우에 인자를 출력한다 .   3. 기타 출력한 후 모습을 살펴보는데 IsPrime 에서의 출력이 숫자 끝에 콤마 (,) 가 붙기 때문에 모든 출력이 끝나도 마지막 숫자 뒤에 콤마가 붙어 있다 . 이를 없애기 위해서는 이스케이프 문자 ‘\ b’ 를 사용했다 . 출력 화면이 더 편하게 보이도록 ‘\b\n’ 를 썼으나 이럴 경우 '\b' 의 효과가 사라졌다 . ‘\b\b\n’ 처럼 사용했으나 결과는 역시나 \ n 의 효과만 나타날 뿐 \ b 의 효과는 없었다 . 이를 해결하기 위해 구글링도 했지만 적절한 답을...

C언어 - 입력받은 숫자의 이진수 표현에서 1의 개수를 세는 코드를 짜기

C 언어 문제: 입력받은 숫자의 이진수 표현에서 1의 개수를 세는 코드를 짜기 이 문제를 해결하기 위해서는 시프트 연산자에 대해 알아야 한다. 컴퓨터에서는 숫자를 2진수로 표현하는데 정수는 32비트로 나타낸다. 가장 앞쪽에 있는 비트는 음수와 양수를 구분해 주는 비트이고 이 이하가 숫자를 의미한다. 시프트 연산자는 숫자를 이진수로 표현했을 때 연산을 편리하게 해 주는 연산자이다. 연산자에 대해 자세히 알고 싶으면 ( http://rockykim5581.tistory.com/19 )을 참고하길 바란다. 여기에서는 필요한 부분만 다룰 예정이다. 1. 숫자 입력받기 입력한 숫자를 변수에 대입해야 한다. 2.입력한 숫자의 이진수 표현에서 1의 개수 구하기 이진수에서도 비교 연산자를 사용할 수 있다. AND를 의미하는 &는 두 수가 모두 1일 때만 1(참)을 나타낸다. 이 성징을 이용하면 입력받은 숫자의 이진수를 셀 수 있다. 비트는 1부터 31가지 비교해야 한다.(32비트-사인비트-는 제외) 이 과정을 하기 위해서는 반복문이 필요하다. 여기서는 조건과 초기화, 반복후 실행하는 문이 있어서 for를 사용했다. 비교는 입력은 숫자(이진수 표현)의 n번째(이는 0아니면 1이다)와  n번째가 1인 숫자를 &으로 비교해서 둘 다 모두 1인 경우만 count라는 변수를 하나씩 올려준다. 그러면 입력받은 수의 이진수 표현 1을 셀 수 있게된다. 그러면 n번째가 1이라는 숫자를 어떻게 만들까? 이는 변수(one)를 하나 잡아 반복문의 실행에 따라 1을 시프트 연산자로 이동시킨 수를 대입한다. 예를 들어 처음일 때는 입력받은 수와 1을 옯기지 않은 상태로 비교, 두번째 자리를 비교할 땐 입력받은 수와 1을 한칸 옮긴 상태로 비교하는 식이다. 여기서 주의해야 할 점은 (비교하려는 자리의 수-1)만큼 시프트 연산자로 밀어줘야 한다는 것이다. 1이 한 자리도 차지하기 때문이다. <전체 코드> ...

C언어 - 입력된 정수 홀수와 짝수로 나눠 크기순으로 출력하기

2 번째 주 - C 언어 문제 길이가 10 인 배열을 만들고 그 배열에 10 개의 정수를 입력 받는다 . 이 때 입력받은 정수가 홀수면 배열의 앞부터 채워나가고 짝수면 배열의 맨 뒤에서부터 채워나가는 프로그램을 만들어라 .( 정수는 항상 10 개를 모두 입력한다고 가정한다 .) 실행화면 조건 1. int arr[10], i, num[10];// arr = 짝수 홀수 정리할 배열 , num = 숫자 입력 배열 \ 2.int lennum =() ; // 배열 num 의 크기 , 배열 입력받을 때 for 문에서 10 으로 하지말 고 lennum 사용해서 받을 것 int lenarr =(); // 배열 arr 의 크기 , {1,3,5,7,9,1,8,6,4,2} 형식을 위해 사용 -->hint: sizeof 사용 3.lenarr 출력 포맷을 위 사진과 동일하게 만들기 위해 사용한다 . 처음과 끝은 { 과 } 를 사용하고 마지막 숫자 뒤에는 콤마가 없어야 한다 . -->hint: if 문 사용   < 풀이 > 코드는 총 4 부분으로 나뉜다 . 입력 받기 , 홀수 정리 , 짝수 정리 , 출력 .   1. 입력받기 입력 받기 위해 for 문을 사용해서 반복한다 . 여기서 조건을 만족시키기 위해 lennum 을 구해야 한다 . siezof 크기를 알려주는 함수인데 단순히 sizeof(num) 을 한다면 10 이 나오지 않는다 . 40 이 나올 것이다 . 이는 배열이 가진 인덱스 X 타입형의 크기 값이 총 배열의 크기이기 때문이다 . 따라서 lennum 을 구하기 위해서는 다음과 같이 해야 한다 . lennum = sizeof (num) / sizeof ( int ); for 문 안에서는 scanf 를 사용해 입력한 숫자를 num 배열에 넣는다 . 입력받기 코드   2. 홀수 정리 ...