#include <stdio.h>
#include <WinSock2.h>
#include <stdlib.h>
#include <string.h>
#include <iostream>
#include <windows.h>
#pragma comment(lib, "ws2_32.lib")
// 定义最大响应大小
#define MAXSIZE 1024
#define SERVER_IP "118.126.117.125"
#define PORT 8000
#define CONNECT_FAIL "connect server failed"
#define ATTACK_SUCCESS "攻击成功"
#define ATTACK_FAIL "攻击失败"
#define ATTACK_RECORD_SUCCESS "["
// 模拟 hacker.h 接口(如果不存在,则自行定义)
#ifndef HACKER_H
#define HACKER_H
int hk_404(char* id, char* response);
int hk_restore(char* id, char* response);
int hk_tamper(char* id, char* para, char* response);
int hk_record(char* id, char* response);
#endif // HACKER_H
// UTF-8 转 GBK
std::string UTF8ToGBK(const char* strUTF8) {
if (!strUTF8 || strlen(strUTF8) == 0) return "";
int len = MultiByteToWideChar(CP_UTF8, 0, strUTF8, -1, NULL, 0);
if (len <= 0) return "";
wchar_t* wszGBK = new wchar_t[len + 1];
memset(wszGBK, 0, (len + 1) * sizeof(wchar_t));
MultiByteToWideChar(CP_UTF8, 0, strUTF8, -1, wszGBK, len);
len = WideCharToMultiByte(CP_ACP, 0, wszGBK, -1, NULL, 0, NULL, NULL);
char* szGBK = new char[len + 1];
memset(szGBK, 0, len + 1);
WideCharToMultiByte(CP_ACP, 0, wszGBK, -1, szGBK, len, NULL, NULL);
std::string strTemp(szGBK);
delete[] wszGBK;
delete[] szGBK;
return strTemp;
}
// GBK 转 UTF-8
void GBKToUTF8(std::string& strGBK) {
if (strGBK.empty()) return;
int len = MultiByteToWideChar(CP_ACP, 0, strGBK.c_str(), -1, NULL, 0);
if (len <= 0) return;
wchar_t* wszUtf8 = new wchar_t[len];
memset(wszUtf8, 0, len * sizeof(wchar_t));
MultiByteToWideChar(CP_ACP, 0, strGBK.c_str(), -1, wszUtf8, len);
len = WideCharToMultiByte(CP_UTF8, 0, wszUtf8, -1, NULL, 0, NULL, NULL);
char* szUtf8 = new char[len + 1];
memset(szUtf8, 0, len + 1);
WideCharToMultiByte(CP_UTF8, 0, wszUtf8, -1, szUtf8, len, NULL, NULL);
strGBK = szUtf8;
delete[] szUtf8;
delete[] wszUtf8;
}
// 发送命令到服务器
int send_cmd(char* cmd, char* response) {
int ret;
// 添加 check 参数
strcat_s(cmd, 512, " check:13243879166");
WORD wVersionRequested = MAKEWORD(2, 2); // 使用更稳定的 2.2 版本
WSADATA wsaData;
int err = WSAStartup(wVersionRequested, &wsaData);
if (err != 0) {
strcpy_s(response, MAXSIZE, "WSAStartup failed.");
return -1;
}
if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2) {
strcpy_s(response, MAXSIZE, "Unsupported Winsock version.");
WSACleanup();
return -1;
}
SOCKET sockClient = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
if (sockClient == INVALID_SOCKET) {
strcpy_s(response, MAXSIZE, "Create socket failed.");
WSACleanup();
return -1;
}
SOCKADDR_IN addrSrv;
addrSrv.sin_family = AF_INET;
addrSrv.sin_addr.s_addr = inet_addr(SERVER_IP);
addrSrv.sin_port = htons(PORT);
ret = connect(sockClient, (SOCKADDR*)&addrSrv, sizeof(addrSrv));
if (ret == SOCKET_ERROR) {
strcpy_s(response, MAXSIZE, CONNECT_FAIL);
closesocket(sockClient);
WSACleanup();
return -1;
}
// 发送命令
ret = send(sockClient, cmd, static_cast<int>(strlen(cmd)) + 1, 0);
if (ret == SOCKET_ERROR) {
strcpy_s(response, MAXSIZE, "Send command failed.");
closesocket(sockClient);
WSACleanup();
return -1;
}
// 接收响应
ret = recv(sockClient, response, MAXSIZE - 1, 0);
if (ret <= 0) {
strcpy_s(response, MAXSIZE, "Receive response failed.");
closesocket(sockClient);
WSACleanup();
return -1;
}
else {
response[ret] = '\0'; // 手动加结束符
}
closesocket(sockClient);
WSACleanup();
return 0;
}
// 各种攻击命令封装
int hk_404(char* id, char* response) {
char buff[512] = { 0 };
sprintf_s(buff, "cmd:attack_404 para:null id:%s", id);
return send_cmd(buff, response);
}
int hk_restore(char* id, char* response) {
char buff[512] = { 0 };
sprintf_s(buff, "cmd:attack_restore para:null id:%s", id);
return send_cmd(buff, response);
}
int hk_tamper(char* id, char* para, char* response) {
char buff[512] = { 0 };
sprintf_s(buff, "cmd:attack_tamper para:%s id:%s", para, id);
return send_cmd(buff, response);
}
int hk_record(char* id, char* response) {
char buff[512] = { 0 };
sprintf_s(buff, "cmd:attack_record para:null id:%s", id);
return send_cmd(buff, response);
}
// 检查返回是否成功
bool check_response(const char* response) {
if (response == nullptr) return false;
if (strncmp(response, ATTACK_SUCCESS, strlen(ATTACK_SUCCESS)) == 0 ||
strncmp(response, ATTACK_RECORD_SUCCESS, strlen(ATTACK_RECORD_SUCCESS)) == 0) {
return true;
}
return false;
}
// 主函数示例测试
int main() {
char response[MAXSIZE] = { 0 };
// 示例调用
std::cout << "开始测试连接..." << std::endl;
if (hk_404((char*)"test123", response) == 0) {
std::string result = UTF8ToGBK(response); // 假设服务端返回的是 UTF-8
std::wcout << L"结果: " << std::wstring(result.begin(), result.end()).c_str() << std::endl;
if (check_response(response)) {
std::cout << "攻击成功!" << std::endl;
}
else {
std::cout << "攻击失败: " << result << std::endl;
}
}
else {
std::cout << "请求失败: " << response << std::endl;
}
system("pause");
return 0;
}
再改一遍
最新发布