请选择 进入手机版 | 继续访问电脑版
正在上传图片(0/1)

限飞区解禁教学贴,禁飞区飞友有福利啦!大家顶上去!!

 9
手机看帖 24 63734
大疆开放了禁飞区解禁功能,禁飞区的飞友有福利啦!
估计是解禁比较麻烦,给大疆带来很大工作量(本人亲自体验),所以论坛上解答的比较少。
我所在城市为禁飞区,但因为执行任务,又得航拍,最近联系大疆解禁了限飞,现把步骤与飞友分享了,想解禁的朋友务比顶上去,不枉我在这里码字。

一、给大疆邮箱:flysafe@dji.com邮件,说明你要解禁的原因(笔者写要执行特殊飞行任务);

二、大疆flysafe@dji.com会给你发邮件:

尊敬的大疆客户:
如您需要给飞行器申请解禁,请您提供以下信息:
1. 需要申请解禁的DJI GO app邮箱账号;
2. 飞行器型号;
(目前支持的产品包括:Phantom 3 Standard, Phantom 3 Professional, Phantom 3 Advanced, Phantom 4, Phantom 4 Pro, Phantom 4 Pro+, Matrice 100, Matrice 600, Matrice 600 Pro, Inspire1,Inspire2, A3+ Lightbridge 2,N3 和 Mavic)。A2飞控请联系电话400-700-0303机架组进行咨询。
3.解禁城市
以下是申请解禁需要提交的资料,请您参考(不需要先提交):
1. 政府批文的复印件(例如当地空管、空军委申报或公安等政府部门知晓或批准的函或文件;申请新疆、北京地区解禁地区的客户,请使用此模板,否则无法通过审核。
http://sp-webfront.skypixel.com/nfz/doc/area-ban-notice.docx
http://sp-webfront.skypixel.com/ ... -questionnaire.docx
2. 使用者的身份证复印件;
3. 签署免责条款并盖章;下载地址:http://sp-webfront.skypixel.com/nfz/doc/disclaimer-no-fly.pdf
4. 签署保密协议并盖章;下载地址:http://sp-webfront.skypixel.com/nfz/doc/secrecy-agreement.pdf
5. 提供要使用的设备主控序列号(连接好飞行器后,进入DJI GO app-飞行器相机-通用设置-【关于】页面最下方查看)
注:解禁时长最大为3个月,半径30KM的范围
感谢您选择大疆创新!
大疆创新丨Chloe
工作时间: 周一至周五, 9:00- 18:00 (北京时间 GMT+8:00)

三、按邮件要求准备解禁材料:
     一是政府批文,一般人搞不到空军委的,可以去公安部门、部队、武警等具有权利部门开具的解禁函,个人理解大疆的意思,只要你不代表个人飞行,飞行任务是执行公务,也就是说你有单位证明,除以上单位外,学校啊、公司呀、社区什么的,只要开具了有公章效率的函就可以了,个人觉得主要是有单位担保你安全飞行,这样才不会乱会。具体情况要看你申报的资料大疆能不能通过。
     二是使用者的身份证复印件(就是执行飞行任务的操作者);
     三是签署免责条款并盖章
     四是签署保密协议并盖章
注意,新疆、北京的飞友务必下载大疆给的模板文件,一个是《禁飞区解禁通知函》(图1),一个是《禁飞区解禁信息调查表》(图2),否则无法通过审核。
两个文件模板下载地址:
http://sp-webfront.skypixel.com/nfz/doc/area-ban-notice.docx
http://sp-webfront.skypixel.com/ ... -questionnaire.docx
以上四份文件该盖章的地方盖好公章,所用公章与第一个批文公章相同,
关键一步,把以上四个文件扫描成电子版,当然也可以用手机拍下来,下面申请要提交给大疆
     五是打开飞机、APP、进入飞行器相机--通用设置--关于,找到你的飞机的飞控序列号,记下来,下一个步骤要用到的。

四、准备好以上材料电子版后,给大疆邮件flysafe@dji.com发邮件,说明要申请解禁链接。邮件会回复给你解禁链接邮件,如下:
尊敬的顾客:

感谢您联系大疆创新!

我们已将两封相关解禁流程邮件发给1520777920@qq.com。里面各有一个链接,请您仔细阅读邮件之后,打开该链接上传相关文档并填写相关信息。
上传之后我们这边会做一个备份,备份完成之后会尽快为您的飞机进行解禁。(工作日周一到周五)

http://121.43.181.146:3004/2afac642-d061-426f-b351-514dddb076eb(此链接是我用的,用过无效)

http://121.43.181.146:3004/13551951-e333-4f87-a246-27ad472d6580(此链接是我用的,用过无效)

特别注意,这个链接需要下载谷歌的浏览器才能打开,不知道是不是大疆服务器的问题。


五、点击大疆给的申请解禁链接,会跳出解禁材料上传和解禁区域、时间、飞控序列号填写选项,一步步提交,上传成项会跳出成攻的对话框。

六、耐心等侯(一般不会超过1个工作日),能不能通过,大疆flysafe@dji.com会给你电邮。大疆审核通过后给你发解禁方法的邮件,如下:

尊敬的大疆客户:
您已签署免责声明和保密协议,您所自主申报的飞行限制区解锁功能已经生效。使用解锁功能时,请您下载DJI GO 3 app或者DJI GO 4 app(Phantom 4,Phantom 4 pro,Mavic Pro,Inspire 2适用)到移动设备进行解禁操作。
在解锁飞行限制区前,请注意: 请使用DJI GO app最新版或DJI GO 4 V4.0.6(安卓)、V4.0.7(IOS)
[DJI GO 4 V4.0.6(安卓)、V4.0.7(IOS)]解禁操作方法

1. 首次操作解禁时,请确保运行app的移动设备有连接网络,且速度良好,并是用申请的DJI GO 邮箱账号登陆app。
2. 连接好飞行器,使用您在邮件中“申请解禁”的DJI GO邮箱账号登录DJI Go App,进入DJI GO APP-飞行器相机-通用设置-解禁页面,点击“同步解禁信息”,就会出现对应的解禁证书。滑动右侧的开关进行解禁。(证书下载完成,后续不需要联网也可以操作解禁)
3. 解禁完成后,在DJI GO APP会出现一个绿圈,即为您申请解禁的区域,您可以在该区域飞行。飞行时,飞行器需要处于P-GPS模式下。(可以在app相机页面上方查看到。)
4. 如需关闭该区域的解禁,可以在解禁的证书页面滑动开关关闭该功能。

[DJI GO 3] 解禁操作方法
使用申请解禁的DJI GO 账号邮箱登陆app,进入dji go –飞行器相机-通用设置-关于-unlimit area界面。
1. 在解禁区域(即是红圈内,如地图显示您不在红圈无法操作),开启飞机和遥控器,IOS设备上有“网络”且飞机在GPS模式下,搜到的卫星质量良好;
2. 在Unlimit Area页面点击证书,然后点击OK;
3. 在Unlimit Area页面的开启白名单解禁的开关,变成绿色表示解禁成功。
4. 如是Phantom 3 Standard飞行器首次申请解禁,请联系flysafe@dji.com获取解禁固件,升级后方可按照以上步骤操作解禁。

如您解禁失败,请您提供以下信息到 flysafe@dji.com邮箱排查:
1. 当前登陆app的DJI GO邮箱账号
2 .连接好机器后,进入DJI GO app-飞行器相机-通用设置-【解禁】页面的截图
3. 处于申请解禁的区域时,DJI GO app里的地图截图。
4. 飞行器型号
5. 连接好机器后,进入DJI GO app-飞行器相机-通用设置-【关于】页面截图
请您务必注意飞行安全,确保一切行为符合当地空管等政府部门的规定。
注: 此邮件为系统自动发送,请勿回复。

按邮件一步步操作就可以成功啦!


解禁心得:
也就是注意事项:
     一是目前大疆解禁要求使用IOS移动设备,安卓设备DJI GO 没有上面讲到的“通用设置--关于--unlimit area界面”大疆说是在“清除航线”下面的选项找,我也没找到,最后借同事的苹果6P安装IOS版的APP后才找到了“通用设置--关于--unlimit area界面”,且需在室外GPS良好情况下,飞机能发现GPS和禁飞区,就是红圈,才能点击下载证书,滑动白名单滑块成绿色解禁成功,禁飞区红圈变成绿色,可以成功操作飞机飞上天空。
     二是IOS设备解禁需设备联网,因为要下载证书,且要求飞机在室外GPS良好,能发现飞机在红圈禁飞区内。
     三是IOS设备解禁后,白名单滑块会自动关闭,又成了禁飞区。大疆说是因为时域或环境原因,也可能是他们服务器的问题,反正每次起飞要点击滑块,加入解禁白名单。
     四是多次电邮反映安桌版APP没有选项的问题,大疆一直说已反应给相关部门在解决,目前一直没有解决,且这个问题2016年8月就有飞友反映,不知道什么原因,这一点不得不说非常遗憾,必竟国内还有很多飞友都是使用安卓移动设备,希望广大飞友积极呼吁,大疆尽快解决。

    好,就到这里,有什么其他问题可以发邮件解答。


图1
图2
点击下载证书后滑块可以滑动加入白名单
要求固件升级到最新才能解禁
安卓APP“关于”下没有解禁,“清除航线”下面也没有
评论
上传
你需要登录之后才能回帖    登录 | 注册
屌炸天  Inspire 1认证用户 2017-5-6 2#
本帖最后由 屌炸天 于 2017-5-6 14:51 编辑

我以为是什么干货呢    原来是正规解禁  老外们都在玩软解了
大家赶紧看啊,一会儿4美来了,你们就看不到了。。。。。

随便贴部分代码证明下这不是玩笑 不要找我问这个是什么 只是抛砖引玉下 因为我也看不懂

#!/usr/bin/env python3

from __future__ import print_function
import sys
import getopt
import os
import math
from ctypes import *
import json

*************************被我破坏掉了************
     if (po.verbose > 2):
        print("Rejected at {:06x} on radius check ({:d})\n".format(entry_pos,enfzone.radius))
     return False
  if (enfzone.country_code > 2000):
     if (po.verbose > 2):
        print("Rejected at {:06x} on country check ({:d})\n".format(entry_pos,enfzone.country_code))
     return False
  #if (enfzone.class_id < 30) or (enfzone.class_id > 30000):
  
  parprop = flyc_nofly_zone_template(po)
  enfzone = FlycNoFlyZone()
  fwmdlfile.seek(po.nfzone_pos+sizeof(enfzone)*index, os.SEEK_SET)
  if fwmdlfile.readinto(enfzone) != sizeof(enfzone):
      raise EOFError("Cannot read nfzone entry.")
  parprop['area_id'] = enfzone.area_id
  parprop['begin_at'] = enfzone.begin_at
  parprop['end_at'] = enfzone.end_at
  parprop['lat'] = enfzone.latitude/1000000.0
  parprop['lng'] = enfzone.longitude/1000000.0
  parprop['radius'] = enfzone.radius
  parprop['country'] = enfzone.country_code
  parprop['type'] = enfzone.class_id
  parprop['storage'] |= NoFlyStorage.zone
  return parprop

下面的全删了******************************
Yuanzi  Osmo Mobile认证用户 2017-5-6 3#
厉害了,这个也要以组织机构团体的名义才可以吧,如果什么时候也针对个人开放申请和登记就好了
Yuanzi  Osmo Mobile认证用户 2017-5-6 4#
屌炸天如影MX2017-5-6 14:19
我以为是什么干货呢    原来是正规解禁  老外们都在玩软解了

贴部分代码证明下这不是玩笑 不要找我问这个是什么 只是抛砖引玉下 因为我也看不懂

#!/usr/bin/env python3

from __future__ import print_function
import sys
import getopt
import os
import math
from ctypes import *
import json

def eprint(*args, **kwargs):
  print(*args, file=sys.stderr, **kwargs)

class ProgOptions:
  mdlfile = ''
  inffile=&quot;flyc_forbid_areas.json&quot;
  address_base=0x8020000
  address_bss=0x20000000
  sizeof_bss=0x4400000
  expect_func_align = 4
  expect_data_align = 2
  min_match_accepted = 60
  verbose = 0
  command = ''
  nfzone_pos = -1
  nfzone_count = 0
  nfcord_pos = -1
  nfcord_count = 0

class NoFlyStorage:
  none = 0x0
  zone = 0x1
  cord = 0x2

class FlycNoFlyZone(LittleEndianStructure):
  _pack_ = 1
  _fields_ = [('latitude', c_int), # angular value * 1000000
              ('longitude', c_int),
              ('radius', c_ushort),
              ('country_code', c_ushort),
              ('class_id', c_ubyte),
              ('area_id', c_ushort),
              ('begin_at', c_ubyte),
              ('end_at', c_ubyte)]

  def dict_export(self):
    d = dict()
    for (varkey, vartype) in self._fields_:
        d[varkey] = getattr(self, varkey)
    return d

  def __repr__(self):
    d = self.dict_export()
    from pprint import pformat
    return pformat(d, indent=4, width=1)

class FlycNoFlyCoords(LittleEndianStructure):
  _pack_ = 1
  _fields_ = [('latitude', c_int),
              ('longitude', c_int)]

def isclose(a, b, rel_tol=1e-09, abs_tol=0.0):
  &quot;&quot;&quot; Equivalent to math.isclose(); use it if the script needs to work on Python &lt; 3.5
  &quot;&quot;&quot;
  return abs(a-b)  2):
        print(&quot;Rejected at {:06x} on begin_at/end_at check ({:d},{:d})\n&quot;.format(entry_pos,enfzone.begin_at,enfzone.end_at))
     return False
  if (enfzone.radius &lt; 30) or (enfzone.radius &gt; 50000):
     if (po.verbose &gt; 2):
        print(&quot;Rejected at {:06x} on radius check ({:d})\n&quot;.format(entry_pos,enfzone.radius))
     return False
  if (enfzone.country_code &gt; 2000):
     if (po.verbose &gt; 2):
        print(&quot;Rejected at {:06x} on country check ({:d})\n&quot;.format(entry_pos,enfzone.country_code))
     return False
  #if (enfzone.class_id &lt; 30) or (enfzone.class_id &gt; 30000):
  if (enfzone.area_id  2):
        print(&quot;Rejected at {:06x} on area_id check ({:d})\n&quot;.format(entry_pos,enfzone.area_id))
     return False
  return flyc_nofly_is_proper_cord_entry(po, fwmdlfile, fwmdlfile_len, enfzone, func_align, data_align, pos, entry_pos)

