Function at 0x4073a5
Capabilities:
Get common file path

Disassembly:
mov eax, 0x41df76
call sub.MSVCRT.dll__EH_prolog
sub esp, 0x1c8
test byte [0x429668], 1
push ebx
push esi
push edi
mov esi, 0x429648
jne 0x4073ed
mov al, byte [ebp - 0xd]
or byte [0x429668], 1
xor edi, edi
mov ecx, esi
push edi
mov byte [0x429648], al
call dword [sym.imp.MSVCP60.dll_private:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Tidy_bool_]
push 0x4076f5
call fcn.00410964
pop ecx
jmp 0x4073ef
xor edi, edi
cmp dword [0x429650], edi
jne 0x4076e1
mov ebx, 0x104
lea eax, [ebp - 0x148]
push ebx
push edi
push eax
call sub.MSVCRT.dll_memset
add esp, 0xc
lea eax, [ebp - 0x148]
push 1
push 0x1a
push eax
push edi
call dword [sym.imp.SHELL32.dll_SHGetSpecialFolderPathA]
test eax, eax
je 0x40767a
mov al, byte [ebp - 0xd]
push edi
lea ecx, [ebp - 0x24]
mov byte [ebp - 0x24], al
call dword [sym.imp.MSVCP60.dll_private:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Tidy_bool_]
lea eax, [ebp - 0x148]
push eax
call sub.MSVCRT.dll_strlen
pop ecx
push eax
lea eax, [ebp - 0x148]
push eax
lea ecx, [ebp - 0x24]
call dword [sym.imp.MSVCP60.dll_public:_class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char______thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::assign_char_const___unsigned_int_]
lea eax, [ebp - 0x24]
push str.TencentQQDownload
push eax
lea eax, [ebp - 0x44]
push eax
mov dword [ebp - 4], edi
call sub.MSVCP60.dll_class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char_____cdecl_std::operator_class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char___const___char_const__
add esp, 0xc
mov ecx, dword [sym.imp.MSVCP60.dll_unsigned_int_const_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::npos]
mov byte [ebp - 4], 1
push dword [ecx]
mov ecx, esi
push edi
push eax
call dword [sym.imp.MSVCP60.dll_public:_class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char______thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::append_class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char___const___unsigned_int__unsigned_int_]
and byte [ebp - 4], 0
push 1
lea ecx, [ebp - 0x44]
call dword [sym.imp.MSVCP60.dll_private:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Tidy_bool_]
or dword [ebp - 4], 0xffffffff
push 1
lea ecx, [ebp - 0x24]
call dword [sym.imp.MSVCP60.dll_private:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Tidy_bool_]
push ebx
lea eax, [ebp - 0x148]
push edi
push eax
call sub.MSVCRT.dll_memset
lea eax, [ebp - 0x148]
push edi
push eax
call fcn.00408b6b
add esp, 0x14
lea ecx, [ebp - 0x1d4]
push 1
push 3
call dword [sym.imp.MSVCP60.dll_public:_void___thiscall_std::basic_stringstream_char__struct_std::char_traits_char___class_std::allocator_char__::constructor_int_]
lea eax, [ebp - 0x148]
mov dword [ebp - 4], 2
push eax
mov dword [ebp - 0x14], edi
call sub.MSVCRT.dll_strlen
test eax, eax
pop ecx
jbe 0x40751f
mov eax, dword [ebp - 0x14]
lea ebx, [ebp + eax - 0x148]
movsx eax, byte [ebp + eax - 0x148]
push eax
call dword [sym.imp.MSVCRT.dll_tolower]
inc dword [ebp - 0x14]
mov byte [ebx], al
lea eax, [ebp - 0x148]
push eax
call sub.MSVCRT.dll_strlen
cmp dword [ebp - 0x14], eax
pop ecx
pop ecx
jb 0x4074ee
lea eax, [ebp - 0x148]
push eax
call sub.MSVCRT.dll_strlen
push eax
lea eax, [ebp - 0x148]
push eax
push edi
call fcn.0041037d
add esp, 0x10
lea ecx, [ebp - 0x1cc]
mov ebx, 0x429648
push eax
lea eax, [ebp - 0x1d4]
neg eax
sbb eax, eax
push 0x427f0c
and eax, ecx
push ebx
push eax
call sub.MSVCP60.dll_class_std::basic_ostream_char__struct_std::char_traits_char______cdecl_std::operator___class_std::basic_ostream_char__struct_std::char_traits_char_____class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char___const__
pop ecx
pop ecx
push eax
call dword [sym.imp.MSVCP60.dll_class_std::basic_ostream_char__struct_std::char_traits_char______cdecl_std::operator___class_std::basic_ostream_char__struct_std::char_traits_char_____char_const__]
pop ecx
pop ecx
mov ecx, eax
call dword [sym.imp.MSVCP60.dll_public:_class_std::basic_ostream_char__struct_std::char_traits_char______thiscall_std::basic_ostream_char__struct_std::char_traits_char__::operator___unsigned_long_int_]
lea eax, [ebp - 0x44]
lea ecx, [ebp - 0x1d4]
push eax
call dword [sym.imp.MSVCP60.dll_public:_class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char_____thiscall_std::basic_stringstream_char__struct_std::char_traits_char___class_std::allocator_char__::str_void_]
mov ecx, dword [sym.imp.MSVCP60.dll_unsigned_int_const_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::npos]
mov byte [ebp - 4], 3
push dword [ecx]
mov ecx, esi
push edi
push eax
call dword [sym.imp.MSVCP60.dll_public:_class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char______thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::assign_class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char___const___unsigned_int__unsigned_int_]
push 1
lea ecx, [ebp - 0x44]
mov byte [ebp - 4], 2
call dword [sym.imp.MSVCP60.dll_private:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Tidy_bool_]
mov al, byte [0x429648]
push edi
lea ecx, [ebp - 0x24]
mov byte [ebp - 0x24], al
call dword [sym.imp.MSVCP60.dll_private:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Tidy_bool_]
mov eax, dword [sym.imp.MSVCP60.dll_unsigned_int_const_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::npos]
lea ecx, [ebp - 0x24]
push dword [eax]
push edi
push ebx
call dword [sym.imp.MSVCP60.dll_public:_class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char______thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::assign_class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char___const___unsigned_int__unsigned_int_]
lea eax, [ebp - 0x24]
mov byte [ebp - 4], 4
push eax
call fcn.00406f37
mov bl, al
pop ecx
neg bl
sbb bl, bl
push 1
lea ecx, [ebp - 0x24]
inc bl
mov byte [ebp - 4], 2
call dword [sym.imp.MSVCP60.dll_private:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Tidy_bool_]
test bl, bl
je 0x407668
push 0x429648
call fcn.00407043
test al, al
pop ecx
jne 0x407668
lea eax, [ebp - 0x148]
push edi
push eax
call fcn.00408b6b
mov al, byte [ebp - 0xd]
pop ecx
pop ecx
mov byte [ebp - 0x24], al
push edi
lea ecx, [ebp - 0x24]
call dword [sym.imp.MSVCP60.dll_private:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Tidy_bool_]
lea eax, [ebp - 0x148]
push eax
call sub.MSVCRT.dll_strlen
pop ecx
push eax
lea eax, [ebp - 0x148]
push eax
lea ecx, [ebp - 0x24]
call dword [sym.imp.MSVCP60.dll_public:_class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char______thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::assign_char_const___unsigned_int_]
mov eax, dword [sym.imp.MSVCP60.dll_unsigned_int_const_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::npos]
mov ecx, esi
mov byte [ebp - 4], 5
push dword [eax]
lea eax, [ebp - 0x24]
push edi
push eax
call dword [sym.imp.MSVCP60.dll_public:_class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char______thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::assign_class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char___const___unsigned_int__unsigned_int_]
push 1
lea ecx, [ebp - 0x24]
mov byte [ebp - 4], 2
call dword [sym.imp.MSVCP60.dll_private:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Tidy_bool_]
or dword [ebp - 4], 0xffffffff
lea ecx, [ebp - 0x1d4]
call dword [sym.imp.MSVCP60.dll_public:_void___thiscall_std::basic_stringstream_char__struct_std::char_traits_char___class_std::allocator_char__::vbase_dtor_void_]
jmp 0x4076e1
lea eax, [ebp - 0x148]
push edi
push eax
call fcn.00408b6b
mov al, byte [ebp - 0xd]
pop ecx
pop ecx
mov byte [ebp - 0x34], al
push edi
lea ecx, [ebp - 0x34]
call dword [sym.imp.MSVCP60.dll_private:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Tidy_bool_]
lea eax, [ebp - 0x148]
push eax
call sub.MSVCRT.dll_strlen
pop ecx
push eax
lea eax, [ebp - 0x148]
push eax
lea ecx, [ebp - 0x34]
call dword [sym.imp.MSVCP60.dll_public:_class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char______thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::assign_char_const___unsigned_int_]
mov eax, dword [sym.imp.MSVCP60.dll_unsigned_int_const_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::npos]
mov ecx, esi
mov dword [ebp - 4], 6
push dword [eax]
lea eax, [ebp - 0x34]
push edi
push eax
call dword [sym.imp.MSVCP60.dll_public:_class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char______thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::assign_class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char___const___unsigned_int__unsigned_int_]
or dword [ebp - 4], 0xffffffff
push 1
lea ecx, [ebp - 0x34]
call dword [sym.imp.MSVCP60.dll_private:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Tidy_bool_]
mov ecx, dword [ebp - 0xc]
pop edi
pop esi
mov eax, 0x429648
pop ebx
mov dword fs:[0], ecx
leave
ret