中国国家地名信息库数据加密破解

1. 需求描述

​ 地名是中华文明的重要组成部分,是记录历史、传承文脉、凝聚精神、服务社会的重要载体。为更好地发挥地名在方便人民群众生产生活、促进社会交流交往、弘扬中华优秀传统文化、服务经济社会协调发展等方面的作用,民政部建设开通了国家地名信息库。

​ 我们可以通过中国·国家地名信息库网站查询地名信息,如下图

中国国家地名信息库查询页

页面展示了查询地名的地名来历,地名含义以及历史沿革等信息,我们尝试获取其数据

  • 目标网站

    https://dmfw.mca.gov.cn/online/map.html

  • 调研日期
    2020-10-28

  • 难点分析

    抓包过程发现,数据都是加密的,需要破解该加密字符串,获取明文数据

    查询关键字返回加密字符串

2. 抓包分析

  • 在河南境内搜索地名关键字“郑州市”

    河南境内设置搜索郑州市

  • 获取查询结果信息

    链接: https://dmfw.mca.gov.cn/9095/stname/list

    请求信息:

    结果列表页请求信息

    从请求信息的参数来看,上图左侧的信息,应该就是这个链接返回的。

    返回结果

    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880446
    

    该链接返回的是一串加密的字符,尝试点击上图左侧列表中的“郑州市”,发现结果仍是加密的,无论如何,我们需要知道如何解密这个密文,因此抓包分析到此结束,尝试解密密文

3. 密文解密分析

抓包阶段其实是有点迷茫的,只是明确是需要的数据都是加密的之外,其他没有特别明显的信息让我们作为突破口,要研究的密文来自链接 https://dmfw.mca.gov.cn/9095/stname/list,是一个异步请求,按经验来说,这种请求一般是写在js里进行执行的,只能以此为入口看能够找到突破点

  • 尝试全局搜索关键字 “stname/list”,发现就只有map_index.js 这一个文件中包含该关键字,从返回的代码行可以看出,就只有第906行的链接是我们要研究的,另外两处的链接格式很明显对照不上

    全局搜索stnamelist

  • 找到解密突破口,我们观察map_index.js 第906行,毫无疑问这正是我们研究的那个链接的ajax配置信息,注意看第920行,请求成功时,执行data = decryptResultByDes(data);,函数名太明显了,用我蹩脚的英文翻译一下是 “解密结果字符”,哈哈,因此这里就是我们的解密突破口,在此处打上断点,进行js调试,这一步的分析极其关键,之后的调试按部就班即可,其实整个破解,到这一步就算是结束了,剩余的就是耐心进行js跟踪调试了

    找到解密突破口

  • 在map_index.js 第920行处打上断点,并进行调试。查看data的值,正式我们要解密的密文

    map_index第920行打断点

  • 继续调试,跳转至common.js的第6行,执行decryptResultByDes函数,这段代码很简单,第7行是截掉密文data的后面六位,第8行是获取密文data的最后六位并传入getKey函数。通过查看data的值发现,后六位是数字 “880446”

    commonjs第6行

  • 继续调试,代码跳转至common.js的第12行,执行getKey函数,该函数是发送post请求连接https://dmfw.mca.gov.cn/9095/stname/keys/get.html,参数为密文data的后六位即“880446”

    执行getKey

  • 继续调试,获取getKey的结果,为“5436661373288554”,后续需要执行第9行 decryptByDES(content,str)

    获取getKey的结果

  • 继续调试进入解密主函数

    进入解密主函数

  • 后续的跟踪调试一步步进行就行了,没啥问题应该,不在进行赘述,最后获取明文结果,完成破解

    获取明文结果

4. 整理调试过程的js

调试过程最好是像我那样,把每一个跟踪调试的关键点都截图截下来,按顺序保存到word文档中,方便后续进行调试过程回查,也方便去除一些混淆或者无用的代码,最终整理出关键js, 可以让我写入密文data以及getKey(密文最后六位)的返回值,拿到解密的明文
整理出关键js

在获取地方详情信息的时候,结果也是加密的,但是加密方式一样,可以使用同样的方式进行解密,如下图使用本地整理好的js文件,获取郑州市的详情信息

郑州市详情信息

5. 总结

通过上面的分析,我们总结下该网站的数据破解流程

  1. 通过查询关键字获取加密数据,记为 data
  2. post请求连接 https://dmfw.mca.gov.cn/9095/stname/keys/get.html ,参数为 {“code”: data后六位},获取一个数字字符串,记为 key
  3. data和key 传入整理好的本地js文件:data_decrypy.js ,使用node data_decrypy.js 命令,获取明文,为了方便也可以使用python的execjs模块调用本地js文件
  4. 精力丰盛的话考虑将整理好的data_decrypy.js文件,改写成py版本,这样会更方便
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

积跬步以至千里。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值