Function call : shift + f4

문자열 검색창 : shift + f12

검색한 문자열 클릭후 X 클릭시 변수 참조하는 모든 주소 출력

주소로 이동 : g 키 > 주소를 입력해야함

디컴파일(Smail을 분석 코드로 변조) : F5

Graph ↔ Text change : Space

이름 변경 : n 키

돌아가기 : ESC

대략적인 함수 진행 : view -> Graphs

전체화면 : W 키

 

 

Android

decompile된 파일명\lib\arm64-v8a\lib.so

classdex 

 

ios

ipa 파일 내 가장 binary가 큰 앱 파일

 

'APP 모의해킹 > Setting' 카테고리의 다른 글

Burp Fiddler 연동  (0) 2023.07.10
TCP Proxy  (0) 2023.04.04
Objection + frida-trace  (0) 2023.04.04
Anaconda Setting for virtual environment + frida  (0) 2023.03.23
pip 인증서 문제  (0) 2023.03.22

1. openssh install

2. Frida 

https://build.frida.re/

수동으로 넣을려면 /usr/sbin/ 아래에 frida-server를 넣는다.

3. Cracker XI

https://cydia.iphonecake.com/

 

How to Install AppCake | AppCake Cydia Repo

Best iOS App Installer AppCake. AppCake is the most advanced iOS Cracked Apps Installer. It can install cracked iOS apps; install DEB files; download magnet & .torrent files. How To Install AppCake

cydia.iphonecake.com

4. fridump3

python fridump3 -u -r -s [pid]

https://github.com/rootbsd/fridump3

 

GitHub - rootbsd/fridump3: A universal memory dumper using Frida for Python 3

A universal memory dumper using Frida for Python 3 - GitHub - rootbsd/fridump3: A universal memory dumper using Frida for Python 3

github.com

5. ios dump

https://github.com/AloneMonkey/frida-ios-dump

 

GitHub - AloneMonkey/frida-ios-dump: pull decrypted ipa from jailbreak device

pull decrypted ipa from jailbreak device. Contribute to AloneMonkey/frida-ios-dump development by creating an account on GitHub.

github.com

[Errno None] Unable to connect to port 22 on 에러 뜨는건 Openssh 미설치이기 떄문

DUMP_JS = os.path.join(script_dir, 'dump.js')

User = 'root'
Password = 'alpine'
Host = 'ios IP'
Port = 22
KeyFileName = None

5. Filza

6. Shuffle

설정 트윅을 정리해서 보여줌

https://creaturecoding.com/repo

7. AppSync Unified

비인가 IPA 앱 파일을 설치하기 위해서 사용함

https://cydia.akemi.ai

8. apple file conduit "2"

3utools내 파일을 jailbreak 폴더까지 보이게 해준다.

9. A-bypass

https://repo.rpgfarm.com/

preferenceloader 추가 설치 필요 

 

'APP 모의해킹 > iOS' 카테고리의 다른 글

palera1n ios 15~16 탈옥방법 with 맥북  (0) 2023.06.18
Tweak setting  (0) 2023.04.23
iOS 탈옥 탐지 우회 예시 코드 [추가 업로드예정]  (0) 2023.03.30
iOS 정적 분석  (0) 2023.03.30
iOS 진단 코드  (0) 2023.03.21

보안이란 권한이 없는 타인이 정보를 수집하지 못하도록 안전하게 보호하는 것이다.

 

이것의 첫 걸음이 Hash라 생각이 된다. 만약 데이터를 평문으로 저장한다고 생각해보자.

그러면 데이터가 속한 서버를 접속하게 된다면 쉽게 데이터를 탈취할 수 있다.

인가되지 않은 누군가가 접속하더라도 최대한 보안을 2중 3중으로 막기 감싸기 위해 암호화가 필수이다.

이를 위해 현재 Https 통신의 경우 암호화 송수신 알고리즘으로 다른 사람들이 쉽게 데이터를 복호화하지 못하게 하는 것이다.

 

Hash의 종류

 

단방향 해시(One-way Hash)

이 경우는 아래와 같이 암호화 알고리즘으로 복호화하지 못하게 하여 데이터를 안전하게 보호하는 것인데

이것의 문제점은 하나의 알고리즘으로 계속해서 암호화하기 때문에 123456이라는 데이터를 암호화한 값이 항상 똑같아서 반복된 분석으로 시간이 지나면 나중에는 유추가능하다는 단점이 존재한다.

이러한 데이터를 정리한 것을 레인보우 테이블(Rainbow table)이다. ex) sha-256 rainbow table

단방향 해시 값을 레인보우 테이블에 넣게되면 안에 들어있는 데이터와 비교해 암호화 전 데이터로 복호화해준다

보완 방향

1. Key Stretching

그러면 기존에 알려진 암호화된 데이터를 정리한 Rainbow table을 이용한 복호화 가능성을 막기 위해서는 두번 암호화하는 것도 방법이다.