def flyc_nofly_is_proper_cord_entry(po, fwmdlfile, fwmdlfile_len, enfcord, func_align, data_align, pos, entry_pos):
  &quot;&quot;&quot; Checks whether given FlycNoFlyCoords object stores a proper entry of
      flight controller no fly coordinates array.
  &quot;&quot;&quot;
  # Check if we're at ocean around (0.0,0.0), that is within rectangle (-8.0,-6.7) to (4.7,5.5)
  if (enfcord.latitude &gt;= -8000000) and (enfcord.latitude = -6700000) and (enfcord.longitude  2):
           print(&quot;Rejected at {:06x} on low coord ocean check ({:.6f},{:.6f})\n&quot;.format(entry_pos,enfcord.latitude/1000000.0,enfcord.longitude/1000000.0))
        return False
  # Check if coords are within valid angular range
  if (enfcord.latitude &lt; -90000000) or (enfcord.latitude &gt; 90000000):
     if (po.verbose &gt; 2):
        print(&quot;Rejected at {:06x} on latitude coord limit check ({:.6f},{:.6f})\n&quot;.format(entry_pos,enfcord.latitude/1000000.0,enfcord.longitude/1000000.0))
     return False
  if (enfcord.longitude &lt; -180000000) or (enfcord.longitude &gt; 180000000):
     if (po.verbose &gt; 2):
        print(&quot;Rejected at {:06x} on longitude coord limit check ({:.6f},{:.6f})\n&quot;.format(entry_pos,enfcord.latitude/1000000.0,enfcord.longitude/1000000.0))
     return False
  return True

