作者归档:softsim

vscode开发Java控制台应用

0. 下载 vscode

https://code.visualstudio.com/sha/download?build=stable&os=linux-deb-x64

1.解压缩 后 直接运行

dpkg -x  code_1.52.1-1608136922_amd64.deb  app
cd app/user/share/code
chown root:root chrome-sandbox
chmod 4755 chrome-sandbox
./code

3.配置Java环境
Ctrl+Shift+P 调出 Command Palette, 输入命令

Java: Configure Java Runtime

选择 Java: Configure Java Runtime.

4.创建Java项目

Java: Create Java Project

选择No build tools
或者
Maven

mitmproxy捕获手机ssl流量

一. 安装mitmproxy
1. 安装python3-venv

apt install python3-venv

2. 获取源代码

git clone https://github.com/mitmproxy/mitmproxy.git
cd mitmproxy
./dev.sh 

3. 激活python3虚拟环境,并执行

. venv/bin/activate  
mitmdump 

二. 上传证书到 手机
1. 运行mitmproxy后,会自动在 ~/.mitmproxy 目录下生成证书:
mitmproxy-ca.pem  证书和私钥
mitmproxy-ca-cert.pem  PEM格式的证书
mitmproxy-ca-cert.cer  跟PEM格式的证书完全一样,只是扩展名不同

2.制作一个Android兼容的证书
2.1 获得mitmproxy证书的hash值

openssl x509 -inform PEM -subject_hash_old -in mitmproxy-ca-cert.pem | head -1

会显示 hash值为 c8750f0d

注意,要用 -subject_hash_old 选项,而不是 -subject_hash 这样才会得到 openssl 0.9 兼容的hash值

2.2 android证书文件名 以.0结尾

cat mitmproxy-ca-cert.pem > c8750f0d.0
openssl x509 -inform PEM -text -in mitmproxy-ca-cert.pem -noout >>  c8750f0d.0

一步到位

hashed_name=`openssl x509 -inform PEM -subject_hash_old -in mitmproxy-ca-cert.cer | head -1` && cp mitmproxy-ca-cert.cer $hashed_name.0

3. 将证书放入 /system/etc/security/cacerts/

adb push c8750f0d.0 /data/local/tmp/
adb shell
su 
# mount -o remount,rw /system
# setenforce 0
#  mv /data/local/tmp/c8750f0d.0 /system/etc/security/cacerts/ 
# chmod 644 /system/etc/security/cacerts/c8750f0d.0
# chown root:root /system/etc/security/cacerts/c8750f0d.0
#  setenforce 1
# mount -o remount,ro /system

如果是用Magisk来root的,上述命令中有些应该适当修改

mount -o remount,rw /sbin/.magisk/mirror/system_root

三.让手机通过usb上网
1. 手机开启无线数据,或者开启wifi

2. 手机开启usb共享,PC上启用usb网卡

3. PC上启用有线连接

ip addr add 192.168.1.158/24 dev eno1
ip route add default via 192.168.1.1 dev eno1
ip route  del default via 192.168.42.129

4. 在手机上给usb网卡重新分配ip

ip addr del 192.168.42.129/24 dev rndis0 
ip addr add 10.42.0.2/24 dev rndis0

5. 手机上 修改路由表 (rmnet_data3根据实际情况修改)

ip route add 10.42.0.0/24 dev rndis0 table rmnet_data3
ip route delete default table rmnet_data3
ip route add default via 10.42.0.1 table rmnet_data3

ip -6 route  del default  table rmnet_data3

6. PC上开启转发

echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -t nat -n -L

7. PC上给usb网卡重新分配地址

ip addr del 192.168.42.140/24 dev usb0
ip addr add 10.42.0.1/24 dev usb0

8. 在手机上检测

ping 10.42.0.1

9. 手机上设置私人DNS

四. PC上配置mitmproxy环境
1. 将80和443端口的流量都重定向给 mitmproxy

iptables -t nat -A PREROUTING  -p tcp --dport 80 -j REDIRECT --to-port 8080
iptables -t nat -A PREROUTING  -p tcp --dport 443 -j REDIRECT --to-port 8080

2.透明模式启动mitmproxy

mitmproxy --mode transparent --showhost

五. 用frida解除 ssl pinning

frida -U -f com.sinovatech.unicom.ui -l ../ssl.js --no-pause

trojan nginx wordperss共存

/etc/trojan/config.json

{
“run_type”: “server”,
“local_addr”: “192.168.0.1”,
“local_port”: 443,
“remote_addr”: “127.0.0.1”,
“remote_port”: 443,

…}

local_addr这里可以改为 :: 表示任意地址

nginx配置

