'분류 전체보기' 카테고리의 글 목록 (3 Page) :: YPrefer's Develop&Security

리버싱 자체는 불법이 아니지만 리버싱을 이용해서 타인을 기술과 소스등을

무단으로 도용하는 방법은 불법입니다.

악의적인 목적으로 사용하시면 안되며, 공부 목적으로 사용하시기 바랍니다.

 

링크 : http://www.sweetscape.com/010editor/

010editor라는 hexeditor가 있는데, 이 editor는 처음에 30일 동안은 trial로 사용할수 있도록 배포가 되어있다.

 

이 30일 제한을 우회하는 것을 해보도록 하자. 필자의 010 Editor는 v6.0.3버전이다.

010 editor를 다운받아 실행하면, 처음엔 물론 30일이 지나지 않았으니 정상적으로 실행이 된다.

여기에서 Tools > Register을 누르면 아래와 같이 등록 창이 뜨는데

이곳에서 이름과 Password를 입력해주어야 정식판으로 등록이 되게 되는 구조이다.



License 체크를 우회하기 위해서는

체크 로직을 찾아 분기문을 우회 해야 하는데 License를 잘못 입력 하였을때 나오는 스트링 값을 기준으로 체크로직을 찾아 보도록 하겠다.

 

아래를 보면 YPrefer 라는 문자열을 입력하였고,

잘못된 이름또는 패스워드 라면서 튕겨내는 것을 확인할 수 있다.

이를 통해 추측할 수 있는 것은, 어떠한 체크 로직을 통해서 나오는 출력

"Invalid name or password~~~~~~~" 라는 것을 알 수 있다.


위에서 알아낸 스트링 값을 어떤 코드블럭에서 참조하고 있는 지 알아내기 위해  IDA Pro라는 상용툴을 사용하기로 한다.

IDA PRo는 View ->SubView->Strings를 체크해주면 해당 바이너리 파일에서 사용하고 잇는 스트링 값을 모아서 보여주는 기능이 있어,

이를 통해 IDA Pro 를 통해 위에서 알아낸 스트링 값을 검색하여 본다.

 

 

검색된 스트링을 더블클릭으로 따라 들어가면, 아래와 같이 데이터 영역에 있는 것을 볼수 있고.

X버튼을 눌러 참보하고 있는 곳을 찾아볼수 있어, 다행히도 1개 밖에 없어 바로 체크로직의 위치를 찾을 수 있다.

 

 

아래와 같이 text영역에 스트링을 참조하고 있는 곳을 찾을 수 있다.

 

오른쪽 버튼을 눌러 Graph View 를 선택 하면 프로그램 흐름을 아래와 같이 그래프 형태로 볼수 있어 좀더 분석하기가 용이하다.


 

해당 스트링을 사용하는 분기로 오게 되는 화살표를 더블클릭하면 위 코트 블럭으로 따라갈수 있다.

그 부분에서 분기하여 Invalid name or password~~~ 를 출력하는 코드 블럭으로 가게 되는데,

JNZ는 zero flag의 값이 0이 아니면 분기 하는 어셈블리 코드인데 이를 JZ(0이라면 분기)

하는 코드로 패치 해주면 된다.

 

jnz를 jz로 코드패치

 

코드패치의 자세한 방법은

아래 링크를 확인하면 된다.

2016/11/28 - [Security/리버싱] - [바이너리 진단] 바이너리 코드패치 하는 방법.

 

코드패치를 통해 프로그램 흐름을 제어할수 있게 되었다면,

코드 분석으로 아래의 코드블럭을 목적지로 잡고 분기문을 보고 JNZ를 JZ로 코드 패치를 해주면서 따라간다.



그렇게 패치를 해주면!


 

 아래와 같은 문구가 뜨면서 인증이 된다.

근데 이 방법은 30일 지나서 password를 묻는 문구가 뜨면 저런식으로 아무 문자나 넣어도 accept 되는 방식으로 코드패치가 이루어져서,

매번 패스워드를 묻는 창이 뜨긴 하지만, 정상적 이용이 가능하다.

 

'Security > 리버싱' 카테고리의 다른 글

