⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 x-scan-sdk-cn.txt

📁 x-scan 大家一起学习
💻 TXT
字号:
X-Scan v3.0 SDK

所需文件及描述: 
XScanLib.lib: 开发包库文件, 需要加入插件工程文件中. 对于VC编译器可直接使用, 对于BCB编译器, 需要使用ImpLib工具由XScanLib.dll导出该lib文件使用. 
XScanLib.h: 开发包头文件, 包含X-Scan插件所需预定义及接口函数定义. 
arglist.*: 用于直接操作插件参数链表, 普通插件不需要使用. 


扫描插件接口:

所有插件为DLL形式(后缀改为.xpn保存到plugins目录), 应导出以下两个函数:

//------------------------------------------
/*
功能描述:
    该函数在初始化插件时被调用, 用于获取插件基本信息
返回值含义:
    TRUE: 插件初始化成功
    FALSE: 插件初始化失败
*/
extern "C" __declspec(dllexport) BOOL __stdcall GetPluginInfo(PLUGIN_INFO *);

//------------------------------------------
/*
功能描述:
    该函数在检测主机时被调用, 传入类型为(struct arglist *)的扫描参数链表
    通过其他接口函数可以获得所有扫描参数及关键字
返回值含义:
    TRUE: 存在漏洞
    FALSE: 不存在漏洞
*/
extern "C" __declspec(dllexport) BOOL __stdcall PluginFunc(struct arglist *);


结构定义, 预定义及接口函数功能描述: 

//------------------------------------------
//插件基本信息结构定义
typedef struct _PLUGIN_INFO {
    char    szClassName[50];        //插件所属类别
    char    szMemberName[50];       //插件成员名称
    char    szVersion[10];          //插件版本
    char    szFileName[50];         //插件原始文件名(不含路径)
    char    szParamsRequest[50];    //选择该插件所需参数, 如"-cgi [encode_type]"
    char    szPrompt[200];          //对参数的解释, 如"check cgi abuses, the encode_type limit is 0-6"
    int     nSingle;                //是否为单一漏洞(漏洞数量只可能为1或0)
    char    szAuthorName[50];       //插件作者
    char    szDescription[300];     //插件描述
    DWORD   dwTimeOut;              //超时限制(毫秒), "0"表示不限时
    int     nMark;                  //标识该插件是否被默认选中
    char    szImageFile[50];        //16*16图标文件(BMP格式, 不含路径, 位于images目录)
} PLUGIN_INFO;

//------------------------------------------
#define  AT_NORMAL      0x101   //普通信息, 将显示在GUI“普通信息”栏
#define  AT_WARNING     0x102   //漏洞信息, 将显示在GUI“漏洞信息”栏
#define  AT_ERROR       0x103   //错误信息, 将显示在GUI“错误信息”栏

////////////////////////////////////////////
//初始化函数
////////////////////////////////////////////

//------------------------------------------
/*
功能描述: 
    初始化函数, 必须在使用其他接口函数前进行初始化
返回值含义: 
    TRUE: 成功
    FALSE: 失败
*/
BOOL __stdcall PlugInitLib(
    struct arglist *pParams);   //扫描参数链表

////////////////////////////////////////////
//界面交互接口函数
////////////////////////////////////////////

//------------------------------------------
/*
功能描述: 
    向界面输出字符串
返回值含义: 
*/
void __stdcall PlugAlertUser(
    struct arglist *pParams,    //扫描参数链表
    int nType,                  //信息类型(见预定义AT_NORMAL/AT_WARNING/AT_ERROR)
    char *szLine);              //信息内容

//------------------------------------------
/*
功能描述: 
    向扫描报告中添加漏洞记录
返回值含义: 
*/
void __stdcall PlugLogToFile(
    struct arglist *pParams,    //扫描参数链表
    char *szPort,               //格式为:"[端口]/[协议]", 协议可为: "tcp"/"udp"/"icmp"...
    char *szDataType,           //日志类型: "NOTE"/"INFO"/"HOLE", 分别对应于"提示(低)"/"警告(中)"/"漏洞(高)"
    char *szData);              //日志内容(在扫描报告中显示的漏洞描述信息)

//------------------------------------------
/*
功能描述: 
    向图形界面左侧的TreeView中添加一个结点
返回值含义: 
*/
void __stdcall PlugAddToTV(
    char *szLine,               //TreeView完整路径, 以"\n"为分隔符
    char *szImageFile);         //图标文件名(不含路径)

//------------------------------------------
/*
功能描述: 
    从图形界面左侧的TreeView中删除一个结点
返回值含义: 
*/
void __stdcall PlugDelFromTV(
    char *szLine);              //TreeView路径, 以"\n"为分隔符

//------------------------------------------
/*
功能描述: 
    更改图形界面左侧的TreeView中某个结点的标题或图标
返回值含义: 
*/
void __stdcall PlugChangeTVItem(
    char *szLine,               //TreeView路径, 以"\n"为分隔符
    char *szNewItem,            //新标题
    char *szImageFile);         //图标文件名(不含路径)

