解决Ubuntu 20.04无法导入Charles证书

之前在Ubuntu 16.04中使用Charles进行抓https的包一切都正常,但是最近在家里那台Ubuntu 20.04却始终装不上证书,会出现下面提示

Screenshot from 2021-12-15 15-10-52

每次导入证书右下角Import都不可点击,在Google找了很多资料都认为是一个Bug,毕竟在16.04上这么导入是没有问题的.

下面记录一下解决方案:

  1. 用命令行安装证书,首先导出Charles证书: Help->SSL Proxying->Save Charles Root Certificate, 再执行以下命令将证书导入系统

    1
    2
    mv charles.pem /usr/local/share/ca-certificates/charles.crt
    sudo update-ca-certificates
  2. 在Charles中开启SSL Proxying: Proxy->SSL Proxying Settings->SSL Proxying->Enable SSL Proxying, 点击Include下的Add按钮HostPort设置为*, 点击确定即可.

Screenshot from 2021-12-15 15-29-57

Frida开发手册

前言

以下是在使用python开发frida脚本过程中收集到的一些用法, 这里将学习的知识点做个归纳总结

劫持函数

Java普通函数

1
2
3
4
5
6
const Context = Java.use('android.content.Context');
Context.checkCallingOrSelfPermission.implementation = function (permission: string) {
// 以下两种写法都可以
// return Context.checkCallingOrSelfPermission.call(this, permission)
return this.checkCallingOrSelfPermission(permission);
}

如果没有同名的重载函数则直接调用函数的implementation来重写即可

阅读更多...

TypeScript回调函数this指向问题

最近在使用TypeScript开发frida hook时遇到一个问题,当把一个类的函数传给另一个方法作为回调函数时,this指针指向的不是原始类的示例,经过一番搜索发现有很多人也碰到同样的问题所以在此记录一下:
出问题的代码:

1
2
3
4
5
6
7
8
9
10
11
export class SetIntervalTest {
private someNumber: number = 1;

trigger() {
setInterval(this.setIntervalCallback, 400);
}

private setIntervalCallback() {
console.log(this.someNumber);
}
}

改成这样就可以了

1
2
3
private setIntervalCallback = () => {
console.log(this.someNumber);
};

因为只是为了临时解决业务问题所以暂不深究日后有空再来研究研究

相关链接:https://github.com/microsoft/TypeScript/issues/10285

解决gradle无法同步的问题

1
Could not install Gradle distribution from 'http://services.gradle.org/distributions/gradle-6.5-bin.zip'.

就在刚刚为了观摩一下libgdx引擎创建了一个工程虽然挂了梯子但是死活同步不了 不用说了肯定还是我们的万里长城防火墙搞的鬼了,感谢方校长让我们离西方的”邪恶势力”又远了一步!

好了 不吐槽了解决办法也很简单打开项目下的gradle/wrapper/gradle-wrapper.properties文件将下载地址改为https就好了

找回Ubuntu16.04中nautilus输入文字快速定位文件功能

16.04的版本中nautilus文件管理器有一项快速定位文件的功能非常好用直接在文件夹中打出首字母即可快速定位到文件,但是在18.04以上的版本中默认就取消了这项功能使得我迁移到新版本中非常不适应今天碰巧找到了找回这个功能的办法记录一下:

  1. 第一种安装第三方插件
    1
    2
    3
    sudo add-apt-repository ppa:lubomir-brindza/nautilus-typeahead
    sudo apt dist-upgrade
    nautilus -r
  2. 第二种调整配置文件
    先安装dconf工具 sudo apt install dconf-editor
    打开dconf-editor找到org -> gnome -> nautilus -> preferences -> enable-interactive-search 打钩即可

解决Android Studio missing essential plugin org.jetbrains.android

最近把Android Studio升级到了4.1.1版本之前安装了一个smailidea的插件老是报不兼容于是强迫症的我手贱了一下把插件给禁用了,禁用的时候没注意把依赖的一些东西也给禁用了于是报了下面的错误

这是禁用插件时候的依赖提示

可以看见其实把很多核心的组件都给禁用了那怎么办呢?难不成真的要按提示上说的要重装Android Studio?不要慌问题不大其实还有一种办法就是把被禁用的插件恢复就可以了,大家可以把Android Studio的配置目录的disabled_plugins.txt这个文件删除这样Android Studio就可以正常启动了, 这个文件每个系统存放的位置不太一样一般都在下面这几个目录 如果不在可以在主目录全局搜索一下这个文件

Windows: C:\Users\%USERNAME%\AndroidStudio4.1\config

Linux: ~/.config/Google/AndroidStudio4.1

