人生
总该有个目标吧

NanBot QQ机器人框架

微子233阅读(769)

QQ机器人框架-logo

NanBot QQ机器人框架

NanBot QQ机器人框架 是一款基于安卓QQ协议,完全免费,功能强大的QQ机器人框架;在遵守国家法律法规的前提下您可以通过自行编写插件实现各种功能。本软件初衷为各个群主提供更便捷的 群管工具、提高工作效率、空闲时间打发时间娱乐 等用途。

优势

完全免费

承诺软件自身及后续更新均永久免费,且后续不会开发任何收费版本。也请不要售卖、捆绑此软件或将软件用于非法用途。

开放生态

软件提供了非常强大且完善的API库,您可以使用 C++ / C# / Java / 易语言 / 火山中文 等编程平台对软件进行二次开发,也可以通过社交平台获取他人分享的扩展插件。

用户体验

所有界面均采用 WebUI 交互,在界面精美的同时保证了低占用、高效率;同时支持超小屏幕到超大屏幕之间的无缝拉伸自适应,保证用户良好的UI体验。

高效稳定

掉线自动重连助力 7*24 稳定运行、线程池机制高并发消息极速处理不卡慢、异常管理系统能精确捕捉并处理大部分致命异常避免软件发生崩溃。

功能强大

(长)文本收发、语音收发、XML收发、Json收发、匿名解析、群操作、好友操作、转账/红包收发(红包接收仅限于发送给自身的专属红包及好友红包,非抢红包) 及其他常用功能。

绿色安全

软件不会操作当前目录外的任何文件以及操作系统注册表,卸载的时候直接删除文件夹即无残留极速卸载,无任何开机广告、弹窗广告、后门病毒等流氓行为。

QQ机器人框架-NanBot框架截图
NanBot框架截图

环境要求

支持windows 7/2008 SP2 及以上版本(推荐使用Windows2012)

安装教程

1. 下载NanBot官方更新器

QQ机器人框架-安装教程-下载更新器

