XSS labs 闯关大合集

XSS labs 闯关大合集

level 1

首先,一进入页面,我们发现图片中说:欢迎用户test ,结合我们看见url栏中 name=test 我们就会怀疑 网页将 name参数的值回显到页面中
在这里插入图片描述

我们尝试一下,让 name=hcj 查看回显。

在这里插入图片描述

查看页面源代码:

<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()  
{     
confirm("完成的不错!");
 window.location.href="level2.php?keyword=test"; 
}
</script>
<title>欢迎来到level1</title>
</head>
<body>
<h1 align=center>欢迎来到level1</h1>
<h2 align=center>欢迎用户test</h2><center><img src=level1.png></center>
<h3 align=center>payload的长度:4</h3></body>
</html>

那么 就很明显,这一关主要就是考察反射型xss

反射型的数据走向是 客户端->服务器->客户端

反射型的原理:

  • 类型一:向网站中注入恶意代码,直接在该网页中执行能达到h攻击者目的的脚本
  1. 攻击者向 服务器端 注入一段 js代码
  2. 服务器端响应攻击者一个带有js代码的页面
  3. 攻击者向别的用户发送带有 js代码的页面,诱使用户点击页面
  4. 用户点击完攻击者发送的页面后,页面自动运行 js 代码,获得用户的cookie并将其发送到攻击者
  • 类型二:向网站中注入恶意代码,但该恶意代码是用来跳转到攻击者控制的第三方网站的
  1. 攻击者向服务端注入一段 js代码
  2. 服务端响应代码
  3. 攻击者向别的用户发送带有 js 代码的页面
  4. 用户点击带有 js代码的页面,运行 js代码 ,页面跳转到第三方服务器

直接在name参数中赋值一个简单的弹窗来进行测试是否存在xss漏洞。操作如下:将name参数重新赋值:

<script>alert(`hcj`)</script>

在这里插入图片描述

发现成功

<script>:<script> 标签用于定义客户端脚本,比如 JavaScript

alert:alert() 方法用于显示带有一条指定消息和一个 OK 按钮的警告框


level 2

进入第二关
在这里插入图片描述

发现本关相比于上一关就多了搜索框 ,保险起见我们先尝试输入 1 发现url栏上的keyword的值也唯1 说明该输入框是以get的方式进行传参, 我们先尝试一下上一关的方法:直接进行输入

<script>alert(`hcj`)</script>

发现页面回显,未搜索到相关结果。
在这里插入图片描述

不用多想,肯定是可恶的前端工程师对我们输入某个字符进行了过滤,我们查看下页面源代码
在这里插入图片描述

发现我们的 <> 只有在<h2>ch处变成了 html实体字符 ,而在<input>中的value参数值中的 js代码 处是原样返回的。

在 HTML 中,对预留我们必须使用实体字符。

在 HTML 中不能使用小于号(<)和大于号(>),这是因为浏览器会误认为它们是标签。

如果希望正确地显示预留字符,我们必须在 HTML 源代码中使用字符实体。

我们猜测:猜测在服务器端用htmlspecialchars()函数对keyword参数的值进行了处理。

htmlspecialchars()函数:把预定义的字符 “<” (小于)和 “>” (大于)转换为 HTML 实体

既然上面的恶意代码被编码了,那么我们就只能从属性值中的恶意代码处进行突破了。

但是问题是,浏览器是无法执行在标签属性栏中的 js 代码

所以我们只能像办法将 value 中 js代码 移到外面

value

  • 当 type 的取值为 button、reset、submit 中的其中一个时,此时 value 属性的值表示的是按钮上显示的文本

  • 当 type 的取值为 text、password、hidden 中的其中一个时,此时 value 属性的值表示的是输入框中显示的初始值,此初始值可以更改,并且在提交表单时,value 属性的值会发送给服务器(既是初始值,也是提交给服务器的值)

在这里不知道 作者将我们在输入框输入的值回显到我们的页面上,导致了漏洞的存在

"><script>alert(`hcj`)</script>//

"> 目的是于与前面的<"形成闭合

//目的是为了注释掉后面的">

上传,闯关成功
在这里插入图片描述


level 3

进入本关,
在这里插入图片描述
先上传 1 ,观察源代码

发现,在keyword处的源代码

