IOS Pinning bypass

2020. 3. 4. 14:00

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

반응형

String 객체는 JVM(Java Virtual Machine)에서 GC(Garbage Collection)이 이루어질 때까지 메모리 상에 그대로 남아있어, 앱에서 사용한 중요정보(주민등록번호, 비밀번호 등)를 String 객체에 저장할 경우 악의적인 사용자에게 노출될 가능성이 존재한다.


따라서, String 객체 상에 중요정보를 없애거나 제거해야하는데 이 때 2가지 방식을 생각해볼 수 있다.


1. NULL로 String 객체 초기화

 → String 객체를 가리키는 reference만 제거되는 것이므로 메모리 상에 String 객체의 데이터는 그대로 존재하게 된다.

( 출처 : https://mixup.tistory.com/10 )


2. String 객체 덮어쓰기

 → String 객체 변수에 또 다른 문자열을 Overwrite를 하고자 하지만 실제로는 새로운 메모리를 생성하여 해당 메모리를 가리키는 것이므로, 메모리 상에 중요정보는 그대로 존재하게 된다.

( 출처 : https://mixup.tistory.com/10 )



아래 상세한 예시들을 통해 더 자세히 알아보도록 하자.



예시 1) String 객체 Overwrite 시도

1
2
3
4
5
6
7
8
9
10
11
12
13
System.out.print("Original String password value: ");
System.out.println(stringPassword);
System.out.println("Original String password hashCode: "
  + Integer.toHexString(stringPassword.hashCode()));
 
String newString = "********";
stringPassword.replace(stringPassword, newString);
 
System.out.print("String password value after trying to replace it: ");
System.out.println(stringPassword);
System.out.println(
  "hashCode after trying to replace the original String: "
  + Integer.toHexString(stringPassword.hashCode()));
cs


예시 1 결과) String 객체의 결과 새로운 값으로 덮어씌워지지가 않는 것을 확인

Original String password value: password

Original String password hashCode: 4889ba9b

String value after trying to replace it: password

hashCode after trying to replace the original String: 4889ba9b


예시 2) char[] Array Overwrite

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
char[] charPassword = new char[]{'p''a''s''s''w''o''r''d'};
 
System.out.print("Original char password value: ");
System.out.println(charPassword);
System.out.println(
  "Original char password hashCode: "
  + Integer.toHexString(charPassword.hashCode()));
 
Arrays.fill(charPassword, '*');
 
System.out.print("Changed char password value: ");
System.out.println(charPassword);
System.out.println(
  "Changed char password hashCode: "
  + Integer.toHexString(charPassword.hashCode()));
cs


예시 2 결과) Char Array의 경우 Overwrite가 가능함을 확인

Original char password value: password

Original char password hashCode: 7cc355be

Changed char password value: ********

Changed char password hashCode: 7cc355be


위의 테스트를 통해 String 객체는 덮어쓸 수 없지만, char[] 배열은 덮어쓸 수 있음을 확인할 수 있다.


이 뿐만 아니라, char[] 배열을 이용할 경우 콘솔, 모니터 등 보안적이지 않는 장소에서 예상하지 못한 패스워드 로깅에 대한 방지까지 된다는 장점이 있다.



예시 3) 패스워드 로깅 시도

1
2
3
4
String passwordString = "password";
char[] passwordArray = new char[]{'p''a''s''s''w''o''r''d'};
System.out.println("Printing String password -> " + passwordString);
System.out.println("Printing char[] password -> " + passwordArray);
cs


예시 3 결과) String 배열의 결과 콘솔에 그대로 출력되지만, char 배열의 결과 콘솔에 그대로 출력되지 않음을 확인

Printing String password -> password

