lamda 7.52__tar.gz → 7.57__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- {lamda-7.52 → lamda-7.57}/PKG-INFO +1 -1
- {lamda-7.52 → lamda-7.57}/README.md +11 -4
- {lamda-7.52 → lamda-7.57}/lamda/__init__.py +1 -1
- {lamda-7.52 → lamda-7.57}/lamda/client.py +25 -0
- {lamda-7.52 → lamda-7.57}/lamda/rpc/services.proto +1 -0
- {lamda-7.52 → lamda-7.57}/lamda/rpc/uiautomator.proto +42 -0
- {lamda-7.52 → lamda-7.57}/lamda.egg-info/PKG-INFO +1 -1
- {lamda-7.52 → lamda-7.57}/lamda/bcast.proto +0 -0
- {lamda-7.52 → lamda-7.57}/lamda/const.py +0 -0
- {lamda-7.52 → lamda-7.57}/lamda/exceptions.py +0 -0
- {lamda-7.52 → lamda-7.57}/lamda/google/protobuf/any.proto +0 -0
- {lamda-7.52 → lamda-7.57}/lamda/google/protobuf/api.proto +0 -0
- {lamda-7.52 → lamda-7.57}/lamda/google/protobuf/compiler/plugin.proto +0 -0
- {lamda-7.52 → lamda-7.57}/lamda/google/protobuf/descriptor.proto +0 -0
- {lamda-7.52 → lamda-7.57}/lamda/google/protobuf/duration.proto +0 -0
- {lamda-7.52 → lamda-7.57}/lamda/google/protobuf/empty.proto +0 -0
- {lamda-7.52 → lamda-7.57}/lamda/google/protobuf/field_mask.proto +0 -0
- {lamda-7.52 → lamda-7.57}/lamda/google/protobuf/source_context.proto +0 -0
- {lamda-7.52 → lamda-7.57}/lamda/google/protobuf/struct.proto +0 -0
- {lamda-7.52 → lamda-7.57}/lamda/google/protobuf/timestamp.proto +0 -0
- {lamda-7.52 → lamda-7.57}/lamda/google/protobuf/type.proto +0 -0
- {lamda-7.52 → lamda-7.57}/lamda/google/protobuf/wrappers.proto +0 -0
- {lamda-7.52 → lamda-7.57}/lamda/rpc/application.proto +0 -0
- {lamda-7.52 → lamda-7.57}/lamda/rpc/debug.proto +0 -0
- {lamda-7.52 → lamda-7.57}/lamda/rpc/file.proto +0 -0
- {lamda-7.52 → lamda-7.57}/lamda/rpc/policy.proto +0 -0
- {lamda-7.52 → lamda-7.57}/lamda/rpc/proxy.proto +0 -0
- {lamda-7.52 → lamda-7.57}/lamda/rpc/settings.proto +0 -0
- {lamda-7.52 → lamda-7.57}/lamda/rpc/shell.proto +0 -0
- {lamda-7.52 → lamda-7.57}/lamda/rpc/status.proto +0 -0
- {lamda-7.52 → lamda-7.57}/lamda/rpc/storage.proto +0 -0
- {lamda-7.52 → lamda-7.57}/lamda/rpc/types.proto +0 -0
- {lamda-7.52 → lamda-7.57}/lamda/rpc/util.proto +0 -0
- {lamda-7.52 → lamda-7.57}/lamda/rpc/wifi.proto +0 -0
- {lamda-7.52 → lamda-7.57}/lamda/types.py +0 -0
- {lamda-7.52 → lamda-7.57}/lamda.egg-info/SOURCES.txt +0 -0
- {lamda-7.52 → lamda-7.57}/lamda.egg-info/dependency_links.txt +0 -0
- {lamda-7.52 → lamda-7.57}/lamda.egg-info/not-zip-safe +0 -0
- {lamda-7.52 → lamda-7.57}/lamda.egg-info/requires.txt +0 -0
- {lamda-7.52 → lamda-7.57}/lamda.egg-info/top_level.txt +0 -0
- {lamda-7.52 → lamda-7.57}/setup.cfg +0 -0
- {lamda-7.52 → lamda-7.57}/setup.py +0 -0
@@ -1,5 +1,5 @@
|
|
1
1
|
<p align="center">
|
2
|
-
<img src="image/logo.svg" alt="LAMDA" width="
|
2
|
+
<img src="image/logo.svg" alt="LAMDA" width="345">
|
3
3
|
</p>
|
4
4
|
|
5
5
|
<p align="center">Android reverse engineering & automation framework, the super power.</p>
|
@@ -8,14 +8,19 @@
|
|
8
8
|
<img src="https://img.shields.io/badge/python-3.6+-blue.svg?logo=python&labelColor=yellow" />
|
9
9
|
<img src="https://img.shields.io/badge/android-6.0+-blue.svg?logo=android&labelColor=white" />
|
10
10
|
<img src="https://img.shields.io/badge/root%20require-red.svg?logo=android&labelColor=black" />
|
11
|
+
<img src="https://img.shields.io/github/downloads/rev1si0n/lamda/total" />
|
11
12
|
<img src="https://img.shields.io/github/v/release/rev1si0n/lamda" />
|
12
13
|
</p>
|
13
14
|
|
14
|
-
<p align="center"><a href="https://github.com/rev1si0n/lamda/wiki">使用文档</a> | <a href="https://t.me/lamda_dev">TELEGRAM</a> | <a href="https://lamda.run/join/qq">QQ 群组</a></p>
|
15
|
-
<br>
|
15
|
+
<p align="center"><a href="https://github.com/rev1si0n/lamda/wiki">使用文档</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 是一个用于逆向及自动化的辅助框架,设计为减少安全分析以及应用测试人员的时间及琐碎问题,以编程化的接口替代大量手动操作,它并不是一个单一功能的框架,他是 Appium、uiautomator 的超集同时具备逆向领域的能力。为了让你大概了解它的用处:你是否会在手机上安装各类代理、插件或者点来点去的设置来完成你的工作?你是否要在异地操作远在千里之外的手机?你是否有编程控制手机的需求?是否还在某些云手机厂商那里购买昂贵的**IP切换**、**远程ADB调试**、**RPA自动化**甚至连 **logcat 日志**都要付费的服务?如果有,那么对了,只需一个 LAMDA 即可解决这些问题。并且,LAMDA 更注重**分布式**,事实上,你可以在一台公网服务器上管理散布在世界各地各种网络环境中的设备。当然,LAMDA 可以做到的不止于此。
|
18
18
|
|
19
|
+
<p align="center">
|
20
|
+
<img src="image/wx.png" alt="公众号" width="234">
|
21
|
+
</p>
|
22
|
+
<p align="center"><small>关注公众号查看视频教程以及更多使用方法</small><br><small><b>知识应该是共享的,我们不会要求你为相关知识付费</b></small><br><small>文字版文档请查看<a href="https://github.com/rev1si0n/lamda/wiki">使用文档</a></small></p>
|
23
|
+
|
19
24
|
经过超 500 台设备的稳定生产环境考验,具有近乎商业级软件的质量和稳定性,仅需 root 权限即可正常运行。具备 ARM/X86 全架构,安卓 6.0-14 的广泛兼容性,支持模拟器、真机、云手机、 WSA(Windows Subsystem for Android™️)、无头开发板以及 Redroid。提供大量可编程接口,支持界面布局检视、获取/重放系统中最近的 Activity、唤起应用的 Activity 等功能。除此之外,它支持大文件上传下载,远程桌面,以及UI自动化编程接口,点击、截图、获取界面元素、执行 shell 命令、设备状态、资源读取、系统配置、属性读写、一键中间人等,可通过 SSH 或内置 ADB 登录设备终端。具备 socks5、OpenVPN 代理并可通过接口轻松设置根证书,实现中间人攻击,以及 Frida、IDA 等工具等等,同时支持定时任务、Magisk开机自启动,你可以在任何地方通过网络连接运行着 LAMDA 设备。
|
20
25
|
|
21
26
|

