lamda 7.75__tar.gz → 7.80__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- {lamda-7.75 → lamda-7.80}/PKG-INFO +2 -2
- {lamda-7.75 → lamda-7.80}/README.md +2 -7
- {lamda-7.75 → lamda-7.80}/lamda/__init__.py +1 -1
- {lamda-7.75 → lamda-7.80}/lamda/client.py +68 -0
- {lamda-7.75 → lamda-7.80}/lamda/rpc/application.proto +29 -0
- {lamda-7.75 → lamda-7.80}/lamda/rpc/services.proto +6 -0
- {lamda-7.75 → lamda-7.80}/lamda.egg-info/PKG-INFO +2 -2
- {lamda-7.75 → lamda-7.80}/setup.py +1 -1
- {lamda-7.75 → lamda-7.80}/lamda/bcast.proto +0 -0
- {lamda-7.75 → lamda-7.80}/lamda/const.py +0 -0
- {lamda-7.75 → lamda-7.80}/lamda/exceptions.py +0 -0
- {lamda-7.75 → lamda-7.80}/lamda/google/protobuf/any.proto +0 -0
- {lamda-7.75 → lamda-7.80}/lamda/google/protobuf/api.proto +0 -0
- {lamda-7.75 → lamda-7.80}/lamda/google/protobuf/compiler/plugin.proto +0 -0
- {lamda-7.75 → lamda-7.80}/lamda/google/protobuf/descriptor.proto +0 -0
- {lamda-7.75 → lamda-7.80}/lamda/google/protobuf/duration.proto +0 -0
- {lamda-7.75 → lamda-7.80}/lamda/google/protobuf/empty.proto +0 -0
- {lamda-7.75 → lamda-7.80}/lamda/google/protobuf/field_mask.proto +0 -0
- {lamda-7.75 → lamda-7.80}/lamda/google/protobuf/source_context.proto +0 -0
- {lamda-7.75 → lamda-7.80}/lamda/google/protobuf/struct.proto +0 -0
- {lamda-7.75 → lamda-7.80}/lamda/google/protobuf/timestamp.proto +0 -0
- {lamda-7.75 → lamda-7.80}/lamda/google/protobuf/type.proto +0 -0
- {lamda-7.75 → lamda-7.80}/lamda/google/protobuf/wrappers.proto +0 -0
- {lamda-7.75 → lamda-7.80}/lamda/rpc/debug.proto +0 -0
- {lamda-7.75 → lamda-7.80}/lamda/rpc/file.proto +0 -0
- {lamda-7.75 → lamda-7.80}/lamda/rpc/policy.proto +0 -0
- {lamda-7.75 → lamda-7.80}/lamda/rpc/proxy.proto +0 -0
- {lamda-7.75 → lamda-7.80}/lamda/rpc/settings.proto +0 -0
- {lamda-7.75 → lamda-7.80}/lamda/rpc/shell.proto +0 -0
- {lamda-7.75 → lamda-7.80}/lamda/rpc/status.proto +0 -0
- {lamda-7.75 → lamda-7.80}/lamda/rpc/storage.proto +0 -0
- {lamda-7.75 → lamda-7.80}/lamda/rpc/types.proto +0 -0
- {lamda-7.75 → lamda-7.80}/lamda/rpc/uiautomator.proto +0 -0
- {lamda-7.75 → lamda-7.80}/lamda/rpc/util.proto +0 -0
- {lamda-7.75 → lamda-7.80}/lamda/rpc/wifi.proto +0 -0
- {lamda-7.75 → lamda-7.80}/lamda/types.py +0 -0
- {lamda-7.75 → lamda-7.80}/lamda.egg-info/SOURCES.txt +0 -0
- {lamda-7.75 → lamda-7.80}/lamda.egg-info/dependency_links.txt +0 -0
- {lamda-7.75 → lamda-7.80}/lamda.egg-info/not-zip-safe +0 -0
- {lamda-7.75 → lamda-7.80}/lamda.egg-info/requires.txt +0 -0
- {lamda-7.75 → lamda-7.80}/lamda.egg-info/top_level.txt +0 -0
- {lamda-7.75 → lamda-7.80}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: lamda
|
3
|
-
Version: 7.
|
3
|
+
Version: 7.80
|
4
4
|
Summary: Android reverse engineering & automation framework (Client API)
|
5
5
|
Home-page: https://github.com/firerpa/lamda
|
6
6
|
Author: rev1si0n
|
@@ -12,7 +12,7 @@ Classifier: Intended Audience :: Science/Research
|
|
12
12
|
Classifier: Programming Language :: Python :: 3
|
13
13
|
Classifier: Operating System :: Android
|
14
14
|
Classifier: Topic :: Security
|
15
|
-
Requires-Python: >=3.6
|
15
|
+
Requires-Python: >=3.6,<3.13
|
16
16
|
Requires-Dist: grpcio-tools<=1.68.0,>=1.35.0
|
17
17
|
Requires-Dist: grpc-interceptor<=0.15.4,>=0.13.0
|
18
18
|
Requires-Dist: grpcio<=1.68.0,>=1.35.0
|
@@ -12,11 +12,11 @@
|
|
12
12
|
<img src="https://img.shields.io/github/v/release/rev1si0n/lamda" />
|
13
13
|
</p>
|
14
14
|
|
15
|
-
<p align="center"><a href="https://
|
15
|
+
<p align="center"><a href="https://device-farm.com/doc/index.html">使用文档</a> | <a href="https://t.me/lamda_dev">TELEGRAM</a> | <a href="https://lamda.run/join/qq">QQ 群组</a> | <a href="https://github.com/rev1si0n/lamda/blob/HEAD/CHANGELOG.txt">更新历史</a></p>
|
16
16
|
|
17
17
|
智能机的崛起,传统网页端的普及度也开始显著减弱,数据与应用正加速向移动端转移。越来越多的人选择通过智能手机和平板等移动设备来获取信息和服务。随着移动设备的普及,用户享受到更便捷、更即时的访问体验,传统的网页内容消费模式面临重新审视。与此同时,数据采集的技术也亟需适应这一趋势。过去,许多数据采集工具专注于网页内容,但在移动端环境中,尤其是在移动端封闭的黑盒中,现今的常规采集技术也面临着新的挑战。LAMDA 的诞生,为这一切创造了可能。
|
18
18
|
|
19
|
-
LAMDA
|
19
|
+
LAMDA 是一个**安卓领域的集大成者**,设计为减少**安全分析**及**应用测试**工作的时间和琐碎问题,为**移动端RPA数据采集**提供稳定的解决方案,以**编程化**的**接口**替代大量手动操作,**易部署**,没有那些复杂花哨不跨平台的安装流程,你所需要的能力他大概率能做到并且做的更好。他并不是一个单一功能的框架,他是集 Appium、uiautomator **自动化**的超集同时具备**逆向**领域如 **Hook** **抓包** **证书安装** **组网** **API跟踪** **手机自控** 等等各种能力的框架。为了让你大概了解它的用处:你是否会在手机上安装各类代理、插件或者点来点去的设置来完成你的工作?你是否要在异地操作远在千里之外的手机?你是否有编程控制手机的需求?是否还在某些云手机厂商那里购买昂贵的 **IP切换**、**远程ADB调试**、**RPA自动化**甚至连 **logcat 日志** 都要付费的服务?如果有,那么对了,只需一个 LAMDA 即可解决所有问题。并且,他更注重**分布式**,事实上,你可以在一台公网服务器上管理散布在世界各地各种网络环境中的设备。当然,LAMDA 可以做到的远不止于此,你可以阅读使用文档尽情探索他的所有能力。
|
20
20
|
|
21
21
|
<p align="center"><b>长期维护及更新,质量稳定,安全可靠,生产环境可用<br>现稳定应用于多个外部大型系统,包括自动化取证,云平台,数据采集,涉诈应用分析系统等<br>本框架已稳定运行于各种数据生产环境五年以上</b></p>
|
22
22
|
|
@@ -33,11 +33,6 @@ LAMDA 是一个**安卓领域的集大成者框架**,设计为减少**安全
|
|
33
33
|
|
34
34
|
<p align="center">LAMDA 提供多达 160 条编程 API 接口,让你可以对安卓设备进行无微不至的管理和操作,提供了包括命令执行,系统设置,系统状态,应用相关,自动化相关,代理以及文件等十几个大类的接口。同时提供了封装完整的 Python 库让你可以快速上手使用。</p>
|
35
35
|
|
36
|
-
<p align="center">
|
37
|
-
<img src="image/api.png" alt="动图演示" width="95%">
|
38
|
-
</p>
|
39
|
-
|
40
|
-
|
41
36
|
<h3><p align="center">简洁易用的远程桌面</p></h3>
|
42
37
|
|
43
38
|
<p align="center">
|
@@ -256,6 +256,11 @@ TouchSequence.appendUp = touchSequenceAppendUp
|
|
256
256
|
TouchSequence.__getitem__ = touchSequenceIndexer
|
257
257
|
TouchSequence.__iter__ = touchSequenceIter
|
258
258
|
|
259
|
+
DataEncode = protos.DataEncode
|
260
|
+
ScriptRuntime = protos.ScriptRuntime
|
261
|
+
HookRpcRequest = protos.HookRpcRequest
|
262
|
+
HookRpcResponse = protos.HookRpcResponse
|
263
|
+
|
259
264
|
Bound.width = property(width)
|
260
265
|
Bound.height = property(height)
|
261
266
|
|
@@ -960,6 +965,24 @@ class UiAutomatorStub(BaseServiceStub):
|
|
960
965
|
return ObjectUiAutomatorOpStub(self.stub, kwargs)
|
961
966
|
|
962
967
|
|
968
|
+
class AppScriptRpcInterface(object):
|
969
|
+
def __init__(self, stub, application,
|
970
|
+
name):
|
971
|
+
self.application = application
|
972
|
+
self.stub = stub
|
973
|
+
self.name = name
|
974
|
+
def __call__(self, *args):
|
975
|
+
call_args = dict()
|
976
|
+
call_args["method"] = self.name
|
977
|
+
call_args["args"] = args
|
978
|
+
req = HookRpcRequest()
|
979
|
+
req.package = self.application.applicationId
|
980
|
+
req.callinfo = json.dumps(call_args)
|
981
|
+
result = self.stub.callScript(req)
|
982
|
+
r = json.loads(result.callresult)
|
983
|
+
return r
|
984
|
+
|
985
|
+
|
963
986
|
class ApplicationOpStub:
|
964
987
|
def __init__(self, stub, applicationId, user=0):
|
965
988
|
"""
|
@@ -1114,6 +1137,51 @@ class ApplicationOpStub:
|
|
1114
1137
|
req.user = self.user
|
1115
1138
|
r = self.stub.isInstalled(req)
|
1116
1139
|
return r.value
|
1140
|
+
def attach_script(self, script, runtime=ScriptRuntime.RUNTIME_QJS,
|
1141
|
+
emit="",
|
1142
|
+
encode=DataEncode.DATA_ENCODE_NONE,
|
1143
|
+
standup=5):
|
1144
|
+
"""
|
1145
|
+
向应用注入持久化 Hook 脚本
|
1146
|
+
"""
|
1147
|
+
s = isinstance(script, str)
|
1148
|
+
script = script.encode() if s else script
|
1149
|
+
req = protos.HookRequest()
|
1150
|
+
req.package = self.applicationId
|
1151
|
+
req.script = script
|
1152
|
+
req.runtime = runtime
|
1153
|
+
req.standup = standup
|
1154
|
+
req.destination = emit
|
1155
|
+
req.encode = encode
|
1156
|
+
r = self.stub.attachScript(req)
|
1157
|
+
return r.value
|
1158
|
+
def detach_script(self):
|
1159
|
+
"""
|
1160
|
+
移除注入应用的 Hook 脚本
|
1161
|
+
"""
|
1162
|
+
req = protos.String(value=self.applicationId)
|
1163
|
+
r = self.stub.detachScript(req)
|
1164
|
+
return r.value
|
1165
|
+
def is_attached_script(self):
|
1166
|
+
"""
|
1167
|
+
检查使用在此应用注入了 Hook 脚本
|
1168
|
+
"""
|
1169
|
+
req = protos.String(value=self.applicationId)
|
1170
|
+
r = self.stub.isScriptAttached(req)
|
1171
|
+
return r.value
|
1172
|
+
def is_script_alive(self):
|
1173
|
+
"""
|
1174
|
+
检查应用中的 Hook 脚本是否正常
|
1175
|
+
"""
|
1176
|
+
req = protos.String(value=self.applicationId)
|
1177
|
+
r = self.stub.isScriptAlive(req)
|
1178
|
+
return r.value
|
1179
|
+
def __getattr__(self, name):
|
1180
|
+
"""
|
1181
|
+
调用注入应用 Hook 脚本的导出方法
|
1182
|
+
"""
|
1183
|
+
return AppScriptRpcInterface(self.stub, self,
|
1184
|
+
name)
|
1117
1185
|
|
1118
1186
|
|
1119
1187
|
class ApplicationStub(BaseServiceStub):
|
@@ -13,6 +13,16 @@ enum GrantType {
|
|
13
13
|
GRANT_IGNORE = 2;
|
14
14
|
}
|
15
15
|
|
16
|
+
enum DataEncode {
|
17
|
+
DATA_ENCODE_NONE = 0;
|
18
|
+
DATA_ENCODE_ZLIB = 1;
|
19
|
+
}
|
20
|
+
|
21
|
+
enum ScriptRuntime {
|
22
|
+
RUNTIME_QJS = 0;
|
23
|
+
RUNTIME_V8 = 1;
|
24
|
+
}
|
25
|
+
|
16
26
|
message ApplicationRequest {
|
17
27
|
string name = 1;
|
18
28
|
string permission = 2;
|
@@ -83,3 +93,22 @@ message ApplicationProcesses {
|
|
83
93
|
message ApplicationPkgNames {
|
84
94
|
repeated string names = 1;
|
85
95
|
}
|
96
|
+
|
97
|
+
message HookRequest {
|
98
|
+
string package = 1;
|
99
|
+
bytes script = 2;
|
100
|
+
ScriptRuntime runtime = 3;
|
101
|
+
string destination = 4;
|
102
|
+
DataEncode encode = 5;
|
103
|
+
uint32 standup = 6;
|
104
|
+
}
|
105
|
+
|
106
|
+
message HookRpcRequest {
|
107
|
+
string package = 1;
|
108
|
+
string callinfo = 2;
|
109
|
+
}
|
110
|
+
|
111
|
+
message HookRpcResponse {
|
112
|
+
string package = 1;
|
113
|
+
string callresult = 2;
|
114
|
+
}
|
@@ -50,6 +50,12 @@ service Application {
|
|
50
50
|
rpc addToDozeModeWhiteList(ApplicationRequest) returns (Boolean) {}
|
51
51
|
rpc removeFromDozeModeWhiteList(ApplicationRequest) returns (Boolean) {}
|
52
52
|
rpc getIdentifierByLabel(String) returns (String) {}
|
53
|
+
|
54
|
+
rpc callScript(HookRpcRequest) returns (HookRpcResponse) {}
|
55
|
+
rpc isScriptAlive(String) returns (Boolean) {}
|
56
|
+
rpc isScriptAttached(String) returns (Boolean) {}
|
57
|
+
rpc attachScript(HookRequest) returns (Boolean) {}
|
58
|
+
rpc detachScript(String) returns (Boolean) {}
|
53
59
|
}
|
54
60
|
|
55
61
|
service Debug {
|
@@ -1,6 +1,6 @@
|
|
1
1
|
Metadata-Version: 2.1
|
2
2
|
Name: lamda
|
3
|
-
Version: 7.
|
3
|
+
Version: 7.80
|
4
4
|
Summary: Android reverse engineering & automation framework (Client API)
|
5
5
|
Home-page: https://github.com/firerpa/lamda
|
6
6
|
Author: rev1si0n
|
@@ -12,7 +12,7 @@ Classifier: Intended Audience :: Science/Research
|
|
12
12
|
Classifier: Programming Language :: Python :: 3
|
13
13
|
Classifier: Operating System :: Android
|
14
14
|
Classifier: Topic :: Security
|
15
|
-
Requires-Python: >=3.6
|
15
|
+
Requires-Python: >=3.6,<3.13
|
16
16
|
Requires-Dist: grpcio-tools<=1.68.0,>=1.35.0
|
17
17
|
Requires-Dist: grpc-interceptor<=0.15.4,>=0.13.0
|
18
18
|
Requires-Dist: grpcio<=1.68.0,>=1.35.0
|
@@ -10,7 +10,7 @@ setuptools.setup(
|
|
10
10
|
description = "Android reverse engineering & automation framework (Client API)",
|
11
11
|
url = "https://github.com/firerpa/lamda",
|
12
12
|
author = "rev1si0n",
|
13
|
-
python_requires = ">=3.6
|
13
|
+
python_requires = ">=3.6,<3.13",
|
14
14
|
zip_safe = False,
|
15
15
|
extras_require = {
|
16
16
|
"full": ["frida>=16.0.0,<17.0.0"],
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|