이 경우는 해커가 어떠한 데이터인지 분석하는데 시간이 더 걸리고 심지어 못찾을 가능성도 있기 때문에 다양한 알고리즘으로 두번 암호화한다면 좀더 안정적 일것이다.

 

2. 솔트(Salt) 

솔트란 음식을 요리할때 사용하는 조미료다. 추가적으로 넣는다는 느낌으로 암호화 할때 추가적으로 데이터를 삽입하여 암호화 하는 것이다. 이 경우 데이터를 기존에 알려진 알고리즘을 이용하여 분석하기 어려워 진다. 즉 어떠한 데이터 인지 분석이 훨씬 더 어려워 지는 것이다.

 

아래와 같이 암호화 할때마다 Salt값을 넣어 암호화하게 된다면 분석하기 매우 어려워 데이터를 조금 더 안전하게 보호 가능할 것으로 보인다.

 

+ 다만.. 암호화 알고리즘이 클라이언트 단에 있기 때문에 해커가 쉽게 접근이 가능하다. 그렇기 알고리즘을 최대한 어떻게 감추는게 포인트고 알고리즘을 이해하기 어렵게 하는 것이 중요하다.

일반적인 ios 후킹 코드

console.log("[*] Started: Hooking"); 
if (ObjC.available) {
    try {
        var className = "Class 명";
        var funcName = "메소드 명";
        var hook = eval('ObjC.classes.' + className + '["' + funcName + '"]');
        var newretval = ptr('0x0');

        Interceptor.attach(hook.implementation,{
            onLeave : function(retval) {console.log("[*] Class Name : " + className);
            console.log("[*] Function Name : " + funcName);
            console.log("[+] type of return value : " + typeof retval);
            console.log("[-] return value : " + retval);
            retval.replace(newretval);
            console.log("[-] new return value : " + retval);
            
        }});}
    catch(err) { console.log("[!] Exception2: " + err.message); } } 
else { console.log("not aVailable!")}

Ida를 이용한 메모리 주소를 추가하여 해당 반환값을 변조하는 코드

var targetMobile = 'DVIA-v2';
var addr = ptr(0x1949A8);
var moduleBase = Module.getBaseAddress(targetMobile);
var targetAddress = moduleBase.add(addr);


Interceptor.attach(targetAddress, {
    onEnter: function(args) {
        console.log('Address Entered: ' +addr + 'args: '+ args[2]);
    },
    onLeave: function(retval){
        console.log('retval: '+retval);
        retval.replace(0x0);
        console.log('modify: '+ retval);
    }
});

UI dump 출처 : https://hackcatml.tistory.com/57

frida -U DVIA-v2 -l UI_dump.js

var window = ObjC.classes.UIWindow.keyWindow();
var rootControl = window.rootViewController();

var ui = window.recursiveDescription().toString();
var ui_autolayout = window['- _autolayoutTrace']().toString();
var control = rootControl['- _printHierarchy']().toString();

// 전체 UI 계층 출력하고 싶은 경우    
// console.log("\n\x1b[31m" + ui + "\x1b[0m"); 

// Simplified recursiveDescription
// console.log("\n\x1b[34m" + ui_autolayout + "\x1b[0m");

// 현재 화면에 보여지는 UIController를 알고 싶은 경우
console.log("\n\x1b[32m" + control + "\x1b[0m");

 

'APP 모의해킹 > iOS' 카테고리의 다른 글

palera1n ios 15~16 탈옥방법 with 맥북  (0) 2023.06.18
Tweak setting  (0) 2023.04.23
iOS Setting  (0) 2023.04.03
iOS 정적 분석  (0) 2023.03.30
iOS 진단 코드  (0) 2023.03.21

Info.plist : 번들 ID, 버전번호, 메타데이터

- iOS 앱의 중요 정보 포함

- 앱에 대한 필수 구성정보 설명

- 키-값의 구조

- 모든 번들 실행 파일 정보 포함

- XML 또는 bplist 형식

- url scheme도 존재

- 앱 권한 (UsageDescription)

-  App Transport Security(ATS)설정 ➔ NSAppTransportSecurity

 

Library/ ➔ 캐시, 환경설정, 쿠키 및 속성 목록 (plist) 구성파일

Library/Caches/ ➔ 반영구 캐시 파일로 사용불가 및 백업 없음, 저장공간 정리 시 제거

Library/Application Support/ ➔ 앱 실행에 필요한 파일, 사용자에게 안보임 컨텐츠 백업(NSURLIsExcludedFromBackupKey)

 Library/Preferences ➔ 앱 재시작시에도 유지되는 속성 BUNDLEID.plist에 암호화 되지 않은 상태로 저장 NSUserDefaults 존재

tmp/ ➔ 앱 실행에 유지할 필요가 없는 임시 파일

/private/var/mobile/Containers/Data/Application/[app uuid]/Libaray/Cookies ➔ 쿠키 경로

 

디버깅 로그 내 중요정보 노출 여부

➔ 3uTools Realtime-log

➔ /var/mobile/Containers/Data/Application/[앱uuid]

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

 

Keychain