|
@@ -26,4 +31,6 @@ LAMDA 是一个用于逆向及自动化的辅助框架,设计为减少安全
|
|
26
31
|
|
27
32
|

|
28
33
|
|
29
|
-
|
34
|
+
<p align="center">
|
35
|
+
当然,LAMDA 提供的能力不止于这些,由于篇幅较长将不在此罗列,他是你强有力的设备控制及管理工具,如果你感兴趣,请转到 使用文档。
|
36
|
+
</p>
|
@@ -67,6 +67,8 @@ __all__ = [
|
|
67
67
|
"Keys",
|
68
68
|
"KeyCode",
|
69
69
|
"KeyCodes",
|
70
|
+
"MetaKeyCode",
|
71
|
+
"MetaKeyCodes",
|
70
72
|
"BaseCryptor",
|
71
73
|
"FernetCryptor",
|
72
74
|
"OpenVPNAuth",
|
@@ -182,6 +184,9 @@ Keys = protos.Key # make an alias
|
|
182
184
|
KeyCode = protos.KeyCode
|
183
185
|
KeyCodes = protos.KeyCode # make an alias
|
184
186
|
|
187
|
+
MetaKeyCode = protos.MetaKeyCode
|
188
|
+
MetaKeyCodes = protos.MetaKeyCode # make an alias
|
189
|
+
|
185
190
|
OpenVPNAuth = protos.OpenVPNAuth
|
186
191
|
OpenVPNEncryption = protos.OpenVPNEncryption
|
187
192
|
OpenVPNKeyDirection = protos.OpenVPNKeyDirection
|
@@ -237,6 +242,8 @@ TouchSequence.__iter__ = touchSequenceIter
|
|
237
242
|
Bound.width = property(width)
|
238
243
|
Bound.height = property(height)
|
239
244
|
|
245
|
+
FindImageMethod = protos.FindImageMethod
|
246
|
+
|
240
247
|
Bound.center = center
|
241
248
|
Bound.corner = corner
|
242
249
|
|
@@ -848,6 +855,19 @@ class UiAutomatorStub(BaseServiceStub):
|
|
848
855
|
"""
|
849
856
|
r = self.stub.getClipboard(protos.Empty())
|
850
857
|
return r.value
|
858
|
+
def find_similar_image(self, data, threshold=0,
|
859
|
+
max_distance=0, bound=None,
|
860
|
+
method=FindImageMethod.FI_TEMPLATE):
|
861
|
+
"""
|
862
|
+
根据提供的目标图片从屏幕中获取相似图片位置
|
863
|
+
"""
|
864
|
+
req = protos.FindImageRequest(bound=bound)
|
865
|
+
req.method = method
|
866
|
+
req.max_distance = max_distance
|
867
|
+
req.threshold = threshold
|
868
|
+
req.partial = data
|
869
|
+
r = self.stub.findSimilarImage(req)
|
870
|
+
return r.bounds
|
851
871
|
def freeze_rotation(self, freeze=True):
|
852
872
|
"""
|
853
873
|
锁定屏幕旋转
|
@@ -2017,6 +2037,11 @@ class Device(object):
|
|
2017
2037
|
return self.stub("UiAutomator").wait_for_idle(timeout)
|
2018
2038
|
def get_last_toast(self):
|
2019
2039
|
return self.stub("UiAutomator").get_last_toast()
|
2040
|
+
def find_similar_image(self, data, threshold=0,
|
2041
|
+
max_distance=0, bound=None,
|
2042
|
+
method=FindImageMethod.FI_TEMPLATE):
|
2043
|
+
return self.stub("UiAutomator").find_similar_image(data, threshold=threshold,
|
2044
|
+
max_distance=max_distance, bound=bound, method=method)
|
2020
2045
|
# watcher
|
2021
2046
|
def remove_all_watchers(self):
|
2022
2047
|
return self.stub("UiAutomator").remove_all_watchers()
|
@@ -186,6 +186,7 @@ service UiAutomator {
|
|
186
186
|
rpc registerClickUiObjectWatcher(WatcherRegistRequest) returns (Boolean) {}
|
187
187
|
rpc registerPressKeysWatcher(WatcherRegistRequest) returns (Boolean) {}
|
188
188
|
rpc registerNoneOpWatcher(WatcherRegistRequest) returns (Boolean) {}
|
189
|
+
rpc findSimilarImage(FindImageRequest) returns (FindImageResponse) {}
|
189
190
|
}
|
190
191
|
|
191
192
|
service Wifi {
|
@@ -336,6 +336,31 @@ enum KeyCode {
|
|
336
336
|
KEYCODE_PROFILE_SWITCH = 288;
|
337
337
|
}
|
338
338
|
|
339
|
+
enum MetaKeyCode {
|
340
|
+
META_UNKNOWN = 0;
|
341
|
+
META_SHIFT_ON = 1;
|
342
|
+
META_ALT_ON = 2;
|
343
|
+
META_SYM_ON = 4;
|
344
|
+
META_FUNCTION_ON = 8;
|
345
|
+
META_ALT_LEFT_ON = 16;
|
346
|
+
META_ALT_RIGHT_ON = 32;
|
347
|
+
META_ALT_MASK = 50;
|
348
|
+
META_SHIFT_LEFT_ON = 64;
|
349
|
+
META_SHIFT_RIGHT_ON = 128;
|
350
|
+
META_SHIFT_MASK = 193;
|
351
|
+
META_CTRL_ON = 4096;
|
352
|
+
META_CTRL_LEFT_ON = 8192;
|
353
|
+
META_CTRL_RIGHT_ON = 16384;
|
354
|
+
META_CTRL_MASK = 28672;
|
355
|
+
META_META_ON = 65536;
|
356
|
+
META_META_LEFT_ON = 131072;
|
357
|
+
META_META_RIGHT_ON = 262144;
|
358
|
+
META_META_MASK = 458752;
|
359
|
+
META_CAPS_LOCK_ON = 1048576;
|
360
|
+
META_NUM_LOCK_ON = 2097152;
|
361
|
+
META_SCROLL_LOCK_ON = 4194304;
|
362
|
+
}
|
363
|
+
|
339
364
|
enum Corner {
|
340
365
|
COR_CENTER = 0;
|
341
366
|
COR_BOTTOMRIGHT = 1;
|
@@ -529,3 +554,20 @@ message WatcherRegistRequest {
|
|
529
554
|
Key key = 4;
|
530
555
|
}
|
531
556
|
}
|
557
|
+
|
558
|
+
enum FindImageMethod {
|
559
|
+
FI_TEMPLATE = 0;
|
560
|
+
FI_FEATURE_POINT = 1;
|
561
|
+
}
|
562
|
+
|
563
|
+
message FindImageRequest {
|
564
|
+
FindImageMethod method = 1;
|
565
|
+
Bound bound = 2;
|
566
|
+
bytes partial = 3;
|
567
|
+
uint32 max_distance = 4;
|
568
|
+
float threshold = 5;
|
569
|
+
}
|
570
|
+
|
571
|
+
message FindImageResponse {
|
572
|
+
repeated Bound bounds = 1;
|
573
|
+
}
|
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
|
File without changes
|