0%

通过aidl,我们可以实现client(后称客户端)和server(服务端)的双向通信,有时候server和client处于不同的进程当中,如果client意外退出,server再向client发送消息的话,就有可能导致server端也退出。

安卓提供了 RemoteCallbackList 来为我们隐式解决了这种问题。

下面来看一个示范。

阅读全文 »

Sogou 的 workflow 是一个 C++ 编写的简单易用的 web 框架,这里我对官方的 http_proxy 做一点简单修改,来实现抓包。
通常的抓包是设置代理服务器来实现的,我这里不通过代理,而是 http_proxy 作为一个中继一样的存在。
把官方的 http_proxy 修改成下面的样子

阅读全文 »

p.s: 以下内容均以 openssl 实现。
RSA 密钥的存储方式有很多,某些情况下,我们直接保存密钥的 modulus(n),publicExponent(e),privateExponent(d),使用的时候再将它们转换成 RSA 密钥。下面来讲讲在 C/C++ 环境中,如何把这几个大整数转换成 RSA 密钥来用。
根据 openssl 的文档,openssl提供了这样一个函数

阅读全文 »

以下载链接 https://www.openssl.org/source/openssl-1.1.1o.tar.gz 为例
下载解压之后,查看根目录的 NOTES.ANDROID,其中有

1
2
3
4
export ANDROID_NDK_HOME=/home/whoever/Android/android-sdk/ndk/20.0.5594570
PATH=$ANDROID_NDK_HOME/toolchains/llvm/prebuilt/linux-x86_64/bin:$ANDROID_NDK_HOME/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin:$PATH
./Configure android-arm64 -D__ANDROID_API__=29
make

这里就是最直接的编译方式了。但是这样编译之后,会有一个坑

阅读全文 »

在安卓里面实现一个 native 的系统服务,不仅可以通过定义 Interface ,还可以通过直接继承 BBinder 来实现。本篇文章即讲述如何通过继承 Bbinder 来实现一个系统服务,并且讲述如何在 native 上使用 binder 的 linktoDeath 机制

阅读全文 »

安卓系统上添加系统服务,可以通过 android.os.ServiceManager 来添加使用 java 实现的系统服务,放在 SytemServer 进程(内置在源码编译)或者放在 app 进程(需要是系统签名的系统应用)。
由于运行在 SystemServer 进程或者运行在app进程,某些特殊操作就面临权限不足的问题,比如操作kernel的节点,这个时候就需要使用使用 root 权限运行的进程了。(当然严格来说,通过java实现的服务,同样可以以 root 权限运行,比如将相应的代码编译成 jar,开机之后通过 appprocess 运行)。

阅读全文 »