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

처음 Private Key를 생성하고 나면 거의 활용할 때가 없는데..... 

한번씩 Vm에서 테스트할때되면 필요하게 되어 메모해 둔다.

1. 개인키 생성

keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000

 

2. 개인키로 서명

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore [my-release-key.keystore] [my_application.apk] [alias_name]

 

3. 개발자키로 서명

jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore [debug.keystore 위치] [서명할 앱] androiddebugkey

 

패스워드는 android

Posted by 워니후니빠
,

1. Requirement

chall03 메소드에서 True를 반환할 것

* 현재는 0 값을 반환하고 있음

 

2. Write UP

반환값을 수정해야 하는 메소드는 MainActivity 안에 있으며,

해당 메소드는 Java.use와 Java.choose 함수 모두 가능하다.

 

2.1. Frida 스크립트로 실행

2.1.1. Java.use

//Lab3_1.js
Java.perform(function(){
    console.log("[*]Starting Script!");
    var main;
    main = Java.use('uk.rossmarks.fridalab.MainActivity');
    main.chall03.implementation = function () {
        console.log('\n[*]Solved Challenge 3!!!!');
        return true;
    }
});

 프리다 실행 명령어를 통하여 스크립스 실행 : Frida -U -l Lab3_1.js uk.rossmarks.fridalab

2.1.2. Java.choose

//Lab3.js
Java.perform(function(){
    console.log("[*]Starting Script!");
    var main;
    Java.choose('uk.rossmarks.fridalab.MainActivity', {
    onMatch : function(instance){
        main = instance;
        console.log("Instance Matched!!");
        }, 
    onComplete : function(){
        console.log('[*]Callback functions are called!!!!');
        }        
    });
    main.chall03.overload().implementation = function () {
        console.log('\n[*]Solved Challenge 3!!!!');
        return true;
    }
});

 프리다 실행 명령어를 통하여 스크립스 실행 : Frida -U -l Lab3.js uk.rossmarks.fridalab

2.2. Python 스크립트로 실행

2.2.1. Java.use

//Lab3.py
import frida
import sys

jscode = """        
Java.perform(function(){ console.log("[*]Starting Script!"); 
var main; main = Java.use('uk.rossmarks.fridalab.MainActivity'); 
main.chall03.implementation = function () { 
    console.log('[*]Solved Challenge 3!!!!'); return true;
    } 
});
"""

process = frida.get_usb_device(1).attach('uk.rossmarks.fridalab')
script = process.create_script(jscode)
script.load()
print("Please Press Check!!")
input()

 Python 실행 명령어를 통하여 스크립스 실행 : python Lab3.py

2.2.2. Java.choose

//Lab3_1.py
import frida
import sys

jscode = """        
Java.perform(function(){
    console.log("[*]Starting Script!");
    var main;
    Java.choose('uk.rossmarks.fridalab.MainActivity', {
    onMatch : function(instance){
        main = instance;
        console.log("Instance Matched!!");
        }, 
    onComplete : function(){
        console.log('[*]Callback functions are called!!!!');
        }        
    });
    
    main.chall03.overload().implementation = function () {
        console.log('[*]Solved Challenge!!!!');
        return true;
    }
});
"""

process = frida.get_usb_device(1).attach('uk.rossmarks.fridalab')
script = process.create_script(jscode)
script.load()
print("Please Press Check!!")
input()

 Python 실행 명령어를 통하여 스크립스 실행 : python Lab3_1.py

'Android' 카테고리의 다른 글

FridaLab_frida challenge 2 풀이  (0) 2020.10.25
Frida 문법  (0) 2020.10.24
APK 서명(인증서 생성 및 서명)  (0) 2020.10.03
Toast 팝업 Smali 코드  (0) 2020.10.03
Ubuntu에 APMSetup 설치  (0) 2015.03.04
Posted by 워니후니빠
,

1. Requirement

chall02 메소드를 실행할 것

* 강제로 사용하지 않는 메소드(chall02)를 실행

 

2. Write UP

강제로 실행해야 하는 메소드는 MainActivity 안에 있으며,

해당 메소드는 Static 메소드가 아니라, Instance 메소드이다.

이와 같이 인스턴스화된 객체를 다루기 위해선 Java.use 함수가 아니라 Java.choose 함수가 사용되어야 한다.   


import frida

jscode = """

setImmediate(function(){    
    Java.perform(function(){
        console.log("Starting Script!");
        var main;
        Java.choose('uk.rossmarks.fridalab.MainActivity', {
        onMatch : function(instance){
            main = instance;
            console.log("Instance Matched!!");
            }, 
        onComplete : function(){
            console.log('Solved Challenge!!!!');
            }        
        });
        main.chall02();
    });
});
"""