MacOS: ~/Library/Application Support/Google/AndroidStudio4.1

如何获得一个垂直的SeekBar

小记

在开发”上帝模式”的一个新功能中偶然需要用到一个垂直的SeekBar,一开始想得比较简单系统应该有提供这样垂直的SeekBar但是翻了一下SDK并没有于是上网搜索,查找下来无非这两种:

  1. 使用原生的SeekBar旋转90度
  2. 自定义SeekBaronDraw方法和onMeasure方法中旋转画布并重新计算控件大小

那为什么有两种呢让我们来分别分析一下这两个方案的优缺点:

  • 第一种使用原生的SeekBar最简单但是旋转后的宽高就不对了,实际上的宽是旋转后的高这也导致如果我们要增加SeekBar的高度就需要修改宽度但是会导致布局错乱以下是旋转前后对比:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <SeekBar
    android:id="@+id/seekbar1"
    android:layout_width="120dp"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:clickable="true"
    android:layoutDirection="rtl"/>

    <SeekBar
    android:id="@+id/seekbar2"
    android:layout_width="120dp"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:clickable="true"
    android:layoutDirection="rtl"
    android:rotation="90"/>
阅读更多...

ByteBuffer详解

之前对NIO开发不熟悉导致对ByteBuffer一直是一知半解的状态正好看到知乎上有个朋友写的不错于是转载过来

转自:https://zhuanlan.zhihu.com/p/56876443

在Java nio中,主要有三大组件:Buffer,Channel和Selector。这三者之间的关系可以按照如下方式进行理解:

  • Buffer提供了一个字节缓冲区,其可以不断的从Channel中读取接收到的数据。Buffer的优点主要在于其提供了一系列的Api,能够让用户更方便的对数据进行读取和写入;
  • Channel简单来说就是一个信道,也就是客户端与服务器的一个连接,而且每个客户端都会对应一个Channel对象;
  • Selector是Java nio能够支持高并发数据处理一个关键,其核心理念就是IO多路复用的原理,简单的说就是当多个客户端(Channel)连接服务器时,可以通过Selector同时对这些客户端请求进行监听,当客户端发送数据到服务器之后由Selector对这些Channel进行分发处理。

本文首先讲解ByteBuffer的实现原理,然后会介绍ByteBuffer中常用的Api,以及其在使用过程中需要注意的点。

  1. 实现原理
    对于ByteBuffer,其主要有五个属性:mark,position,limit,capacity和array。这五个属性的作用如下:

    • mark:记录了当前所标记的索引下标;
    • position:对于写入模式,表示当前可写入数据的下标,对于读取模式,表示接下来可以读取的数据的下标;
    • limit:对于写入模式,表示当前可以写入的数组大小,默认为数组的最大长度,对于读取模式,表示当前最多可以读取的数据的位置下标;
    • capacity:表示当前数组的容量大小;
    • array:保存了当前写入的数据。

    这几个数据中,除了array是用于保存数据的以外,这里最终的主要是position,limit和capacity三个属性,因为对于写入和读取模式,这三个属性的表示的含义大不一样。

    阅读更多...

Xposed为何对京东无法生效

前一阵子对京东的一个功能比较好奇于是就有了逆向京东的想法,我熟练的拿起了jadx对京东进行反编译居然没有混淆心中狂喜很快就找到入口点,于是又祭出了Xposed大法飞快的写了个插件Hook了ActivityonCreate方法,我迫不及待的跑了起来结果hook貌似没有生效任何Log都没有输出,反复检查后仍不得其解不过此时的我已心中暗暗猜测京东应该有一些反Xposed的机制,因为之前曾见过”酷安”和”知乎”也有这样的功能,于是又Hook了像Class.forName ClassLoader.loadClass这样的函数来验证一下我的想法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
XposedHelpers.findAndHookMethod(ClassLoader.class, "loadClass", String.class, new XC_MethodHook()
{
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable
{
if(((String)param.args[0]).startsWith("de.robv.android.xposed"))
{
Log.d("Kaisar", "loadclass:" + Arrays.toString(param.args), new Throwable());
param.setThrowable(new ClassNotFoundException());
}
}
});
XposedHelpers.findAndHookMethod(Class.class, "forName", String.class, new XC_MethodHook()
{
@Override
protected void beforeHookedMethod(MethodHookParam param) throws Throwable
{
if(((String)param.args[0]).startsWith("de.robv.android.xposed"))
{
Log.d("Kaisar", "forName:" + Arrays.toString(param.args), new Throwable());
param.setThrowable(new ClassNotFoundException());
}
}
});
阅读更多...
  • Copyrights © 2015-2024 Kaisar
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信