<input name=keyword  value='1'>	

我们很轻松的就可以构造出 js代码:

'><script>alert(`hcj`)</script>//

发现失败。
查看源代码,
在这里插入图片描述

在本关,我们的恶意代码在 value 处 和keyward处的 < 都被转义成了 字符实体

所以上一关的方法我们是无法使用了。

我们先查看一下本关的php代码:

<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()  
{     
confirm("完成的不错!");
 window.location.href="level4.php?keyword=try harder!"; 
}
</script>
<title>欢迎来到level3</title>
</head>
<body>
<h1 align=center>欢迎来到level3</h1>
<?php 
ini_set("display_errors", 0);
$str = $_GET["keyword"];
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>"."<center>
<form action=level3.php method=GET>
<input name=keyword  value='".htmlspecialchars($str)."'>	
<input type=submit name=submit value=搜索 />
</form>
</center>";
?>
<center><img src=level3.png></center>
<?php 
echo "<h3 align=center>payload的长度:".strlen($str)."</h3>";
?>
</body>
</html>

发现如果我们点击提交,进行get传参,就会使用 htmlspecialchars 函数

那么,我们只能想办法,不使用 < >了,有一种不使用 < >还能弹出框的方法吗?

那就是在 <input>标签中的特殊事件中,有onfocus 属性

onfocus 属性在元素获得焦点时触发。当输入字段获得焦点时触发函数。此函数改变输入字段的背景色

在一个网页上,可能会有多个输入框,对吧,当你的鼠标在某个输入框中点一下,就是要输入了,这时,输入框中会出现光标,这明白吧,很简单是不是;这就是说,这个输入框获取了焦点;

所以我们只需要让onfocus等于我们的 js代码 ,不就可以了吗

构造payload:

'onfocus=javascript:alert(`hcj`) 

'作用:将前面的value值给包起来

整体效果就是:

<input name=keyword  value='   '      onfocus=javascript:alert(`hcj`) >

然后这个时候只需要把鼠标点击输入框就可以了。

在这里插入图片描述

level 4

在这里插入图片描述

一进入本关,我们先直接上传:

<script>alert(`hcj`)</script>

直接查看源代码:
在这里插入图片描述

发现在我们关注的两处地方 :( input 和 h2 标签处)

     <h2 align=center>没有找到和&lt;script&gt;alert(`hcj`)&lt;/script&gt;相关的结果.</h2><center>

    
     <input name=keyword  value="scriptalert(`hcj`)/script">

一处将 < 和 > 给注释掉了 ,一处 还是 我们熟悉的替换为实型

所以我们可以使用上一关我们所使用方法

同时,观察到在我们的输入框(input )是双引号包裹

所以我们可以构造语句:

"onfocus=javascript:alert('xss')//

level 5

在这里插入图片描述

一上来,我们先上传

<script>alert(`hcj`)</script>

发现这一关的源代码

<h2 align=center>没有找到和&lt;script&gt;alert(`hcj`)&lt;/script&gt;相关的结果.</h2><center>
    
<input name=keyword  value="<scr_ipt>alert(`hcj`)</script>">

和第二关的很像,都是 在我们的输入框处输入的< >不会被转化为实型

但,仔细看,我们的标签变为了 <scr_ipt> 说明我们的标签被后台服务器给注释掉了

我们回想前面的方法中是否有没有用 script 标签的

"οnfοcus=javascript:alert('xss')//
"οnmοuseοver='alert(`hcj`)

发现:

onfocus 被注释掉了

οnmοuseοver 被注释掉了

前面的方法都没发用,被逼无奈的我们只能踏上寻找公主…不是,新的标签或者方法的路途

经过查找,我们发现 <a>标签的 href 属性用于指定超链接目标的 URL,href 属性的值可以是任何有效文档的相对或绝对 URL,包括片段标识符和 JavaScript 代码段。

所以我们可以利用这一特点 来构造payload:

"><a href=javascript:alert(`hcj`) > hcj </a>

点击上传

发现回显页面中有一个超链接,点击即可触发我们的 js代码 通过本关
在这里插入图片描述

leval 6

在这里插入图片描述

按照老办法,我们直接将

<script>alert(`hcj`)</script>

丢进输入框

查产看源码,
在这里插入图片描述