前往 NanBotQQ机器人框架官网( https://www.nanbot.net/ ) 下载官方更新器

2. 解压后打开更新器,等待NanBot机器人框架下载完毕

注意:请先解压到单独的空文件夹!文件夹目录内不能有空格

QQ机器人框架-安装教程-下载框架

3. 打开NanBot主程序,开始使用!

安装教程-目录主程序指引

框架程序下载完成后双击打开 ‘NanBot.exe'(框架主程序) 文件 (更新器下载完成后会自动打开)

无法运行主程序?

如果提示:”无法找到指定DLL库文件……”,请安装下方VC++2019运行库后重试!

VC++2019运行库
下载地址:点击这里即可下载VC++2019运行库
如果这里安装成功表示可以用了
=============================
VC++运行库安装失败提示未指定错误请安装下面的补丁

这里附上win2012系统的下载地址:
KB2919442:点击这里即可下载KB2919442
KB2919355:点击这里即可下载KB2919355(只需要KB2919355,不需要其他)
其他系统请前往微软官网搜索下载

4.打开框架主程序后,输入QQ账号密码登录后使用即可。

安装教程-登陆界面

框架不会上传您的任何QQ密码信息到服务器,请放心使用

登陆后就能够愉快的玩耍咯!!!

QQ机器人框架-安装教程-安装完成

以上就是一个简单的 nanbot QQ机器人框架的安装教程。

NanBot框架采用 QQ安卓协议8.1.5

启动NanBot后,手机上不能再次登录相同的QQ号,所以强烈建议注册QQ小号作为机器人QQ

如果需要扩展框架的功能,请进入官方论坛下载插件,但是论坛插件并非官方发布,请自行斟酌使用。

祝使用愉快~

NanBot官网:[www.nanbot.net]

疑惑解答

无法运行主程序?

请查看 安装教程 的 第3步

如何开发框架插件?

请查看插件开发教程视频:https://www.bilibili.com/video/BV135411J74t

特别感谢

  • NanBot
  • 诺言博客

我的世界 rcon 使用示例及教程

微子233阅读(2889)

我的世界RCON 使用示例及教程

作为一名mc腐竹, 管理好服务器也是一件头疼的事
在搭建服务器时必定会接触的配置文件 server.properties 配置文件中
有着这么一个配置项 enable-rcon=false #是否开启 rcon 监听
通过各种百科都可以知道:  RCON 是一种允许服务器管理员远程执行 Minecraft 命令的协议。在 1.9 pre4 中引入,它基本上是 Minecraft 的 Source RCON 协议的实现。
于是, 我们为什么不用机器人在群里发送相应指令来管理服务器呢?
这也省下了我们去登陆后台的时间(就几秒钟)
说整就整, 打开服务器配置文件, 将
enable-rcon=false 改为 enable-rcon=true
添加(/修改)配置项 rcon.port=[监听端口]
添加(/修改)配置项 rcon.password=[rcon密码]

1.打开易语言(问就是方便), 新建 Windows 易语言模块, 引用精易模块

1.1 代码截图

代码总览

RCON_连接代码预览

RCON发送与接收代码预览

首先声明变量 ‘客户’ 类型为 ‘网络客户端’ ,可以是 程序集变量 也可以是 全局变量

我这里声明的是 程序集变量

.版本 2
.支持库 sock
.程序集变量 客户, 网络客户端

.版本 2
.支持库 sock
.支持库 eAPI

.子程序 RCON_连接, 整数型, 公开, 返回值: 1成功   -1密码错误   -2无连接   -3意外错误
.参数 ip, 文本型
.参数 port, 整数型
.参数 psw, 文本型
.局部变量 post, 字节集
.局部变量 back, 字节集
.局部变量 temp_bool, 逻辑型

.判断开始 (客户.连接 (取IP地址 (ip), port))
    post = 到字节集 (到字节 (到整数 (取文本长度 (psw) + 9))) + { 0, 0, 0, 0, 0, 0, 0, 3, 0, 0, 0 } + 到字节集 (psw) + { 0 }

    .判断开始 (客户.发送 (post, 0))
        back = 客户.接收 (0, temp_bool)
        .判断开始 (temp_bool)
            .判断开始 (back = { 10, 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 0, 0 })
                返回 (1)
            .判断 (back = { 10, 0, 0, 0, 255, 255, 255, 255, 2, 0, 0, 0, 0, 0 })
                返回 (-1)
            .默认
                返回 (-3)
            .判断结束

        .默认
            返回 (-3)
        .判断结束

    .默认
        返回 (-2)
    .判断结束

.默认
    返回 (-2)
.判断结束


.子程序 RCON_发送, 文本型, 公开, 成功返回 命令执行后,服务器控制台返回的消息; 失败返回 null
.参数 ins, 文本型

.如果真 (取文本左边 (ins, 1) = “/” 或 取文本左边 (ins, 1) = “\”)
    ins = 取文本右边 (ins, 取文本长度 (ins) - 1)
.如果真结束
ins = 编码_gb2312到utf8 (ins)
客户.发送 (到字节集 (到字节 (到整数 (取文本长度 (ins)) + 9)) + { 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0 } + 到字节集 (ins) + { 0 }, 0)
返回 (RCON_接收 ())


.子程序 RCON_接收, 文本型, , 请勿直接调用
.局部变量 back, 字节集
.局部变量 temp_bool, 逻辑型
.局部变量 temp_byte, 字节集, , "0"
.局部变量 temp_str, 文本型

back = 客户.接收 (0, temp_bool)
.判断开始 (temp_bool)
    temp_byte = 分割字节集 (back, { 0 }, )
    temp_str = 编码_utf8到gb2312 (到文本 (temp_byte [13 - 取字节集长度 (temp_byte [1])]))
    返回 (temp_str)
.默认
    返回 (“null”)
.判断结束


.子程序 RCON_断开, , 公开, 断开与RCON的连接

客户.断开 ()

1.2编译为模块

2.新建Windows窗口程序(/Windows动态链接库), 引用1.2编译的模块

2.1

RCON使用示例

以上便是mc rcon的食用方法了, 模块部分代码来自互联网, 并做部分修改编译成了现在的模块, 侵删
模块下载地址: https://f.hloli.cn
想用机器人一键管理? 来康康NaNBot吧: https://d.nanbot.net/

文章原创地址:银月のBlog

软件防破解与破解的那些事儿

微子233阅读(305)

首先我们要明确一点:

理论上不存在无法破解的软件,但也并不是说破解软件比开发容易一万倍

防破解的目的不是要做一个无法破解的软件,而是让破解软件的成本远大于购买软件的成本

现在笔者简略表演几个有代表性的软件破解,当然,要看懂下面的内容,需要一点点C语言的编程基础.

我们先来一个最最简单的软件破解,假设我们写了一个软件,它的注册手段代码如下

#include "stdio.h"
#include "string.h"
int main()
{
	char Key[32];
	printf("请输入注册码:");
	gets(Key);
	if (strcmp(Key,"abc123456")==0)
		printf("注册成功");
	else
		printf("注册失败");
}

把他编译成exe,运行一下

要破解怎么办呢?超简单的,你把这个程序后缀改成txt然后打开,搜索注册码.然后翻一翻key就找到了

别笑,就算是今天,仍然有一大堆软件采用这种软件保护机制,不过这类软件要不大多不怎么值钱比如xx管理系统,计算器之类的,要不就是软件作者别有用心防君子不防小人.你可能会问了,问题出在那了呢,这类保护机制的问题是,目前大部分的编译器都会将字符串常量直接存储在可执行文件结构中,所以你要是硬编码key,那么上面这种破解方法几乎是屡试不爽甚至不需要什么逆向破解知识就能搞定.

那么,让我们进入防破解V2.0时代,为了与时俱进,我们稍微把上面的代码改一下

#include "stdio.h"
#include "string.h"
#include "windows.h"
#include "math.h"

int main()
{
	char iKey[32];
	char Key[32];
	char ID[32];
	int iID=0xabc1d3f;
	sprintf(Key,"%x",iID*8+123456);
	printf("你的机器码是%x\n",iID);
	printf("请输入注册码:");
	gets(iKey);
	if (strcmp(Key,iKey)==0)
		MessageBoxA(0,"注册成功","",MB_OK);
	else
		MessageBoxA(0,"注册失败","",MB_OK);
}

现在"TXT"破解法已经不顶用了,你看,key找不到了


怎么样,这种保护手段是不是熟悉的味道熟悉的配方,这个机器码可以从网卡MAC,CPU型号,内存大小等等等等去生成,当然,key的算法也可以拉上MD5,SHA等等等等手段来弄而不是简简单单的乘一个8再加上123456,总之从机器码到注册码的算法你能玩出花.

但,这又有什么卵用呢,打开ollydbg,对MessageBoxA下断点(也就是弹窗的函数)

然后输入一个错误的注册码,命中断点,很快,我们来到了判断注册码是否正确的逻辑处理代码

软件破解与防破解的那些事

你猜猜,要是我们把这个判断注册码是否正确的代码给它删了)(nop指令填充)会怎么样

