curl static executable binary for Android

my link command

prebuilts/misc/linux-x86/ccache/ccache prebuilts/clang/host/linux-x86/clang-2690385/bin/clang++ -nostdlib -Bstatic -static -Wl,--gc-secti
ons -o out/target/product/tcthz6750_66m5_n1/obj/EXECUTABLES/curl_intermediates/LINKED/curl -Lout/target/product/tcthz6750_66m5_n1/obj/lib out/target/product/tcthz6750_66m5_n1/obj/STATIC_LIBRARIES/libcurl
_intermediates/lib/*.o out/target/product/tcthz6750_66m5_n1/obj/STATIC_LIBRARIES/libcurl_intermediates/libcurl.a out/target/product/tcthz6750_66m5_n1/obj/STATIC_LIBRARIES/libssl_static_intermediates/libss
l_static.a out/target/product/tcthz6750_66m5_n1/obj/STATIC_LIBRARIES/liblog_intermediates/*.o out/target/product/tcthz6750_66m5_n1/obj/lib/crtbegin_static.o -Wl,-z,noexecstack -Wl,-z,relro -Wl,-z,now -W
l,--build-id=md5 -Wl,--warn-shared-textrel -Wl,--fatal-warnings -Wl,-maarch64linux -Wl,--hash-style=gnu -Wl,--fix-cortex-a53-843419 -fuse-ld=gold -Wl,--icf=safe -Wl,--no-undefined-version -Wl,--allow-shli
b-undefined -target aarch64-linux-android -Bprebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/aarch64-linux-android/bin -Wl,--no-undefined out/target/product/tcthz6750_66m5_n1/obj
/EXECUTABLES/curl_intermediates/src/slist_wc.o out/target/product/tcthz6750_66m5_n1/obj/EXECUTABLES/curl_intermediates/src/tool_binmode.o out/target/product/tcthz6750_66m5_n1/obj/EXECUTABLES/curl_intermed
iates/src/tool_bname.o out/target/product/tcthz6750_66m5_n1/obj/EXECUTABLES/curl_intermediates/src/tool_cb_dbg.o out/target/product/tcthz6750_66m5_n1/obj/EXECUTABLES/curl_intermediates/src/tool_cb_hdr.o o
ut/target/product/tcthz6750_66m5_n1/obj/EXECUTABLES/curl_intermediates/src/tool_cb_prg.o out/target/product/tcthz6750_66m5_n1/obj/EXECUTABLES/curl_intermediates/src/tool_cb_rea.o out/target/product/tcthz6
750_66m5_n1/obj/EXECUTABLES/curl_intermediates/src/tool_cb_see.o out/target/product/tcthz6750_66m5_n1/obj/EXECUTABLES/curl_intermediates/src/tool_cb_wrt.o out/target/product/tcthz6750_66m5_n1/obj/EXECUTAB
LES/curl_intermediates/src/tool_cfgable.o out/target/product/tcthz6750_66m5_n1/obj/EXECUTABLES/curl_intermediates/src/tool_convert.o out/target/product/tcthz6750_66m5_n1/obj/EXECUTABLES/curl_intermediates
/src/tool_dirhie.o out/target/product/tcthz6750_66m5_n1/obj/EXECUTABLES/curl_intermediates/src/tool_doswin.o out/target/product/tcthz6750_66m5_n1/obj/EXECUTABLES/curl_intermediates/src/tool_easysrc.o out/
target/product/tcthz6750_66m5_n1/obj/EXECUTABLES/curl_intermediates/src/tool_formparse.o out/target/product/tcthz6750_66m5_n1/obj/EXECUTABLES/curl_intermediates/src/tool_getparam.o out/target/product/tcth
z6750_66m5_n1/obj/EXECUTABLES/curl_intermediates/src/tool_getpass.o out/target/product/tcthz6750_66m5_n1/obj/EXECUTABLES/curl_intermediates/src/tool_help.o out/target/product/tcthz6750_66m5_n1/obj/EXECUTA
BLES/curl_intermediates/src/tool_helpers.o out/target/product/tcthz6750_66m5_n1/obj/EXECUTABLES/curl_intermediates/src/tool_homedir.o out/target/product/tcthz6750_66m5_n1/obj/EXECUTABLES/curl_intermediate
s/src/tool_hugehelp.o out/target/product/tcthz6750_66m5_n1/obj/EXECUTABLES/curl_intermediates/src/tool_libinfo.o out/target/product/tcthz6750_66m5_n1/obj/EXECUTABLES/curl_intermediates/src/tool_main.o out
/target/product/tcthz6750_66m5_n1/obj/EXECUTABLES/curl_intermediates/src/tool_metalink.o out/target/product/tcthz6750_66m5_n1/obj/EXECUTABLES/curl_intermediates/src/tool_mfiles.o out/target/product/tcthz6750_66m5_n1/obj/EXECUTABLES/curl_intermediates/src/tool_msgs.o out/target/product/tcthz6750_66m5_n1/obj/EXECUTABLES/curl_intermediates/src/tool_operate.o out/target/product/tcthz6750_66m5_n1/obj/EXECUTABL
ES/curl_intermediates/src/tool_operhlp.o out/target/product/tcthz6750_66m5_n1/obj/EXECUTABLES/curl_intermediates/src/tool_panykey.o out/target/product/tcthz6750_66m5_n1/obj/EXECUTABLES/curl_intermediates/
src/tool_paramhlp.o out/target/product/tcthz6750_66m5_n1/obj/EXECUTABLES/curl_intermediates/src/tool_parsecfg.o out/target/product/tcthz6750_66m5_n1/obj/EXECUTABLES/curl_intermediates/src/tool_strdup.o ou
t/target/product/tcthz6750_66m5_n1/obj/EXECUTABLES/curl_intermediates/src/tool_setopt.o out/target/product/tcthz6750_66m5_n1/obj/EXECUTABLES/curl_intermediates/src/tool_sleep.o out/target/product/tcthz675
0_66m5_n1/obj/EXECUTABLES/curl_intermediates/src/tool_urlglob.o out/target/product/tcthz6750_66m5_n1/obj/EXECUTABLES/curl_intermediates/src/tool_util.o out/target/product/tcthz6750_66m5_n1/obj/EXECUTABLES
/curl_intermediates/src/tool_vms.o out/target/product/tcthz6750_66m5_n1/obj/EXECUTABLES/curl_intermediates/src/tool_writeenv.o out/target/product/tcthz6750_66m5_n1/obj/EXECUTABLES/curl_intermediates/src/t
ool_writeout.o out/target/product/tcthz6750_66m5_n1/obj/EXECUTABLES/curl_intermediates/src/tool_xattr.o -Wl,--whole-archive -Wl,--no-whole-archive out/target/product/tcthz6750_66m5_n1/obj/STATIC
_LIBRARIES/libcrypto_static_intermediates/libcrypto_static.a out/target/product/tcthz6750_66m5_n1/obj/STATIC_LIBRARIES/libssl_static_intermediates/libssl_static.a out/target/product/tcthz6750_66m5_n1/obj/
STATIC_LIBRARIES/libz_intermediates/libz.a out/target/product/tcthz6750_66m5_n1/obj/STATIC_LIBRARIES/libc++_static_intermediates/libc++_static.a out/target/product/tcthz6750_66m5_n1/obj/STATIC_LIBRARIES/l
ibm_intermediates/libm.a out/target/product/tcthz6750_66m5_n1/obj/STATIC_LIBRARIES/libdl_intermediates/libdl.a out/target/product/tcthz6750_66m5_n1/obj/STATIC_LIBRARIES/libcompiler_rt-extras_intermediates
/libcompiler_rt-extras.a -Wl,--start-group out/target/product/tcthz6750_66m5_n1/obj/STATIC_LIBRARIES/libc_intermediates/libc.a prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/../lib/gcc/
aarch64-linux-android/4.9/../../../../aarch64-linux-android/lib/../lib64/libatomic.a prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/../lib/gcc/aarch64-linux-android/4.9/libgcc.a -Wl,--end
-group out/target/product/tcthz6750_66m5_n1/obj/lib/crtend_android.o

 

my diff on Android.mk

repos/external/curl$ git diff
diff --git a/Android.mk b/Android.mk
index 691baf4..983de64 100644
--- a/Android.mk
+++ b/Android.mk
@@ -83,7 +83,8 @@ LOCAL_SRC_FILES := $(addprefix src/,$(CURL_CFILES))
LOCAL_MODULE := curl
LOCAL_MODULE_TAGS := optional
LOCAL_STATIC_LIBRARIES := libcurl
-LOCAL_SHARED_LIBRARIES := libcrypto libssl libz
+LOCAL_STATIC_LIBRARIES := libcrypto_static libssl_static libz
+LOCAL_FORCE_STATIC_EXECUTABLE := true

built from AOSP

download here https://drive.google.com/file/d/1bpUnhaJynDN9xkb0B4vPSkG_9AP0n_dP/view?usp=sharing

proxy https packet intercept

1. Save a SSL certificate from Charles

Launch Charles

Go to Help > SSL Proxying > Save Charles Root Certificate.

Then save it as format Base 64 encoded certificate (.pem)

2. Convert it to a format that Androids can use

Get the hash value of this certificate, rename the file according to this hash value and export the PEM information into the bottom of this new file.

FILE=$(openssl x509 -inform PEM -subject_hash_old -in charles-ssl-proxying-certificate.pem | head -1).0
cat charles-ssl-proxying-certificate.pem > $FILE
openssl x509 -inform PEM -text -in charles-ssl-proxying-certificate.pem -out /dev/null >> $FILE
echo converted file as $FILE

If system cannot recognise -subject_hash_old, use -subject_hash instead

FILE=$(openssl x509 -inform PEM -subject_hash -in charles-ssl-proxying-certificate.pem | head -1).0
cat charles-ssl-proxying-certificate.pem > $FILE
openssl x509 -inform PEM -text -in charles-ssl-proxying-certificate.pem -out /dev/null >> $FILE
echo converted file as $FILE

after running, your terminal should show the converted file name. i.e.

converted file as c56066ed.0

3. Make sure your device is rooted

this step depends on your device. please google “root YOUR Modle"

4. Copy converted certificate to device storage

Assuming the converted file is c56066ed.0

adb push c56066ed.0 /data/local/tmp/
adb shell

 

5. Copy the certificate to system

mount -o rw,remount /system
cp /sdcard/c56066ed.0 /system/etc/security/cacerts/
chmod 644 /system/etc/security/cacerts/c56066ed.0

6. Reboot

Reboot should make the new certificate work. If you are still in adb shell, you can run:

reboot

7. Enable SSL Proxy in Charles

Proxy → SSL Proxy Settings → SSL Proxy tab → Add Host:* Port:*

 

Online Reference

 

https://jamie.holdings/2016/09/04/Installing-a-new-trusted-SSL-root-certificate-on-Android.html

android wifi hotspot channel

手上有一隻歐洲地區的手機開啟 2.4G wifi hotspot 之後,有時我的 hTC eye 能發現 hotspot 有時不能,而且不能的機會超過80%

後來拿了兩隻歐洲地區的手機透過 wifi analyzer 分析

原來是因為這歐規的手機可以使用的 2.4G channel 是 ch1-ch13

台灣手機只支援 ch1-ch11

所以當歐規手機啟動 wifi hotspot 並且選擇 ch13 的時候,就會導致 hTC eye 找不到 hotspot

而且因為台灣 wifi 預設都不會使用 ch13,所以那隻歐規手機做 ACS 的時候特別容易選到 ch13

所以針對這個問題可以朝向「讓 wifi hotspot 頻道選擇非 ch13 」來解決

找了些或許可以動的地方大概是:

  1. hotspot APP: 但是看了 Android API 發現沒有設定 channel 的參數,所以不行
  2. /system/bin/netd: 寫入 /data/misc/wifi/hostapd.conf 的時候寫入 chanlist:1-11,但是我那隻歐規機是 MTK  chipset,實際測試起來 MTK hostapd 並沒有實做 chanlist,所以不行
  3. 改 kernel 裡面 wifi module 設定的範圍,把 {81, BAND_2G4, CHNL_SPAN_5, 1, 13, FALSE} 改成 {81, BAND_2G4, CHNL_SPAN_5, 1, 11, FALSE}。這個方法實測起來可行,但是會需要修改 kernel 風險比較高,並且 OTA boot.img 代價就是 9MB
  4. /system/bin/hostapd: 再執行完 ACS(hostapd_drv_do_acs) 的時候判斷如果選出來的頻道是 ch13, 就重新賦值為 ch6。我那隻歐規機使用的 MTK-ACS 只有提供出第一好的頻道,沒有提供出第二好的頻道。否則原本想要修改成如果頻道選到 ch13 的話就改用第二順位的頻道