发现和上一关一样将我们的 script 给过滤出来了

我们尝试上一关的方法

"><a href=javascript:alert(`hcj`) > hcj </a>

发现

在本关将 href 都给过滤出来
在这里插入图片描述

卧…们还可以尝试一下 大小写绕过

 "><a Href=javascript:alert(`hcj`) > hcj </a>

在这里插入图片描述

闯关成功~~~

leval 7

在这里插入图片描述

二话不说,先让我们的恶意代码来一波 抛砖引玉:

<script>alert(`hcj`)</script>

查看源码,发现我们的 script 直接被删去了
在这里插入图片描述

再尝试一下:

"><a href=javascript:alert(`hcj`) > hcj </a>

发现 href 直接被消去 javascript的script 被削去
在这里插入图片描述

尝试:

"onfocus=javascript:alert('xss')//
// 发现  onfocus 的 on 被削去  javascript的script 被削去

在试试大小写能否绕过这个黑名单

 "><a Href=javascript:alert(`hcj`) > hcj </a>

查看源代码,发现依旧失败

回过头来想想,这一关的过滤方式是将一些关键词替换为空 或者说 消去关键词

那么我们就可以尝试一下双写绕过

"><a hrhrefef=javascsccriptript:alert(`hcj`) > hcj </a>//

发现我们所输入的只能被识别为 input 里面的 值 无法独立出来
在这里插入图片描述

所以我们尝试

"oonnfocus=javascrscriptipt:alert(`xss`)//

闯关成功!!!

在这里插入图片描述

leval 8

在这里插入图片描述

直接将我们的恶意代码给丢进去

<script>alert(`hcj`)</script>

我们发现 在<input>标签中 ,<>都被 编码成了实型 页面将我们输入的内容以超链接的形式反馈回来 ,并且,反馈内容中 我们输入的<script> 被过滤,变成了<scr_ipt>
在这里插入图片描述

估计是 script被禁用了,直接输入script进行验证 ,发现被过滤

然后我们尝试一下 大小写绕过 ,发现失败,尝试其他方法发现同样失败 。没办法我们只能重新寻找一种新的方法

我们回想一下这道题的源代码, 在友情链接那块 我们输入的恶意代码并没有被实型转化,隐隐觉得这道题的突破口就在这里。我们都知道,这道题是黑名单绕过。那么我们是否可以对script进行一种编码,让后台的php无法识别出来,进而实现绕过。想到是 HTML页面,决定将 script 转化为实体 &#115;&#99;&#114;&#105;&#112;&#116;

尝试突破

java&#115;&#99;&#114;&#105;&#112;&#116;:alert(`hcj`)

上传,点击友情链接 ,闯关成功!!!
在这里插入图片描述

leval 9

在这里插入图片描述

先将恶意代码给丢进去,查看页面源代码

<script>alert(`hcj`)</script>

在这里插入图片描述

我们发现

<input>标签中 ,<>都被 编码成了实型,并且,页面超链接说 “您的链接不合法?有没有!”

我们可以确定刚才我们输入的代码中存在敏感词汇,我们进行一 一尝试来进行判断敏感词汇

上传script发现 超链接 "您的链接不合法?有没有!”

所以 敏感词汇+1

上传alert "您的链接不合法?有没有!”

上传 1 "您的链接不合法?有没有!”

可能是白名单,估计是要有某个词汇,超链接才能回显正常

没办法,只能慢慢尝试了…

"您的链接不合法?有没有!” 他说我们的链接不合法,我们在正常进行网页的超链接,通常是 http://xxxxxxx ,我们尝试 http协议

上传http://发现成功
在这里插入图片描述

但问题又来了加上http://我们的又该如何构造payload

查询完别人的博客后,发现只需要在我们构造的payload中包含 http://就可以了…
~~>_<~~

javascript:alert(`http://hcj`)

查看源码,发现我们的script再一次的被黑名单过滤
在这里插入图片描述

用上一关的方法

java&#115;&#99;&#114;&#105;&#112;&#116;:alert(`http://hcj`)

上传,闯关成功

在这里插入图片描述

leval 10

一进入本关,我们发现没有输入框了 。好吧,我们只能 使用HackBar 没有的小伙伴也可以直接在url栏进行传参