你会发现,握草,不管我输入什么,都是注册成功

那么问题出在哪了呢,你发现,万恶之源都始于那个MessageBox函数,正是这个函数,让我们顺藤摸瓜找到了注册码判断代码,时至今日,仍然有非常非常大的一部分软件使用着这个二三十年前就在用的保护手段,每年死于MessageBox被破解的软件,围起来可以绕地球三圈.也就是这个保护机制,成就了所谓软件发布后十分钟就被破解的悲惨结局.

这个时候,你痛定思痛,mmp,有内鬼,既然MessageBox不好用,那我不用就是了,于是你把代码改成下面这样

#include "stdio.h"
#include "string.h"
#include "windows.h"
#include "math.h"

int main()
{
	char iKey[32];
	char Key[32];
	char ID[32];
	int iID=0xabc1d3f;
	sprintf(Key,"%x",iID*8+123456);
	printf("你的机器码是%x\n",iID);
	printf("请输入注册码:");
	gets(iKey);
	if (strcmp(Key,iKey)==0)
		printf("注册成功");
	else
		exit(0);
}

你看,啧.只要你注册码没输对,我直接把软件退出(或者跳到别的地方),看你怎么办

可惜,内鬼年年有,”注册成功”几个字还是出卖了你,打开ollydbg,查找字符串参考,然后双击

