'Develop/UTIL' 카테고리의 글 목록 :: YPrefer's Develop&Security

이전에 올린 java와 기능은 같다.

내가 한 것은 아니가 동료가 java용은 설치해야 한다고 귀찮다며 만들어서 주었다.



Fortify 라는 소스점검도구가 있다.

이 점검도구를 이용하면 소스코드를 빌딩하면서 어떤 소스파일의 어디라인데서 취약점이 있다고 보여진다 라는 레포팅을 만들어 준다.

이러한 결과는 개발자에게 전달되는데, 최신버전의 Fortify 는 그렇지 않지만

구버전의 Fortify는 레포트의 형태가 XML, PDF, WORD 파일 이 3가지로 떨어진다.


근데 문제는, 취약점이 적게는 몇천개 많게는 수십만개까지 잡히는데 이것을 word나 xml로 보면 굉장히 불편하다는 점이다.

(그래서 최신버전에는 excel로 레포팅을 하게 만들었겟지만.. 그럼에도 보기는 불편하긴 하다.)

그래서 그 결과는 나름대로 보기편하게 필요한 요소만 뽑아내서 파싱해주도록했다.


점검자는 개발자 입장에서 보면 딴지걸고 시비거는 사람으로 밖에 안보이겠지만...,

그래도 조금이라도 편하게 조치하시기를 바라는 마음에서 만들어보았다.



필자의 회사의 경우 보안을 위해 외부 인터넷 망과 연결시 Proxy를 통해야 한다.

그런데, 보안점검을 하다보면 Proxy를 Burpsuite나 Fiddler와 같은 Tool의 포트로 변경해줘야 하는 일이 있는데,

이걸 매번 브라우저의 설정탭을 찾아 들어가 변경하기도 귀찮고,

그렇다고 Cooxie Toolbar같은걸 번거롭게 설치해서 마우스 클릭질 하는 것도 맘에 들지 않아서, Java로 변경해주는 걸 하나 만들어 보았다.


이 방법은 Java를 이용해 Registery 값을 수정하는 방법인데, Chrome과 IE는 적용되지만 FireFox는 따로 Proxy 정보를 저장하고 있어 적용되지 않는다.


소스를 보면, 간단하다.

Proxy.java


WinInet.java



이 소스는 java에서 registery값에 접근하는 jRegistryKey라는 라이브러리를 사용한다.

그 라이브러리를 이용하기위한 Interface가 WinInet.java이고, 실제 동작하는건 Proxy.java라고 보면 된다.

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

라이브러리 사용하는 방법은 일반적이니 따로 적지 않겠다.


설명하자면, Windows의 Proxy 설정값은 Registery의 CURRENT_USER의 Software\\Microsoft\\Windows\\CurrentVersion\\Internet Settings

밑에 위치하게 되고 여기에서 프록시 설정에 대한 값들이 있는데,

ProxyEnable : 현재 프록시가 켜져있는지 아닌지의 값.  0 또는 1

ProxyServer : 프록시 서버 주소

ProxyOverride : 프록시 주소를 사용하지 않는 예외 주소들

AutoConfigURL : 프록시 자동구성 스크립트 주소

이다.


이 값을 이용해 현재 프록시가 켜져 있다면 꺼주고, 꺼져 있다면 같은 폴더의 dat폴더 밑 config.dat파일을 참조하여 값을 읽어와 그 설정과 같이

Proxy 설정을 해준다.

config.dat파일의 첫번째 라인을 자동구성 스크립트에, 두번째라인은 프록시 주소에, 세번째 라인은 예외 주소, 네번째 라인은 다이어로그가 실행되는 시간(1000이 1초) 로 구성된다.


이렇게 만들어진 프로그램을 바로가기로 만들어 우측버튼의 속성을 통해 바로가기키를 지정해두면 단축키로 프록시 활성/비활성화가 가능해진다.


만들어진 Tool로 손쉽게 프록시 활성/비활성화를 하면서 홈페이지을 조지면 된다!

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 파일.

+ Recent posts