//------------------------------------------
/*
功能描述: 
    设置当前正在进行的任务,便于用户在图形界面右上方的任务栏中查看
返回值含义: 
*/
void __stdcall PlugSetCurrentSchedule(
    struct arglist *pParams,    //扫描参数链表
    char *szSchedule);          //当前任务描述

////////////////////////////////////////////
//读取用户设置接口函数
////////////////////////////////////////////

//------------------------------------------
/*
功能描述: 
    从语言文件(INI格式)中读取相应的字符串
返回值含义: 
*/
void __stdcall PlugGetString(
    char *szName,               //字符串名称
    char *szLine,               //返回字符串
    char *szKey1,               //用于替换字符串中的"%1"
    char *szKey2);              //用于替换字符串中的"%2"

//------------------------------------------
/*
功能描述: 
    根据服务名称获得预设服务的TCP端口
返回值含义: 
    预设端口或经过智能识别获得的对应端口
*/
int __stdcall PlugGetTcpPort(
    struct arglist *pParams,    //扫描参数链表
    char *szService,            //服务名称, 如"www","ftp"
    int nDefaultPort);          //默认端口

//------------------------------------------
/*
功能描述: 
    根据服务名称获得预设服务的UDP端口
返回值含义: 
    预设端口或经过智能识别获得的对应端口
*/
int __stdcall PlugGetUdpPort(
    struct arglist *pParams,    //扫描参数链表
    char *szService,            //服务名称, 如"snmp","tftp"
    int nDefaultPort);          //默认端口

////////////////////////////////////////////
//插件应用函数
////////////////////////////////////////////

//------------------------------------------
/*
功能描述: 
    获取目标主机某个TCP端口状态
返回值含义: 
    >0: 端口已经检查过并且处于开放状态
    其他: 端口关闭或未经过检查
*/
int __stdcall PlugCheckTcpPort(
    struct arglist *pParams,    //扫描参数链表
    int nPort);                 //需要检查的TCP端口

//------------------------------------------
/*
功能描述: 
    设置或新增扫描参数
返回值含义: 
    >0: 成功
    其他: 失败
*/
int __stdcall PlugSetParams(
    struct arglist *pParams,    //扫描参数链表
    char *szName,               //参数名称
    int nType,                  //参数类型
    void *pValue);              //参数值

//------------------------------------------
/*
功能描述: 
    读取扫描参数
返回值含义: 
    扫描参数值或指针, 视参数类型而定, 如int型为参数值, (char *)型则为指针
*/
void * __stdcall PlugGetParams(
    struct arglist *pParams,    //扫描参数链表
    char *szName);              //参数名称

//------------------------------------------
/*
功能描述: 
    设置或新增检测结果, 如直接设置检测到的漏洞数量而不通过接口函数PlugSetVulnNum()
返回值含义: 
    >0: 成功
    其他: 失败
*/
int __stdcall PlugSetResult(
    struct arglist *pParams,    //扫描参数链表
    char *szName,               //返回值名称
    int nType,                  //返回值类型
    void *pValue);              //返回值

//------------------------------------------
/*
功能描述: 
    读取检测结果, 如直接读取检测到的漏洞数量而不通过接口函数PlugGetVulnNum()
返回值含义: 
    扫描参数值或指针, 视参数类型而定, 如int型为参数值, (char *)型则为指针
*/
void * __stdcall PlugGetResult(
    struct arglist *pParams,    //扫描参数链表
    char *szName);              //返回值名称

//------------------------------------------
/*
功能描述: 
    设置或新增关键字, 如通过名称"Host/OS"设置目标主机操作系统类型
返回值含义: 
    >0: 成功
    其他: 失败
*/
int __stdcall PlugSetKey(
    struct arglist *pParams,    //扫描参数链表
    char *szName,               //KEY名称
    int nType,                  //KEY类型
    void *pValue);              //KEY数值

//------------------------------------------
/*
功能描述: 
    读取关键字, 如通过名称"Host/OS"读取目标主机操作系统类型
返回值含义: 
    关键字值或指针, 视参数类型而定, 如int型为参数值, (char *)型则为指针
*/
void * __stdcall PlugGetKey(
    struct arglist *pParams,    //扫描参数链表
    char *szName);              //KEY名称

//------------------------------------------
/*
功能描述: 
    增加漏洞计数, 用于多线程扫描中每个线程根据扫描结果分别计数
返回值含义: 
    漏洞数量
*/
int __stdcall PlugAddVulnNum(
    struct arglist *pParams);   //扫描参数链表

//------------------------------------------
/*
功能描述: 
    直接设置检测到的漏洞总数
返回值含义: 
    漏洞数量
*/
int __stdcall PlugSetVulnNum(
    struct arglist *pParams,    //扫描参数链表
    int nVulnNum);              //漏洞数量

//------------------------------------------
int __stdcall PlugGetVulnNum(
    struct arglist *pParams);   //扫描参数链表