哦豁,完蛋,换汤不换药,还是给逮住了.

你察觉到这样一个地方判断注册码实在不靠谱,所以,你改变了策略,把检查注册码的代码复制了n遍,或者逐字符检查注册码的准确性,还有人将注册成功等字样进行加密或混淆,等到要用的时候再取出来

#include "stdio.h"
#include "string.h"
#include "windows.h"
#include "math.h"

int main()
{
	char iKey[32];
	char Key[32];
	char ID[32];
	int iID=0xabc1d3f;
	sprintf(Key,"%x",iID*8+123456);
	printf("你的机器码是%x\n",iID);
	printf("请输入注册码:");
	gets(iKey);
	if (strcmp(Key,iKey)==0)
		printf("注册成功");
	else
		exit(0);
if (strcmp(Key,iKey)==0)
		printf("注册成功");
	else
		exit(0);
if (strcmp(Key,iKey)==0)
		printf("注册成功");
	else
		exit(0);
if (strcmp(Key,iKey)==0)
		printf("注册成功");
	else
		exit(0);
if (strcmp(Key,iKey)==0)
		printf("注册成功");
	else
		exit(0);
if (strcmp(Key,iKey)==0)
		printf("注册成功");
	else
		exit(0);
if (strcmp(Key,iKey)==0)
		printf("注册成功");
	else
		exit(0);
if (strcmp(Key,iKey)==0)
		printf("注册成功");
	else
		exit(0);
}

你放心,不管你复制多少次,要找出来都是时间问题,吃枣是会被破解的.同时只要你要用到明文字符串你迟早还是要解密的,这种手段类似于加upx压缩壳,只需要等待数据解压完成,所有的东西又都是明文的了。因此比较聪明的做法是,要用时解密,用完后马上把明文抹掉,这样说不定能拖延更长的时间。但这仍然也是时间问题。

你开始发现,与其揪出内鬼,不如主动出击,也就是我们著名的与其解决问题不如解决提出问题的人,终于,你开始对调试器下手了,然后你成功进化到防破解V2.5时代.

这个时候,不得不介绍一个老掉牙的但非常有名的函数

IsDebugPresent

你可能有点懵,这个函数是干啥子用的?,简单来说,当我们破解一个程序的时候,大部分情况下我们会打开一个叫调试器的东西来对软件进行反编译分析,诶,重点就在这,IsDebugPresent这个函数,就能检测我们的程序有没有被一个调试器附加,你想啊,正常情况我们用软件谁会吃饱撑着附加一个调试器来用,你要是用调试器附加我,你肯定就是想干坏事.

于是,你开始把代码写成这样:

#include "stdio.h"
#include "string.h"
#include "windows.h"
#include "math.h"

int main()
{
	char iKey[32];
	char Key[32];
	char ID[32];
	int iID=0xabc1d3f;
	if (IsDebuggerPresent())
	{
		MessageBoxA(NULL,"小样,就你还破解我的程序,回家喝奶去吧","",MB_OK);
		return 0;
	}
	sprintf(Key,"%x",iID*8+123456);
	printf("你的机器码是%x\n",iID);
	printf("请输入注册码:");
	gets(iKey);
	if (strcmp(Key,iKey)==0)
		printf("注册成功");
	else
		exit(0);
}

于是,当下次再ollydbg加载调试你的程序的时候,就会出现下面的情景

软件破解与防破解的那些事

曾经很长一段时间(包括现在),很多软件或加密壳都会检查是否有调试器正在调试自己,比如tls段会在加载时被执行,如果检查到自己正在被人调试破解,就会设置一个tag让程序跑到没啥用的地方去或者直接退出重新,也有利用变形的PE头让调试器无法加载,总之手段很多.

可惜这还是没什么卵用,比如IsDebugPresent可以通过修改FS寄存器的标志位来让它彻底哑火,同样的手段包括但不限于检查int 3软中断,Raw Call,Query PEB,检查Debug Privilege和父进程等等等等,都有绕过的方式.

暗桩嘛,只要你插,一个一个拔总是拔的完的

好了,还有啥法子不,放心道高一尺魔高一丈,现在我们来到了现在最流行的,防破解V3.0 VMP时代,

