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 워니후니빠
,

ㅇ Ubuntu 12.04 LTS 기준으로 Apache + MySQL + APMSetup을 설치하는 과정입니다.

ㅇ Apache 설치

  • $ sudo apt-get install apache2
  • 설치확인 : 웹브라우저에서 http://loacalhost/를 입력하여 화면에 "It's work!!"라는 문구가 뜨면 설치 성공

ㅇ MySQL 설치

  • sudo apt-get install mysql-server mysql-client  (설치중에 mysql의 root 유저의 비밀번호를 설정한다. 물론 리눅스 계정의 비번과 다른 걸 의미한다..)
  •  MySQL 인증모듈 설치 : sudo apt-get install libapache2-mod-auth-mysql
  •  MySQL 기본 DB 설치 :  sudo mysql_install_db
  •  MySQL 기본 보안 설정 : sudo /usr/bin/mysql_secure_installation (root 패스워드 설정 등)

ㅇ PHP 설치

  • sudo apt-get install php5
  • Apache와 PHP 연동 $ sudo apt-get install libapache2-mod-php5
  • PHP와 MySQL 연동  $ sudo apt-get install php5-mysql
  • php5-mcrypt $ sudo apt-get install php5-mcrypt
  • PHP를 명령 프롬프트에서 사용하기 $ sudo apt-get install php5-cli
  • 그 밖의 php5 모듈 찾는 법 $ sudo apt-cache search php5-

ㅇ phpMyAdmin 설치

    1) 구버전 사용하기

  • $ sudo apt-get install phpmyadmin

    2) 구버전이 싫으면?

  • $ sudo apt-get install python-software-properties
  • $ sudo add-apt-repository ppa:nijel/phpmyadmin
  • $ sudo apt-get update
  • $ sudo apt-get install phpmyadmin
  • $ dpkg -l phpmyadmin

ㅇ localhost/phpmyadmin 열리지 않을때..

  •  MySQL을 편리하게 관리할 수 있는 툴 "phpmyadmin"을 apt-get으로 로컬에 설치한 후  http://127.0.0.1/phpmyadmin 에 접속을 했을 때 정상적으로 접속이 안된다.
  • 이유는 phpmyadmin의 conf 파일이 아파치 설정파일에서 로드가 되지 않고 있기 때문이다.
  • 해결방법: # phpmyadmin 설정파일인 /etc/phpmyadmin/apache.conf 에 apache의 설정파일에서 로드하도록 설정을 해준다.
  • 아래 파일을 루트 권한으로 열어 편집한다.
    •  sudo gedit /etc/apache2/apache2.conf
    • apache2.conf 파일의 마지막 부분에 아래처럼 추가해준다.
      • Include /etc/phpmyadmin/apache.conf
    • 파일을 저장 후에 아파치 서버를 리스타트한다.
      • sudo /etc/init.d/apache2 restart
  •  웹브라우저에서 확인한다. 접속시에 요구되는 아이디와 패스워드는 초기에 phpmyadmin을 설치할 때 설정한 정보대로 입력을 하면된다.

 ㅇ  설치확인 

      1)  데몬이 대기중인 포트 확인 

  • $ sudo netstat -antp | grep apache2
  • $ sudo netstat -antp | grep mysqld

      2)  PHP와 Apache 연동 확인

  •   $ sudo vi /var/www/phpinfo.php

<?php

phpinfo();

?>

 


  • 웹브라우저에서 http://서버IP/phpinfo.php 로 확인한다.
Posted by 워니후니빠
,

ㅇ 중고폰 구매 또는 핸드폰 상태 점검을 위해서 유용하게 사용할 수 있는 제조사별 휴대폰 코드입니다. 

 

ㅇ 출처 :http://cafe.naver.com/smartplatform/6932

삼성

*#0*#  (최신 휴대폰 및 태블릿 모두 적용)
*#7353#

319712358 ( sk 996412 kt 774632 lg 0821)
*#4636#
*#1234#
*#2208#
*#86824#

*#9900#


팬텍
##1199 (베스파 베레2 갈삼 확인됨)
#8378522# 


엘지
3845#*모델번호# (ex 옵프로는 3845#*240#) 

5457#*모델넘버#


HTC
*#*#4636#*#*
*#*#3424#*#*


 소니
*#*#7378423#*#*  


 테이크
*#*#80292310#*#* 


 애플(iOS)
*3001#12345#* 


갤럭시 넥서스 

 *#*#4636#*#* 

'Android' 카테고리의 다른 글

Toast 팝업 Smali 코드  (0) 2020.10.03
Ubuntu에 APMSetup 설치  (0) 2015.03.04
안드로이드 빌드 환경 구성 (3)  (0) 2014.07.03
안드로이드 빌드 환경 구성 (2)  (0) 2014.06.30
플래싱 파일 만들기  (0) 2014.06.30
Posted by 워니후니빠
,