[바이너리 진단] 바이너리 코드패치 하는 방법.  (0) 2016.11.28

APK 를 분석하기 위해선, apktool로 까보고 소스를 분석하는게 제일 먼저가 된다.

그래서 이 소스를 보기 어렵게 하는 난독화 기술이 있는데 보통 개발 전 단계에서 android에서는 Proguard와 dexguard를 사용하는 것으로 알고있다.

Proguard는 무료고 dexguard는 상용인데 이것들도 까보면 물론 매우 엄청 분석하기 짜증나고 힘들지만

어느정도는 따라가 볼 수 있다.

 

근데 최근에 만나게 된 Dexprotector란 녀석은 상용이긴 한데 class조차 보이지 않았다.

보이는건 ProtectedMainApplication 딱 하나.

 

처음 접했을때 무지 황당하더라..

소스 분석은 아예 접고 다른 부분을 보긴 했지만, 아직도 이게 적용된게 다시 나온다면 어떻게 해야 할지 모르겠다.

 

알아보니 개발 후 단계에서 사용하는 난독화 Tool 이라고 하는데, 가격이 좀 비싸다.

이것과 같은 단계에서 사용하는것이 Medusah와 APK Protect란 것도 있다고 한다.

링크 : http://medusah.com/ https://sourceforge.net/projects/apkprotect/

 

혹시 Web 변두리 어디엔가 있는 이 블로그에 방문해서 이 포스트를 보는 누군가가

관련정보를 공유해주시면 정말 블로그를 시작하기에 잘했다는 생각이 들거 같다.

모의해킹을 할때는 무엇보다 경험이 중요하다고 생각하는데,

계속 개발자가 적용한 방어기법을 우회하거나 다른 방법이 없는지 고민해보는 자신을 발견하게 된다.

 

그런데 원초적인 문제는 이 경험을 해볼 수 있는 공간이 많지 않다는 거다.

공개되어있는 다른 웹사이트를 통해 연습해 볼 수도 없고 (까딱 잘못하면 연락오니까. )

 

연습을 위한 DVMA 나 WebGoat 같은 애들이 있기는 하지만,

링크 : http://www.dvwa.co.uk/ https://www.owasp.org/index.php/WebGoat_Installation

 

남의 소스 분석하는 것보다 내가 새로 짜는게 편하고 공부하는데도 도움이 더 될거라 생각해서, 한번 만들어 보았다.

XAMPP, Sring Framework, Bootstrap 을 이용해서 만들었고

 

첫 화면은 물론 로그인 화면이다.

 

로그인을 하고 나면 5개의 취약점을 연습해 볼 수 있는 선택 메뉴가 나온다.

 

Newbie로 로그인 했을때 이미지를 누르면 403 권한 없음 에러메세지가 출력되고

 

 

5개의 취약점을 통해 관리자 ID/PWD를 입력하여 로그인 하고,

이미지를 누르면 축하메시지가 출력되도록 만들었다.

 

처음 계획은 계정을 4~5개로 만들어서 Newbie 부터 한단계씩 올라가면서 보안기능이 강화되는 것을 계획했지만

만들다 보니, 이 정도면 되었겠다라고 만족하게 되어서 나머지 개발은 무기한 연기 상태

 

언젠가 나중에 회원 가입을 만들고 랭크와 점수를 만들어서 호스팅 하고 싶은 마음도 살짝..  있다.

점검을 하다보면, Hmac 기술이 적용된 어플리케이션을 볼 수 있다.

Hmac이란 Hash-based Message Authentication Code 의 약자인데, 사용자가 값을 변조했는지 아닌지 알아차리기 위한 기술이다.

이 기술은 서버에 요청할때의 값을 정상적일때 Hash 값과 함께 보내서 변조를 막기 위함인데,

물론 완벽하게 막지는 못하지만 최소한 공격자를 귀찮게 만들 수 있다.

 

사례를 들어 설명 하자면, 전에 점검 했던 Web 중에 한 사이트가 Hmac 기술을 적용하고 있었는데

사이트 URL을 공개하기는 좀 그러니까

이 사이트에서 요청하는 값이 http://www.yprefer.com 이고, post로 value=aaa 란 값을 전송하는게 정상적이라고 가정하자.

 

