AirDrop between Android and macOS
As we know, AirDrop is Apple’s proprietary protocol.However, it is possible to use AirDrop on non-Apple devices and enable those devices to work with Apple devices.
Of course, there are some prerequisites and limits.I’m specifically using Android as an example in this article.
At the time of writing, I haven’t finished the tool’s development.
https://github.com/I-Info/AnyDrop
BackgroundReferences to papers published by Secure Mobile Networking Lab, we can fully understand how AirDrop works:
...
【杂谈】编译的发展与未来
编译器与编程语言发展历程参考互联网上的相关资料,编译器与编程语言几乎是同步发展起来的,发展过程可以分为几个阶段:
第一阶段是20世纪50年代,出现了第一个编译程序,将算术公式翻译成机器代码,为高级语言的发展奠定了基础。
第二阶段是20世纪60年代,出现了多种高级语言和相应的编译器,如FORTRAN、COBOL、LISP、ALGOL等,编译技术也逐渐成熟和规范化。
第三阶段是20世纪70年代,出现了结构化程序设计方法和模块化编程思想,以及面向对象的语言和编译器,如Pascal、C、Simula等,编译技术也开始注重- 的可读性和可维护性。
第四阶段是20世纪80年代,出现了并行计算机和分布式系统,以及支持并行和分布式的语言和编译器,如Ada、Prolog、ML等,编译技术也开始考虑程序的- 性和分布性。
第五阶段是20世纪90年代至今,出现了互联网和移动设备等新兴平台,以及支持跨平台和动态特性的语言和编译器,如Java、C#、Python等,编译技术也开始关注程序的安全性和效率。在发展过程中也伴随着编译理论体系的逐步成熟,一些关键也成为了实现编译器必不可少的部分,如:有限状态自动机、上 ...
Run UI Automator Viewer on ARM/aarch64 macOS
At the time of writing this blog. Some tools (Like uiautomatorviewer) in the Android SDK are not compatible with ARM macOS.
However, the uiautomatorviewer is a Java program. It can be easily “hacked” to run on ARM machines.
Preparations
JRE 8. I chose Zulu-8 (Java 9+ may has more difficulties to work well. I gave up to make it run on openjdk-19)
Eclipse SWT 4.20 for macosx-aarch64
Install SWT
Goto the Android SDK tools directory.
1cd ANDROID_HOME/tools
Create lib/aarch64 directory.
1mkdir l ...
iOS砸壳与macOS侧载
本文测试平台:
iPhone5s: iOS 12.5.5(Jailbroken by unc0ver 8.0.2)
MacBook Pro (2021): macOS 12.5
本文将主要基于对易校园 App 进行的相关测试分析,文中简写为 yxy
砸壳/脱壳本文中的砸壳指的是去除 App Store 对应用添加的加密。本文不细探究砸壳原理。
砸壳原理以及手动砸壳推荐参考文章: iOS逆向(11)-砸壳原理剖析,主动加载所有framework
工具
flexdecrypt 静态 Mach-O 二进制解密工具
appdecrypt 静态 Mach-O 二进制解密工具,工作原理同 flexdecrypt
CrackerXI+ iOS 端自动砸壳工具, 可以通过添加(如 http://cydia.iphonecake.com 源)安装。动态脱壳,生成 ipa。
其他老牌的砸壳工具如 Clutch, dumpdecrypted, frida-ios-dump 也能够动态砸壳生成ipa。
对于不同的app应该根据情况来使用工具,并不能保证存在某个万能的砸壳工具。
解密 ...
NVIDIA休眠相关问题
关键词:NVIDIA, Arch Linux, suspend
最近好不容易迁移到了Wayland,但是小问题还是不少,其中一个关键问题就是从休眠(suspend)恢复后(此问题貌似与Wayland无关),gnome-shell中的文字和图标大多消失了,GUI只剩下骨架。
在网上搜索GNOME休眠后文字消失(google: gnome missing characters after suspend)相关问题,大多都是若干年前的讨论,经过测试,对于我的情况没有任何帮助(大多是和当初的Intel核显驱动或N卡开源驱动还有Linux内核有关)。当然最后还是找到了一定帮助的文章,才把问题定位到了NVIDIA闭源驱动上。
在Fedora论坛找到了最近几个月关于此问题的讨论,才知道NVIDIA Suspend已经成为了一个标准问题。Arch Linux Wiki也有相关的解决方案,其中也指出了NVIDIA驱动的说明文档的链接(还好有NVIDIA官方解决方案)。推荐阅读一下官方提供的说明文档。
Arch Wiki描述的过于简单,中间还是有一些坑的,既然坑我已经踩了,下面直接放上最终解决方案好了 ...
Arch Linux Wayland之路
前情提要:听说Linux上N卡闭源驱动有了较大的更新,比如添加了drm和Xwayland硬件加速支持。正好手头Manjaro滚炸了(很久没更新了,大概跟新驱动有关),直接新装Arch Linux + GNOME + Wayland套餐。不过中间Wayland之路经历了很多曲折,期间多次放弃Wayland滚回Xorg。。。
仅仅提供一个参考,具体还得看平台和使用场景。
环境:
Host: MSI GS66 Stealth 10SF
OS: Arch Linux with Stable kernel
CPU: Intel i7-10750H
GPU: NVIDIA GeForce RTX 2070 Mobile
如上图,标准的I+N双显卡游戏本。
注意,在写本文的时候,I+N方案Wayland支持程度仍然很差,当然使用Xorg性能也依然不佳(不然也不会想方设法去用Wayland
本文默认已经装好Arch Linux和GNOME,并且使用的是稳定版(非lts)内核。
NVIDIA闭源驱动安装参考Archwiki所述Wayland需求
https://wiki.archlinux ...
MacOS GPG2连接Keyserver返回Network Unreachable
环境:
macOS 12.2.1
gpg (GnuPG) 2.3.4 (homebrew)
与Keyserver进行连接操作时,无论如何都会返回Network unreachable错误。
Google后,在lists.gnupg.org上找到前人相同的问题反馈,得到解决方案。错误原因未知,大概和网络连接模式(tor)有关。
解决方案编辑~/.gnupg/dirmngr.conf配置文件(无则创建),添加:
1standard-resolver
重启后生效。
基于JAVA NIO的TCP协议定义与实现
定义了一个简单的基于TCP的面向报文的协议。大致组成就是报文起始标记,协议版本号,载荷类型,载荷,报文结束标记。
我的业务场景是使用protobuf(Google Protocol Buffers)进行客户端与服务端之间通信的数据封装。正如pb文档所说,pb没有提供多信息流式传输的支持,而如果使用如TCP(面向流的协议)就不能直接传输pb了。所以需要自己定义一个协议来进行信息分隔。
样例代码注:代码位于gist.github.com,如果无法加载样例代码,请手动点击链接访问。
Unix 子进程创建pipe
最近在学习OSTEP这本书,留个课后习题笔记。
Homework(code):chapter cpu-api
8. Write a program that creates two children, and connects the standard output of one to the standard input of the other, using the pipe() system call.
Code:123456789101112131415161718192021222324252627282930313233343536373839404142434445464748#include <stdio.h>#include <unistd.h>#include <stdlib.h>#include <string.h>int main(){ int pi[2]; int p = pipe(pi); // create pipe if (p < 0) { ...
记C++左右位移符号重载
重载左右位移符号用于iostream。
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859#include<iostream>using std::cout;using std::cin;class Vector {public : explicit Vector(int size = 1) { this->len = size; v = new int[size]; } ~Vector() { delete v; } int &operator[](int i); friend std::ostream &operator<<(std::ostream &, Vector &); //declare friend frie ...