안드로이드 커널 빌드에 필요한 패키지를 설치한다. http://source.android.com/source/initializing.html에 따라, 아래와 같은 패키지를 설치하면 되는데, libgl1-mesa-glx:i386를 설치하면, 디스플레이와 관련된 Ubuntu 패키지를 삭제하게 되어 부팅시 먹통이 된다. 이를 방지하기 위해서는 아래와 같은 절차가 추가로 필요하다.

출처1 http://blog.naver.com/PostView.nhn?blogId=kukhyun1234&logNo=130178131221

출처2 http://source.android.com/source/initializing.html

  • sudo apt-get install libgl1-mesa-glx:i386
  • 의존성에 걸려있는 패키지 때문에 설치 불가 메세지가 나오면, dependecy 패키지를 먼저 설치하고 apt-get install libgl1-mesa-glx:i386   패키지를 설치한다. 그 후에 아래에 순서대로 패키지를 설치한다.
  • sudo apt-get install git gnupg flex bison gperf build-essential \
    zip curl libc6
    -dev libncurses5-dev:i386 x11proto-core-dev \
    libx11
    -dev:i386 libreadline6-dev:i386 libgl1-mesa-glx:i386 \
    libgl1
    -mesa-dev g++-multilib mingw32 tofrodos \
    python
    -markdown libxml2-utils xsltproc zlib1g-dev:i386
  • sudo ln -s /usr/lib/i386-linux-gnu/mesa/libGL.so.1 /usr/lib/i386-linux-gnu/libGL.so
  • 여기서 부터 중요
  • sudo apt-get install ubuntu-desktop
  • sudo apt-get update
  • sudo apt-get install xserver-xorg-video-intel libgl1-mesa-dri libgl1-mesa-glx libglu1-mesa libosmesa6 mesa-utils
  • sudo dpkg-reconfigure xorg -phigh
  • sudo reboot

 

'Android' 카테고리의 다른 글

Ubuntu에 APMSetup 설치  (0) 2015.03.04
각 제조사별 휴대폰 테스트 코드  (0) 2014.09.07
안드로이드 빌드 환경 구성 (2)  (0) 2014.06.30
플래싱 파일 만들기  (0) 2014.06.30
안드로이드 빌드 환경 구성 (1)  (0) 2014.06.30
Posted by 워니후니빠
,

http://source.android.com/source/initializing.html 상에는 openjdk를 설치하는 것으로

   나와 있으나, 대부분 openjdk를 지우고, JAVA 6 이상 설치하는 것을 권장하고 있다.

   사실 source.andorid.com에서 이야기하는 건, 옛날버전의 SDK 환경을 구성할 때 JAVA 5

   내지 6을 필요로 한다는 식으로 되어 있으나, 인터넷 블로거님들의 의견을 받들어,

   나도 JAVA 7을 설치하였다. 분명한 건 Cross Compile Chain을 이용하여 컴파일 할 때 

   애러가 날 때 그 원인이 JAVA 버전일 수도 있음을 기억해 두자

To develop older versions of Android, download and install the corresponding version of the Java JDK:
Java 6: for Gingerbread through KitKat
Java 5: for Cupcake through Froyo

  <source.android.com 해당 부분 발췌>

 

1. JAVA 7에 대한 Repo를 등록하고, 설치한다.

    openjdk가 설치된 경우라면, openjdk는 삭제하고 설치해 주는 것이 좋다.

  • sudo add-apt-repository ppa:upubuntu-com/java
  • sudo apt-get update
  • sudo apt-get install oracle-java7-installer

           oracle-java7-installer 설치시 애러가 발생하는 경우는 다음과 같이 해결할 수 있다.

           (출처 : http://askubuntu.com/questions/163429/error-when-installing-oracle-java7-installer)

  • sudo rm /var/lib/dpkg/info/oracle-java7-installer*
  • sudo apt-get purge oracle-java7-installer*
  • sudo rm /etc/apt/sources.list.d/*java*
  • sudo apt-get update
  • sudo add-apt-repository ppa:webupd8team/java
  • sudo apt-get update
  • sudo apt-get install oracle-java7-installer

2. JAVA PATH에 대해서 환경변수 등록을 한다.

  • gedit ~/.bashrc
  •  JAVA_HOME=/usr/lib/jvm/java-7-oracle

     export JAVA_HOME

     export PATH=$PATH:$JAVA_HOME/bin

     export CLASSPATH=.:$JAVA_HOME/lib/* 

  • source ~/.bashrc  

3. JAVA 기본환경을 다음과 같이 지정해 줄 수 있다. 

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

'Android' 카테고리의 다른 글

Ubuntu에 APMSetup 설치  (0) 2015.03.04
각 제조사별 휴대폰 테스트 코드  (0) 2014.09.07
안드로이드 빌드 환경 구성 (3)  (0) 2014.07.03
플래싱 파일 만들기  (0) 2014.06.30
안드로이드 빌드 환경 구성 (1)  (0) 2014.06.30
Posted by 워니후니빠
,

플래싱 파일 만들기

Android 2014. 6. 30. 16:46

 

Posted by 워니후니빠
,