//------------------------------------------
/*
功能描述: 
    向扫描线程队列中增加一个线程, 如果队列已满, 该函数不会立即返回, 直到创建新线程完成
返回值含义: 
    新线程句柄
*/
HANDLE __stdcall PlugAddThread(
    struct arglist *PlugParams, //扫描参数链表
    LPTHREAD_START_ROUTINE lpStartAddress,  //线程函数地址
    LPVOID lpThreadParameter,   //线程参数
    DWORD dwTimeout);           //线程超时(毫秒, INFINITE表示不限超时)

//------------------------------------------
/*
功能描述: 
    等待该插件中所有通过PlugAddThread()创建的线程运行完毕后返回
返回值含义: 
*/
void __stdcall PlugWaitThread(
    struct arglist *PlugParams);//扫描参数链表


X-Scan中使用的关键字及参数名称:

以下为关键字名称, 可通过PlugSetKey()设置或通过PlugGetKey()读取:
"Host/dead"(int)            - 主机无响应(非存活主机)
"Host/OS"(char *)           - 操作系统类型
"Host/OSAffirmed"(int)      - 操作系统类型已经确定
"ftp/anonymous"(int)        - FTP服务支持匿名登录
"ftp/login"(char *)         - 可用于登录FTP服务的用户名
"ftp/password"(char *)      - 对应于"ftp/login"的登录密码
"http/auth"(char *)         - 可用于登录HTTP服务的用户名
"http/password(char *)      - 对应于"http/auth"的登录密码
"SNMP/community"(char *)    - SNMP弱口令
"SMB/login"(char *)         - 可用于登录SMB服务的用户名
"SMB/password"(char *)      - 对应于"SMB/login"的登录密码
"SMB/name"(char *)          - 远程主机NETBIOS名
"SMB/registry_access"(int)  - 远程主机注册表可访问
"SMB/workgroup"(char *)     - 远程主机工作组或域名程
"SMB/Users/<num>"(char *)   - SMB用户名
"SMB/ValidUsers/<num>/Login"(char *)    - 可用的SMB用户名
"SMB/ValidUsers/<num>/Password"(char *)	- 对应于"SMB/ValidUsers/<num>/Login"的登录密码
"Services/www"(int)         - HTTP服务端口
"Services/smtp"(int)        - SMTP服务端口
"Services/ftp"(int)         - FTP服务端口
"Services/ssh"(int)         - SSH服务端口
"Services/http_proxy"(int)  - HTTP代理服务端口
"Services/pop3"(int)        - POP3服务端口
"Services/telnet"(int)      - TELNET服务端口
"Services/sql_server"(int)  - SQL-SERVER服务端口

以下为扫描参数名称, 可通过PlugSetParams()设置或通过PlugGetParams()读取:
"HostName"(char *)          - 目标主机地址
"LogFile"(char *)           - LOG文件名(含路径)
"LogType"(char *)           - 日志类型(TXT/HTML)
"ShowVerbose"(int)          - 是否显示详细扫描信息
"Timeout"(int *)            - 目前超时(毫秒), 若超过插件基本信息中设置的超时值, 插件将被强行终止
"MaxHosts"(int)             - 最大并发主机数量
"MaxThreads"(int)           - 最大线程数量
"CurrentHosts"(int *)       - 当前并发主机数量
"CurrentThreads"(int *)     - 所有活动线程总数量
"PluginThreads"(int *)      - 插件内活动线程总数量
"NetworkTimeout"(int)       - 网络读取超时(秒)
"SkipDestructive"(int)      - 跳过破坏性脚本(针对主机)
"Network/Adapter"(char *)   - 网络适配器
"Console"(int)              - 当前运行在命令行模式
"UserParams"(char *)        - 用户输入参数

以下为扫描参数名称, 可通过PlugSetResult()设置或通过PlugGetResult()读取:
"VulnNumber"(int *)         - 漏洞数量(建议使用接口函数设置漏洞数量)



扫描报告接口:

扫描报告插件应导出以下函数, 编译完成后改名为Report.dll替换X-Scan目录同名文件:
__declspec(dllexport) int __stdcall BuildReport(
    char *szLogFile,    //扫描过程生成的原始日志文件名
    char *szReportFile, //最终生成的扫描报告文件名
    char *szFormat);    //用户选择的扫描报告类型

szLogFile: 该文件为纯文本格式, 每行包含一条记录, 记录分两种格式, 示例如下:

一种格式表示发现漏洞:
results|[host]|[service name] ([port]/[protocol])|[NOTE/INFO/HOLE]|[description]
例如: results|192.168.0.1|www (80/tcp)|HOLE|发现漏洞...;风险等级:高;;解决方案:...
其中[description]字段中换行由";"号代替, 生成报告文件时应做逆向转换

另一种格式表示扫描完成的主机摘要信息:
summary|[host]|[description]
例如: summary|192.168.0.1|OS: Sun Solaris 8; PORT/TCP: 21, 23, 6000

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -