def InternetOpenUrl(self, proc, argv, ctx={}): """ void InternetOpenUrlA( HINTERNET hInternet, LPCSTR lpszUrl, LPCSTR lpszHeaders, DWORD dwHeadersLength, DWORD dwFlags, DWORD_PTR dwContext ); """ hInternet, lpszUrl, lpszHeaders, dwHeadersLength, dwFlags, dwContext = argv cw = ApiHandler.get_char_width(ctx) if lpszUrl: url = common.read_mem_string(proc.uc_eng, lpszUrl, cw) argv[1] = url if lpszHeaders: hdrs = {} headers = common.read_mem_string(proc.uc_eng, lpszHeaders, cw) _headers = headers.split("\r\n") for header in _headers: k, v = header.split(":") if v[0] == " ": v = v[1:] hdrs[k] = v argv[2] = headers defs = windefs.get_flag_defines(dwFlags) argv[4] = ' | '.join(defs) crack = urlparse(url) if crack.scheme == "http": # FIXME : parse port in url netloc port = 80 else: port = 443 http_conn_handle = proc.emu.net_manager.create_connection( inet_handle=hInternet, host=crack.netloc, # host flag=dwFlags, ctx=dwContext, port=port) http_req_handle = proc.emu.net_manager.create_http_request( http_conn_handle, crack.path, flag=dwFlags) http_req = obj_manager.ObjectManager.get_obj_by_handle(http_req_handle) if hdrs: http_req.add_headers(hdrs) proc.emu.net_manager.send_http_request(http_req_handle, None) return http_req_handle
def LoadLibrary(self, proc, argv, ctx={}): '''HMODULE LoadLibrary( LPTSTR lpLibFileName );''' lib_name, = argv hmod = windefs.NULL cw = common.get_char_width(ctx) req_lib = common.read_mem_string(proc.uc_eng, lib_name, cw) lib = ApiHandler.api_set_schema(req_lib) hmod = proc.load_library(lib) argv[0] = req_lib return hmod
def LoadLibraryEx(self, proc, argv, ctx={}): '''HMODULE LoadLibraryExA( LPCSTR lpLibFileName, HANDLE hFile, DWORD dwFlags );''' lib_name, _, dwFlags = argv hmod = 0 cw = common.get_char_width(ctx) req_lib = common.read_mem_string(proc.uc_eng, lib_name, cw) lib = ApiHandler.api_set_schema(req_lib) hmod = proc.load_library(lib) flags = { 0x1: 'DONT_RESOLVE_DLL_REFERENCES', 0x10: 'LOAD_IGNORE_CODE_AUTHZ_LEVEL', 0x2: 'LOAD_LIBRARY_AS_DATAFILE', 0x40: 'LOAD_LIBRARY_AS_DATAFILE_EXCLUSIVE', 0x20: 'LOAD_LIBRARY_AS_IMAGE_RESOURCE', 0x200: 'LOAD_LIBRARY_SEARCH_APPLICATION_DIR', 0x1000: 'LOAD_LIBRARY_SEARCH_DEFAULT_DIRS', 0x100: 'LOAD_LIBRARY_SEARCH_DLL_LOAD_DIR', 0x800: 'LOAD_LIBRARY_SEARCH_SYSTEM32', 0x400: 'LOAD_LIBRARY_SEARCH_USER_DIRS', 0x8: 'LOAD_WITH_ALTERED_SEARCH_PATH', } pretty_flags = ' | '.join([name for bit, name in flags.items() if dwFlags & bit]) argv[0] = req_lib argv[1] = argv[1] argv[2] = pretty_flags if not hmod: proc.set_last_error(windefs.ERROR_MOD_NOT_FOUND) return hmod
def GetModuleHandle(self, proc, argv, ctx={}): '''HMODULE GetModuleHandle( LPCSTR lpModuleName );''' mod_name, = argv cw = self.get_char_width(ctx) rv = 0 if not mod_name: rv = proc.image_base else: lib = common.read_mem_string(proc.uc_eng, mod_name, cw) if lib not in proc.imp: lib = ApiHandler.api_set_schema(lib) if lib in proc.imp: rv = pydll.SYSTEM_DLL_BASE[lib] else: rv = 0 return rv
def wprintf(self, proc, argv, ctx={}): arch = proc.get_arch() if arch == UC_ARCH_X86: fmt, va_list = ApiHandler.get_argv(proc, cv.CALL_CONV_CDECL, 2)[:2] else: raise Exception("Unsupported architecture") rv = 0 fmt_str = common.read_wide_string(proc.uc_eng, fmt) fmt_cnt = self.get_va_arg_count(fmt_str) vargs = self.va_args2(fmt_cnt) fin = common.make_fmt_str(proc, fmt_str, vargs, True) rv = len(fin) argv.append(fin) # print(fin) return rv
def __stdio_common_vfprintf(self, proc, argv, ctx={}): arch = proc.get_arch() if arch == UC_ARCH_X86: opts, opts2, stream, fmt, _, va_list = ApiHandler.get_argv( proc, cv.CALL_CONV_CDECL, 6)[:6] else: raise Exception("Unsupported architecture") rv = 0 fmt_str = common.read_mem_string(proc.uc_eng, fmt, 1) fmt_cnt = self.get_va_arg_count(fmt_str) vargs = self.va_args(va_list, fmt_cnt) fin = common.make_fmt_str(proc, fmt_str, vargs) argv[:] = [opts, stream, fin] # print(fin) rv = len(fin) return rv