이때 이곳에서는 로그인 할때 Chip 값을 사용자에게 주고, 이 Chip 값과 url 그리고 aaa라는 Value 값을 섞어

HASH값을 만들어내어 HTTP Header로 같이 Request를 보냈었다.

 

그러면 공격자가 Proxy Tool을 이용해 aaa라는 값을 bbb로 변조 하였을 때,

서버에서는 동일한 HASH알고리즘을 사용해서 CHip 값, url, bbb를 섞어 HASH값을 만들어내고, 사용자가 보내온 Header의 HASH값과 비교하여

맞는 요청인지 아닌지 확인하는 방식으로 변조를 막았었다.

 

물론, 여기에서 HASH 값을 만들어내는 로직은 사용자의 javascript에 있기때문에, script를 분석하면 HASH값을 만들어 낼수 있고,

변조된 bbb의 값을 가지고 HASH를 만들어 데이터와 HASH값을 동시에 변조하면 막을 수 없는 맹점이 있긴 하지만

 

분명 공격자에게 script를 분석해야 하는 귀찮음과 요청시 hash값을 계산해야 하는 번거로움을 안겨줄 수 있는 방법임은 틀림없다.

 

블로그 시작하고, 스킨을 이것저것 바꾸는데 그때마다 적용하기도 귀찮은데

다른 블로그를 참조해야 되는건 더 귀찮아서 정리해봄.

 

링크 : http://alexgorbatchev.com/SyntaxHighlighter/

0. 위 링크에서 최신버전의 syntaxhighlighter를 다운받아 압축해제

 

1. scripts와 styles 폴더 안의 파일을 Tistory 관리자메뉴의 꾸미기>HTML/CSS편집>업로드를 통해 업로드

2. HTML 탭에서 아래 내용 적용

 <head>태그위에 js와 css 넣기

<body>태그를 아래와 같이 번경

 

3. 글쓸 때 적용방법

 

'Etc > Blogging' 카테고리의 다른 글

TISTORY 초대장 있어요.  (0) 2016.11.28

hackapk.py

모바일 점검을 하다보면 매번 툴을 이용해서 디컴파일 하고 디버깅을 위해서 debuggable옵션을 true로 바꿔주고 다시 리컴파일 하고 사이닝 하고, 하는 일련의 작업들을 반복하게 된다.

따라서 필자는 이 귀찮은 작업을 피하고자, 반복 잡업을 수행해주는 Python 스크립트를 하나 만들었는데 아래에 공개 하도록 한다.

 

소스를 보면 알겠지만 복잡한 부분은 없고.


사용방법으로 옵션은 총 4가지가 있는데

-i 옵션 : 입력 apk 파일을 지정해 주는 옵션

-o 옵션 : 출력 폴더를 지정해 주는 옵션

-b 옵션 : 이 뒤에 넣는 폴더를 빌드하고 사이닝 해서 apk 파일로 떨궈주는 옵션

-p 옵션 adb shell 을 이용해 package 안에 있는 파일을 긁어오는 옵션

 

으로 한번 해보면 알 수 있을건데, 잘 모르겠다면 친절히 공개해준 소스를 분석해보길 바란다.

 

기본적으로 사용할 때는 옵션을 넣지 않고, 아래와 같이 apk 파일 명을 입력값으로 넣어주면 되는데 그러면 결과는 아래와 같이 떨어진다.


뭐 보면 알겠지만 특별한건 없고 하나씩 실행시켜주는 거고,

debuggable과 sharedUserId가 설정되어있는지 체크해주고, 요렇게 디렉토리들을 아웃풋으로 출력해준다


apktool 폴더는 옵션을 주지 않고 apktool로 디컴파일 한 결과폴더로 jadx로 나온 소스를 분석해 Smali 코드를 변경 할 때 사용할 폴더,

apktool_d는 -d옵션을 주고 apktool로 디컴파일한 결과폴더로 java확장자를 가진 Smali 코드를 Eclipse에 import 하여 동적 디버깅에 사용할 폴더,

jadx는 java source로 디컴파일 해준 폴더로, 가독성이 높아 소스분석을 할때 사용할 폴더,