Printing char[] password -> [C@6e8cf4c6 


<<참고>>


예시 3에서 System.out.println(passwordArray);를 할 경우엔 정상적으로 password라고 뜨지만 String과 합쳐서 사용될 때는 위와 같이 데이터가 그대로 출력되지 않는다.




https://www.baeldung.com/java-storing-passwords

https://mixup.tistory.com/10

http://egloos.zum.com/kwon37xi/v/4733673

https://stackoverflow.com/questions/8881291/why-is-char-preferred-over-string-for-passwords

반응형

'Hacking > Mobile' 카테고리의 다른 글

INSTALL_FAILED_OLDER_SDK  (0) 2020.03.05
IOS Pinning bypass  (0) 2020.03.04
apktool decompile error solution  (0) 2019.04.24
APK 무결성 확인  (0) 2019.04.20
Windows 환경에서 IOS device 로그 보기  (0) 2019.03.28
블로그 이미지

rootable

,
반응형

1. Framework 관련 에러

 - apktool을 이용하여 compile 진행 시 에러가 발생할 경우 아래와 같은 명령어를 입력하는 것으로 해결할 수 있다.


apktool empty-framework-dir --force


혹은 직접 framework 디렉토리에 존재하는 파일을 삭제해주는 것도 가능하다.

Windows 운영체제의 경우 아래의 경로에 접근한 뒤 해당 경로에 존재하는 파일들을 지워주면 된다.


C:\Users\계정명\apktool\framework


아마 대부분 1.apk가 있을 것이다.


Framework와 관련된 사항은 추후 업데이트 예정


2. resource 관련 에러

 - 만약 위와 같은 방식으로 에러가 해결되지 않는다면 임시방편으로 --no-res 옵션을 이용하여 리소스를 제외하여 디컴파일, 컴파일을 진행할 수 있다.


Step 1) --no-res 옵션을 이용하여 리소스를 제외하고 디컴파일 진행

명령어 : java -jar apktool.jar --no-res d base.apk


Step 2) 디컴파일된 파일에 원하는 작업 진행

Step 3) apktool을 이용하여 빌드 진행 후 결과 파일로 output.apk 생성

명령어 : java -jar apktool.jar b base -o output.apk


Step 4) app Signing

명령어 : java -jar signapk.jar testkey.x509.pem testkey.pk8 output.apk output_signed.apk


Step 5) App Install

반응형

'Hacking > Mobile' 카테고리의 다른 글

IOS Pinning bypass  (0) 2020.03.04
메모리 내 중요정보 평문노출  (0) 2020.02.10
APK 무결성 확인  (0) 2019.04.20
Windows 환경에서 IOS device 로그 보기  (0) 2019.03.28
[IOS] Frida-trace  (0) 2019.01.17
블로그 이미지

rootable

,
반응형

1. Singing Key 확인

 - 앱을 플레이스토어에 올리기 위해서는 릴리즈 빌드를 해야하는데 이 때 Signing 을 하게 된다. 이것의 목적은 Signing에 사용된 공용키에 해당하는 개인키를 가진 사람만이 업데이트를 할 수 있도록 하기 위해서이다.

 - 따라서 무결성 체크를 위해서는 사이닝된 키가 개발자가 설정한 키와 동일한 키인지 런타임 시 Signing 인증서를 체크하여 위변조된 앱인지 아닌지 확인할 수 있다.

 - 아래는 간단히 앱에서 현재 Signing 된 인증서 정보를 가져오는 코드이다. 

( 출처 : http://dktfrmaster.blogspot.com/2017/02/apk.html )



public static void checkAppSignatureInServer(Context context, Callback callback) {
    try {
        @SuppressLint("PackageManagerGetSignatures")
        PackageInfo packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), PackageManager.GET_SIGNATURES);
        
        //안드로이드는 이론상 여러 키스토어로 Signing 가능하다고 하지만,
        //일반적으로는 하나의 키스토어로만 Signing을 하므로, signatures의 첫번째 값을 이용한다.
        Signature signature = packageInfo.signatures[0];
        final String currentSignature = obtainSignatureString(signature);
        fetchServer(currentSignature, callback);
    } catch (PackageManager.NameNotFoundException | NoSuchAlgorithmException e) {
        e.printStackTrace();
    }
}

private static void fetchServer(String signature, Callback callback) {
    //TODO::Fill in server logic
    callback.onFinishCheck(ValidationEnum.VALID);

2. 인스톨러 확인
- 모든 앱은 어떤 인스톨러를 이용하여 설치되었는지 알 수 있다. 이 때 인스톨러의 identifier를 체크하여 위변조된 앱인지 아닌지 알 수 있다.
- 각 인스톨러마다 identifier를 가지고 있는데 구글의 경우 com.android.vending이라는 identifier를 가지고 있다. 만약 adb로 인스톨했을 때에는 null로 출력된다. 따라서 identifier가 com.android.vending이 아니라면 플레이스토어에서 설치한 앱이 아니므로 앱을 종료시키면 된다.
- 아래는 간단히 앱의 인스톨러를 확인하는 코드이다.

public static boolean verifyGoogleInstaller(Context context) {
    final String installer = context.getPackageManager().getInstallerPackageName(context.getPackageName());
    return installer != null && installer.startsWith("com.android.vending");
}


참고) http://dktfrmaster.blogspot.com/2017/02/apk.html