def flyc_nofly_zone_pos_search(po, fwmdlfile, start_pos, func_align, data_align, min_match_accepted):
  &quot;&quot;&quot; Finds position of flight controller no fly zones in the binary.
  &quot;&quot;&quot;
  fwmdlfile.seek(0, os.SEEK_END)
  fwmdlfile_len = fwmdlfile.tell()
  enfzone = FlycNoFlyZone()
  match_count = 0
  match_pos = -1
  match_entries = 0
  reached_eof = False
  pos = start_pos
  while (True):
     # Check how many correct zone entries we have
     entry_count = 0
     entry_pos = pos
     while (True):
        fwmdlfile.seek(entry_pos, os.SEEK_SET)
        if fwmdlfile.readinto(enfzone) != sizeof(enfzone):
           reached_eof = True
           break
        if not flyc_nofly_is_proper_zone_entry(po, fwmdlfile, fwmdlfile_len, enfzone, func_align, data_align, pos, entry_pos):
           break
        entry_count += 1
        entry_pos += sizeof(enfzone)
     # Do not allow entry at EOF
     if (reached_eof):
        break
     # If entry is ok, consider it a match
     if entry_count &gt; min_match_accepted:
        if (po.verbose &gt; 1):
           print(&quot;{}: Matching zones array at 0x{:08x}: {:d} entries&quot;.format(po.mdlfile,pos,entry_count))
        if (entry_count &gt;= match_entries):
           match_pos = pos
           match_entries = entry_count
        match_count += 1
     # Set position to search for next entry
     if entry_count &gt;= min_match_accepted:
        pos += entry_count * sizeof(enfzone)
     else:
        pos += data_align - (pos%data_align)
  if (match_count &gt; 1):
     eprint(&quot;{}: Warning: multiple ({:d}) matches found for fly zones array with alignment 0x{:02x}&quot;.format(po.mdlfile,match_count,data_align))
  if (match_count &lt; 1):
     return -1, 0
  return match_pos, match_entries