先澄清一下,这里的VMP并不是VMP壳,它全程叫Virtual Machine Protection,简单来说,为啥我们破解软件那么轻车熟路,还不是因为x86 x64 arm的那堆汇编指令集我们太熟悉了呗.要是我们自己发明一套指令集,然后用这个指令集写程序并运行在我们自己的虚拟机上,那么,破解者一进来,看到的不就是一脸懵逼了么

可惜的是,VM的运行机制决定了它可能造成几十倍乃至几百倍的性能损失,所以,VMP必须用于保护那种关键且不是性能瓶颈的代码,否者你的软件跑起来就会像

软件破解与防破解的那些事

那么,VMP保护机制是完美的么,当然不是,VMP说白了,也只能做到延长分析时间,你要是把VMP做的足够复杂,足够让一个Cracker醉生梦死了,但是如果这个时间足够久,你的软件足够的值钱让人有欲望来破解, 他们仍然可以充分地分析你VM机的运行机制,当你的VM机运行机制被摸清了,软件就离沦陷不远了.

不过你可以放心,分析VM机执行机理,可比自己写VM机要头疼多了,毕竟一个是你需要通过代码来揣测别人的思路,而另一个本身是自己的思路转为代码,因此基于这点可以说:

破解软件比制作软件简单,在很多情况下,不存在的!

软件破解与防破解的那些事

你可能会问了,为什么现在市面上那么多软件,那么多游戏,购买了那么多听起来那么牛逼的保护软件,结果还是被破解了.而且刚发出来一天就被破解了.

其实很大的问题就出在这个商业保护软件(比如保护壳)上,因为这类保护壳大多都会被卖给一大票的软件开发商,有一句话叫树大招风,就像现在流行的VMP保护机制,之所以能保护,是因为其运行机理破解者不明确,如果你这个软件就给自己用,而且你这软件还不怎么值钱,除非大佬空虚寂寞冷,不然谁会有那闲工夫去分析你的虚拟机是怎么跑的,但商业保护壳不同,不论其采用什么样的保护机制,只要分析过一遍搞清楚了,几乎所有使用这类保护机制的软件都会沦陷,而且在灰色产业上.这种破解甚至还颇有利可图,只要这个保护机制不更新,一次投入,长期回报.于是只有说在第一次分析时会花上很长的时间,之后就都只是玩套路了.

因此,购买商业保护壳,其实其保护效果并没有想象中的那么强,很可能在灰色产业中形同虚设,甚至一个具有反逆向基础的码农自己写的说不定还更有效果.当然一个软件是被破解概率高不高,仍然是我之前提到的那句话:防破解不是让软件无法破解,而是让破解软件的成本远大于购买软件的成本

软件破解与防破解的那些事

毕竟你说你一个软件拿来开源都没人爱用,你还整天琢磨着怎么才不会被破解,寒掺不老铁.

那么你会开始问了,有没有更给力点的防破解技术?好像之前说的说来说去,无非就是拖延时间,诶,这个我们要摆正心态,不论是加密还是破解,其实说白了最终就是拖延时间,你看那些加密算法,依据其数学理论,如果要破解,它的计算量就算你把全世界的计算机加起来一块算,也够你算三个世界末日了.

不过别担心,更给力的方法还是有的,你想啊,为什么我们之前说了那么多软件都被破解了,最最关键的一个原因,是我们能搞到代码,即使这个代码已经是经过编译后的一堆汇编指令,但只要我们有这堆代码,迟早我们还是能搞懂这个程序是怎么回事的,然后我们就可以对症下药干坏事.

这就像给你有一包面粉,而程序就是一个面包机,你把面粉塞进面包机做出了面包,有天你好奇啊,这面包机咋整咋整就出来一块面包了呢,你就动手把面包机拆了,然后你就知道面包机是怎么回事了.

所以有没有办法不让用户知道我们的代码是什么样的呢,就像你把面粉交给了面包师傅做面包,这个面包是怎么做的,你就只能指望看面包师傅有没有这个心情告诉你了.

为此,有请早期一个相当流行且普遍的游戏防破解工具(物理)

软件破解与防破解的那些事

