Android APP又抓不到包?试试这个思路

admin 2023年9月22日23:30:17评论22 views字数 4294阅读14分18秒阅读模式

在Android APP中,有可能会用到okhttp3这个库。

OkHttp 是一个用于 Android 和 Java 应用的开源 HTTP 客户端库,用于高效地发送和接收 HTTP 请求和响应。该库由 Square, Inc. 开发,并且是一种流行的网络请求库。

使用Android Studio新建一个新项目:

在包名下面创建一个MainActivity类,我的包名是com.example.ok3noproxy:

package com.example.ok3noproxy;
import androidx.annotation.RequiresApi;import androidx.appcompat.app.AppCompatActivity;import android.os.Build;import android.os.Bundle;import android.os.Looper;import android.view.View;import android.widget.Toast;import java.io.IOException;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.Response;import java.net.Proxy;import java.util.Objects;
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
this.findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @RequiresApi(api = Build.VERSION_CODES.KITKAT) @Override public void onClick(View v) { new Thread(new Runnable(){ @Override public void run() {                        OkHttpClient okHttpClient = new OkHttpClient.Builder().build(); Request request = new Request.Builder() .url("http://www.baidu.com/?id=1") .build(); try { Response response = okHttpClient.newCall(request).execute(); if (response.isSuccessful()) { final String ss = Objects.requireNonNull(response.body()).string(); System.out.println(ss); runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(MainActivity.this, ss, Toast.LENGTH_SHORT).show(); } }); } } catch (IOException e) { e.printStackTrace(); } } }).start(); } }); }}


这段代码的作用是点击一下按钮会请求一下百度。

还要在androidmainfest.xml增加网络权限等:

<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    package="com.example.ok3noproxy">
<uses-permission android:name="android.permission.INTERNET"/>
<application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:usesCleartextTraffic="true" android:theme="@style/Theme.Ok3noproxy">
<!-- 注意:activity 标签现在嵌套在 application 标签内部 --> <activity android:name=".MainActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity>
</application></manifest>

同时在Gradle Scirpts的build.gradle(Modele: app)中引入okhttp3库:

dependencies {    implementation 'com.squareup.okhttp3:okhttp:4.9.1' }

选择好设备点击运行,这时候app就在设备上安装运行:

Android APP又抓不到包?试试这个思路

我们设置好代理,点击button,可以正常的抓到baidu的数据包:

Android APP又抓不到包?试试这个思路

这时候,我们在代码中,在创建OkHttpClient对象的时候增加一个方法:

proxy(Proxy.NO_PROXY)

所有的代码:

package com.example.ok3noproxy;
import androidx.annotation.RequiresApi;import androidx.appcompat.app.AppCompatActivity;import android.os.Build;import android.os.Bundle;import android.os.Looper;import android.view.View;import android.widget.Toast;import java.io.IOException;import okhttp3.OkHttpClient;import okhttp3.Request;import okhttp3.Response;import java.net.Proxy;import java.util.Objects;
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
this.findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { @RequiresApi(api = Build.VERSION_CODES.KITKAT) @Override public void onClick(View v) { new Thread(new Runnable(){ @Override public void run() { OkHttpClient okHttpClient = new OkHttpClient.Builder().proxy(Proxy.NO_PROXY).build(); Request request = new Request.Builder() .url("http://www.baidu.com/?id=1") .build(); try { Response response = okHttpClient.newCall(request).execute(); if (response.isSuccessful()) { final String ss = Objects.requireNonNull(response.body()).string(); System.out.println(ss); runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(MainActivity.this, ss, Toast.LENGTH_SHORT).show(); } }); } } catch (IOException e) { e.printStackTrace(); } } }).start(); } }); }}

这时候,我们设置好代理,无论怎么点这个button,在代理工具中都无法捕捉到这个baidu的请求,但也不影响程序的正常请求:

Android APP又抓不到包?试试这个思路

Android APP又抓不到包?试试这个思路

接着使用以下这段js脚本进行hook:

console.log("[*] Starting script");Java.perform(function () {  var ss = Java.use("okhttp3.OkHttpClient$Builder");  ss.proxy.implementation = function (x) {  console.log(x.type())  console.log(x.address())  console.log(x)  return this.proxy(null)  }});console.log("end");

使用命令(老的frida版本使用--no-pause):

frida -U -f com.example.ok3noproxy -l okhttp3_no_proxy_bypass.js --pause

Android APP又抓不到包?试试这个思路

这个就可以抓到这个app的数据包了。

原文始发于微信公众号(赛哈文):Android APP又抓不到包?试试这个思路

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年9月22日23:30:17
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   Android APP又抓不到包?试试这个思路http://cn-sec.com/archives/2059671.html

发表评论

匿名网友 填写信息