def flyc_nofly_cord_pos_search(po, fwmdlfile, start_pos, func_align, data_align, min_match_accepted):
  &quot;&quot;&quot; Finds position of flight controller no fly coords in the binary.
  &quot;&quot;&quot;
  fwmdlfile.seek(0, os.SEEK_END)
  fwmdlfile_len = fwmdlfile.tell()
  enfcord = FlycNoFlyCoords()
  match_count = 0
  match_pos = -1
  match_entries = 0
  reached_eof = False
  pos = start_pos
  while (True):
     # Check how many correct zone entries we have
     entry_count = 0
     entry_pos = pos
     while (True):
        fwmdlfile.seek(entry_pos, os.SEEK_SET)
        if fwmdlfile.readinto(enfcord) != sizeof(enfcord):
           reached_eof = True
           break
        # The array ends with int value storing its size
        if (entry_count &gt;= min_match_accepted) and (enfcord.latitude == entry_count):
           break
        if not flyc_nofly_is_proper_cord_entry(po, fwmdlfile, fwmdlfile_len, enfcord, func_align, data_align, pos, entry_pos):
           break
        entry_count += 1
        entry_pos += sizeof(enfcord)
     # Do not allow entry at EOF
     if (reached_eof):
        break
     # If entry is ok, consider it a match
     if entry_count &gt; min_match_accepted:
        if (po.verbose &gt; 1):
           print(&quot;{}: Matching coords array at 0x{:08x}: {:d} entries&quot;.format(po.mdlfile,pos,entry_count))
        if (entry_count &gt;= match_entries):
           match_pos = pos
           match_entries = entry_count
        match_count += 1
     # Set position to search for next entry
     if entry_count &gt;= min_match_accepted:
        pos += entry_count * sizeof(enfcord)
     else:
        pos += data_align - (pos%data_align)
  if (match_count &gt; 1):
     eprint(&quot;{}: Warning: multiple ({:d}) matches found for fly coords array with alignment 0x{:02x}&quot;.format(po.mdlfile,match_count,data_align))
  if (match_count &lt; 1):
     return -1, 0
  return match_pos, match_entries