반응형
블로그 이미지

rootable

,
반응형

앱 설치 에러 혹은 로그 내 중요정보 등등 확인을 위해 IOS device의 로그를 확인해야할 경우가 많다.

현재 구글 검색 시 주로 MAC에서 log 보는 방법들만 주르륵이라 포스팅한다.

 

Windows 환경에서 IOS log 확인하기.

 

1. IOS log를 확인하기 위해서 iosLogInfo라는 툴을 사용한다.

 다운로드 링크 : https://www.blackberry.com/blackberrytraining/web/KB_Resources/KB36986_iOSLogInfo_4.3.4.zip

 

2. 압축을 해제하면 IOSLogInfo라는 폴더가 생성될 것이다.

여기서 단말기의 log를 보기 위해 사용하는 파일은 sdsiosloginfo.exe 이다.

단말기를 PC에 연결한 상태에서 cmd창에 아래와 같이 작성한다.

 

sdsiosloginfo.exe -d > [로그 파일명]

 

3. 해당 명령어를 작성할 경우 아무 반응이 없는데 이때부터 IOS 단말기의 로그를 입력한 파일에 저장하고 있는 것이다.

단말기를 통해 로그가 저장되기 위한 행위를 한 뒤 CMD 창에서 [ctrl+c]를 눌러 Interrupt signal을 보내면 Exiting... 이라는 문자열과 함께 sdsiosloginfo.exe 파일이 존재하는 폴더에 로그가 저장된다.

 

4. 해당 파일을 확인하면 단말기 로그가 저장되어있으므로 확인해서 정보를 확인하면 끝!

반응형

'Hacking > Mobile' 카테고리의 다른 글

apktool decompile error solution  (0) 2019.04.24
APK 무결성 확인  (0) 2019.04.20
[IOS] Frida-trace  (0) 2019.01.17
[IOS] gdb와 cycript를 이용한 탈옥 탐지 우회  (0) 2019.01.04
VMware의 MacOS상에서의 IOS 인식  (0) 2019.01.03
블로그 이미지

rootable

,

[IOS] Frida-trace

2019. 1. 17. 23:42

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

반응형

VMWare에서 MAC 설치 후 USB로 연결한 IOS가 인식이 되지 않았다.

그래서 구글링하여 해결한 방법에 대해 공유하고자 한다.


내가 참고한 주소는 아래와 같다.

https://stackoverflow.com/questions/36139020/macos-on-vmware-doesnt-recognize-ios-device ]


간단하게 사진으로 보자.


1. VMware에서 MacOS 종료

 - 사진에서 보이는 Shut Down Guest 를 눌러 현재 켜져있는 MacOS를 종료시켜준다.


2. 설정 변경

 - Edit virtual machine settings를 눌러준다.


3. USB Controller의 설정 변경

 - Hardware 탭에 있는 USB Controller를 선택 후 USB compatibility를 USB 2.0으로 선택하고 밑에 체크부분을 모두 선택해준다.

 - 아마 기본적으로 USB 3.0으로 선택되어 있고 Show all USB input devices는 풀려있을 것이다.


4. 다시 MacOS를 실행시키고 IOS를 컴퓨터에 연결시켜주면 인식이 된다.



ps) 참고로 USB 3.0을 인식시키고 싶다면 VirtualBox에서 VirtualBox Extension Pack를 설치해주면 가능하다고 한다. 필요하다면 직접 해보시길


반응형

'Hacking > Mobile' 카테고리의 다른 글

[IOS] Frida-trace  (0) 2019.01.17
[IOS] gdb와 cycript를 이용한 탈옥 탐지 우회  (0) 2019.01.04
VMware에 Mac OS X El Capitan 설치  (0) 2018.12.26
IOS Memory Dump  (0) 2018.10.11
디버깅 탐지기능 확인  (0) 2018.05.25
블로그 이미지

rootable

,