unzip은 그냥 압축 푼 풀더,

activity.bat은 adb shell을 통해 Apk가 가지고 있는 activity들은 모두 강제 호출 해주는 batch 파일로, 사용자에게 허락되지 않은 activity 호출 여부를 판단할때 사용할 파일,

Test_signed.apk 는 debuggable이 false옵션일때 true로 변경해서 apktool을 이용해 리컴파일 해주고, signing까지 끝내준 apk 파일.


Android APK 진단을 위한 툴 소개

 

네트워크 통신을 하는 앱이라면, 웹 진단 툴을 함께 사용한다.

Apktool

링크 : http://ibotpeaches.github.io/Apktool/

ApkTool은 apk파일은 디컴파일하거나 수정한 후 다시 컴파일 할 수 있는 Tool .

여러 옵션이 있지만 자주 사용하는 옵션은

 d 옵션 : decompile 해주는 옵션으로 smali 파일이 아웃풋

b 옵션 : recompile 해주는 옵션으로 apkfile이 아웃풋으로 나오며, signing을 거쳐 안드로이드폰에 설치가 가능.

d -d 옵션 : decompile 해주는 옵션으로 smali 파일이 아웃풋으로 나오지만, 확장자를 java파일로 만들어주어 동적디버깅 할 때 사용.



apk-sign

링크 : https://github.com/appium/sign

안드로이드에는 signing되지 않은 앱은 설치되지 않음

이 signing은 개발자가 APK파일로 만들어 낼 때 하는데, Apk Tool 을 이용해 decompile을 하면 signing이 풀림.

따라서 폰에 설치를 하기 위해서는 signing을 해주어야 하는데, 원 개발자의 서명을 따라할수는 없으나 아무 keystore를 가지고 signing만 해주어도 설치는 가능.



dex2jar

링크 : https://sourceforge.net/projects/dex2jar/

Apk파일은 안에 classes.dex라는 파일이 있는데 이 파일은 Android Dalvik이 인식할수 있도록 class파일을 바이트 코드로 변환한 파일.

이 파일을 dex2jar를 이용해 class파일을 추출하는 Tool.


jd-gui

링크 : http://jd.benow.ca/

JAVA decompiler 

위 dex2jar를 이용해 추출해낸 class파일을 java로 복원해주는 Tool.

그런데 복원할때 완벽하지 않아 복원이 잘 되지 않는 부분이 있는 것이 아쉬운점.


jadx

링크 : https://github.com/skylot/jadx

JAVA decompiler

필자는 dex2jar&jd-gui 보다 jadx를 사용하는 것을 더 선호하는데 jadx의 결과가 jd-gui보다 좀더 정확하게 복원을 해주는 것으로 느껴지고, 또 dex2jar라는 단계를 밟지 않고 바로 apk파일을 끌어다 놓는 것만으로 디 컴파일이 되기 때문.

 

cheatengine

링크 : http://www.cheatengine.org/

메모리 변조 툴

android 앱에 attach해서 메모리를 변조등을 수행할 수 있다.

 

frida

링크 : http://www.frida.re/docs/android/

frida는 javascript inject를 이용해 개발자가 만들어낸 함수를 공격자가 명시해서 호출하거나, 함수를 새로 만들어서 호출 할 수도 있다.

예를 들면 Getpassword(String id) 이런 함수가 있다면 공격자가 이를 호출하여 password를 얻어낼 수 도 있다.


ida pro

링크 : https://www.hex-rays.com/products/ida/

ida는 동적 디버깅 툴로 대상 Apk를 실행시키면서, 각 부분에 BP를 걸어 그 시점에서의 레지스트리 값등을 확인하고, 패치를 통해

체크로직등의 우회를 노릴수 있다.


drozer

링크 : https://labs.mwrinfosecurity.com/tools/drozer/

안드로이드 진단 프레임워크로 안드로이드 어플리케이션의 보안 취약점을 진단할 수 있다.

 

introspy

링크 : https://github.com/iSECPartners/Introspy-Android

함수 호출을 포함한 어플리케이션 API 안드로이드 API 파라미터와 리턴값을 로깅 해주는 tool이다.

+ Recent posts