直将我们的恶意代码给扔进去

<script>alert(`hcj`)</script>

直接查看源代码
在这里插入图片描述

<form id=search>
<input name="t_link"  value="" type="hidden">
<input name="t_history"  value="" type="hidden">
<input name="t_sort"  value="" type="hidden">

我们发现有三个隐藏的输入框,我们可以尝试寻找那个输入框可以突破

hcj &t_link="type="hcj" &t_history=" type="hcj" &t_sort=" type="hcj"//

查看源代码,我们发现 是 t_sort 可以将我们在输入框输入的部分 回显到 value 值中
在这里插入图片描述

所以我们可以构建 payload

?keyword=hcj&t_sort=" type="`hcj`" onclick= alert(`xss`)>//

在这里插入图片描述

也许有人会问 为甚么 我们要写 &t_sort

name 属性规定 input 元素的名称。

name 属性用于对提交到服务器后的表单数据进行标识,或者在客户端通过 JavaScript 引用表单数据。

只有设置了 name 属性的表单元素才能在提交表单时传递它们的值(value)。

type 属性规定 input 元素的类型

我们只有让我们输出的 payload 时候点明 input 名称,能让我们输入的内容进入到对应的value中

同时,我们要更改我们 输入框的的 type值 改变它原有的 hidden 隐藏属性值,这样才能让我们的输入框显示出来

.

可能还有人问 为什么我们不能直接写 t_sort=xxxxxx

我们查看源代码,发现 git 的传参值为 keyword

leval 11

在这里插入图片描述

一进入本关,我们发现还是没有输入框

我们直接查看源码,发现和上一关一样 都是 输入框隐藏起来

<form id=search>
<input name="t_link"  value="" type="hidden">
<input name="t_history"  value="" type="hidden">
<input name="t_sort"  value="" type="hidden">
<input name="t_ref"  value="http://127.0.0.1/xss-labs-master/level10.php?keyword=hcj&t_sort=%22%20type=%22`hcj`%22%20οnclick=%20alert(`xss`)%3E//" type="hidden">
</form>

我们按照上一关的方法进行尝试

hcj
&t_link="type="hcj" &t_history=" type="hcj" &t_sort=" type="hcj" &t_ref=" type="hcj"//

发现在本关的突破口依旧是t_sort ,
在这里插入图片描述

但是双引号被注释掉了

所以这个办法我们是没有办法使用了

只能先尝试使用 bp抓包

我们先将上一关的恶意代码给传上去

?keyword=hcj&t_sort=" type="`hcj`" onclick= alert(`xss`)>//

可以看到在原始的请求数据包中的referer这个请求头数值是一个奇怪的奇怪得网址,包含我们想要上传得恶意代码而且t_ref的回显也是那串奇怪的网址 不由得感觉我们的突破口在这里 。

在我们尝试给referer替换成 hcj 点击 go 发现

在这里插入图片描述

发现在t_ref的回显也是 hcj

所以如果我们在referer 处写

"type="text" onclick="alert('xss')>//

那么就可以快乐的上传上我们的 恶意代码了

放包,闯关成功!!!!
在这里插入图片描述

leval 12

在这里插入图片描述

和上一关相同,我们的输入框同样被隐藏了

我们按照上一关的方法进行尝试

hcj
&t_link="type="hcj" &t_history=" type="hcj" &t_sort=" type="hcj" &t_ua=" type="hcj"//

和上一关相同,突破口依然是 t_sort 双引号依然被注释掉
在这里插入图片描述

自然而然的,我们使用BP来抓包
在这里插入图片描述

仔细观察我们抓到的包

发现User-Agent头的的值 和 我们的 t_ua 的value值 很相似

我们尝试更改 User-Agent 头的值,查看我们的 t_ua 的value的值的变化情况

我们给他替换为 hcj

User-Agent:hcj

发现 t_ua 回显 hcj
在这里插入图片描述

所以如果我们在 User-Agent 处写

"type="text" οnclick="alert('xss')>//

那么就可以成功的恶意代码了

放包,闯关成功!!!!
在这里插入图片描述

leval 13

在这里插入图片描述

同样的,我们直接查看源代码

和上一关相似,都是使用 type 属性将我们的输入框给隐藏起来
在这里插入图片描述