def flyc_nofly_zone_template(po):
  # Set coords at north pole; they should never stay at default value after all
  # Set 'level' at 2; definition is: WARNING(0), CAN_UNLIMIT(1), CAN_NOT_UNLIMIT(2, 4), STRONG_WARNING(3)
  parprop = {'area_id':60000,'type':0,'shape':0,'lat':90.0,'lng':0.0,'radius':30,
      'warning':0,'level':2,'disable':0,'updated_at':1447945800,'begin_at':0,'end_at':0,
      'name':&quot;&quot;,'country':0,'city':&quot;&quot;,'storage':NoFlyStorage.none,'points':None}
  return parprop

def flyc_nofly_zone_get(po, fwmdlfile, index):
  &quot;&quot;&quot; Returns array with properties of given no fly zone.
  &quot;&quot;&quot;
  parprop = flyc_nofly_zone_template(po)
  enfzone = FlycNoFlyZone()
  fwmdlfile.seek(po.nfzone_pos+sizeof(enfzone)*index, os.SEEK_SET)
  if fwmdlfile.readinto(enfzone) != sizeof(enfzone):
      raise EOFError(&quot;Cannot read nfzone entry.&quot;)
  parprop['area_id'] = enfzone.area_id
  parprop['begin_at'] = enfzone.begin_at
  parprop['end_at'] = enfzone.end_at
  parprop['lat'] = enfzone.latitude/1000000.0
  parprop['lng'] = enfzone.longitude/1000000.0
  parprop['radius'] = enfzone.radius
  parprop['country'] = enfzone.country_code
  parprop['type'] = enfzone.class_id
  parprop['storage'] |= NoFlyStorage.zone
  return parprop
握草,太厉害了,代码都拿到了,但是我觉得还是安全飞行最重要啊,否则大家都没得玩了
屌炸天  Inspire 1认证用户 2017-5-6 5#
Yuanzi2017-5-6 14:23
握草,太厉害了,代码都拿到了,但是我觉得还是安全飞行最重要啊,否则大家都没得玩了
不知道是不是 只复制了部分 没看懂怎么用的 看到老外在讨论顺路复制下来的 只复制了部分 原贴的好长
瑞科  Osmo Pocket 2认证用户 2017-5-6 6#
比到政府办事还麻烦,也罢,不解禁了!
楼主   2017-5-6 7#
[quote]屌炸天如影MX2017-5-6 14:19
我以为是什么干货呢    原来是正规解禁  老外们都在玩软解了
大家赶紧看啊,一会儿4美来了,你们就看不到了。。。。。

随便贴部分代码证明下这不是玩笑 不要找我问这个是什么 只是抛砖引玉下 因为我也看不懂

#!/usr/bin/env python3

from __future__ import print_function
import sys
import getopt
import os
import math
from ctypes import *
import json

*************************被我破坏掉了************
     if (po.verbose > 2):
        print("Rejected at {:06x} on radius check ({:d})\n".format(entry_pos,enfzone.radius))
     return False
  if (enfzone.country_code > 2000):
     if (po.verbose > 2):
        print("Rejected at {:06x} on country check ({:d})\n".format(entry_pos,enfzone.country_code))
     return False
  #if (enfzone.class_id < 30) or (enfzone.class_id > 30000):
  if (enfzone.area_id  2):
        print("Rejected at {:06x} on area_id check ({:d})\n".format(entry_pos,enfzone.area_id))
     return False
  return flyc_nofly_is_proper_cord_entry(po, fwmdlfile, fwmdlfile_len, enfzone, func_align, data_align, pos, entry_pos)

