Function at 0x10029960
Capabilities:
Create directory
Get common file path
Read .ini file
Resolve function by parsing pe exports

Disassembly:
push 0xffffffffffffffff
push 0x100407ca
mov eax, dword fs:[0]
push eax
mov dword fs:[0], esp
sub esp, 0x1cc
push ebx
push ebp
push esi
push edi
mov edi, ecx
mov dword [esp + 0x4c], edi
mov eax, dword [edi + 0xdc]
xor ebx, ebx
cmp eax, ebx
mov dword [esp + 0x1e4], ebx
jne 0x100299bc
mov ecx, dword [esp + 0x1f0]
mov dword [esp + 0x1e4], 0xffffffff
cmp ecx, ebx
je 0x1002a01b
call fcn.1001fa80
jmp 0x1002a01b
mov ecx, edi
mov dword [esp + 0x38], ebx
xor esi, esi
call fcn.10021fb0
cmp word [edi + 0x156], 1
jne 0x100299e4
push 1
call fcn.10031780
add esp, 4
mov byte [edi + 0x154], 1
mov eax, dword [esp + 0x1ec]
lea ecx, [esp + 0x1f0]
push ecx
mov dword [edi + 0x150], ebx
lea ecx, [edi + 0x14c]
mov dword [edi + 0x148], eax
call fcn.1002a040
mov edx, dword [esp + 0x1ec]
mov eax, dword [edx + 0xc]
cmp eax, 1
jne 0x10029aa6
lea eax, [esp + 0x1ec]
lea ecx, [esp + 0x30]
push eax
push ecx
call fcn.1002c9c0
add esp, 8
lea ecx, [esp + 0x13]
mov byte [esp + 0x1e4], 2
call fcn.1002a0b0
lea ecx, [esp + 0x13]
mov byte [esp + 0x1e4], 3
call fcn.1002a110
xor edx, edx
mov ecx, 0x2710
div ecx
mov ecx, dword [esp + 0x30]
mov byte [esp + 0x1e4], 1
cmp edx, dword [ecx + 0x58]
jae 0x10029a80
add ecx, 0x5c
push 1
push ecx
call fcn.1002e810
mov ecx, dword [esp + 0x38]
add esp, 8
mov esi, dword [ecx + 0x4c]
xor eax, eax
mov ax, word [ecx + 0x68]
mov ecx, dword [esp + 0x34]
cmp ecx, ebx
mov dword [esp + 0x38], eax
mov byte [esp + 0x1e4], 0
je 0x10029ee4
jmp 0x10029edf
cmp eax, 2
jne 0x10029ee4
lea edx, [esp + 0x1ec]
lea eax, [esp + 0x40]
push edx
push eax
call fcn.1002c9f0
add esp, 8
mov esi, dword [esp + 0x40]
mov eax, dword [esi + 0x30]
lea ebp, [esi + 0x30]
cmp eax, ebx
je 0x10029ec0
lea ecx, [esi + 0x34]
mov dword [esp + 0x3c], ecx
mov ecx, dword [ecx]
sub ecx, eax
mov eax, 0x92492493
imul ecx
add edx, ecx
sar edx, 4
mov ecx, edx
shr ecx, 0x1f
add edx, ecx
je 0x10029ec0
lea ecx, [esp + 0x13]
mov byte [esp + 0x1e4], 5
call fcn.1002a0b0
mov edi, dword [sym.imp.MSVCRT.dll_rand]
mov byte [esp + 0x1e4], 4
call edi
mov esi, eax
call edi
and eax, 0xffff
and esi, 0xffff
shl eax, 0x10
or eax, esi
xor edx, edx
mov ecx, 0x2710
push ebx
div ecx
push ebx
lea ecx, [esp + 0x20]
mov dword [esp + 0x50], edx
mov dl, byte [esp + 0x1b]
mov byte [esp + 0x20], dl
call fcn.1000ea10
mov dword [esp + 0x1c], eax
mov dword [esp + 0x20], ebx
mov eax, dword [esp + 0x3c]
mov ebx, dword [ebp]
mov byte [esp + 0x1e4], 6
mov dword [esp + 0x2c], ebx
cmp ebx, dword [eax]
je 0x10029e72
mov esi, dword [sym.imp.SHLWAPI.dll_PathAppendA]
lea ebp, [ebx + 0xc]
mov ecx, dword [esp + 0x48]
mov eax, dword [ebx]
cmp ecx, eax
jge 0x10029e5c
push 0x100556cc
push ebp
call dword [sym.imp.MSVCP60.dll_bool___cdecl_std::operator_class_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char___const___char_const__]
add esp, 8
test al, al
jne 0x10029e5c
lea edx, [esp + 0xd8]
push edx
push 1
push 0
push 0x23
push 0
call dword [sym.imp.SHELL32.dll_SHGetFolderPathA]
test eax, eax
jl 0x10029e48
lea eax, [esp + 0xd8]
push str.PPLive
push eax
call esi
lea ecx, [esp + 0xd8]
push str.PPAP
push ecx
call esi
lea edx, [esp + 0xd8]
push 0
push edx
call dword [sym.imp.KERNEL32.dll_CreateDirectoryA]
lea eax, [esp + 0xd8]
push str.tipsclient.ini
push eax
call esi
mov cl, byte [esp + 0x13]
push 0
mov byte [esp + 0x5c], cl
lea ecx, [esp + 0x5c]
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 edx, [esp + 0x13]
lea ecx, [esp + 0x68]
push edx
mov byte [esp + 0x1e8], 7
call dword [sym.imp.MSVCP60.dll_public:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::constructor_class_std::allocator_char__const__]
mov al, byte [esp + 0x13]
push 0
lea ecx, [esp + 0x7c]
mov byte [esp + 0x1e8], 8
mov byte [esp + 0x7c], 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 edi, [esp + 0xd8]
or ecx, 0xffffffff
xor eax, eax
repne scasb al, byte es:[edi]
not ecx
dec ecx
push ecx
lea ecx, [esp + 0xdc]
push ecx
lea ecx, [esp + 0x80]
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 edx, dword [sym.imp.MSVCP60.dll_unsigned_int_const_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::npos]
lea ecx, [esp + 0x78]
mov byte [esp + 0x1e4], 9
mov eax, dword [edx]
push eax
push 0
push ecx
lea ecx, [esp + 0x64]
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, [esp + 0x7c]
mov byte [esp + 0x1e8], 8
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 dl, byte [esp + 0x13]
push 0
lea ecx, [esp + 0x8c]
mov byte [esp + 0x8c], dl
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 edi, str.tipsc
or ecx, 0xffffffff
xor eax, eax
repne scasb al, byte es:[edi]
not ecx
dec ecx
push ecx
push str.tipsc
lea ecx, [esp + 0x90]
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 byte [esp + 0x1e4], 0xa
lea edx, [esp + 0x88]
mov ecx, dword [eax]
push ecx
push 0
push edx
lea ecx, [esp + 0x74]
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, [esp + 0x8c]
mov byte [esp + 0x1e8], 8
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 ecx, [esp + 0x14]
call sub.MFC42.DLL_CString::CString_2
mov eax, dword [ebp + 4]
mov byte [esp + 0x1e4], 0xb
test eax, eax
jne 0x10029d33
mov eax, dword [sym.imp.MSVCP60.dll_char_const__private:_static_char_const____cdecl_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Nullstr_void_::_2::_C]
push eax
call fcn.10029930
add esp, 4
push eax
lea eax, [esp + 0x18]
push str._08x
push eax
call sub.MFC42.DLL_CString::Format
mov ecx, dword [esp + 0x78]
mov edx, dword [sym.imp.MSVCP60.dll_char_const__private:_static_char_const____cdecl_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Nullstr_void_::_2::_C]
add esp, 0xc
test ecx, ecx
jne 0x10029d5f
mov ecx, edx
mov eax, dword [esp + 0x5c]
test eax, eax
jne 0x10029d69
mov eax, edx
mov edx, dword [esp + 0x14]
push eax
push 0
push edx
push ecx
call dword [sym.imp.KERNEL32.dll_GetPrivateProfileIntA]
push 0
mov edi, eax
call dword [sym.imp.MSVCRT.dll_time]
mov ecx, dword [ebp - 4]
sub eax, edi
add esp, 4
cmp eax, ecx
jbe 0x10029e15
mov ebx, dword [esp + 0x14]
push 0
call dword [sym.imp.MSVCRT.dll_time]
mov edx, eax
mov eax, dword [esp + 0x70]
add esp, 4
test eax, eax
jne 0x10029db0
mov eax, dword [sym.imp.MSVCP60.dll_char_const__private:_static_char_const____cdecl_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Nullstr_void_::_2::_C]
mov dword [esp + 0x28], eax
mov ecx, 0xf
xor eax, eax
lea edi, [esp + 0x99]
mov byte [esp + 0x98], 0
push edx
rep stosd dword es:[edi], eax
stosw word es:[edi], ax
lea ecx, [esp + 0x9c]
push 0x100530dc
push ecx
stosb byte es:[edi], al
call dword [sym.imp.USER32.dll_wsprintfA]
mov eax, dword [esp + 0x34]
add esp, 0xc
lea edx, [esp + 0x98]
lea ecx, [esp + 0x58]
push edx
push ebx
push eax
call fcn.1002a150
mov ecx, dword [esp + 0x1c]
push ebp
lea edx, [esp + 0x28]
push ecx
push edx
lea ecx, [esp + 0x24]
call fcn.1002b290
mov ebx, dword [esp + 0x2c]
lea ecx, [esp + 0x14]
mov byte [esp + 0x1e4], 8
call sub.MFC42.DLL_CString::CString
push 1
lea ecx, [esp + 0x6c]
mov byte [esp + 0x1e8], 6
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 1
lea ecx, [esp + 0x5c]
call dword [sym.imp.MSVCP60.dll_private:_void___thiscall_std::basic_string_char__struct_std::char_traits_char___class_std::allocator_char__::_Tidy_bool_]
jmp 0x10029e5c
mov eax, dword [esp + 0x1c]
push ebp
lea ecx, [esp + 0x34]
push eax
push ecx
lea ecx, [esp + 0x24]
call fcn.1002b290
mov edx, dword [esp + 0x3c]
add ebx, 0x1c
add ebp, 0x1c
mov dword [esp + 0x2c], ebx
cmp ebx, dword [edx]
jne 0x10029b7b
lea eax, [esp + 0x18]
push 1
push eax
call fcn.1002e810
mov eax, dword [esp + 0x24]
add esp, 8
mov byte [esp + 0x1e4], 4
mov ecx, dword [eax]
push eax
push ecx
lea ecx, [esp + 0x38]
push ecx
lea ecx, [esp + 0x24]
call fcn.1001cec0
mov edx, dword [esp + 0x1c]
push edx
call sub.MFC42.DLL_operatordelete
mov esi, dword [esp + 0x44]
mov edi, dword [esp + 0x50]
xor eax, eax
add esp, 4
mov dword [esp + 0x1c], eax
mov dword [esp + 0x20], eax
xor ebx, ebx
mov eax, dword [esi + 0x20]
mov ecx, dword [esp + 0x44]
mov byte [esp + 0x1e4], 0
lea eax, [eax + eax*4]
lea esi, [eax + eax*4]
lea esi, [esi + esi*4]
shl esi, 3
cmp ecx, ebx
je 0x10029ee4
call fcn.1001fa80
lea eax, [esp + 0x50]
mov ecx, edi
push eax
call fcn.100220b0
mov ecx, dword [esp + 0x1ec]
sub esp, 8
mov eax, esp
mov dword [esp + 0x2c], esp
mov dword [eax], ecx
mov edx, dword [esp + 0x1f8]
mov dword [eax + 4], edx
mov eax, dword [esp + 0x1f8]
cmp eax, ebx
je 0x10029f23
add eax, 4
mov ecx, 1
lock xadd dword [eax], ecx
lea ecx, [esp + 0x58]
mov byte [esp + 0x1ec], 0xc
call fcn.1002ade0
mov ecx, eax
call fcn.10034160
mov ecx, dword [edi + 0xdc]
call fcn.10039e30
mov ecx, dword [edi + 0xdc]
push esi
call fcn.10039df0
mov ecx, dword [esp + 0x38]
cmp ecx, ebx
jle 0x10029f95
mov edx, dword [esp + 0x1ec]
sub esp, 8
mov eax, esp
mov dword [esp + 0x2c], esp
mov dword [eax], edx
mov edx, dword [esp + 0x1f8]
mov dword [eax + 4], edx
mov eax, dword [esp + 0x1f8]
cmp eax, ebx
je 0x10029f8d
add eax, 4
mov edx, 1
lock xadd dword [eax], edx
push ecx
mov ecx, edi
call fcn.100294f0
mov esi, dword [esp + 0x54]
mov byte [esp + 0x1e4], 0
cmp esi, ebx
je 0x10029fd5
lea eax, [esi + 4]
or ecx, 0xffffffff
lock xadd dword [eax], ecx
dec ecx
mov edx, ecx
test edx, edx
jne 0x10029fd5
mov eax, dword [esi]
mov ecx, esi
call dword [eax + 4]
lea ecx, [esi + 8]
or edx, 0xffffffff
lock xadd dword [ecx], edx
dec edx
mov eax, edx
test eax, eax
jne 0x10029fd5
mov edx, dword [esi]
mov ecx, esi
call dword [edx + 8]
mov esi, dword [esp + 0x1f0]
mov dword [esp + 0x1e4], 0xffffffff
cmp esi, ebx
je 0x1002a01b
lea eax, [esi + 4]
or ecx, 0xffffffff
lock xadd dword [eax], ecx
dec ecx
mov edx, ecx
test edx, edx
jne 0x1002a01b
mov eax, dword [esi]
mov ecx, esi
call dword [eax + 4]
lea ecx, [esi + 8]
or edx, 0xffffffff
lock xadd dword [ecx], edx
dec edx
mov eax, edx
test eax, eax
jne 0x1002a01b
mov edx, dword [esi]
mov ecx, esi
call dword [edx + 8]
mov ecx, dword [esp + 0x1dc]
pop edi
pop esi
pop ebp
mov dword fs:[0], ecx
pop ebx
add esp, 0x1d8
ret 8