lamda 7.57__tar.gz → 7.60__tar.gz
Sign up to get free protection for your applications and to get access to all the features.
- {lamda-7.57 → lamda-7.60}/PKG-INFO +1 -1
- {lamda-7.57 → lamda-7.60}/README.md +3 -1
- {lamda-7.57 → lamda-7.60}/lamda/__init__.py +1 -1
- {lamda-7.57 → lamda-7.60}/lamda/client.py +24 -12
- {lamda-7.57 → lamda-7.60}/lamda/rpc/uiautomator.proto +23 -7
- {lamda-7.57 → lamda-7.60}/lamda.egg-info/PKG-INFO +1 -1
- {lamda-7.57 → lamda-7.60}/lamda/bcast.proto +0 -0
- {lamda-7.57 → lamda-7.60}/lamda/const.py +0 -0
- {lamda-7.57 → lamda-7.60}/lamda/exceptions.py +0 -0
- {lamda-7.57 → lamda-7.60}/lamda/google/protobuf/any.proto +0 -0
- {lamda-7.57 → lamda-7.60}/lamda/google/protobuf/api.proto +0 -0
- {lamda-7.57 → lamda-7.60}/lamda/google/protobuf/compiler/plugin.proto +0 -0
- {lamda-7.57 → lamda-7.60}/lamda/google/protobuf/descriptor.proto +0 -0
- {lamda-7.57 → lamda-7.60}/lamda/google/protobuf/duration.proto +0 -0
- {lamda-7.57 → lamda-7.60}/lamda/google/protobuf/empty.proto +0 -0
- {lamda-7.57 → lamda-7.60}/lamda/google/protobuf/field_mask.proto +0 -0
- {lamda-7.57 → lamda-7.60}/lamda/google/protobuf/source_context.proto +0 -0
- {lamda-7.57 → lamda-7.60}/lamda/google/protobuf/struct.proto +0 -0
- {lamda-7.57 → lamda-7.60}/lamda/google/protobuf/timestamp.proto +0 -0
- {lamda-7.57 → lamda-7.60}/lamda/google/protobuf/type.proto +0 -0
- {lamda-7.57 → lamda-7.60}/lamda/google/protobuf/wrappers.proto +0 -0
- {lamda-7.57 → lamda-7.60}/lamda/rpc/application.proto +0 -0
- {lamda-7.57 → lamda-7.60}/lamda/rpc/debug.proto +0 -0
- {lamda-7.57 → lamda-7.60}/lamda/rpc/file.proto +0 -0
- {lamda-7.57 → lamda-7.60}/lamda/rpc/policy.proto +0 -0
- {lamda-7.57 → lamda-7.60}/lamda/rpc/proxy.proto +0 -0
- {lamda-7.57 → lamda-7.60}/lamda/rpc/services.proto +0 -0
- {lamda-7.57 → lamda-7.60}/lamda/rpc/settings.proto +0 -0
- {lamda-7.57 → lamda-7.60}/lamda/rpc/shell.proto +0 -0
- {lamda-7.57 → lamda-7.60}/lamda/rpc/status.proto +0 -0
- {lamda-7.57 → lamda-7.60}/lamda/rpc/storage.proto +0 -0
- {lamda-7.57 → lamda-7.60}/lamda/rpc/types.proto +0 -0
- {lamda-7.57 → lamda-7.60}/lamda/rpc/util.proto +0 -0
- {lamda-7.57 → lamda-7.60}/lamda/rpc/wifi.proto +0 -0
- {lamda-7.57 → lamda-7.60}/lamda/types.py +0 -0
- {lamda-7.57 → lamda-7.60}/lamda.egg-info/SOURCES.txt +0 -0
- {lamda-7.57 → lamda-7.60}/lamda.egg-info/dependency_links.txt +0 -0
- {lamda-7.57 → lamda-7.60}/lamda.egg-info/not-zip-safe +0 -0
- {lamda-7.57 → lamda-7.60}/lamda.egg-info/requires.txt +0 -0
- {lamda-7.57 → lamda-7.60}/lamda.egg-info/top_level.txt +0 -0
- {lamda-7.57 → lamda-7.60}/setup.cfg +0 -0
- {lamda-7.57 → lamda-7.60}/setup.py +0 -0
@@ -19,7 +19,9 @@ LAMDA 是一个用于逆向及自动化的辅助框架,设计为减少安全
|
|
19
19
|
<p align="center">
|
20
20
|
<img src="image/wx.png" alt="公众号" width="234">
|
21
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></
|
22
|
+
<p align="center"><small>关注公众号查看视频教程以及更多使用方法</small><br><small><b>知识应该是共享的,我们不会要求你为相关知识付费</b></small><br><br><small><a href="https://space.bilibili.com/1964784386/video">BILIBILI 同步发布</a></small><br><small>文字版文档请查看<a href="https://github.com/rev1si0n/lamda/wiki">使用文档</a></small></small>
|
23
|
+
</p>
|
24
|
+
|
23
25
|
|
24
26
|
经过超 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 设备。
|
25
27
|
|
@@ -74,6 +74,8 @@ __all__ = [
|
|
74
74
|
"OpenVPNAuth",
|
75
75
|
"OpenVPNEncryption",
|
76
76
|
"OpenVPNKeyDirection",
|
77
|
+
"FindImageMethod",
|
78
|
+
"FindImageArea",
|
77
79
|
"ToastDuration",
|
78
80
|
"OpenVPNCipher",
|
79
81
|
"OpenVPNProto",
|
@@ -230,7 +232,6 @@ TouchAction.action = property(touchActionRealAction)
|
|
230
232
|
|
231
233
|
TouchSequence.load = classmethod(touchSequenceLoad)
|
232
234
|
TouchSequence.save = touchSequenceSave
|
233
|
-
|
234
235
|
TouchSequence.appendAction = touchSequenceAppendAction
|
235
236
|
TouchSequence.appendDown = touchSequenceAppendDown
|
236
237
|
TouchSequence.appendWait = touchSequenceAppendWait
|
@@ -243,6 +244,7 @@ Bound.width = property(width)
|
|
243
244
|
Bound.height = property(height)
|
244
245
|
|
245
246
|
FindImageMethod = protos.FindImageMethod
|
247
|
+
FindImageArea = protos.FindImageArea
|
246
248
|
|
247
249
|
Bound.center = center
|
248
250
|
Bound.corner = corner
|
@@ -855,16 +857,26 @@ class UiAutomatorStub(BaseServiceStub):
|
|
855
857
|
"""
|
856
858
|
r = self.stub.getClipboard(protos.Empty())
|
857
859
|
return r.value
|
858
|
-
def
|
859
|
-
|
860
|
-
|
860
|
+
def _set_target_Area(self, req, area):
|
861
|
+
req.area = area
|
862
|
+
def _set_target_Bound(self, req, bound):
|
863
|
+
req.bound.CopyFrom(bound)
|
864
|
+
def find_similar_image(self, data, threshold=0.0, distance=250,
|
865
|
+
scale=1.0, area=FindImageArea.FIA_WHOLE_SCREEN,
|
866
|
+
method=FindImageMethod.FIM_TEMPLATE):
|
861
867
|
"""
|
862
868
|
根据提供的目标图片从屏幕中获取相似图片位置
|
863
869
|
"""
|
864
|
-
req = protos.FindImageRequest(
|
870
|
+
req = protos.FindImageRequest()
|
871
|
+
checkArgumentTyp(area, (Bound, int))
|
872
|
+
name = getattr(getattr(area, "DESCRIPTOR", None),
|
873
|
+
"name", "Area")
|
874
|
+
func = "_set_target_{}".format(name)
|
875
|
+
getattr(self, func)(req, area)
|
865
876
|
req.method = method
|
866
|
-
req.
|
877
|
+
req.distance = distance
|
867
878
|
req.threshold = threshold
|
879
|
+
req.scale = scale
|
868
880
|
req.partial = data
|
869
881
|
r = self.stub.findSimilarImage(req)
|
870
882
|
return r.bounds
|
@@ -2037,11 +2049,12 @@ class Device(object):
|
|
2037
2049
|
return self.stub("UiAutomator").wait_for_idle(timeout)
|
2038
2050
|
def get_last_toast(self):
|
2039
2051
|
return self.stub("UiAutomator").get_last_toast()
|
2040
|
-
def find_similar_image(self, data, threshold=0,
|
2041
|
-
|
2042
|
-
method=FindImageMethod.
|
2052
|
+
def find_similar_image(self, data, threshold=0.0, distance=250,
|
2053
|
+
scale=1.0, area=FindImageArea.FIA_WHOLE_SCREEN,
|
2054
|
+
method=FindImageMethod.FIM_TEMPLATE):
|
2043
2055
|
return self.stub("UiAutomator").find_similar_image(data, threshold=threshold,
|
2044
|
-
|
2056
|
+
distance=distance, scale=scale,
|
2057
|
+
area=area, method=method)
|
2045
2058
|
# watcher
|
2046
2059
|
def remove_all_watchers(self):
|
2047
2060
|
return self.stub("UiAutomator").remove_all_watchers()
|
@@ -2117,7 +2130,6 @@ if __name__ == "__main__":
|
|
2117
2130
|
args = parser.parse_args()
|
2118
2131
|
|
2119
2132
|
readline.parse_and_bind("tab: complete")
|
2120
|
-
|
2121
2133
|
d = Device(args.device, port=args.port,
|
2122
|
-
|
2134
|
+
certificate=args.cert)
|
2123
2135
|
code.interact(local=globals())
|
@@ -556,16 +556,32 @@ message WatcherRegistRequest {
|
|
556
556
|
}
|
557
557
|
|
558
558
|
enum FindImageMethod {
|
559
|
-
|
560
|
-
|
559
|
+
FIM_TEMPLATE = 0;
|
560
|
+
FIM_FEATURE = 1;
|
561
|
+
}
|
562
|
+
|
563
|
+
enum FindImageArea {
|
564
|
+
FIA_WHOLE_SCREEN = 0;
|
565
|
+
FIA_LEFT = 1;
|
566
|
+
FIA_TOP_LEFT = 2;
|
567
|
+
FIA_TOP = 3;
|
568
|
+
FIA_TOP_RIGHT = 4;
|
569
|
+
FIA_RIGHT = 5;
|
570
|
+
FIA_BOTTOM_RIGHT = 6;
|
571
|
+
FIA_BOTTOM = 7;
|
572
|
+
FIA_BOTTOM_LEFT = 8;
|
561
573
|
}
|
562
574
|
|
563
575
|
message FindImageRequest {
|
564
|
-
|
565
|
-
|
566
|
-
|
567
|
-
|
568
|
-
|
576
|
+
bytes partial = 1;
|
577
|
+
FindImageMethod method = 2;
|
578
|
+
oneof _area {
|
579
|
+
FindImageArea area = 3;
|
580
|
+
Bound bound = 4;
|
581
|
+
}
|
582
|
+
uint32 distance = 5;
|
583
|
+
float threshold = 6;
|
584
|
+
float scale = 7;
|
569
585
|
}
|
570
586
|
|
571
587
|
message FindImageResponse {
|
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
|
File without changes
|