def flyc_nofly_is_proper_cord_entry(po, fwmdlfile, fwmdlfile_len, enfcord, func_align, data_align, pos, entry_pos):
  """ Checks whether given FlycNoFlyCoords object stores a proper entry of
      flight controller no fly coordinates array.
  """
  # Check if we

这是违规解禁
fxb624.sina  DJI RSC 2认证用户 2017-5-6 8#
还是5年前好,玩个模型找个没人地方飞,也没人问,没人管!!!自由啊!
fans9c408dbd  Mavic Pro认证用户 2017-5-6 9#
成都飞友表示:能在禁飞区以外飞就非常不错了,没有解禁的想法。
Viki  Inspire 1 V2.0认证用户 2017-5-6 10#
低调点就行了,保密协议白签了

另外自己好好看看免责申明,签了以后出任何问题,责任在你自己
也就是说你所提供的解禁材料会作为法律依据
解禁后也不代表就可以飞了
JCK  Mavic Air 2认证用户 2017-5-6 11#
屌炸天如影MX2017-5-6 14:19
我以为是什么干货呢    原来是正规解禁  老外们都在玩软解了
大家赶紧看啊,一会儿4美来了,你们就看不到了。。。。。

随便贴部分代码证明下这不是玩笑 不要找我问这个是什么 只是抛砖引玉下 因为我也看不懂

#!/usr/bin/env python3

from __future__ import print_function
import sys
import getopt
import os
import math
from ctypes import *
import json

*************************被我破坏掉了************
     if (po.verbose &gt; 2):
        print(&quot;Rejected at {:06x} on radius check ({:d})\n&quot;.format(entry_pos,enfzone.radius))
     return False
  if (enfzone.country_code &gt; 2000):
     if (po.verbose &gt; 2):
        print(&quot;Rejected at {:06x} on country check ({:d})\n&quot;.format(entry_pos,enfzone.country_code))
     return False
  #if (enfzone.class_id &lt; 30) or (enfzone.class_id &gt; 30000):
  if (enfzone.area_id  2):
        print(&quot;Rejected at {:06x} on area_id check ({:d})\n&quot;.format(entry_pos,enfzone.area_id))
     return False
  return flyc_nofly_is_proper_cord_entry(po, fwmdlfile, fwmdlfile_len, enfzone, func_align, data_align, pos, entry_pos)

def flyc_nofly_is_proper_cord_entry(po, fwmdlfile, fwmdlfile_len, enfcord, func_align, data_align, pos, entry_pos):
  &quot;&quot;&quot; Checks whether given FlycNoFlyCoords object stores a proper entry of
      flight controller no fly coordinates array.
  &quot;&quot;&quot;
  # Check if we're at ocean around (0.0,0.0), that is within rectangle (-8.0,-6.7) to (4.7,5.5)
  if (enfcord.latitude &gt;= -8000000) and (enfcord.latitude = -6700000) and (enfcord.longitude  2):
           print(&quot;Rejected at {:06x} on low coord ocean check ({:.6f},{:.6f})\n&quot;.format(entry_pos,enfcord.latitude/1000000.0,enfcord.longitude/1000000.0))
        return False
*********************被我破坏掉了*********************

def flyc_nofly_cord_pos_search(po, fwmdlfile, start_pos, func_align, data_align, min_match_accepted):
  &quot;&quot;&quot; Finds position of flight controller no fly coords in the binary.
  &quot;&quot;&quot;
  fwmdlfile.seek(0, os.SEEK_END)
  fwmdlfile_len = fwmdlfile.tell()
  enfcord = FlycNoFlyCoords()
  match_count = 0
  match_pos = -1
  match_entries = 0
  reached_eof = False
  pos = start_pos
  while (True):
     # Check how many correct zone entries we have
    删删删**************************************************
ted) and (enfcord.latitude == entry_count):
           break
        if not flyc_nofly_is_proper_cord_entry(po, fwmdlfile, fwmdlfile_len, enfcord, func_align, data_align, pos, entry_pos):
           break
        entry_count += 1
        entry_pos += sizeof(enfcord)
     # Do not allow entry at EOF
     if (reached_eof):
        break
     # If entry is ok, consider it a match
     if entry_count &gt; min_match_accepted:
       ***********真的太长了 不删发不了*****************
  parprop = {'area_id':60000,'type':0,'shape':0,'lat':90.0,'lng':0.0,'radius':30,
      'warning':0,'level':2,'disable':0,'updated_at':1447945800,'begin_at':0,'end_at':0,
      'name':&quot;&quot;,'country':0,'city':&quot;&quot;,'storage':NoFlyStorage.none,'points':None}
  return parprop

