http://taesun1114.tistory.com/entry/안드로이드-프록시-사용-유무-체크에서 포스팅했던 Proxy Check하는 App을 이용하여 Proxy Check를 우회해 보려고 합니다.
Frida 공식 홈페이지는 아래와 같으며, 홈페이지를 통해 여러 정보를 획득할 수 있습니다.
https://www.frida.re/docs/home/
Test App Souce)
package com.example.gnsan.myapplication;
import android.content.DialogInterface;
import android.support.v7.app.AlertDialog;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.*;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView textview = (TextView)findViewById(R.id.test);
if(System.getProperty("http.proxyHost")!=null) {
AlertDialog.Builder alert = new AlertDialog.Builder(this);
alert.setPositiveButton("확인", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
android.os.Process.killProcess(android.os.Process.myPid());
}
});
alert.setMessage("Denied Proxy");
alert.show();
textview.setText(System.getProperty("http.proxyHost"));
}
}
}
프록시 유무를 체크한 후, 프록시를 사용중이라면 알림을 띄운 후 앱을 종료하는 간단한 소스입니다.
<프록시 사용 x> <프록시 사용 o>
프록시를 우회하는 Frida Code는 다음과 같습니다.
import sys
import frida
def on_message(message,data):
print "[RET Value] -> %s" % (message)
PACKAGE_NAME = "com.example.gnsan.myapplication"
jscode = """
Java.perform(function(){
var System = Java.use("java.lang.System"); //System.getProperty함수는 java.lang.System
System.getProperty.overloads[0].implementation = function(prop){
return ; // 프록시를 사용하지 않을 때 getProperty함수는 null을 리턴함
}
});
"""
try:
device = frida.get_usb_device(timeout=10)
pid = device.spawn([PACKAGE_NAME]) //Packagename으로 앱을 찾음
print("App is starting ... pid : {}".format(pid))
process = device.attach(pid)
device.resume(pid) //resume을 해주지 않으면 화면을 불러올 수 없음
script = process.create_script(jscode)
script.on('message',on_message)
print('[*] Running Frida')
script.load()
sys.stdin.read()
except Exception as e:
print(e)
출처: http://hyunmini.tistory.com/111?category=523090 [Hyunmini]
-----------------------------------------------------------------------------------
실패한 jscode
var isproxy = Java.use("java.lang.System");
isproxy.getProperty.implementation=function(a){
//overloads를 해주지 않으면 error
//어느경우에 overload를 하는지 아시는분은 댓글로 부탁드립니다
//overload는 다음을 통해 알게됨 : 출처: http://hyunmini.tistory.com/111?category=523090 [Hyunmini]
console.log("getProperty's called!");
this.getProperty();
};
var test = Java.use("java.lang.System");
Interceptor.attach(Module.findExportByName(null,'getProperty'),{
//findExportByName으로 getProperty를 찾으려했으나 실패함
onLeave: function(retVal){
console.log("HI");
var orig_rtn = retVal.toString();
send("return vallue :"+orig_rtn);
retVal.replace("null");
}
};
-----------------------------------------------------------------------------------
.overload() Example
.overload('java.lang.String')
.overload('android.app.Activity')
.overload('int')
.overload('[B') // byte array
.overload('float')
.overload('android.content.Context')
.overload('[C')
.overload('android.content.Context', 'android.view.View')
.overload('android.app.Activity', 'com.cherrypicks.hsbcpayme.model.object.PayMeNotification')
.overload('android.content.Context', 'boolean')
.overload('android.content.Context', 'int')
.overload('android.content.Context', 'java.lang.String')
.overload('android.app.Activity', 'int')
.overload('java.lang.String', 'java.lang.String')
.overload('android.content.Context', 'android.graphics.Bitmap')
.overload('java.lang.String', 'java.io.File')
.overload('android.content.Context', 'java.lang.String', 'java.util.List')
.overload('java.lang.String', 'java.lang.String', 'java.lang.String')
.overload('java.lang.String', '[B', '[B')
.overload('java.lang.String', 'java.lang.String', 'android.content.Context')
.overload('android.app.Activity', 'com.cherrypicks.hsbcpayme.model.object.PayMeNotification', 'int')
.overload('[B', '[B', '[B')
.overload('android.content.Context', 'java.lang.String', 'java.lang.String')
.overload('android.app.Activity', 'int', 'int', 'int', 'boolean')
'Mobile' 카테고리의 다른 글
Frida를 이용한 앱 실행 중 로드하는 클래스 확인 (2) | 2018.01.03 |
---|---|
Apktool Error (apktool.yml) (0) | 2018.01.03 |
IOS SSL(HTTPS)통신하기 (0) | 2018.01.02 |
Android Device Monitor 실행 에러 (0) | 2017.12.28 |
안드로이드 프록시 사용 유무 체크 (0) | 2017.12.26 |