在 iOS 上使用 Socks5 代理

创建 PAC 脚本

function FindProxyForURL(url, host)
{
    if (isInNet(host, "192.168.1.0", "255.255.255.0"))
      return "DIRECT";
    return "SOCKS xxx.xxx.xxx.xxx:xxxx";
}

将此脚本放入一个 Web Server 的服务目录中。

应用代理服务
1. 打开设置 -> Wifi -> 选择当前使用的 Wifi。
2. 将 HTTP 代理置于 Auto 模式,输入上面文件的 URL。

Over!

TL-TR761 3G无线路由器启用 ADB Server

入手一个 TL-TR761 2000L 3G无线路由器,使用下来总体感觉不错,但偶尔会出现无法连接的问题,尝试各种方法,只有断电、取卡放一会才行,否则持续连接不上。
tl-tr761
main

在官网看了又看,都大半年过去了,就是不见固件版本更新。今天又遇到这个问题,实在受不了了,果断拨打客服电话,客服MM的态度不错,解决问题的效率是很高呀,直接就把内部测试版邮件过来了 😉
download

这个固件的版本是 1.0.4 Build 130619 Rel.32640n,和之前的版本在界面上可见的变化是支持英文语言了,且统计方式支持按时间了,之前正需要这个功能呢。这个更新包的文件名是 update.zip,是不是很熟悉?相信你也会解开看看的,GC 来了,Android 的目录结构清晰可见呀,Web UI 的结构和代码直接暴露出来!
firmware

好了,废话不多说了,直接说说怎么拿 Root 权限吧:
1. 刷此版固件,对于旧版固件是否也有效不明,有需要此版固件可以联系我。
2. 刷完固件不要人为主动重启,打开浏览器输入 URL:http://192.168.1.1/cgi-bin/em.cgi 进入工程页面
em
3. 点击 Usb Mode,进入 USB 模式设置页面,并将模式设置为 debug_rndis,并点击 Save
usb-mode
4. 连接 USB 线,可以发现 adb shell 可以打开,而且是 Root 权限的。

CPU info & Kernel version
info

当重启设备后,再打开 http://192.168.1.1/cgi-bin/em.cgi 会出现 Forbidden 错误,这应该是自动关闭了工程模式,但我们已经有了 ADB 并且有 Root 权限还有什么问题解决不了呢!
forbidden
1. adb shell 登录,输入下面的命令启用:

setprop sys.em_enable true

Over!

How to make Linux shared library executable

Examples for Linux x86_64 platform:
Library

/* test.c
 * Heiher <root@heiher.info>
 */
 
#include <stdio.h>
#include <stdlib.h>
 
int main (int argc, char *argv[]);
 
#if defined(__x86_64__)
const char lib_interp[] __attribute__((section(".interp"))) = "/lib64/ld-linux-x86-64.so.2";
#define init_args(argc, argv) __asm__ volatile ( \
			"mov 0x8(%%rbp), %%edx \n\tmov %%edx, %0 \n\tlea 0x10(%%rbp), %1 \n\t" \
			:"=m"(argc), "=r"(argv)::"memory")
#endif /* __x86_64__ */
 
void
_entry (void)
{
	int ret = 0;
	int argc = 0;
	char **argv = NULL;
 
	init_args (argc, argv);
	ret = main (argc, argv);
	exit (ret);
}
 
int
main (int argc, char *argv[])
{
	int i = 0;
	void *p = malloc (4096);
 
	printf ("argc: %d, argv: %p, p: %p\n", argc, argv, p);
	for (i=0; i<argc; i++)
	  printf ("argv[%d]: %s\n", i, argv[i]);
 
	free (p);
 
	return 0;
}
 
int
test (int a, int b)
{
	return a + b;
}

Build

gcc -fPIC -shared -o libtest.so test.c -Wl,-e_entry

Run

./libtest.so a b c
argc: 4, argv: 0x7ffff3c165b8, p: 0x7fea935c4010
argv[0]: ./libtest.so
argv[1]: a
argv[2]: b
argv[3]: c

App

/* call.c
 * Heiher <root@heiher.info>
 */
 
#include <stdio.h>
 
int test(int a, int b);
 
int
main (int argc, char *argv[])
{
	printf ("%d\n", test (1, 2));
 
	return 0;
}

Build

gcc -o call call.c -L. -ltest

Run

LD_LIBRARY_PATH=. ./call
3

Over!