def flyc_nofly_zone_get(po, fwmdlfile, index):
  &quot;&quot;&quot; Returns array with properties of given no fly zone.
  &quot;&quot;&quot;
  parprop = flyc_nofly_zone_template(po)
  enfzone = FlycNoFlyZone()
  fwmdlfile.seek(po.nfzone_pos+sizeof(enfzone)*index, os.SEEK_SET)
  if fwmdlfile.readinto(enfzone) != sizeof(enfzone):
      raise EOFError(&quot;Cannot read nfzone entry.&quot;)
  parprop['area_id'] = enfzone.area_id
  parprop['begin_at'] = enfzone.begin_at
  parprop['end_at'] = enfzone.end_at
  parprop['lat'] = enfzone.latitude/1000000.0
  parprop['lng'] = enfzone.longitude/1000000.0
  parprop['radius'] = enfzone.radius
  parprop['country'] = enfzone.country_code
  parprop['type'] = enfzone.class_id
  parprop['storage'] |= NoFlyStorage.zone
  return parprop

下面的全删了******************************
大疆不是号称没人攻破过它的禁飞区软件限制么。
屌炸天  Inspire 1认证用户 2017-5-6 12#
JCKMavic Pro2017-5-6 21:59
大疆不是号称没人攻破过它的禁飞区软件限制么。
嗯 说的很对 号称  ,,,,,,,,,,,
JCK  Mavic Air 2认证用户 2017-5-6 13#
屌炸天如影MX2017-5-6 22:25
嗯 说的很对 号称  ,,,,,,,,,,,
大疆创新公关总监王帆告诉虎嗅:“大疆自从精灵4以来,还没有发现一起GPS锁区被攻破的情况。”
stars362  Mavic Pro认证用户 2017-5-7 14#
黑客高手,这东西对他们来说小KS
楼主   2017-5-7 15#
Viki悟12017-5-6 21:26
低调点就行了,保密协议白签了

另外自己好好看看免责申明,签了以后出任何问题,责任在你自己
也就是说你所提供的解禁材料会作为法律依据
解禁后也不代表就可以飞了
是这样的
Pi_314  Osmo Mobile 2认证用户 2017-5-7 16#
15207779202017-5-6 15:36
[quote]屌炸天如影MX2017-5-6 14:19
我以为是什么干货呢    原来是正规解禁  老外们都在玩软解了
大家赶紧看啊,一会儿4美来了,你们就看不到了。。。。。

随便贴部分代码证明下这不是玩笑 不要找我问这个是什么 只是抛砖引玉下 因为我也看不懂

#!/usr/bin/env python3

from __future__ import print_function
import sys
import getopt
import os
import math
from ctypes import *
import json

*************************被我破坏掉了************
     if (po.verbose &gt; 2):
        print(&quot;Rejected at {:06x} on radius check ({:d})\n&quot;.format(entry_pos,enfzone.radius))
     return False
  if (enfzone.country_code &gt; 2000):
     if (po.verbose &gt; 2):
        print(&quot;Rejected at {:06x} on country check ({:d})\n&quot;.format(entry_pos,enfzone.country_code))
     return False
  #if (enfzone.class_id &lt; 30) or (enfzone.class_id &gt; 30000):
  if (enfzone.area_id  2):
        print(&quot;Rejected at {:06x} on area_id check ({:d})\n&quot;.format(entry_pos,enfzone.area_id))
     return False
  return flyc_nofly_is_proper_cord_entry(po, fwmdlfile, fwmdlfile_len, enfzone, func_align, data_align, pos, entry_pos)

def flyc_nofly_is_proper_cord_entry(po, fwmdlfile, fwmdlfile_len, enfcord, func_align, data_align, pos, entry_pos):
  &quot;&quot;&quot; Checks whether given FlycNoFlyCoords object stores a proper entry of
      flight controller no fly coordinates array.
  &quot;&quot;&quot;
  # Check if we

这是违规解禁
上面那个是python2 下面是3 包含了一个函数划定范围
但是引用的有json 所以你没有贴出的代码里面肯定有获取根据服务器的信息来判断合法或不合法
引用的有math 难道禁飞区范围还需要计算?还是有加密?
但这个服务器可以伪造
Viki  Inspire 1 V2.0认证用户 2017-5-8 17#
本帖最后由 Viki 于 2017-5-8 11:01 编辑
15207779202017-5-6 15:36
[quote]屌炸天如影MX2017-5-6 14:19
我以为是什么干货呢    原来是正规解禁  老外们都在玩软解了
大家赶紧看啊,一会儿4美来了,你们就看不到了。。。。。

随便贴部分代码证明下这不是玩笑 不要找我问这个是什么 只是抛砖引玉下 因为我也看不懂

#!/usr/bin/env python3

from __future__ import print_function
import sys
import getopt
import os
import math
from ctypes import *
import json

