Skip to content

Commit

Permalink
3.76
Browse files Browse the repository at this point in the history
  • Loading branch information
rev1si0n committed Jan 16, 2023
1 parent 9b2478c commit 1d38ef1
Show file tree
Hide file tree
Showing 16 changed files with 281 additions and 103 deletions.
7 changes: 7 additions & 0 deletions CHANGELOG.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
3.76
* 默认内置 shell 使用 bash
* 修复断网后远程桌面触摸无法使用的问题
* 修复 OpenVPN 僵尸进程的问题
* startmitm.py 支持指定 adb 串号
* 支持 magisk 自启动

3.0.59
* 所有界面提示使用英文
* 修复一个 web 接口未认证的问题
Expand Down
194 changes: 121 additions & 73 deletions README.md

Large diffs are not rendered by default.

3 changes: 1 addition & 2 deletions lamda/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,4 @@
#
# Distributed under MIT license.
# See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
__version__ = "3.0"
__build__ = 59
__version__ = "3.76"
8 changes: 4 additions & 4 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@

setuptools.setup(
name = "lamda",
version = "{}.{}".format(__version__, __build__),
version = "{}".format(__version__),
description = "Android reverse engineering & automation framework",
url = "https://github.com/rev1si0n/lamda",
author = "rev1si0n",
Expand All @@ -19,9 +19,9 @@
],
},
install_requires= [
"grpcio-tools>=1.35.0,<1.48.0",
"grpc-interceptor>=0.13.0,<0.14.2",
"grpcio>=1.35.0,<1.48.0",
"grpcio-tools>=1.35.0,<1.49.0",
"grpc-interceptor>=0.13.0,<0.15.0",
"grpcio>=1.35.0,<1.49.0",
"asn1crypto>=1.0.0,<2",
],
classifiers = [
Expand Down
28 changes: 21 additions & 7 deletions tools/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,7 @@

开始之前,请确保已经启动设备上的 lamda 服务端。

**注意**:部分命令文档可能具有时效性随时更新,为了避免版本问题,继续前请务必先在手机上安装最新版本的 lamda 以及其 Python 库和依赖库。所有使用到 adb 的脚本均 只支持一台手机通过 USB (adb) 连接电脑,请确保 `adb devices` 中只有一个设备。

部分功能需要安装 adb,如果要用到,请确保已安装 adb 且不要太过老旧。
**注意**:部分命令文档可能具有时效性随时更新,为了避免版本问题,继续前请务必先在手机上安装最新版本的 lamda 以及其 Python 库和依赖库。部分功能需要使用 adb,请务必确保安装的 adb 是最新版本。

```bash
# 如果没有安装,请 自行搜索 如何安装,这里提供的只是基础建议
Expand Down Expand Up @@ -81,6 +79,11 @@ test.pem # 用于加密客户端与服务端通信的证书

> 注:你有可能需要手动安装 pyOpenSSL 依赖库 `pip install pyOpenSSL`

## id_rsa

lamda 内置 ssh 使用的默认 ssh 私钥,此与 `ssh.sh``scp.sh` 中硬编码的私钥相同。

## startmitm.py

启动中间人,这将会全自动的在设备上开启全局的中间人,你就可以截获应用的 http/s 流量,当然,也可以包括 DNS 请求(全局)。
Expand Down Expand Up @@ -127,6 +130,7 @@ python3 -u startmitm.py 192.168.1.2:com.some.package
如果你想使用特定的DNS,或者一些情况下,你可能出现DNS解析错误/无法解析的情况(可能出现于一些原生的系统),可以这样做

```bash
# 使用中国大陆 DNS
python3 -u startmitm.py 192.168.1.2 --nameserver 114.114.114.114
```

Expand All @@ -140,21 +144,25 @@ python3 -u startmitm.py 192.168.1.2 -s http_flow_hook.py
```
即可。

手机与当前电脑不在同一网络下,但是你可以物理接触设备,你仍然可以进行中间人,但是**需要确保当前设备已通过USB接入**电脑且已ADB授权。
手机与当前电脑不在同一网络下,但是你可以物理接触设备,你仍然可以进行中间人,但是**需要确保当前设备已通过USB 或者 `adb connect` 接入**电脑且已ADB授权。

```bash
# localhost 代表使用 adb 设备
# 当前仅连接了一台 adb 设备
python3 -u startmitm.py localhost
# 电脑连接了多台 adb 设备,你需要指定 adb serial
# 这个 serial 请从命令 adb devices 的输出中寻找
python3 -u startmitm.py localhost --serial bfde362
```
即可。

手机与当前电脑不在同一网络下,也无法物理接触设备,但是只要你可以访问 lamda 的端口,你也可以进行中间人。
**这种情况通常为**:你使用了内置 frp 服务转发了 lamda 到远程服务器,或者你自行通过某种方式转发了 lamda 的 65000 端口到某个地方(例如 SSH、路由器端口转发等-**注意安全性问题**),这种情况下你和 lamda 之间
**仅有这一个端口**可以直接交流,其他端口是无法访问的。这种情况下,手机无法访问到本机的任何端口,本机也只能访问到手机的 lamda 端口,这样需要通过以下方式来进行。(注意 OpenVPN 网络互通,并不属于这个情况)
**仅有这一个端口**可以直接交流,其他端口是无法互相访问的。这种情况下,手机无法访问到本机的任何端口,本机也只能访问到手机的 lamda 端口(或者手机有公网IP,但本机在不互通的内网),这样需要通过以下方式来进行。(注意 OpenVPN 网络互通,并不属于这个情况)

这时,需要通过稍微繁琐的组合方式来进行,下面介绍如何操作。

首先,使用 `adb_pubkey.py` 或者自行调用接口将自身的 adb 公钥安装到设备上(请在本文档搜索),
随后,确保当前电脑没有任何 USB ADB 设备连接(`adb devices` 显示无设备)。
首先,使用 `adb_pubkey.py` 或者自行调用接口将自身的 adb 公钥安装到设备上(请在本文档搜索)。

现在执行以下命令

Expand All @@ -169,7 +177,10 @@ adb connect x.x.x.x:65000
最后,按照和上文 通过USB 一样的方法操作
```bash
# localhost 代表使用 adb 设备
# 当前仅连接了一台 adb 设备
python3 -u startmitm.py localhost
# 电脑连接了多台 adb 设备,你需要指定 adb serial
python3 -u startmitm.py localhost --serial x.x.x.x:65000
```

即可。
Expand Down Expand Up @@ -333,6 +344,9 @@ print (data["result"])
bash emu-install 192.168.1.2
```

## magisk

lamda 的 magisk 模块构架

## 各种服务脚本 (Docker)

Expand Down
33 changes: 20 additions & 13 deletions tools/adb_pubkey.py
Original file line number Diff line number Diff line change
@@ -1,29 +1,36 @@
#!/usr/bin/env python3
#encoding=utf-8
import os
import sys
import shutil
from lamda.client import *
import argparse

cmd, host = sys.argv[1:]
from os.path import isfile
from lamda.client import *

certfile = os.environ.get("CERTIFICATE", None)
port = int(os.environ.get("LAMDAPORT", 65000))

d = Device(host, port=port, certificate=certfile)
android_path = os.path.join("~", ".android")
abs_android_path = os.path.expanduser(android_path)
f = "adbkey.pub"

argp = argparse.ArgumentParser()

shutil.which("adb") or exit("no adb")
argp.add_argument("action", nargs=1)
argp.add_argument("device", nargs=1)

os.popen("adb start-server").read()
args = argp.parse_args()

android_path = os.path.join("~", ".android")
abs_android_path = os.path.expanduser(android_path)
d = Device(args.device[0], port=port,
certificate=certfile)
cmd = args.action[0]

os.chdir(abs_android_path)

# try generate pubkey
pubkey = os.popen("adb pubkey adbkey").read()
open("adbkey.pub", "w").write(pubkey)
open("adbkey.lamda", "w").write(pubkey)

f = ("adbkey.lamda", f)[isfile(f)]

func = getattr(d, "%s_adb_pubkey" % cmd)
r = func("adbkey.pub")
print ("OK: %s" % r)
call = getattr(d, "%s_adb_pubkey" % cmd)
exit(not call(f))
27 changes: 27 additions & 0 deletions tools/id_rsa
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEA4QHmY32OT+F+maERMn1cvBRuIOIXH9yOALG+GMCngtjRJzSR
n09dInmXE+PjiAqNRWvknVEjFywv0v1v/H2qSRJKR/togPgySjiABhigqDHdirNd
Dh63oN2e+d0yythoLzsQrH5BSVtw05Atpkr7bW4KdfMveWuddvDACnQ3mvCXq50X
IK3cOlmHXwcJrX55BhEXxgHIqw0upf0A7DC3Afz5xjOA6+K/O2EzZIIJ+sWw7/Ko
5+3m98Et0zwcxe20uNxzYf7JSMu3490YNckLiQcDrZVRUXNS70HO9HWCXKdjFJPi
GgPtKUQNHjChwzSCQQGzqitXdwa60i9Sy1U09wIBIwKCAQAzbiYIHLLQbg5PAD5x
8MS9Rn+SfNIV6UUHeRWCACZJyyh9/WMdGXRfpsNyQreqEQpZArfpcaGe5YdGK0zL
/3dhKMCFe0sWKhofl+K/kJnAC2XWj2W6FaZQp69PDfz7KiZxMhJwkeMJc/yIIPR9
x/70cOxyuz4NH+l6Rag8510qujhxn6lGc1+ZNHGeAYmUD7wFz9/QYDZU9C0YcylA
2+Q5woU3L4b3y3JKqB6/dnsP9uF7R5KBR+qiqOwVm0nhvVU5uwbpQwTXeklopXyN
rI/NeYcsDoEyb8NquVXX/GkOgY0FhqblGUR9kSdTLHq6VamelHc+dczZgMxcsq1c
mnnLAoGBAP2FPssFpHJRhSr38Fq5A7mEjQeiPq2WgYV7kCpJT5F5OymcCCETIjEH
4pTk5zCWUuIBx5LlzSa0XnQSYb0100ZzvDgfm1NPmqdkpPwkkbh2xyoHYTTPJ3WG
TDur8Qyi83NteveszO1TCAGBTe3zN+2ov9qzl5Y7QHF94GVFDo4NAoGBAOM1Q8eG
0KeqjutTz/UMtejoFpz0Hi1g32PfdQInHx8MDslYu3Fcpnos3xf59H7+mrRy0fUM
hh27v7DiUvxUfhlojf0F3kDKeg9VZBslZF3vTCpFdKdFouZ2Cru3lCoaPSau69BC
6HQw4P+RABrgxc6CeE9FUGEEMss+wTcRItITAoGBAO8ImkpkZ9mAD9gOV6X+5kEz
1W2Y+USVOEqns9AZPGSW4AKpDvqdAvsHbzvtxAk9RtUXnumW118B1WYf9cEG3SUr
SxBYUJ8B6ZaDdvxc/mwYOCBQGdK0sCz692t2OwvqGL1J95kQo/W0r8bnoT9wSqzg
72fN5rI33azVxPHExJSPAoGAGfd1deOFj4E057HOn6muY8LAwXr8InF4nbMjULQD
joUJARF0gfv1xNHtnFcUoMyj912UVoUWpE/4poBD/5SgsnJZXr7XkmBIdsfuLvz1
hxQItF+1j3WsN5h2QVbPGsErj2RyuLcwgk66oN1fGQO+1cXEm1hg9SUNHorUQM7C
JqMCgYEAofxXJ8dOWUaFIHmKLE7Y+0+i3D1yXVIyu/puuaQGbNFHxjcJ9ZdubhLN
IyzJvngtM7mC90FtUETxvErMGdTzFeKtSKBZsJ8BiLCszRCEuJf5RX6uNrFUQ2pT
PEmns088Gs4KUDwjTG0zQtj3pNc5zDynDMpFKp96spefqLJqw3s=
-----END RSA PRIVATE KEY-----
16 changes: 16 additions & 0 deletions tools/magisk/META-INF/com/google/android/update-binary
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
#!/sbin/sh
source /data/adb/magisk/util_functions.sh

if [ ${MAGISK_VER_CODE} -lt 20400 ]; then
abort "Please install Magisk v20.4 +"
exit 1
fi

if [ "${BOOTMODE}" != "true" ]; then
abort "Must install from Magisk app"
fi

OUTFD=$2
ZIPFILE=$3
install_module
exit 0
1 change: 1 addition & 0 deletions tools/magisk/META-INF/com/google/android/updater-script
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
#MAGISK
Empty file.
15 changes: 15 additions & 0 deletions tools/magisk/common/service.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
#!/system/bin/sh
base=${0%/*}
ABI=$(getprop ro.product.cpu.abi)
launch="sh ${base}/${ABI}/bin/launch.sh"
cert=${base}/config/lamda.pem
port=65000

sleep 30
# where to locate properties.local
export CFGDIR=${base}/etc
if [ -f "${cert}" ]; then
$launch --port=${port} --certificate=${cert}
else
$launch --port=${port}
fi
32 changes: 32 additions & 0 deletions tools/magisk/install.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
#!/system/bin/sh
ABI=$(getprop ro.product.cpu.abi)
SERVER=$TMPDIR/$ABI.tar.gz
BB="/data/adb/magisk/busybox"
CONFDIR="$MODPATH/config"

export LATESTARTSERVICE=true

ui_print ".____ ________ _____ "
ui_print "| | _____ _____ \______ \ / _ \ "
ui_print "| | \__ \ / \ | | \ / /_\ \ "
ui_print "| |___ / __ \_| Y Y \ | | \/ | \ "
ui_print "|_______ \(____ /|__|_| / /_______ /\____|__ / "
ui_print " \/ \/ \/ \/ \/ "
ui_print " installer "

pushd $(pwd)
cd $MODPATH
if [ ! -f $SERVER ]; then
abort "${ABI}.tar.gz not found in archive"
fi

ui_print "- Extracting server files"
$BB tar -xzf $SERVER

mkdir -p $CONFDIR

cp -af $TMPDIR/properties.local $CONFDIR
cp -af $TMPDIR/lamda.pem $CONFDIR

ui_print "- Please reboot your device"
popd
6 changes: 6 additions & 0 deletions tools/magisk/module.prop
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
id=lamda
name=LAMDA
version=3.0
versionCode=3000
author=rev1si0n
description=Android reverse engineering & automation framework
2 changes: 2 additions & 0 deletions tools/magisk/uninstall.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
#!/system/bin/sh
MODPATH=${0%/*}
2 changes: 1 addition & 1 deletion tools/ssh.sh
Original file line number Diff line number Diff line change
Expand Up @@ -39,4 +39,4 @@ else
DEFAULT_ID_RSA=$CERTIFICATE
fi
exec ssh -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no \
-o LogLevel=ERROR -i $DEFAULT_ID_RSA -p $PORT root@$TARGET
-o LogLevel=ERROR -i $DEFAULT_ID_RSA -p $PORT root@$TARGET ${@:2}
10 changes: 7 additions & 3 deletions tools/startmitm.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
from lamda.client import *


serial = None
cleaning = False
def cleanup(*args, **kwargs):
global cleaning
Expand All @@ -46,6 +47,8 @@ def log(*args):

def adb(*args):
command = ["adb"]
if serial is not None:
command.extend(["-s", serial])
command.extend(args)
log (" ".join(command))
proc = subprocess.Popen(command)
Expand Down Expand Up @@ -95,12 +98,13 @@ def dnsopt(dns):
return "reverse:dns://{}@53".format(dns)
argp.add_argument("device", nargs=1)
argp.add_argument("-m", "--mode", default="regular")
argp.add_argument("--serial", type=str, default=None)
dns = argp.add_mutually_exclusive_group(required=False)
dns.add_argument("-d", "--dns", type=dnsopt, nargs="?",
dns.add_argument("--dns", type=dnsopt, nargs="?",
const="1.1.1.1")
dns.add_argument("-n", "--nameserver", type=str,
default="")
dns.add_argument("--nameserver", type=str, default="")
args, extras = argp.parse_known_args()
serial = args.serial
host = args.device[0]

if ":" in host:
Expand Down

0 comments on commit 1d38ef1

Please sign in to comment.