lamda 7.80__tar.gz → 7.90__tar.gz

Sign up to get free protection for your applications and to get access to all the features.
Files changed (43) hide show
  1. {lamda-7.80 → lamda-7.90}/PKG-INFO +1 -1
  2. lamda-7.90/README.md +43 -0
  3. {lamda-7.80 → lamda-7.90}/lamda/__init__.py +1 -1
  4. {lamda-7.80 → lamda-7.90}/lamda/client.py +100 -7
  5. {lamda-7.80 → lamda-7.90}/lamda/rpc/application.proto +1 -0
  6. {lamda-7.80 → lamda-7.90}/lamda.egg-info/PKG-INFO +1 -1
  7. lamda-7.80/README.md +0 -52
  8. {lamda-7.80 → lamda-7.90}/lamda/bcast.proto +0 -0
  9. {lamda-7.80 → lamda-7.90}/lamda/const.py +0 -0
  10. {lamda-7.80 → lamda-7.90}/lamda/exceptions.py +0 -0
  11. {lamda-7.80 → lamda-7.90}/lamda/google/protobuf/any.proto +0 -0
  12. {lamda-7.80 → lamda-7.90}/lamda/google/protobuf/api.proto +0 -0
  13. {lamda-7.80 → lamda-7.90}/lamda/google/protobuf/compiler/plugin.proto +0 -0
  14. {lamda-7.80 → lamda-7.90}/lamda/google/protobuf/descriptor.proto +0 -0
  15. {lamda-7.80 → lamda-7.90}/lamda/google/protobuf/duration.proto +0 -0
  16. {lamda-7.80 → lamda-7.90}/lamda/google/protobuf/empty.proto +0 -0
  17. {lamda-7.80 → lamda-7.90}/lamda/google/protobuf/field_mask.proto +0 -0
  18. {lamda-7.80 → lamda-7.90}/lamda/google/protobuf/source_context.proto +0 -0
  19. {lamda-7.80 → lamda-7.90}/lamda/google/protobuf/struct.proto +0 -0
  20. {lamda-7.80 → lamda-7.90}/lamda/google/protobuf/timestamp.proto +0 -0
  21. {lamda-7.80 → lamda-7.90}/lamda/google/protobuf/type.proto +0 -0
  22. {lamda-7.80 → lamda-7.90}/lamda/google/protobuf/wrappers.proto +0 -0
  23. {lamda-7.80 → lamda-7.90}/lamda/rpc/debug.proto +0 -0
  24. {lamda-7.80 → lamda-7.90}/lamda/rpc/file.proto +0 -0
  25. {lamda-7.80 → lamda-7.90}/lamda/rpc/policy.proto +0 -0
  26. {lamda-7.80 → lamda-7.90}/lamda/rpc/proxy.proto +0 -0
  27. {lamda-7.80 → lamda-7.90}/lamda/rpc/services.proto +0 -0
  28. {lamda-7.80 → lamda-7.90}/lamda/rpc/settings.proto +0 -0
  29. {lamda-7.80 → lamda-7.90}/lamda/rpc/shell.proto +0 -0
  30. {lamda-7.80 → lamda-7.90}/lamda/rpc/status.proto +0 -0
  31. {lamda-7.80 → lamda-7.90}/lamda/rpc/storage.proto +0 -0
  32. {lamda-7.80 → lamda-7.90}/lamda/rpc/types.proto +0 -0
  33. {lamda-7.80 → lamda-7.90}/lamda/rpc/uiautomator.proto +0 -0
  34. {lamda-7.80 → lamda-7.90}/lamda/rpc/util.proto +0 -0
  35. {lamda-7.80 → lamda-7.90}/lamda/rpc/wifi.proto +0 -0
  36. {lamda-7.80 → lamda-7.90}/lamda/types.py +0 -0
  37. {lamda-7.80 → lamda-7.90}/lamda.egg-info/SOURCES.txt +0 -0
  38. {lamda-7.80 → lamda-7.90}/lamda.egg-info/dependency_links.txt +0 -0
  39. {lamda-7.80 → lamda-7.90}/lamda.egg-info/not-zip-safe +0 -0
  40. {lamda-7.80 → lamda-7.90}/lamda.egg-info/requires.txt +0 -0
  41. {lamda-7.80 → lamda-7.90}/lamda.egg-info/top_level.txt +0 -0
  42. {lamda-7.80 → lamda-7.90}/setup.cfg +0 -0
  43. {lamda-7.80 → lamda-7.90}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: lamda