你现在可能表情是一脸问号,但我没和你开玩笑,在2000年时代,大部分的游戏运行在光盘CD中,但盗版也容易啊,把光盘里的数据一复制下来,然后就可以复制出一万张盗版光碟,所以游戏厂商们就想办法,想来想去就想到了榔头

其操作方法很简单,拿榔头和钉子,在光盘上钉几条刮痕出来,造成人工的坏道,然后再将数据烧录到正确的扇区中,这样下来虽然程序还是可以正确运行,但是当光头读盘读到这个坏道的时候,就会读不过去,于是你会发现打开光盘后,没有关键的文件,这样你就没办法将游戏或者说程序拷贝出来了,同时还会对坏道的位置做一个标记,游戏运行时也会检查这个标记,那么想要盗版你就也得拿起榔头在光盘同样的位置上砸出同样的刮痕出来,当然,这几乎是不可能的.

软件破解与防破解的那些事

当年这个技术当年又叫防盗环技术,但不管它的名字叫的多高大上,本质上就和榔头钉钉子如出一辙是同样的东西,可惜虚拟光驱出现后,同样有办法复刻光盘的一切数据(包括坏道),所以,这个技术拿到今天来看并没有什么卵用.不过这仍然给了我们足够的启发.

现在让我们进入防破解V3.x时代,之所以不叫V4.0是因为这类技术很早就有并且比VMP保护流行的时间还早的多,而且它可能是最近接理论上不可破解的防破解手段.

我们先聊的是加密狗或者又叫Ukey保护,就是运行软件你需要插入一个U盘一样的东西到电脑上,实际上这个Ukey是一个微型电脑,软件的一些关键的算法和代码,都在这个UKey的芯片里,当我们PC上的软件运行后,当我们需要执行这类关键算法时,我们会向这个Ukey传递数据,然后UKey将结果计算出来,返回给PC的软件上,这样就避免了用户直接能够逆向取得关键的算法代码,破解也就无从谈起了.这也就是为什么到了今天,Ukey保护仍然非常的流行.

可惜,UKey保护仍然有诸多的限制,首先就是带着一个Ukey贼麻烦,万一UKey丢了补办是一个麻烦事,运行软件插Ukey也是个神烦的事情,同时,UKey的性能决定了它可能不能执行一些过于消耗性能和内存空间的代码,数据交互也因带宽和通讯延迟会造成性能损失,所以它和VMP保护机制一样,同样不是一个省油的灯,同时开发人员的水平不到位,该保护的代码没保护,保护来没啥用的代码塞了一堆,也会给Cracker带来机会,而且只要你的软件够值钱,你是不是太瞧不起我华强北了

软件破解与防破解的那些事

把Ukey拆开来,使用某种”药水”剥开外层找到内部的芯片并接上已经熔断的”读引脚”(有些芯片连这步都省了,直接热风枪一吹接板读ROM) 然后再把芯片的代码给读出来

软件破解与防破解的那些事

于是,UKey保护也宣布沦陷.

你发现,只要是把实体的东西交到用户的手上,迟早会出问题,所以,这个Ukey保护现在大部分情况下变成了带数字证书的网络验证模式,这类的关键代码从Ukey转移到了服务器上,数据交互通过网络来做.其实这种保护机制和Ukey保护原理是一样的并没有什么本质的区别,但同样处于网络带宽也延迟的考虑,同样具有一定的性能损失和设计缺陷.

需要重点提及的是,这类网络保护的手段必须专门设计以保护程序中的一系列关键”功能”代码而不是”防破解”代码(比如代码解密,注册验证),因为后者几乎没啥卵用仍然能够将”防破解”的代码清除或Dump解密代码或伪造本地服务器实现破解.

所以你指望一堆什么x盾,x宝一键能一劳永逸一键保护程序,程序必须经过专业码农而不是彩笔专门的设计才能起到其应有的保护效果

但现实情况是,处于用户离线运行和性能延迟瓶颈的考虑,这种网络保护设计的往往都有很大的缺陷,因此,并不是说这东西不好,而是理想很丰满现实很骨干,实在无能为力啊.

当然,代码保护的手段很多且花样玩法也很多,本文只是初略介绍几个比较有代表性的破解和反破解手段.

软件破解与防破解的那些事