猜测这里依然与http请求头有关,我们使用BP抓包进行查看

发现cook的头值和t_cook的value值相同,所以我们怀疑在本关,突破口是 cookie 我们将 cookie 的值改为 hcj,发现t_cook的value值也变为 hcj
在这里插入图片描述

和上一关相同

所以如果我们在 cookie 处写

"type="text" onclick="alert('xss')>//

那么就可以成功的恶意代码了

放包,闯关成功!!!!

在这里插入图片描述

level 14

在这里插入图片描述

和前面的关卡不同,在本关的底部有一个 302 跳转

查看源码,我们没有发现输入框,同样我们在 url栏中输入 keyword=1

页面也没有任何反映。

同时,页面一直在跳转,但我们无法访问新的页面

(好诡异…)

没办法,江郎才尽。

我们只能看看源代码,看看能有什么新发现

<html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<title>欢迎来到level14</title>
</head>
<body>
<h1 align=center>欢迎来到level14</h1>
<center><iframe name="leftframe" marginwidth=10 marginheight=10 src="http://www.exifviewer.org/" frameborder=no width="80%" scrolling="no" height=80%></iframe></center><center>这关成功后不会自动跳转。成功者<a href=/xss/level15.php?src=1.gif>点我进level15</a></center>
</body>
</html>

好家伙,php呢

这一关估计是不能做了

好吧,我们直接跳关 15

level 15

在这里插入图片描述

查看源码,我们没有发现输入框,同样我们在 url栏中输入 keyword=1

页面也没有任何反映。有点傻眼

查看原码

<?php 
ini_set("display_errors", 0);
$str = $_GET["src"];
echo '<body><span class="ng-include:'.htmlspecialchars($str).'"></span></body>';
?>

发现 git 的传参对象是图片 传参值是 src

我们输入 scr=hcj 查看情况

发现在页面源码中的 span标签属性值 插入了我们输入的值

<body><span class="ng-include:hcj"></span></body>

我们先了解下ng-include

ng-include:指令用于包含外部的 HTML 文件。包含的内容将作为指定元素的子节点。 就是将内容包含起来。和php 文件包含 include 很相似

ng-include:

特别值得注意的几点如下:

  1. ng-include,如果单纯指定地址,必须要加引号
  2. ng-include,加载外部html,script标签中的内容不执行
  3. ng-include,加载外部html中含有style标签样式可以识别

好了,先尝试能否闭合标签 从而能够触发我们上传的 恶意代码

"<script>alert(`hcj`)</script>

查看源码,发现我们的<>被转义成了实型,并且双引号也被过滤。
在这里插入图片描述

所以前面的办法都没有办法使用

我们回想一下, span标签属性值,作用是文件属性啊,所以我们是否可以在其中构造一个带有 恶意代码的 文件访问地址

因为我们指定地址,根据文件所以需要添加引号。

同时我们要了解一下 ng-include用法

ng-include

  1. ng-include 指令用于包含外部的 HTML文件。
  2. 包含的内容将作为指定元素的子节点。
  3. ng-include 属性的值可以是一个表达式,返回一个文件名。
  4. 默认情况下,包含的文件需要包含在同一个域名下。

这是因为我们不是单纯的去包含level1.php,而是在后面添加了name参

数值的。这就有点像是在访问了该参数值中地址之后把它响应在浏览器端的html文件给包含进来的意思。

同样的该如何触发我们所包裹的恶意代码 也是一个问题

在html中有这样一个函数:onerror

onerror 事件在视频/音频(audio/video)数据加载期间发生错误时触发

所以我们在构造payload 的时候如果能够创建一个第一关没有的文件名(如 src=1) 我们就可以触发 onerror 从而执行我们的 恶意代码

所以我们可以构建这样一个 payload

?src='level1.php?name=<img src=1 onerror=alert(1)>'

在这里插入图片描述

如果你还有点不确定,我们可以构建这样一个 payload

?src='level1.php?name=<img src=level1.png onerror=alert(1)>'

发现只是成功在页面显示 图片
在这里插入图片描述

除此之外,我们的还可以直接利用超链接来访问我们的恶意代码

构建 payload :

?src='level1.php?name= <a href=javascript:alert(`hcj`)>hcj</a>'

在这里插入图片描述

level 16