3
- Version: 7.80
3
+ Version: 7.90
4
4
  Summary: Android reverse engineering & automation framework (Client API)
5
5
  Home-page: https://github.com/firerpa/lamda
6
6
  Author: rev1si0n
lamda-7.90/README.md ADDED
@@ -0,0 +1,43 @@
1
+ <p align="center">
2
+ <img src="image/logo.svg" alt="LAMDA" width="345">
3
+ </p>
4
+
5
+ <p align="center">安卓 RPA 机器人框架,下一代移动端数据自动化机器人</p>
6
+
7
+ <p align="center">
8
+ <img src="https://img.shields.io/badge/python-3.6+-blue.svg?logo=python&labelColor=yellow" />
9
+ <img src="https://img.shields.io/badge/android-6.0+-blue.svg?logo=android&labelColor=white" />
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" />
12
+ <img src="https://img.shields.io/github/v/release/rev1si0n/lamda" />
13
+ </p>
14
+
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
+
17
+ 智能机的崛起,传统网页端的普及度也开始显著减弱,数据与应用正加速向移动端转移。越来越多的人选择通过智能手机和平板等移动设备来获取信息和服务。随着移动设备的普及,用户享受到更便捷访问体验,传统的网页内容模式面临重新审视。与此同时,数据采集的技术也亟需适应这一趋势。过去,许多数据采集工具专注于网页内容,在移动端环境中,尤其是在移动端封闭的黑盒中,现今的常规采集技术也面临着新的挑战。LAMDA 的诞生,为这一切创造了可能。
18
+
19
+ LAMDA 是**安卓领域的集大成者**,设计为减少**安全分析**及**应用测试**或**自动化**工作的时间和琐碎问题,经过超 500 台设备的生产环境考验,稳定应用于多个大型系统,包括自动化取证,云平台,数据采集,合规分析等,具备商业级软件的质量和稳定性,仅需 root 权限即可正常运行。具备 ARM/X86 全架构,安卓 6.0-14 的广泛兼容性,支持 **模拟器**、**真机**、**云手机**、 **WSA**(Windows Subsystem for Android™️)、**RK开发板** (所有 ARM 架构)以及 **Redroid** 等大多数运行安卓系统的设备。为**移动端 RPA 数据采集**提供稳定的解决方案,以**编程化**的**接口**替代大量手动操作,**易部署**,没有那些复杂花哨不跨平台的安装流程,你所需要的能力他大概率能做到并且做的更好。他并不是一个单一功能的框架,他是集 Appium、uiautomator **自动化**的超集同时具备**逆向**领域如 **Hook** **抓包** **证书安装** **组网** **API跟踪** **手机自控** 等等各种能力的框架。当然,LAMDA 可以做到的远不止于此,你可以阅读使用文档尽情探索他的所有能力。
20
+
21
+
22
+
23
+ <h3><p align="center">丰富的设备编程接口</p></h3>
24
+
25
+ <p align="center">提供多达 160 条编程 API 接口,让你可以对安卓设备进行无微不至的管理和操作,提供了包括命令执行,系统设置,系统状态,应用相关,自动化相关,代理以及文件等十几个大类的接口。同时提供了封装完整的 Python 库让你可以快速上手使用。</p>
26
+
27
+ <h3><p align="center">简洁易用的远程桌面</p></h3>
28
+
29
+ <p align="center">
30
+ <img src="image/demo.gif" alt="动图演示" width="95%">
31
+ </p>
32
+
33
+ <h3><p align="center">一键中间人流量分析及更多其他功能</p></h3>
34
+
35
+ 支持常规以及国际APP流量分析,DNS流量分析,得益于 [mitmproxy flow hook](https://docs.mitmproxy.org/stable/api/events.html),你可以对任何请求做到最大限度的掌控,mitmproxy 功能足够丰富,你可以使用 Python 脚本实时修改或者捕获应用的请求,也可以通过其 `Export` 选项导出特定请求的 `curl` 命令或者 `HTTPie` 命令,分析重放、拦截修改、功能组合足以替代你用过的任何此类商业/非商业软件。如果你仍不清楚 mitmproxy 是什么以及其具有的能力,请务必先查找相关文档,因为 LAMDA 将会使用 mitmproxy 为你展现应用请求。
36
+
37
+ <p align="center">
38
+ <img src="image/mitm.gif" alt="动图演示" width="95%">
39
+ </p>
40
+
41
+ <p align="center">
42
+ 当然,LAMDA 提供的能力不止于这些,由于篇幅较长将不在此罗列,他是你强有力的设备控制及管理工具,如果你感兴趣,请转到 使用文档。
43
+ </p>
@@ -2,4 +2,4 @@
2
2
  #
3
3
  # Distributed under MIT license.
4
4
  # See file LICENSE for detail or copy at https://opensource.org/licenses/MIT
5
- __version__ = "7.80"
5
+ __version__ = "7.90"
@@ -57,6 +57,8 @@ logger.addHandler(handler)
57
57
 
58
58
  sys.path.append(joinpath(dirname(__file__)))
59
59
  sys.path.append(joinpath(dirname(__file__), "rpc"))
60
+ # use native resolver to support mDNS
61
+ os.environ["GRPC_DNS_RESOLVER"] = "native"
60
62
 
61
63
  protos, services = grpc.protos_and_services("services.proto")
62
64
  __all__ = [
@@ -179,6 +181,8 @@ def contain(a, b):
179
181
  b.right <= a.right])