process = frida.get_usb_device(1).attach('uk.rossmarks.fridalab')
script = process.create_script(jscode)
script.load()

 

'Android' 카테고리의 다른 글

FridaLab_frida challenge 3 풀이  (0) 2020.10.27
Frida 문법  (0) 2020.10.24
APK 서명(인증서 생성 및 서명)  (0) 2020.10.03
Toast 팝업 Smali 코드  (0) 2020.10.03
Ubuntu에 APMSetup 설치  (0) 2015.03.04
Posted by 워니후니빠
,

Frida 문법

Android 2020. 10. 24. 07:14

# 목차

 

1. Java.perform 

    현재 스레드가 가상머신에 연결되었는지 확인하고 function을 호출한다.

Java.perform(function(){
});

2. Java.use(ClassName) 

    메소드 후킹 시 사용한다.

var myClass = Java.use(com.mypackage.name.class)
//앱에서 사용하는 클래스와 연동되는 myclass를 정의한다.

var myClassInstance = myclass.$new();
//myClass를 통해 객체 인스턴스 생성 및 정의를 한다.

var result = myClassInstance.myMethod("param")
//클래스 내부에 있는 매소드에 접근해 인자 값을 넘겨주고 해당 값을 result에 받는다.

myClass.myMethod.implementation = function(param){
//.implementation : 앱에서 정의된 매소드의 구현 내용을 재작성한다.
}

3. Java.choose(className, callbacks)

    힙에서 인스턴스화 된 객체 찾기 가능

    Callbacks : onMatch, onComplete

    - onMatch : 실시간으로 인스턴스에 대해 호출

    - onComplete : function()의 모든 인스턴스가 열거될 때 호출

Java.perform(function(){
    console.log("Starting Script!");
    var main;
    Java.choose(com.mypackage.name.class, {
    onMatch : function(instance){
        main = instance;
        console.log("Instance Matched!!");
        }, 
    onComplete : function(){
        console.log('Solved Challenge!!!!');
        }        
    });
    main.[method name()];
});

 

4. Java.setImmediate(fn)

    Frida는 단말기가 느려질 때 자동으로 프로세스를 종료하는 특성이 있다.

    이러한 경우를 방지하기 위해 setImmediate()를 사용한다.

    백그라운드로 자동으로 스크립트가 재실행되어 종료되지 않는다.

