JS逆向——动态页面逆向

JS逆向——动态页面逆向

一. 步骤

  1. 关键点分析
  2. 逆向分析信息提取逻辑
  3. 模拟执行

二. 实现

1. 关键点分析

找到实现kml导出的按键,发现是通过JS函数实现的,需要针对该函数进行JS代码逆向分析,找到实现的函数逻辑。

image

2. 逆向分析信息提取逻辑

定位找到exportKML函数

image

对该函数进行代码审计,分析函数功能。

  1. 检查加载状态:如果egmLoaded​为假(表示EGM(地球重力模型)未加载),则加载EGM并在加载完成后重新调用exportKML​函数。
  2. **获取选定飞机数据:通过selectedPlanes()​函数获取选定的飞机数据。
  3. 构建KML结构**:对于每一架选定的飞机,函数创建一个KML Folder元素,其中包含了飞机的轨迹信息。每个轨迹由多个Placemark元素组成,每个Placemark代表飞机的一个轨迹段。这些轨迹段是根据飞机的坐标和时间戳生成的。
  • 轨迹信息包括飞机的注册编号或ICAO编号、时间戳、坐标位置、海拔高度等。
  • 根据飞机的海拔数据,轨迹可能被分为地面和非地面部分,并在KML中通过不同的设置来表示。
  • 轨迹的颜色和宽度也在KML中定义。
  1. 设置KML样式:根据传入的kmlStyle​参数,为导出的KML文件设置不同的样式名称,如'EGM96'、'EGM96_avg'或'press_alt_uncorrected'。
  2. 导出KML文件:最后,函数使用download​函数将生成的KML数据保存为文件,文件名包含了选定的飞机信息和所选的样式名称。 总的来说,这个函数能够将一组飞机的飞行轨迹数据导出为KML格式,以便在地图软件中进行可视化展示。

与下载有关的函数是download函数,继续跟进进行分析:

function download(name, contentType, data) {var link = document.createElement('a');link.download = name,link.href = 'data:' + contentType + ',' + encodeURIComponent(data),document.body.appendChild(link),link.click(),document.body.removeChild(link)
}

实现的功能是通过拼接为一个URI然后创建一个新的link然后实现点击下载,最后将Link删除。这里应该就是为了防止爬虫所做的工作,因为都是动态加载的,使用简单的python爬虫是无法提取到数据的。

接下来进行动态分析,下断点检查data是否为我们真正想要的下载的kml文件数据的内容。

image

比对实际下载的kml文件的内容:
image

显然data即为我们下载的内容。

那么data数据又是如何产生的呢?溯源分析。

download函数当中的data是exportKML传参进入的,参数为xml。

image

xml是由folders数据参与定义的

image

而folders数据又是在exportKML函数使用循环生成的,整个的流程分析到此结束,最终下载是通过动态界面实现的。

三. 爬虫思路

因为我也是初学爬虫,对于动态页面加载所知不多,尝试了使用python模拟进行js的代码执行,由于二者特性的不同所以执行起来存在不少问题,也可以尝试使用JS代码进行动态页面加载,但是由于涉及到的函数比较多,调试所耗时间可能较大,就没有进行尝试。这里介绍使用selenium库进行爬虫。

使用selenium可以实现浏览器的模拟执行,通过模拟点击实现这样就不需要考虑细节方面的问题,尤其是JS代码的处理。但是也存在一定的问题,由于是通过模拟浏览器的执行速度就比较慢。具体代码就不贴出来了,感兴趣的朋友可以自己去学习了解一下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/734047.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开源一款基于 Typecho 开发的导航主题

主题介绍 BeaconNav是基于typecho开发的一款导航主题,Beacon是灯塔的意思,希望使用者在知识的海洋里能够如同有灯塔指引一样目标明确,永远不会迷失方向。 演示站点:https://nav.ilaozhu.com主题特点响应式设计,适配手机、平板、电脑等设备; 支持自定义 LOGO、背景图片; …

一款利用人工智能将自然语言查询转换为 SQL 代码的互译工具 - SQL Translator

前言 对于后端程序员来说,编写SQL代码是日常工作中不可或缺的一部分。然而,随着数据复杂性的增加,如何高效、准确地编写SQL查询成为了新的挑战。幸运的是,SQL Translator的出现为后端程序员提供了一个强大的工具,将自然语言查询转换为精确的SQL代码,极大地提高了工作效率…

LINUX查看文件总行数和指定行,wc命令的使用

LINUX查看文件总行数和指定行明训关注IP属地: 浙江 0.2972019.01.26 19:20:22字数 92阅读 9,764问题说明 在Linux服务器运维或操作过程中时常需要统计文件行数和查看指定行 相关命令 查看文件指定行描述命令查看文件的前5行 head -5 test.log查看文件的后2行 tail -2 test.log …

正义使者-隐藏关

最正义的一集\(\Huge{放假!!!}\)

Openvx Tiovx技术杂谈

Openvx & Tiovx技术杂谈 Openvx & Tiovx (六) Host & Target https://zhuanlan.zhihu.com/p/474701695 https://dev.ti.com/tirex/explore/node?node=ANd.gAKGXC97FboluTIMhw Openvx 保留了代码移植到多核平台的可能性。可能是因为多核平台的种类繁多,Openvx 在定…

7~8次题目集总结Blog

一、前言 关于7,8两次家具强电电路模拟程序,我认为是比较困难且综合的程序题,我们需要处理复杂的电路结构,如包含多个并联电路的串联电路,以及并联电路之间的包含关系还要精确地处理输入和输出格式,确保所有的计算和输出都符合题目要求,这些设计程序整体的方面都属于较为…

CentOS7.9部署.NET Core 6.0

简介 本章节主要讲的是在Linux系统CentOS7.9上去完成.NET Core 6.0软件的安装,确定Linux的版本是x64还是arm64的,然后到.NET Core的官网下载6.0的SDK,并进行安装 步骤 1.查看系统版本 2.打开.NET Core 6.0下载网址 3.下载与Linux系统对应版本的.NET Core SDK 4.上传.NET Cor…

全网最适合入门的面向对象编程教程:05 类和对象的Python实现-PyCharm代码标签(一个帮你提升coding效率的小技巧)

本文介绍了PyCharm IDE中代码标签的定义、类型和使用方法。摘要: 本文介绍了PyCharm IDE中代码标签的定义、类型和使用方法。 往期推荐: 学嵌入式的你,还不会面向对象??! 全网最适合入门的面向对象编程教程:00 面向对象设计方法导论 全网最适合入门的面向对象编程教程:…

使用Llama3/Qwen2等开源大模型,部署团队私有化Code Copilot和使用教程

代码辅助工具(Code Copilot)可以提高团队代码研发效率,能有效帮助产品快速上市抢占先发优势,但同时又需要保证代码和信息隐私,私有化Code Copilot是保护隐私的重要手段。老牛通过本文,详细介绍通过开源大模型,部署私有化Code Copilot和使用教程……目前市面上有不少基于…

MySQL共享表空间各个版本之间的演变图

感谢作者! 摘自:https://blog.csdn.net/qq_42267081/article/details/112383883

PTA七、八次总结

前言 本学期的最后两次PTA作业了,毕竟作为压轴的节目,难度还是有的,而且对我来说还不小。这一次Blog也是本学期最后一次Blog了,我也做出了一点对这学期相关PTA作业的总结。 这一学期PTA算得上是一次挣扎中进步的经历了,尤其是这两次。前几次老师给了一些思路给我做出了引导…