*************************被我破坏掉了************
     if (po.verbose &gt; 2):
        print(&quot;Rejected at {:06x} on radius check ({:d})\n&quot;.format(entry_pos,enfzone.radius))
     return False
  if (enfzone.country_code &gt; 2000):
     if (po.verbose &gt; 2):
        print(&quot;Rejected at {:06x} on country check ({:d})\n&quot;.format(entry_pos,enfzone.country_code))
     return False
  #if (enfzone.class_id &lt; 30) or (enfzone.class_id &gt; 30000):
  if (enfzone.area_id  2):
        print(&quot;Rejected at {:06x} on area_id check ({:d})\n&quot;.format(entry_pos,enfzone.area_id))
     return False
  return flyc_nofly_is_proper_cord_entry(po, fwmdlfile, fwmdlfile_len, enfzone, func_align, data_align, pos, entry_pos)

def flyc_nofly_is_proper_cord_entry(po, fwmdlfile, fwmdlfile_len, enfcord, func_align, data_align, pos, entry_pos):
  &quot;&quot;&quot; Checks whether given FlycNoFlyCoords object stores a proper entry of
      flight controller no fly coordinates array.
  &quot;&quot;&quot;
  # Check if we

这是违规解禁
这并不是什么破解禁飞的代码,而是由精灵3系列固件提取解析后的代码,全部代码在github有公布
并且只是针对精灵3 V01.06.0000固件
fans9be9978b  Phantom 3 Standard认证用户 2017-5-10 18#
需要专用app吗?
ericgp  DJI OM 4认证用户 2017-5-26 19#
我想请问一下楼主,你给大疆发的第一份邮件码了多少字?主题是什么?

因为我也有个任务需要在限飞区飞行,谢谢
Choked  Osmo Mobile 2认证用户 2017-7-11 20#
请问一下楼主,申请网站上需要上传的附件中,组织信息这个一栏要上传什么文件?然后安卓的app我按照上面的东西,我怎么也找不到解禁的界面,能不能详细的说一下?还有就是红圈内可以飞多高?现在新的禁飞区有个120限高区,这个区域内能不能解除120变成500?因为最近在申请解禁的事情...
大神,求加好友
天天传媒  Mavic Mini 2认证用户 2017-8-17 22#
谢谢你的分享
御行天下  Mavic Pro认证用户 2017-9-8 23#
没用啊……空军部队的章盖不出来
大佬1啊   2020-3-26 24#
屌炸天Inspire 2 L2017-5-6 14:19
我以为是什么干货呢    原来是正规解禁  老外们都在玩软解了
大家赶紧看啊,一会儿4美来了,你们就看不到了。。。。。

随便贴部分代码证明下这不是玩笑 不要找我问这个是什么 只是抛砖引玉下 因为我也看不懂

#!/usr/bin/env python3

from __future__ import print_function
import sys
import getopt
import os
import math
from ctypes import *
import json

*************************被我破坏掉了************
     if (po.verbose &gt; 2):
        print(&quot;Rejected at {:06x} on radius check ({:d})\n&quot;.format(entry_pos,enfzone.radius))
     return False
  if (enfzone.country_code &gt; 2000):
     if (po.verbose &gt; 2):
        print(&quot;Rejected at {:06x} on country check ({:d})\n&quot;.format(entry_pos,enfzone.country_code))
     return False
  #if (enfzone.class_id &lt; 30) or (enfzone.class_id &gt; 30000):
  
  parprop = flyc_nofly_zone_template(po)
  enfzone = FlycNoFlyZone()
  fwmdlfile.seek(po.nfzone_pos+sizeof(enfzone)*index, os.SEEK_SET)
  if fwmdlfile.readinto(enfzone) != sizeof(enfzone):
      raise EOFError(&quot;Cannot read nfzone entry.&quot;)
  parprop[&apos;area_id&apos;] = enfzone.area_id
  parprop[&apos;begin_at&apos;] = enfzone.begin_at
  parprop[&apos;end_at&apos;] = enfzone.end_at
  parprop[&apos;lat&apos;] = enfzone.latitude/1000000.0
  parprop[&apos;lng&apos;] = enfzone.longitude/1000000.0
  parprop[&apos;radius&apos;] = enfzone.radius
  parprop[&apos;country&apos;] = enfzone.country_code
  parprop[&apos;type&apos;] = enfzone.class_id
  parprop[&apos;storage&apos;] |= NoFlyStorage.zone
  return parprop

下面的全删了******************************
老哥,我也要P解Q1335310789
大佬1啊   2020-3-26 25#
VikiMavic Air2017-5-8 11:00
这并不是什么破解禁飞的代码,而是由精灵3系列固件提取解析后的代码,全部代码在github有公布
并且只是针对精灵3 V01.06.0000固件
大佬,给我御1解一下啊,Q 133 53 10 789
已累计飞行45929米
取消 取消 评论
分享至:
回复:
上传
取消 评论
快速回复 返回顶部 返回列表