commit 9e26530f9e1216b392c870eed859646367fd7a7a Author: root Date: Sat Jun 30 12:56:57 2018 +0800 wuliclient init diff --git a/README.md b/README.md new file mode 100644 index 0000000..93b3825 --- /dev/null +++ b/README.md @@ -0,0 +1,18 @@ +USED: + +1.Download the wuliclient directory to openwrt sdk packages directory. +[if you school H3C server ip is different from my ,you should modify it. + edit wuliclient.c and modify maroc of SER_ADRE SER_PORT and so on] + +2.back to sdk top directory + +3.running make + +4.the .ipk in ./bin/[platform]/packages/base/ + +5.cp ipk to your route and install it. + +6.running wuliclent with you "id passwd net_dev_id" +for example: +wuliclent 130105021035 1234 eth0 + diff --git a/wuliclient/.README.md.swp b/wuliclient/.README.md.swp new file mode 100644 index 0000000..3767d73 Binary files /dev/null and b/wuliclient/.README.md.swp differ diff --git a/wuliclient/Makefile b/wuliclient/Makefile new file mode 100644 index 0000000..c9dde8f --- /dev/null +++ b/wuliclient/Makefile @@ -0,0 +1,34 @@ +include $(TOPDIR)/rules.mk + + +PKG_NAME:=wuliclientBulidl +PKG_RELEASE:=1.0 + +PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME) + +include $(INCLUDE_DIR)/package.mk + +define Package/$(PKG_NAME) +SECTION:=utils +CATEGORY:=Utilities +PKGARCH:=all +TITLE:= $(PKG_NAME) +MAINTAINER:=K.L +endef + +define Package/$(PKG_NAME)/description + wuliclient for Inode7.1 portal in zhibt +endef + +define Build/Prepare + mkdir -p $(PKG_BUILD_DIR) + $(CP) ./src/* $(PKG_BUILD_DIR)/ +endef + +define Package/$(PKG_NAME)/install + echo "Here is Package/install" + $(INSTALL_DIR) $(1)/bin + $(INSTALL_BIN) $(PKG_BUILD_DIR)/$(PKG_NAME) $(1)/bin/ +endef + +$(eval $(call BuildPackage,$(PKG_NAME))) diff --git a/wuliclient/src/.Makefile.swp b/wuliclient/src/.Makefile.swp new file mode 100644 index 0000000..e9cb0b0 Binary files /dev/null and b/wuliclient/src/.Makefile.swp differ diff --git a/wuliclient/src/.wuliclient.c.swp b/wuliclient/src/.wuliclient.c.swp new file mode 100644 index 0000000..b6930a4 Binary files /dev/null and b/wuliclient/src/.wuliclient.c.swp differ diff --git a/wuliclient/src/MD5.c b/wuliclient/src/MD5.c new file mode 100644 index 0000000..6b9efb0 --- /dev/null +++ b/wuliclient/src/MD5.c @@ -0,0 +1,161 @@ +#include +#include "MD5.h" + +unsigned char PADDING[] = { 0x80,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, +0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 }; + +void MD5_Init(MD5_CTX *context) +{ + context->count[0] = 0; + context->count[1] = 0; + context->state[0] = 0x67452301; + context->state[1] = 0xEFCDAB89; + context->state[2] = 0x98BADCFE; + context->state[3] = 0x10325476; +} +void MD5_Update(MD5_CTX *context, unsigned char *input, unsigned int inputlen) +{ + unsigned int i = 0, index = 0, partlen = 0; + index = (context->count[0] >> 3) & 0x3F; + partlen = 64 - index; + context->count[0] += inputlen << 3; + if (context->count[0] < (inputlen << 3)) + context->count[1]++; + context->count[1] += inputlen >> 29; + + if (inputlen >= partlen) + { + memcpy(&context->buffer[index], input, partlen); + MD5Transform(context->state, context->buffer); + for (i = partlen; i + 64 <= inputlen; i += 64) + MD5Transform(context->state, &input[i]); + index = 0; + } + else + { + i = 0; + } + memcpy(&context->buffer[index], &input[i], inputlen - i); +} +void MD5_Final(unsigned char digest[16], MD5_CTX *context) +{ + unsigned int index = 0, padlen = 0; + unsigned char bits[8]; + index = (context->count[0] >> 3) & 0x3F; + padlen = (index < 56) ? (56 - index) : (120 - index); + MD5Encode(bits, context->count, 8); + MD5_Update(context, PADDING, padlen); + MD5_Update(context, bits, 8); + MD5Encode(digest, context->state, 16); +} +void MD5Encode(unsigned char *output, unsigned int *input, unsigned int len) +{ + unsigned int i = 0, j = 0; + while (j < len) + { + output[j] = input[i] & 0xFF; + output[j + 1] = (input[i] >> 8) & 0xFF; + output[j + 2] = (input[i] >> 16) & 0xFF; + output[j + 3] = (input[i] >> 24) & 0xFF; + i++; + j += 4; + } +} +void MD5Decode(unsigned int *output, unsigned char *input, unsigned int len) +{ + unsigned int i = 0, j = 0; + while (j < len) + { + output[i] = (input[j]) | + (input[j + 1] << 8) | + (input[j + 2] << 16) | + (input[j + 3] << 24); + i++; + j += 4; + } +} +void MD5Transform(unsigned int state[4], unsigned char block[64]) +{ + unsigned int a = state[0]; + unsigned int b = state[1]; + unsigned int c = state[2]; + unsigned int d = state[3]; + unsigned int x[64]; + MD5Decode(x, block, 64); + FF(a, b, c, d, x[0], 7, 0xd76aa478); /* 1 */ + FF(d, a, b, c, x[1], 12, 0xe8c7b756); /* 2 */ + FF(c, d, a, b, x[2], 17, 0x242070db); /* 3 */ + FF(b, c, d, a, x[3], 22, 0xc1bdceee); /* 4 */ + FF(a, b, c, d, x[4], 7, 0xf57c0faf); /* 5 */ + FF(d, a, b, c, x[5], 12, 0x4787c62a); /* 6 */ + FF(c, d, a, b, x[6], 17, 0xa8304613); /* 7 */ + FF(b, c, d, a, x[7], 22, 0xfd469501); /* 8 */ + FF(a, b, c, d, x[8], 7, 0x698098d8); /* 9 */ + FF(d, a, b, c, x[9], 12, 0x8b44f7af); /* 10 */ + FF(c, d, a, b, x[10], 17, 0xffff5bb1); /* 11 */ + FF(b, c, d, a, x[11], 22, 0x895cd7be); /* 12 */ + FF(a, b, c, d, x[12], 7, 0x6b901122); /* 13 */ + FF(d, a, b, c, x[13], 12, 0xfd987193); /* 14 */ + FF(c, d, a, b, x[14], 17, 0xa679438e); /* 15 */ + FF(b, c, d, a, x[15], 22, 0x49b40821); /* 16 */ + + /* Round 2 */ + GG(a, b, c, d, x[1], 5, 0xf61e2562); /* 17 */ + GG(d, a, b, c, x[6], 9, 0xc040b340); /* 18 */ + GG(c, d, a, b, x[11], 14, 0x265e5a51); /* 19 */ + GG(b, c, d, a, x[0], 20, 0xe9b6c7aa); /* 20 */ + GG(a, b, c, d, x[5], 5, 0xd62f105d); /* 21 */ + GG(d, a, b, c, x[10], 9, 0x2441453); /* 22 */ + GG(c, d, a, b, x[15], 14, 0xd8a1e681); /* 23 */ + GG(b, c, d, a, x[4], 20, 0xe7d3fbc8); /* 24 */ + GG(a, b, c, d, x[9], 5, 0x21e1cde6); /* 25 */ + GG(d, a, b, c, x[14], 9, 0xc33707d6); /* 26 */ + GG(c, d, a, b, x[3], 14, 0xf4d50d87); /* 27 */ + GG(b, c, d, a, x[8], 20, 0x455a14ed); /* 28 */ + GG(a, b, c, d, x[13], 5, 0xa9e3e905); /* 29 */ + GG(d, a, b, c, x[2], 9, 0xfcefa3f8); /* 30 */ + GG(c, d, a, b, x[7], 14, 0x676f02d9); /* 31 */ + GG(b, c, d, a, x[12], 20, 0x8d2a4c8a); /* 32 */ + + /* Round 3 */ + HH(a, b, c, d, x[5], 4, 0xfffa3942); /* 33 */ + HH(d, a, b, c, x[8], 11, 0x8771f681); /* 34 */ + HH(c, d, a, b, x[11], 16, 0x6d9d6122); /* 35 */ + HH(b, c, d, a, x[14], 23, 0xfde5380c); /* 36 */ + HH(a, b, c, d, x[1], 4, 0xa4beea44); /* 37 */ + HH(d, a, b, c, x[4], 11, 0x4bdecfa9); /* 38 */ + HH(c, d, a, b, x[7], 16, 0xf6bb4b60); /* 39 */ + HH(b, c, d, a, x[10], 23, 0xbebfbc70); /* 40 */ + HH(a, b, c, d, x[13], 4, 0x289b7ec6); /* 41 */ + HH(d, a, b, c, x[0], 11, 0xeaa127fa); /* 42 */ + HH(c, d, a, b, x[3], 16, 0xd4ef3085); /* 43 */ + HH(b, c, d, a, x[6], 23, 0x4881d05); /* 44 */ + HH(a, b, c, d, x[9], 4, 0xd9d4d039); /* 45 */ + HH(d, a, b, c, x[12], 11, 0xe6db99e5); /* 46 */ + HH(c, d, a, b, x[15], 16, 0x1fa27cf8); /* 47 */ + HH(b, c, d, a, x[2], 23, 0xc4ac5665); /* 48 */ + + /* Round 4 */ + II(a, b, c, d, x[0], 6, 0xf4292244); /* 49 */ + II(d, a, b, c, x[7], 10, 0x432aff97); /* 50 */ + II(c, d, a, b, x[14], 15, 0xab9423a7); /* 51 */ + II(b, c, d, a, x[5], 21, 0xfc93a039); /* 52 */ + II(a, b, c, d, x[12], 6, 0x655b59c3); /* 53 */ + II(d, a, b, c, x[3], 10, 0x8f0ccc92); /* 54 */ + II(c, d, a, b, x[10], 15, 0xffeff47d); /* 55 */ + II(b, c, d, a, x[1], 21, 0x85845dd1); /* 56 */ + II(a, b, c, d, x[8], 6, 0x6fa87e4f); /* 57 */ + II(d, a, b, c, x[15], 10, 0xfe2ce6e0); /* 58 */ + II(c, d, a, b, x[6], 15, 0xa3014314); /* 59 */ + II(b, c, d, a, x[13], 21, 0x4e0811a1); /* 60 */ + II(a, b, c, d, x[4], 6, 0xf7537e82); /* 61 */ + II(d, a, b, c, x[11], 10, 0xbd3af235); /* 62 */ + II(c, d, a, b, x[2], 15, 0x2ad7d2bb); /* 63 */ + II(b, c, d, a, x[9], 21, 0xeb86d391); /* 64 */ + state[0] += a; + state[1] += b; + state[2] += c; + state[3] += d; +} diff --git a/wuliclient/src/MD5.h b/wuliclient/src/MD5.h new file mode 100644 index 0000000..a9e2c79 --- /dev/null +++ b/wuliclient/src/MD5.h @@ -0,0 +1,48 @@ +#ifndef MD5_H +#define MD5_H + +typedef struct +{ + unsigned int count[2]; + unsigned int state[4]; + unsigned char buffer[64]; +}MD5_CTX; + + +#define F(x,y,z) ((x & y) | (~x & z)) +#define G(x,y,z) ((x & z) | (y & ~z)) +#define H(x,y,z) (x^y^z) +#define I(x,y,z) (y ^ (x | ~z)) +#define ROTATE_LEFT(x,n) ((x << n) | (x >> (32-n))) +#define FF(a,b,c,d,x,s,ac) \ + { \ + a += F(b,c,d) + x + ac; \ + a = ROTATE_LEFT(a,s); \ + a += b; \ + } +#define GG(a,b,c,d,x,s,ac) \ + { \ + a += G(b,c,d) + x + ac; \ + a = ROTATE_LEFT(a,s); \ + a += b; \ + } +#define HH(a,b,c,d,x,s,ac) \ + { \ + a += H(b,c,d) + x + ac; \ + a = ROTATE_LEFT(a,s); \ + a += b; \ + } +#define II(a,b,c,d,x,s,ac) \ + { \ + a += I(b,c,d) + x + ac; \ + a = ROTATE_LEFT(a,s); \ + a += b; \ + } +void MD5_Init(MD5_CTX *context); +void MD5_Update(MD5_CTX *context, unsigned char *input, unsigned int inputlen); +void MD5_Final(unsigned char digest[16], MD5_CTX *context); +void MD5Transform(unsigned int state[4], unsigned char block[64]); +void MD5Encode(unsigned char *output, unsigned int *input, unsigned int len); +void MD5Decode(unsigned int *output, unsigned char *input, unsigned int len); + +#endif diff --git a/wuliclient/src/Makefile b/wuliclient/src/Makefile new file mode 100644 index 0000000..546b44b --- /dev/null +++ b/wuliclient/src/Makefile @@ -0,0 +1,16 @@ +# build helloworld executable when user executes "make" + + PKG_NAME:=wuliclientBulidl + +$(PKG_NAME): MD5.o wuliclient.o + $(CC) $(LDFLAGS) MD5.o wuliclient.o -o $(PKG_NAME) + +MD5.o: MD5.c + $(CC) $(CFLAGS) -c MD5.c + +wuliclient.o: wuliclient.c + $(CC) $(CFLAGS) -c wuliclient.c + +# remove object files and executable when user executes "make clean" +clean: + rm *.o $(PKG_NAME) diff --git a/wuliclient/src/wuliclient.c b/wuliclient/src/wuliclient.c new file mode 100644 index 0000000..01ead4a --- /dev/null +++ b/wuliclient/src/wuliclient.c @@ -0,0 +1,864 @@ +/************************************************************************************************/ +/* Copyring (C), by K.L & lcuops */ +/************************************************************************************************/ +/** +* @file wuliclient.c +* @brief HC3 inode 7.1 protal anthenticate client +* @author K.L +* @version 1.0 +* @data 2017-2-27 +*/ + +/************************************************************************************************/ +/* Include Files */ +/************************************************************************************************/ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "MD5.h" +#include + + +/************************************************************************************************/ +/* Macros & Typedefs */ +/************************************************************************************************/ +// #define _DEBUG + +#define SER_ADRE "10.0.15.103" //服务器地址 +#define SER_PORT 50200 //服务器端口号 +#define CALL_PORT 50101 //一开始的数据发往的端口 +#define MAXDATASIZE 1024 //缓存区的最大字节 +#define CHECK_ONLINE 120 //联网检测时间 +#define RECV_TIMEOUT 5 //接收超时 + + +/************************************************************************************************/ +/* Structre Declarations */ +/************************************************************************************************/ +typedef struct tar_PACKET_HEAD_S +{ + unsigned char version; + unsigned char type; + unsigned char pap_chap; + unsigned char rsvd; + unsigned short int serialNo; + unsigned short int reqId; + unsigned int userIp; + unsigned short int userPort; + unsigned char errCode; + unsigned char attNum; + +}PACKET_HEAD_S; + +/************************************************************************************************/ +/* Global Variables */ +/************************************************************************************************/ +char g_userId[15]; +char g_passwd[15]; +char g_eth_name[10]; +char userid[8]; +char UserPortInDev[31]; +char g_recv_buf[MAXDATASIZE]; +char g_packeType; +char g_Timelimit_flag; +int g_host_ip; +short int g_randNum; +unsigned int g_loginTimeOut; +unsigned int g_offset = 0; +PACKET_HEAD_S g_packHead_s; +unsigned int ser_infor_len; +struct sockaddr_in ser_infor_s; +struct sockaddr_in ser_addr_s; + + + + +const char *share_key = "hello"; +const char *vertion = "CH-7.10-0313"; +const char *ser_name = "@huawei2.com"; +const char call_pack[]={0x02,0x64,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x05, + 0xba,0xd3,0x4e,0x49,0x6e,0x69,0x2e,0xab,0xff,0xd8,0x9e,0xca,0x49,0x9b,0xba,0xcb, + 0x68,0x06,0x00,0x00,0x00,0x00,0x67,0x06,0x00,0x00,0x00,0x00,0x65,0x09,0x68,0x75, + 0x61,0x33,0x63,0x6f,0x6d,0x66,0x09,0x68,0x75,0x61,0x33,0x63,0x6f,0x6d,0x71,0x06, + 0x02,0xbd,0xc0,0x70}; + +const char heartData[]={0x7a,0x06,0x00,0x00,0x00,0x00,0x78,0x06,0x00,0x00,0x00,0x01,0x7d,0x03,0x63,0x60, + 0x03,0x01} ; + + +//tmp +const char E_vertion[]={0x01,0x1e,0x4d,0x47,0x73,0x4f,0x48,0x78,0x6f,0x45,0x50,0x79,0x74,0x79,0x52,0x78, + 0x78,0x68,0x4a,0x31,0x5a,0x79,0x49,0x73,0x52,0x64,0x59,0x30,0x73,0x3d}; + +const char E_vertion2[]={0x06,0x07,0x4f,0x7a,0x64,0x56,0x54,0x55,0x68,0x66,0x59,0x79,0x42,0x35,0x47,0x30, + 0x63,0x7a,0x64,0x51,0x30,0x75,0x4b,0x52,0x48,0x54,0x4f,0x55,0x30,0x3d}; + +const char E_password[]={0x9a,0x4f,0x87,0x04,0x0b,0x9b,0xdc,0x23}; + + + + + +/************************************************************************************************/ +/* Function Declarations */ +/************************************************************************************************/ +/* NONE */ + +void free_memory(char *addr) +{ + if(NULL != addr){ + free(addr); + } +} + +void MD5(unsigned char *dst_str , unsigned char *src_str ,int leng) +{ + MD5_CTX ctx; + MD5_Init(&ctx); + MD5_Update(&ctx,src_str,leng); + MD5_Final(dst_str,&ctx); +} + +int addMd5(char *data,int len) +{ + char *md5Data = NULL; + char md5Code[16] = {0x000}; + + + md5Data = (char*)malloc(sizeof(char)*(len+5)); + if(NULL == md5Data){ + printf("malloc error\n"); + return -1; + } + + memcpy(md5Data, data, g_offset); + memcpy(md5Data+g_offset, share_key , 5); //add share_key + MD5(md5Code, md5Data, (g_offset + 5)); + memcpy(data+16, md5Code, 16); + + free_memory(md5Data); + + return 0; + +} + + +void disp_hex(unsigned char *data, int len) +{ + int cnt; + for(cnt=0; cnt 1000){ // > 1 second + + do{ + sleep(g_loginTimeOut); + ret = startHeartbeatthread(); + if(ret){ + break; + } + } + while(1); + + } + + +} + + +int main(int argc, char *argv[]) +{ + if(argc != 4){ + printf("输入账号密码错误,请重新输入\n"); + printf("格式:wuliclient 账号 密码 网卡名\n"); + printf("(目前只支持密码为默认密码:1234)\n"); + return -1; + } + + if( strcmp(argv[2], "1234") ){ + printf("抱歉,目前密码只支持默认密码1234\n"); + return -1; + } + + printf("-----------------------------------------\n"); + printf("WULICLIENT OF ZHBIT\n"); + printf("定制号:%s\n",g_userId); + printf("【声明】\n"); + printf("本版本仅作为学习交流之用,请于24小时内删除\n"); + printf("创作者:K.L & lcuops\n"); + printf("---------欢迎反馈问题---------\n"); + printf("反馈/交流 Email: kuling321@qq.com\n"); + printf("-----------------------------------------\n"); + + + strcpy(g_userId, argv[1]); + strcpy(g_passwd, argv[2]); + strcpy(g_eth_name, argv[3]); + #ifdef _DEBUG + printf("userid:%s\n",g_userId); + printf("passwd:%s\n",g_passwd); + #endif + + + + do{ + + /* get random number for serialNo of this connet */ + srand(time(NULL)); + g_randNum = rand(); + #ifdef _DEBUG + printf("randNum: "); + disp_hex((char *)&g_randNum, 2); + printf("\n"); + #endif + + /* start authenticate */ + authenticate(); + sleep(3); + + }while(1); + + + return 0; +} +