lamda 7.55__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.55 → lamda-7.60}/PKG-INFO +1 -1
- {lamda-7.55 → lamda-7.60}/README.md +3 -1
- {lamda-7.55 → lamda-7.60}/lamda/__init__.py +1 -1
- {lamda-7.55 → lamda-7.60}/lamda/client.py +35 -3
- {lamda-7.55 → lamda-7.60}/lamda/rpc/services.proto +1 -0
- {lamda-7.55 → lamda-7.60}/lamda/rpc/uiautomator.proto +33 -0
- {lamda-7.55 → lamda-7.60}/lamda.egg-info/PKG-INFO +1 -1
- {lamda-7.55 → lamda-7.60}/lamda/bcast.proto +0 -0
- {lamda-7.55 → lamda-7.60}/lamda/const.py +0 -0
- {lamda-7.55 → lamda-7.60}/lamda/exceptions.py +0 -0
- {lamda-7.55 → lamda-7.60}/lamda/google/protobuf/any.proto +0 -0
- {lamda-7.55 → lamda-7.60}/lamda/google/protobuf/api.proto +0 -0
- {lamda-7.55 → lamda-7.60}/lamda/google/protobuf/compiler/plugin.proto +0 -0
- {lamda-7.55 → lamda-7.60}/lamda/google/protobuf/descriptor.proto +0 -0
- {lamda-7.55 → lamda-7.60}/lamda/google/protobuf/duration.proto +0 -0
- {lamda-7.55 → lamda-7.60}/lamda/google/protobuf/empty.proto +0 -0
- {lamda-7.55 → lamda-7.60}/lamda/google/protobuf/field_mask.proto +0 -0
- {lamda-7.55 → lamda-7.60}/lamda/google/protobuf/source_context.proto +0 -0
- {lamda-7.55 → lamda-7.60}/lamda/google/protobuf/struct.proto +0 -0
- {lamda-7.55 → lamda-7.60}/lamda/google/protobuf/timestamp.proto +0 -0
- {lamda-7.55 → lamda-7.60}/lamda/google/protobuf/type.proto +0 -0
- {lamda-7.55 → lamda-7.60}/lamda/google/protobuf/wrappers.proto +0 -0
- {lamda-7.55 → lamda-7.60}/lamda/rpc/application.proto +0 -0
- {lamda-7.55 → lamda-7.60}/lamda/rpc/debug.proto +0 -0
- {lamda-7.55 → lamda-7.60}/lamda/rpc/file.proto +0 -0
- {lamda-7.55 → lamda-7.60}/lamda/rpc/policy.proto +0 -0
- {lamda-7.55 → lamda-7.60}/lamda/rpc/proxy.proto +0 -0
- {lamda-7.55 → lamda-7.60}/lamda/rpc/settings.proto +0 -0
- {lamda-7.55 → lamda-7.60}/lamda/rpc/shell.proto +0 -0
- {lamda-7.55 → lamda-7.60}/lamda/rpc/status.proto +0 -0
- {lamda-7.55 → lamda-7.60}/lamda/rpc/storage.proto +0 -0
- {lamda-7.55 → lamda-7.60}/lamda/rpc/types.proto +0 -0
- {lamda-7.55 → lamda-7.60}/lamda/rpc/util.proto +0 -0
- {lamda-7.55 → lamda-7.60}/lamda/rpc/wifi.proto +0 -0
- {lamda-7.55 → lamda-7.60}/lamda/types.py +0 -0
- {lamda-7.55 → lamda-7.60}/lamda.egg-info/SOURCES.txt +0 -0
- {lamda-7.55 → lamda-7.60}/lamda.egg-info/dependency_links.txt +0 -0
- {lamda-7.55 → lamda-7.60}/lamda.egg-info/not-zip-safe +0 -0
- {lamda-7.55 → lamda-7.60}/lamda.egg-info/requires.txt +0 -0
- {lamda-7.55 → lamda-7.60}/lamda.egg-info/top_level.txt +0 -0
- {lamda-7.55 → lamda-7.60}/setup.cfg +0 -0
- {lamda-7.55 → 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
|
@@ -242,6 +243,9 @@ TouchSequence.__iter__ = touchSequenceIter
|
|
242
243
|
Bound.width = property(width)
|
243
244
|
Bound.height = property(height)
|
244
245
|
|
246
|
+
FindImageMethod = protos.FindImageMethod
|
247
|
+
FindImageArea = protos.FindImageArea
|
248
|
+
|
245
249
|
Bound.center = center
|
246
250
|
Bound.corner = corner
|
247
251
|
|
@@ -853,6 +857,29 @@ class UiAutomatorStub(BaseServiceStub):
|
|
853
857
|
"""
|
854
858
|
r = self.stub.getClipboard(protos.Empty())
|
855
859
|
return r.value
|
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):
|
867
|
+
"""
|
868
|
+
根据提供的目标图片从屏幕中获取相似图片位置
|
869
|
+
"""
|
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)
|
876
|
+
req.method = method
|
877
|
+
req.distance = distance
|
878
|
+
req.threshold = threshold
|
879
|
+
req.scale = scale
|
880
|
+
req.partial = data
|
881
|
+
r = self.stub.findSimilarImage(req)
|
882
|
+
return r.bounds
|
856
883
|
def freeze_rotation(self, freeze=True):
|
857
884
|
"""
|
858
885
|
锁定屏幕旋转
|
@@ -2022,6 +2049,12 @@ class Device(object):
|
|
2022
2049
|
return self.stub("UiAutomator").wait_for_idle(timeout)
|
2023
2050
|
def get_last_toast(self):
|
2024
2051
|
return self.stub("UiAutomator").get_last_toast()
|
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):
|
2055
|
+
return self.stub("UiAutomator").find_similar_image(data, threshold=threshold,
|
2056
|
+
distance=distance, scale=scale,
|
2057
|
+
area=area, method=method)
|
2025
2058
|
# watcher
|
2026
2059
|
def remove_all_watchers(self):
|
2027
2060
|
return self.stub("UiAutomator").remove_all_watchers()
|
@@ -2097,7 +2130,6 @@ if __name__ == "__main__":
|
|
2097
2130
|
args = parser.parse_args()
|
2098
2131
|
|
2099
2132
|
readline.parse_and_bind("tab: complete")
|
2100
|
-
|
2101
2133
|
d = Device(args.device, port=args.port,
|
2102
|
-
|
2134
|
+
certificate=args.cert)
|
2103
2135
|
code.interact(local=globals())
|
@@ -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 {
|
@@ -554,3 +554,36 @@ message WatcherRegistRequest {
|
|
554
554
|
Key key = 4;
|
555
555
|
}
|
556
556
|
}
|
557
|
+
|
558
|
+
enum FindImageMethod {
|
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;
|
573
|
+
}
|
574
|
+
|
575
|
+
message FindImageRequest {
|
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;
|
585
|
+
}
|
586
|
+
|
587
|
+
message FindImageResponse {
|
588
|
+
repeated Bound bounds = 1;
|
589
|
+
}
|
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
|