Android bypass SSL Pinning

很多Android App现在出于安全考虑都会加上SSL Pinning,有时在Charles Debug过程中会不是太方便,当然可以加一个设置一键关掉这个功能。

最近刚好看了一些关于Frida的资料,发现这个东西用来做代码注入很方便,而且平台通吃,Android/iOS/Linux/Mac。

找到下面这个JavaScript脚本,可以在不侵入原Apk的情况下,去掉SSL Pinning, 通过Charles启用SSL Proxy,在手机设置好Charle代理,直接明文抓到所有请求。

Java.perform(function() {
    var array_list = Java.use("java.util.ArrayList");
    var ApiClient = Java.use('com.android.org.conscrypt.TrustManagerImpl');
    ApiClient.checkTrustedRecursive.implementation = function(a1, a2, a3, a4, a5, a6) {
        // console.log('Bypassing SSL Pinning');
        var k = array_list.$new();
        return k;
    }
}, 

Android P(9.0/API Level 28) 升级不完全教程

自从去年Google强制升级target API到26之后,Google就开始计划着下一波的升级,而这次是要升级到9, 也就是target API level 28,而且日期也已经定了 “November 1, 2019″。

以前每次API升级都是小打小闹,并不会有那种大规模的改动,而这次改动就有点大了。当然这次强制target API升级对国内开发者的影响会小一些,因为毕竟不用发布到Google Play,而国内应用市场这么多,各个要求也都参差不齐,所以短期还是安全的。

这次改动其实动的最大的就是非官方API的调用,也包含”Java Reflection”,基本上可以说国内要用到的那些动态APP升级方案都基本被伤了,网上搜了一下,也找到一些厅淫技巧,可以绕过去官方的这个限制,正所谓道高一尺,魔高一丈,但总的来说这样做是不推荐的,因为不知道系统又做个升级,就把这些方案给干掉。官文给了黑名单列表和灰名单列表,黑名单是一定要修复的,灰名单只是一个过渡阶段,后面看Google的心情什么时候在系统层面强制执行,那就必须都修复。2019年的Google IO大会在即,就看这次Google有什么表示。

具体我们需要做什么/take away

把官方相关的文档都看过了,下面这些是我认为比较重要的地方

  • Migration to androidx/JetPack
  • Network TLS enabled by default, so need double check https is enable by default.
  • Non SDK APIs call scanning,

Android AppWidget如何支持复杂的View

如果看不惯博客排版,请点这里

Android AppWidget如何支持复杂的View

一直想知道如何在AppWidget里面添加 ListView,EditText 这些复杂的View.我们知道要在AppWidget里添加 View都是通过RemoteView来做到了,然而RemoteView本身功能很弱,支持的操作很少,而且支持RemoteView的Widget很少:
在Dev Guide中有下面这段:


A RemoteViews object (and, consequently, an App Widget) can support the following layout classes:

    * FrameLayout
    * LinearLayout
    * RelativeLayout

And the following widget classes:

    * AnalogClock
    * Button
    

Android:快速修改ramdisk.img脚本

有时候要修改Android的ramdisk.img,如果每次都将那些命令都敲一遍,那确实有点烦,那有没有快速简单的方法呢?有,就是将这些命令放在一起,创建了一个简单的脚本:
这个脚本很简单,直接将脚本放到放有ramdisk.img的目录下,运行就行了,
运行时,输入1,会将ramdisk.img解压出来,输入2会将修改后的ramdisk重新打包成ramdisk.img。

root@o-2rl2:/home/percy# cat shell/ramdisk
#!/bin/bash

echo "Modify the ramdisk.img"

echo "1.Inflate the image"
echo "2.Create the image"

read -p "Choose:" CHOOSE

#case ${CHOOSE} in
#1)inflate();;
#2)create() ;;
#esac


if [ "1" = ${CHOOSE} ];then
	echo "inflate()"
	cp ramdisk.img 

Android Browser Introduction:CallbackProxy.java分析

文件在:frameworks\base\core\java\android\webkit
CallbackProxy:
这是一个继承自Handle的类,用来实现UI和WebViewCore之间交换的桥梁.
它里面定义了很多函数,这些函数里面基本上都只是完成了一个sendmessage的作用.它将message发送给自身的HandleMessage().然后按照类型再进去分发.
它定义了一些事件ID:

    // Message Ids
    private static final int PAGE_STARTED         = 100;
    private static final int RECEIVED_ICON        = 101;
    private static final int RECEIVED_TITLE       = 102;
    private static final int OVERRIDE_URL         = 103;
    private static final int