➔ 앱 실행 시 민감한 정보를 저장하는 sqlite

➔ 주요정보(인증토큰, 비밀번호) 평문 저장

https://github.com/ptoomey3/Keychain-Dumper/releases

 

Releases · ptoomey3/Keychain-Dumper

A tool to check which keychain items are available to an attacker once an iOS device has been jailbroken - ptoomey3/Keychain-Dumper

github.com

Objection

# objection을 이용한 keychain dump
pip install objection
frida-ps -Uai
objection -g [packagename] explore
ios keychain dump

++
# 추가기능
# 탈옥 탐지 로직 우회
ios jailbreak disable
# ssl pinning
ios sslpinning disable

백그라운드 이미지 내 중요 정보 저장 여부

var/mobile/Containers/Data/Application/[Bundle_id]/Library/SplashBoard/Snapshots/sceneID:com.test.test-default/*.ktx
var/mobile/Containers/Data/Application/[Bundle_id]/Library/SplashBoard/Snapshots/sceneID:com.test.test-default/downscaled/*.ktx

 

'APP 모의해킹 > iOS' 카테고리의 다른 글

palera1n ios 15~16 탈옥방법 with 맥북  (0) 2023.06.18
Tweak setting  (0) 2023.04.23
iOS Setting  (0) 2023.04.03
iOS 탈옥 탐지 우회 예시 코드 [추가 업로드예정]  (0) 2023.03.30
iOS 진단 코드  (0) 2023.03.21

iOS도 기본적으로 안드로이드와 동일한 방식으로 후킹한다.

둘 다 특정 함수가 호출되는 시점을 잡기 떄문이다.

 

Hooking  시 사용하는 JAVA  API에 간략하게 설명하겠다.

setImmediate(fn): Hooking이나 함수 Holding으로 앱 실행이 늦어질 때 timeout으로 종료되는 것을 방지한다.
Java.Perform(fn): 스레드가 가상머신에 연결되었는지 확인하고 함수(fn)를 호출한다.
Java.androidVersion : 사용하고 있는 안드로이드 버전의 기기를 반환함
Java.enumerateLoadedClasses(callback): 
- onMatch(이름, 핸들):에 지정된 개체가 자바스크립트 래퍼를 가져오기 위해 use()할 수 있는 이름을 가진 로드된 각
클래스에 대해 호출되는 클래스를 열거.
- onComplete(): 모든 클래스가 열거되면 호출

 

예시1 ➔ 안드로이드 내 고유 함수 후킹

Java.perform(function(){
    const objS = Java.use("java.lang.String");
    console.log("[*] Hooking Start");

    objS.equals.overload('java.lang.String').implementation = function(arg0){
        console.log(arg0);
        var data = this.equals(arg0);
        return data;
    };
    console.log("[*] Hooking End");
});

예시 2 ➔ 클래스 메소드 순차 후킹

setTimeout(function() { // avoid java.lang.ClassNotFoundException

	Java.perform(function() {

		var hook = Java.use("루팅 탐지 Class 명"); // 루팅 탐지 클래스
		console.log("");
		console.log("info: hooking target class");
	
		// 아래에 메소드
		hook.isEmulator.overload().implementation = function() {
			console.log("info: entered target method");
			
			// obtain old retval
			var retval = this.isRooted.overload().call(this);
			console.log("old ret value: " + retval);

			// set new retval
			var retnew = false;
			console.log("new ret value: " + retnew);
			return retnew;
		}

	});   

}, 0);

예시 3 ➔ 해당 Class가 생성한 인스턴스가 생길 시 후킹

Java.perform(function() {
    Java.choose("com.examplePackage.exampleClass",
    {
        /* when instance founded, 'onMatch` function will called */
        onMatch: function(instance)
        {
            console.log("[+] Instance Found! Hook Start");
        },    

        /* when their action is finished, 'onComplete' function will called */
        onComplete: function()
        {
            console.log("[*] Instance Finished");
        }
    });
});

메모리 단 후킹 예시

libnative-lib.so 라이브러리 내에 있는 Jniint() 메소드 후킹하여 해당 메소드가 동작시 메모리 주소에 접근하여 변조한다.

후킹 메소드의 메소드만 알 경우 findExportByname(null , "fopen") 를 써도 된다.

Interceptor.attach(Module.getExportByName('libnative-lib.so', 'Jniint'),{
onEnter: function(args) {
this.first = args[0].toInt32();
console.log("on enter with : " + this.first)
},
onLeave : functin(retval){
const dstAddr = Java.vm.getEnv().newIntArray(117878);
console.log("dstAddr is : " + dstAddr.toInt32())
retval.replace(dstAddr)
}
});

'APP 모의해킹 > Android' 카테고리의 다른 글

루팅 탐지 우회 모듈  (0) 2023.04.11
Scrcpy 안드로이드 앱 화면 공유  (0) 2023.04.11
Burp 인증서 설치  (0) 2023.03.28
안드로이드 무결성 검증  (0) 2023.03.28
Activity 강제실행  (0) 2023.03.28

+ Recent posts