在这里插入图片描述

一进入本关,我们查看源代码

<!DOCTYPE html><!--STATUS OK--><html>
<head>
<meta http-equiv="content-type" content="text/html;charset=utf-8">
<script>
window.alert = function()  
{     
confirm("完成的不错!");
 window.location.href="level17.php?arg01=a&arg02=b"; 
}
</script>
<title>欢迎来到level16</title>
</head>
<body>
<h1 align=center>欢迎来到level16</h1>
<center></center><center><img src=level16.png></center>
<h3 align=center>payload的长度:0</h3></body>
</html>

我们尝试传递参数 keyword=1

发现我们传递的参数到了

<center>1</center><center><img src=level16.png></center>

尝试输入最普通的恶意代码查看过滤情况

<script>alert(`hcj`)</script>

发现:

<center><&nbsp;>alert(`hcj`)<&nbsp;&nbsp;></center>

script被注释掉了 同时观察到 后面比前面 多了&nbsp;我们盲猜是 /被转义成了 &nbsp;

所以,我们需要一个没有闭合的标签 想到上一关的 <img>

我们尝试构造 payload:

<img src=hcj οnerrοr=alert('xss') >

查看源代码,我们发现 空格 也被转义成了 &nbsp;
在这里插入图片描述

我们可以用 %0a将空格替换掉

构造payload:

 <img%0asrc=hcj%0aοnerrοr=alert('xss')>

在这里插入图片描述

level 17

在这里插入图片描述

查看网页源码

<embed src=xsf01.swf?a=b width=100% heigth=100%><h2 align=center>成功后,<a href=level18.php?arg01=a&arg02=b>点我进入下一关</a></h2>

上传参数 发现,我们传入的参数在 embed标签成功显示,本关的突破口就在这里

我们先上传一个简单的恶意代码,查看关卡过滤情况

<script>alert(`hcj`)</script>

发现<>被过滤掉了

在构建payload前,我们先了解下 embed标签的作用

<embed> 标签定义嵌入的内容

embed可以用来插入各种多媒体,格式可以是 Midi、Wav、AIFF、AU、MP3等等,Netscape及新版的IE 都支持。url为音频或视频文件及其路径,可以是相对路径或绝对路径。

属性描述
heightpixels设置嵌入内容的高度。
srcurl嵌入内容的 URL。
typetype定义嵌入内容的类型。
widthpixels设置嵌入内容的宽度。

我们尝试向embed标签嵌入onclick测试一下

?arg01=a&arg02=b onclick=alert('hcj')

查看页面源码

<embed src=xsf01.swf?a=b οnclick=alert('hcj')

发现源代码自动填充地址 所以在构造 payload 的时候,只需要直接嵌入js代码即可

点击页面响应中显示该 **swf文件 **区域的时候成功弹窗

在本关我们还可以使用

?arg01=a&arg02=b onfocus=javascript:alert(`hcj`) 

同样可以闯过本关

在这里插入图片描述

注意:在很多浏览器中无法显示 swf插件,愿意的小伙伴可以寻找浏览器测试恶意代码

level 18

18关和 上一关相差不大 仅仅只是图片不同 使用上一关的 payload 直接就可以过关

?arg01=a&arg02=b onfocus=javascript:alert(`hcj`) 

level 19&20

最后两关 同样是 都调用swf格式的文件

看看网页源码 src的值使用双引号括起来的。如果想要成功执行js代码肯定需要去闭合标签,但是此处应该还是会用

同样的,在本关 php 后台服务器htmlspecialchars()函数进行处理,将 <>过滤掉

在本关 和考察的是 flash xss

大人,时代变了 。这年头还有多少人使用 flash。

因为flash中,有可以调用js的函数,也就是可以和js通信,因此这些函数如果使用不当就会造成xss。常见的可触发xss的危险函数有:getURL,navigateToURL,ExternalInterface.call,htmlText,loadMovie等等

在这里如果我们想要确定是否是 flash xss 我们需要对引用的swf 文件进行反编译 然后对其进行源码分析

愿意的小伙伴可以使用工具:jpexs-decompiler

下载地址:https://github.com/jindrapetrik/jpexs-decompiler

实在是懒得研究版本弃子

如果,愿意研究的话:

十九关

二十关

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值