setImmediate(function(){
    console.log("[+] Starting script");

    Java.perform(function(){
        myClass = Java.use("com.package.name.class.name");
        myClass.implementation = function(v){
    })
})

 

5. overload

    오버로딩(Overloading)을 구현하기 위하여 overload()를 제공한다.

    오버로딩은 하나의 클래스 내에 동일한 이름의 메소드가 매개변수 정보를 달리하여

    여러 개 존재하는 것을 말한다.

   

myClass.myMethod.overload().implementation = function(){
//입력받는 인수가 없는 메소드
}

 

참고 사이트 

cha3m.tistory.com/90

 

'Android' 카테고리의 다른 글

FridaLab_frida challenge 3 풀이  (0) 2020.10.27
FridaLab_frida challenge 2 풀이  (0) 2020.10.25
APK 서명(인증서 생성 및 서명)  (0) 2020.10.03
Toast 팝업 Smali 코드  (0) 2020.10.03
Ubuntu에 APMSetup 설치  (0) 2015.03.04
Posted by 워니후니빠
,

1. 인증서 생성

 

1
keytool -genkey -alias changkr -keyalg RSA -validity 20000 -keystore changkr.keystore
cs

2. 서명

1
jarsigner -verbose -keystore [keystore 경로] [apk 경로]
cs

 

'Android' 카테고리의 다른 글

FridaLab_frida challenge 2 풀이  (0) 2020.10.25
Frida 문법  (0) 2020.10.24
Toast 팝업 Smali 코드  (0) 2020.10.03
Ubuntu에 APMSetup 설치  (0) 2015.03.04
각 제조사별 휴대폰 테스트 코드  (0) 2014.09.07
Posted by 워니후니빠
,

Toast 팝업 Smali 코드

Android 2020. 10. 3. 23:27
1
2
3
4
5
const-string v1, "Toast Message Jae-wook"
const/4 v2, 0x1
invoke-static {p0, v1, v2}, Landroid/widget/Toast;->makeText(Landroid/content/Context;Ljava/lang/CharSequence;I)Landroid/widget/Toast;
move-result-object p0
invoke-virtual {p0}, Landroid/widget/Toast;->show()V
cs

 

'Android' 카테고리의 다른 글

Frida 문법  (0) 2020.10.24
APK 서명(인증서 생성 및 서명)  (0) 2020.10.03
Ubuntu에 APMSetup 설치  (0) 2015.03.04
각 제조사별 휴대폰 테스트 코드  (0) 2014.09.07
안드로이드 빌드 환경 구성 (3)  (0) 2014.07.03
Posted by 워니후니빠
,

Static IP 설정에 대한 내용은 많은 자료에 나와 있는데, 

DNS와 Gateway 설정에 대한 그나마 정확한 설명을 하고 있는 자료는 많지 않았다. 


나또한 Pen Test 하는데에는 문제가 없었는데, 

Static IP로 셋팅하고 나서는 인터넷 접속이 안되는 점을 발견하고 

대략 1시간 구글링 끝에 해결방법을 찾아서 메모하고자 한다.


VMware Workstation 기준으로 설명한다. 



[VMware의 Gateway 확인]


  1.  [Edit] - [Virtual Network Editor]에 들어간다. 
  2. Virtual Network Editor 창에서 NAT를 선택하고, NAT Settings 버튼을 누른다.
  3. NAT Settings 창에서 나오는 Gateway IP를 잘 기억해 둔다.
     


[Static IP 설정단계]

1. 터미널을 연다. 
2. vim /etc/network/interfaces

   


3. 고정 IP, Netmask, 앞에서 확인한 Gateway 등을 입력한다. 나의경우는 "192.168.116.100"으로 IP를 고정하였다.


   


4. 인터넷을 사용하기 위해서는 DNS 서버를 지정해야 한다. vim /etc/resolv.conf


5. 대표적인 DNS ,서버 주소를 입력한다. 나의 경우는 168.126.63.1을 추가로 입력하였다. "nameserver 168.126.63.1"




6. 재부팅하면 DNS 주소가 리셋되는 것을 방지하기 위하여 resolv.conf 파일의 권한을 읽기전용으로 변경한다. "chmod u-w /etc/resolv.conf"



7. network를 재구동한다. /etc/init.d/networking restart




Posted by 워니후니빠
,

Ubuntu에서 Oracle JDK를 설치하다 보면 아래와 같은 에러가 발생하는 경우가 있습니다.

Download done.
Removing outdated cached downloads...
sha256sum mismatch jdk-7u51-linux-x64.tar.gz
Oracle JDK 7 is NOT installed.
dpkg: error processing oracle-java7-installer (--configure):
 subprocess installed post-installation script returned error exit status 1
Setting up gsfonts-x11 (0.22) ...
Errors were encountered while processing:
 oracle-java7-installer
E: Sub-process /usr/bin/dpkg returned an error code (1)

원인은 Oracle JDK 저장소에서 설치파일을 가져올 때 정상적인 resolving이 수행되지 않았기 때문으로 보입니다.

'/var/cache/oracle-jdk7-installer' 디렉토리에 들어가보면 설치 파일인 'jdk-7u65-linux-x64.tar.gz'의 용량이 0으로 표시됨을 알 수 있습니다.

즉, 다운로드가 정상적으로 수행되지 않은 것입니다.

Oracle 사이트 접속 후 jdk7 다운로드

http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

'Accept License Agreement'를 선택하신 후 'jdk-7u65-linux-x64.tar.gz(64bit 전용)', 'jdk-7u65-linux-i586.tar.gz(32bit 전용)' 중 PC 환경에 적합한 파일을 다운로드 합니다.

※ 만약 파일명이 'jdk-7u65-linux-x64.gz'이라면 파일 명을 'jdk-7u65-linux-x64.tar.gz'로 수정해줍니다.

파일 경로 이동

다운로드 완료된 'jdk-7u65-linux-x64.tar.gz' 파일을 '/var/cache/oracle-jdk7-installer' 디렉토리로 이동합니다.

Oracle JDK 7 설치

sudo apt-get install oracle-java7-installer

다시 한번 apt-get을 활용하여 JDK7을 설치해줍니다

 

[출처] http://justckh.blogspot.kr/2014/07/ubuntu-oracle-jdk-7-is-not-installed.html

'Ubuntu' 카테고리의 다른 글

Ubuntu Java 버전 변경하기  (0) 2017.07.12
Posted by 워니후니빠
,

설치된 자바 리스트 보기

  • sudo sudo update-java-alternatives --list

자바 버전 바꾸기

  • sudo update-java-alternatives -s java-6-oracle


출처: 
http://gocoding.tistory.com/19 [Developer Factory]



'Ubuntu' 카테고리의 다른 글

Ubuntu Oracle JDK 7 is NOT installed 해결법  (0) 2017.07.12
Posted by 워니후니빠
,