180
182
 
181
183
  def equal(a, b):
184
+ if not isinstance(b, protos.Bound):
185
+ return False
182
186
  return all([b.top == a.top,
183
187
  b.left == a.left,
184
188
  b.bottom == a.bottom,
@@ -194,6 +198,8 @@ Corner = protos.Corner
194
198
  Direction = protos.Direction
195
199
  GproxyType = protos.GproxyType
196
200
  GrantType = protos.GrantType
201
+ ScriptRuntime = protos.ScriptRuntime
202
+ DataEncode = protos.DataEncode
197
203
 
198
204
  Group = protos.Group
199
205
  Key = protos.Key
@@ -256,8 +262,6 @@ TouchSequence.appendUp = touchSequenceAppendUp
256
262
  TouchSequence.__getitem__ = touchSequenceIndexer
257
263
  TouchSequence.__iter__ = touchSequenceIter
258
264
 
259
- DataEncode = protos.DataEncode
260
- ScriptRuntime = protos.ScriptRuntime
261
265
  HookRpcRequest = protos.HookRpcRequest
262
266
  HookRpcResponse = protos.HookRpcResponse
263
267
 
@@ -385,13 +389,14 @@ class GrpcRemoteExceptionInterceptor(ClientInterceptor):
385
389
 
386
390
 
387
391
  class ObjectUiAutomatorOpStub:
388
- def __init__(self, stub, selector):
392
+ def __init__(self, caller, selector):
389
393
  """
390
394
  UiAutomator 子接口,用来模拟出实例的意味
391
395
  """
392
396
  self._selector = selector
393
397
  self.selector = Selector(**selector)
394
- self.stub = stub
398
+ self.stub = caller.stub
399
+ self.caller = caller
395
400
  def __str__(self):
396
401
  selector = ", ".join(["{}={}".format(k, v) \
397
402
  for k, v in self._selector.items()])
@@ -403,7 +408,7 @@ class ObjectUiAutomatorOpStub:
403
408
  s.setdefault("childOrSiblingSelector", [])
404
409
  s["childOrSiblingSelector"].append(selector)
405
410
  s["childOrSibling"].append(name)
406
- return self.__class__(self.stub, s)
411
+ return self.__class__(self.caller, s)
407
412
  def child(self, **selector):
408
413
  """
409
414
  匹配选择器里面的子节点
@@ -494,6 +499,72 @@ class ObjectUiAutomatorOpStub:
494
499
  req = protos.SelectorOnlyRequest(selector=self.selector)
495
500
  r = self.stub.selectorObjInfoOfAllInstances(req)
496
501
  return r.objects
502
+ def all_instances(self):
503
+ """
504
+ 获取选择器选中的所有元素控件
505
+ """
506
+ return list(self)
507
+ def _new_object(self, **kwargs):
508
+ selector = copy.deepcopy(self._selector)
509
+ selector.update(**kwargs)
510
+ instance = self.caller(**selector)
511
+ return instance
512
+ def text(self, txt):
513
+ return self._new_object(text=txt)
514
+ def resourceId(self, name):
515
+ return self._new_object(resourceId=name)
516
+ def description(self, desc):
517
+ return self._new_object(description=desc)
518
+ def packageName(self, name):
519
+ return self._new_object(packageName=name)
520
+ def className(self, name):
521
+ return self._new_object(className=name)
522
+ def textContains(self, needle):
523
+ return self._new_object(textContains=needle)
524
+ def descriptionContains(self, needle):
525
+ return self._new_object(descriptionContains=needle)
526
+ def textStartsWith(self, needle):
527
+ return self._new_object(textStartsWith=needle)
528
+ def descriptionStartsWith(self, needle):
529
+ return self._new_object(descriptionStartsWith=needle)
530
+ def textMatches(self, match):
531
+ return self._new_object(textMatches=match)
532
+ def descriptionMatches(self, match):
533
+ return self._new_object(descriptionMatches=match)
534
+ def resourceIdMatches(self, match):
535
+ return self._new_object(resourceIdMatches=match)
536
+ def packageNameMatches(self, match):
537
+ return self._new_object(packageNameMatches=match)
538
+ def classNameMatches(self, match):
539
+ return self._new_object(classNameMatches=match)
540
+ def checkable(self, value):
541
+ return self._new_object(checkable=value)
542
+ def clickable(self, value):
543
+ return self._new_object(clickable=value)
544
+ def focusable(self, value):
545
+ return self._new_object(focusable=value)
546
+ def scrollable(self, value):
547
+ return self._new_object(scrollable=value)
548
+ def longClickable(self, value):
549
+ return self._new_object(longClickable=value)
550
+ def enabled(self, value):
551
+ return self._new_object(enabled=value)
552
+ def checked(self, value):
553
+ return self._new_object(checked=value)
554
+ def focused(self, value):
555
+ return self._new_object(focused=value)
556
+ def selected(self, value):
557
+ return self._new_object(selected=value)
558
+ def index(self, idx):
559
+ return self._new_object(index=idx)
560
+ def instance(self, idx):
561
+ return self._new_object(instance=idx)
562
+ def __iter__(self):
563
+ """
564
+ 遍历所有符合选择器条件的元素实例
565
+ """
566
+ yield from [self.instance(i) for i in \
567
+ range(self.count())]
497
568
  def count(self):
498
569
  """
499
570
  获取选择器选中控件的数量
@@ -962,7 +1033,7 @@ class UiAutomatorStub(BaseServiceStub):
962
1033
  r = self.stub.waitForIdle(protos.Integer(value=timeout))
963
1034
  return r.value
964
1035
  def __call__(self, **kwargs):
965
- return ObjectUiAutomatorOpStub(self.stub, kwargs)
1036
+ return ObjectUiAutomatorOpStub(self, kwargs)
966
1037
 
967
1038
 
968
1039
  class AppScriptRpcInterface(object):
@@ -1140,6 +1211,7 @@ class ApplicationOpStub:
1140
1211
  def attach_script(self, script, runtime=ScriptRuntime.RUNTIME_QJS,
1141
1212
  emit="",
1142
1213
  encode=DataEncode.DATA_ENCODE_NONE,
1214
+ spawn=False,
1143
1215
  standup=5):
1144
1216
  """
1145
1217
  向应用注入持久化 Hook 脚本
@@ -1151,6 +1223,7 @@ class ApplicationOpStub:
1151
1223
  req.script = script
1152
1224
  req.runtime = runtime
1153
1225
  req.standup = standup
1226
+ req.spawn = spawn
1154
1227
  req.destination = emit
1155
1228
  req.encode = encode
1156
1229
  r = self.stub.attachScript(req)
@@ -2042,6 +2115,14 @@ class Device(object):
2042
2115
  session=None):
2043
2116
  self.certificate = certificate
2044
2117
  self.server = "{0}:{1}".format(host, port)
2118
+ policy = dict()
2119
+ policy["maxAttempts"] = 5
2120
+ policy["retryableStatusCodes"] = ["UNAVAILABLE"]
2121
+ policy["backoffMultiplier"] = 2
2122
+ policy["initialBackoff"] = "0.5s"
2123
+ policy["maxBackoff"] = "15s"
2124
+ config = json.dumps(dict(methodConfig=[{"name": [{}],
2125
+ "retryPolicy": policy,}]))
2045
2126
  if certificate is not None:
2046
2127
  with open(certificate, "rb") as fd:
2047
2128
  key, crt, ca = self._parse_certdata(fd.read())
@@ -2051,10 +2132,14 @@ class Device(object):
2051
2132
  self._chan = grpc.secure_channel(self.server, creds,
2052
2133
  options=(("grpc.ssl_target_name_override",
2053
2134
  self._parse_cname(crt)),
2135
+ ("grpc.service_config", config),
2054
2136
  ("grpc.enable_http_proxy",
2055
2137
  0)))
2056
2138
  else:
2057
- self._chan = grpc.insecure_channel(self.server)
2139
+ self._chan = grpc.insecure_channel(self.server,
2140
+ options=(("grpc.service_config", config),
2141
+ ("grpc.enable_http_proxy", 0))
2142
+ )
2058
2143
  session = session or uuid.uuid4().hex
2059
2144
  interceptors = [ClientSessionMetadataInterceptor(session),
2060
2145
  GrpcRemoteExceptionInterceptor(),
@@ -2068,6 +2153,14 @@ class Device(object):
2068
2153
  def frida(self):
2069
2154
  if _frida_dma is None:
2070
2155
  raise ModuleNotFoundError("frida")
2156
+ try:
2157
+ device = _frida_dma.get_device_matching(
2158
+ lambda d: d.name==self.server)
2159
+ # make a call to check server connectivity
2160
+ device.query_system_parameters()
2161
+ return device
2162
+ except:
2163
+ """ No-op """
2071
2164
  kwargs = {}
2072
2165
  if self.certificate is not None:
2073
2166
  kwargs["certificate"] = self.certificate
@@ -101,6 +101,7 @@ message HookRequest {
101
101
  string destination = 4;
102
102
  DataEncode encode = 5;
103
103
  uint32 standup = 6;
104
+ bool spawn = 7;
104
105
  }
105
106
 
106
107
  message HookRpcRequest {
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: lamda
3
- Version: 7.80
3
+ Version: 7.90
4
4
  Summary: Android reverse engineering & automation framework (Client API)
5
5
  Home-page: https://github.com/firerpa/lamda
6
6
  Author: rev1si0n
lamda-7.80/README.md DELETED
@@ -1,52 +0,0 @@
1
- <p align="center">
2
- <img src="image/logo.svg" alt="LAMDA" width="345">
3
- </p>
4
-
5
- <p align="center">安卓 RPA 机器人框架,下一代移动端数据自动化机器人</p>
6
-
7
- <p align="center">
8
- <img src="https://img.shields.io/badge/python-3.6+-blue.svg?logo=python&labelColor=yellow" />
9
- <img src="https://img.shields.io/badge/android-6.0+-blue.svg?logo=android&labelColor=white" />
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" />
12
- <img src="https://img.shields.io/github/v/release/rev1si0n/lamda" />
13
- </p>
14
-
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
-
17
- 智能机的崛起,传统网页端的普及度也开始显著减弱,数据与应用正加速向移动端转移。越来越多的人选择通过智能手机和平板等移动设备来获取信息和服务。随着移动设备的普及,用户享受到更便捷、更即时的访问体验,传统的网页内容消费模式面临重新审视。与此同时,数据采集的技术也亟需适应这一趋势。过去,许多数据采集工具专注于网页内容,但在移动端环境中,尤其是在移动端封闭的黑盒中,现今的常规采集技术也面临着新的挑战。LAMDA 的诞生,为这一切创造了可能。
18
-
19
- LAMDA 是一个**安卓领域的集大成者**,设计为减少**安全分析**及**应用测试**工作的时间和琐碎问题,为**移动端RPA数据采集**提供稳定的解决方案,以**编程化**的**接口**替代大量手动操作,**易部署**,没有那些复杂花哨不跨平台的安装流程,你所需要的能力他大概率能做到并且做的更好。他并不是一个单一功能的框架,他是集 Appium、uiautomator **自动化**的超集同时具备**逆向**领域如 **Hook** **抓包** **证书安装** **组网** **API跟踪** **手机自控** 等等各种能力的框架。为了让你大概了解它的用处:你是否会在手机上安装各类代理、插件或者点来点去的设置来完成你的工作?你是否要在异地操作远在千里之外的手机?你是否有编程控制手机的需求?是否还在某些云手机厂商那里购买昂贵的 **IP切换**、**远程ADB调试**、**RPA自动化**甚至连 **logcat 日志** 都要付费的服务?如果有,那么对了,只需一个 LAMDA 即可解决所有问题。并且,他更注重**分布式**,事实上,你可以在一台公网服务器上管理散布在世界各地各种网络环境中的设备。当然,LAMDA 可以做到的远不止于此,你可以阅读使用文档尽情探索他的所有能力。
20
-
21
- <p align="center"><b>长期维护及更新,质量稳定,安全可靠,生产环境可用<br>现稳定应用于多个外部大型系统,包括自动化取证,云平台,数据采集,涉诈应用分析系统等<br>本框架已稳定运行于各种数据生产环境五年以上</b></p>
22
-
23
- <p align="center">
24
- <img src="image/wx.png" alt="公众号" width="234">
25
- </p>
26
- <p align="center"><small>关注公众号查看视频教程以及更多使用方法</small><br><small><a href="https://space.bilibili.com/1964784386/video">B站教程视频同步发布</a></small>
27
- </p>
28
-
29
- 经过超 500 台设备的稳定生产环境考验,具有**商业级软件**的**质量**和**稳定性**,仅需 root 权限即可正常运行。具备 ARM/X86 全架构,安卓 6.0-14 的广泛兼容性,支持 **模拟器**、**真机**、**云手机**、 **WSA**(Windows Subsystem for Android™️)、**无头开发板** (RK3399、3588 及任何 ARM 架构开发板)以及 **Redroid** 等大多数运行安卓系统的设备。提供大量可编程接口,支持界面布局检视、获取/重放系统中最近的 Activity、唤起应用的 Activity 等功能。除此之外,它支持大文件上传下载,远程桌面,以及UI自动化编程接口,点击、截图、获取界面元素、执行 shell 命令、设备状态、资源读取、系统配置、属性读写、一键中间人等,可通过 SSH 或内置 ADB 登录设备终端。具备 socks5、OpenVPN 代理并可通过接口轻松设置系统证书及中间人,同时支持定时任务、Magisk开机自启动,你可以在任何地方通过网络连接运行着 LAMDA 设备。
30
-
31
-
32
- <h3><p align="center">丰富的设备编程接口</p></h3>
33
-
34
- <p align="center">LAMDA 提供多达 160 条编程 API 接口,让你可以对安卓设备进行无微不至的管理和操作,提供了包括命令执行,系统设置,系统状态,应用相关,自动化相关,代理以及文件等十几个大类的接口。同时提供了封装完整的 Python 库让你可以快速上手使用。</p>
35
-
36
- <h3><p align="center">简洁易用的远程桌面</p></h3>
37
-
38
- <p align="center">
39
- <img src="image/demo.gif" alt="动图演示" width="95%">
40
- </p>
41
-
42
- <h3><p align="center">一键中间人流量分析及更多其他功能</p></h3>
43
-
44
- 支持常规以及国际APP流量分析,DNS流量分析,得益于 [mitmproxy flow hook](https://docs.mitmproxy.org/stable/api/events.html),你可以对任何请求做到最大限度的掌控,mitmproxy 功能足够丰富,你可以使用 Python 脚本实时修改或者捕获应用的请求,也可以通过其 `Export` 选项导出特定请求的 `curl` 命令或者 `HTTPie` 命令,分析重放、拦截修改、功能组合足以替代你用过的任何此类商业/非商业软件。如果你仍不清楚 mitmproxy 是什么以及其具有的能力,请务必先查找相关文档,因为 LAMDA 将会使用 mitmproxy 为你展现应用请求。
45
-
46
- <p align="center">
47
- <img src="image/mitm.gif" alt="动图演示" width="95%">
48
- </p>
49
-
50
- <p align="center">
51
- 当然,LAMDA 提供的能力不止于这些,由于篇幅较长将不在此罗列,他是你强有力的设备控制及管理工具,如果你感兴趣,请转到 使用文档。
52
- </p>
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