server {
server_name softs.im;

listen 127.0.0.1:443 default_server;

因为在worpress里有 wp-includes/load.php
function is_ssl() {
}
判断是否支持ssl
如果端口监听在443, 就认为是ssl

如何检测Magisk Hide

Magisk是自2018年后的唯一root方案。与其配合的Magisk Manager用来管理magisk模块,管理su请求.
Magisk Manager还可以管理Magisk Hide.
Magisk Hide用来隐藏Magisk, 不被应用程序检测到。
某些应用通过检测是否安装了Magisk Manager来判断设备是否root
Magisk Manager的应对措施是,改变自己的包名为随机的字符串。
但是,某些执着的应用,通过遍历系统所有的包,解析出每个包的签名,对比签名,判断是否为Magisk Manager.

应用使用Android API(startService, bindService)来启动服务时, 依赖于在AndroidManifest里的配置,服务跟app运行于同一个进程,或者新开启进程。如果使用不同的进程,父进程会孵化一个新进程,进程名会加一个后缀(在Manifest里定义的后缀名).
Magisk Hide很多时候不能为新开启的服务进程,隐藏Magisk mount path.
很有游戏,银行应用,就是通过这种方式(派生出远程服务进程)来检测magisk的。
Magisk Hide也在更新,新的Magisk Hide也能会远程服务,来隐藏su和magisk path

隔离的进程

/proc/pid/mounts, /mountinfo, /mountstats

移远锁频锁网AT命令

AT+QNWINFO

回应

+QNWINFO: “FDD LTE”,”46001″,”LTE BAND 3″,1650
分别是:
接入技术 FDD LTE
运营商 MCC_MNC 46001
频段: LTE Band 3
channel id: 1650
——————-
AT+QCFG=”servicedomain”,1,1
设置,只连接到PS域名,立即生效
—————-

AT+QCFG="band", bandval, ltebandval, tdsbandval, effect
bandval = 0000 0000  表示不改变
bandval = 0000 FFFF 表示任何频率都可以
0000 0001 GSM900
0000 0002  GSM1800
0000 0004  GSM850
0000 0008  GSM1900
0000 0010  WCDMA2100
0000 0020  WCDMA1900
0000 0040  WCDMA850

ltebandval
1 = BC1
4 = BC3
10 = BC5
40 = BC7
80 = BC8
0x80 0000 = BC20

频段配置
+QCFG: "band",0x493,0x1e200000095,0x21

用
at+qcfg="band",0,1,0,1
变成
+QCFG: "band",0x493,0x1,0x21

骁龙处理器的安全处理单元

一个潜在的区别是845新增的安全处理单元(SPU)。这是经过改进的Arm SC300。

它具有自己的CPU内核,嵌入式专用RAM,硬件随机数生成器和加速的加密功能,所有这些功能均位于片上系统芯片内部的独有电源岛上。它运行由高通公司提供的代码,无论是谁制造了容纳SOC的设备。

它旨在以安全和私密的方式进行处理,而不会出现在操作系统甚至CPU内核的TrustZone部分的视线范围之内,例如指纹和面部图像之类的东西可以对所有者进行身份验证。这样做应该可以防止危害系统的黑客和恶意软件从小工具中获取这些敏感的生物特征数据,包括您的指纹,脸部地图等。还应该保护应用程序和用户所需的加密密钥。

它通过隔离对敏感数据的所有访问,并安全地私下处理诸如指纹之类的事情来做到这一点,从而使在主CPU上运行的任何代码(包括OS内核和任何恶意软件)都无法检查或干扰信息。它与传统的TrustZone区域(受保护的内存和代码)完全分开,Qualcomm承认,传统的TrustZone区域已被国家资助的黑客和计算机安全专家所击败。

TrustZone是CPU内核中的一种特殊模式:通常,内核或低级驱动程序将设置一些参数并触发向TrustZone的切换,这时将启动单独的固件代码(仅在内存中设置一些东西才能能够访问Trustzone),然后切换回内核模式并显示结果。运行在顶部的内核,驱动程序和应用程序应该看不到TrustZone代码可以访问的私有内容,例如加密密钥和指纹。

SPU是一个物理上独立的CPU内核,具有物理上的专用内存,它自己的内置加密引擎以及防止其他软件的篡改和重放攻击的机制。乍一看,这听起来有点像英特尔的命运不佳的管理引擎,它可以被不法之徒用来劫持整个工作站和服务器。

但是,与管理引擎不同,SPU不能控制片上系统。有人告诉我们它通过类似邮箱的接口与各种内部单元(例如GPU和矢量计算处理DSP)进行对话,将它们发布到数据和请求中并收集结果。

在主CPU上运行的软件不应该监听这些单元为SPU所做的任何工作,从而允许由专用数学电路秘密执行诸如指纹和面部识别算法之类的任务。因此,不可能远程破坏SPU,也不能通过恶意应用程序或内核级驱动程序在本地对其进行监听。

与往常一样,事情有错误,并且SPU或其固件中的任何缺陷都可能导致高通安全性出现裂缝。曾几何时,人们说TrustZone不可破解,然后被允许运行Qualy开发的代码,该代码不进行边界检查。

希望845的SPU不仅可以处理指纹和面部扫描,还可以处理虹膜和声音来验证用户身份并允许他们登录其设备和服务。 SPU还有望实现其他形式的身份验证和授权,使人们的电话可以替换其芯片银行卡,公共交通支付卡,SIM卡等。

因此,让我们希望它能够坚持下去。高通公司的高管对SPU的设计相当不满意。他们的思维方式围绕着其机制越是神秘,那么可供黑客利用的信息就越少。默默无闻带来安全性。一名安全部门的高级职员在按下安全单元内部时说:“部分原因是混淆,您说的越少越好。”

Android APP的selinux身份

/system/etc/selinux/plat_seapp_contexts 这个文件里有

user=_app minTargetSdkVersion=29 domain=untrusted_app type=app_data_file levelFrom=all
user=_app minTargetSdkVersion=28 domain=untrusted_app_27 type=app_data_file levelFrom=all
user=_app minTargetSdkVersion=26 domain=untrusted_app_27 type=app_data_file levelFrom=user
user=_app domain=untrusted_app_25 type=app_data_file levelFrom=user
user=_app minTargetSdkVersion=28 fromRunAs=true domain=runas_app levelFrom=all

这是Android 10

user=_app minTargetSdkVersion=28 domain=untrusted_app type=app_data_file levelFrom=all
user=_app minTargetSdkVersion=26 domain=untrusted_app_27 type=app_data_file levelFrom=user
user=_app domain=untrusted_app_25 type=app_data_file levelFrom=user

这是Android 9

user=_app minTargetSdkVersion=26 domain=untrusted_app type=app_data_file levelFrom=user
user=_app domain=untrusted_app_25 type=app_data_file levelFrom=user

这是Android 8.1

如果需要调整app身份, 是 untrusted_app 还是 untrusted_app_27

修改 Android Studio项目中的 build.gradle 中的 targetSdkVersion的值 就可以了

Linux同时开启usb网卡和有线网卡

Android手机用 usb线连接Linux PC主机,手机上开启usb网络共享, PC上出现usb0网络接口。启用usb网卡后, 原有的ethernet有线网卡会停用。

现在介绍,在开启usb网卡后,如何手动开启ethernet

网卡名为 en01

ip addr add 192.168.0.159/24 dev eno1
ip route add default via 192.168.0.1 dev en01
ip route del default via 192.168.42.129 dev usb0

移动网络识别码MNC的规划和分配情况

移动网络识别码的规划和分配情况

移动网络识别码MNC使用单位
00中国移动
01中国联通
02中国移动
03中国电信 (CDMA)
04中国移动 (物联网)
06中国联通 (物联网)
07中国移动
08中国移动 (物联网)
09中国联通
10中国联通
11中国电信 (LTE)
12中国电信
1X(X=3~9)根据需要核配启用
2X(X=0~9)中国移动 (根据需要核配启用)
3X(X=0~9)中国联通 (根据需要核配启用)
4X(X=0~9)备用
5X(X=0~9)中国电信 (根据需要核配启用)
6X~9X(X=0~9)备用

用Windows虚拟机中的IDA调试连接在Linux物理机上的Android手机的native程序

标题就很绕口。
交代下背景
IDA Pro我用的是网上流传的7.2盗版, 只有Windows版本
我主要的工作平台是 Debian Linux

本来一种简单的方式是, 将 Android手机的usb,直接分配给虚拟机

1.在手机上运行 android_server64

./android_server64                                                                                                           
IDA Android 64-bit remote debug server(ST) v1.25. Hex-Rays (c) 2004-2018
Listening on 0.0.0.0:23946...

2.将usb设备中,android手机分配虚拟机,安装好adb驱动

3在windows命令行运行

adb forward tcp:23946 tcp:23946

4.在IDA直接 attach 就行了


我选择的是一种复杂的方式
1. 手机上运行 android_server64
2. Linux控制台运行 adb forward tcp:23946 tcp:23946
3.root用户运行iptables

iptables -t nat -A OUTPUT     -p tcp --dport 9527 -j REDIRECT --to 23946
iptables -t nat -A PREROUTING -p tcp --dport 9527 -j REDIRECT --to 23946

4.IDA attch时配置端口为 9527


另外一种简单的方式,手机开启usb网络共享, Linux主机上会出现一个usb0网卡设备,桥接给虚拟机。