我需要帮助理解这个函数(sub_59E1F0),这是函数本身:
sub_59E1F0 proc near
var_50C= dword ptr -50Ch
var_508= dword ptr -508h
var_504= dword ptr -504h
var_500= dword ptr -500h
var_4FC= dword ptr -4FCh
var_4F8= dword ptr -4F8h
var_4F4= dword ptr -4F4h
var_4F0= dword ptr -4F0h
var_4EC= dword ptr -4ECh
var_4E8= dword ptr -4E8h
var_4E4= dword ptr -4E4h
var_4E0= dword ptr -4E0h
var_4CD= byte ptr -4CDh
var_224= dword ptr -224h
var_21B= byte ptr -21Bh
var_1F4= dword ptr -1F4h
var_1C4= dword ptr -1C4h
alpha= dword ptr -18Ch
var_128= dword ptr -128h
var_124= dword ptr -124h
var_120= dword ptr -120h
var_C= dword ptr -0Ch
var_4= dword ptr -4
arg_0= dword ptr 4
arg_4= dword ptr 8
arg_8= dword ptr 0Ch
arg_C= dword ptr 10h
arg_10= dword ptr 14h
arg_14= dword ptr 18h
arg_18= byte ptr 1Ch
push 0FFFFFFFFh
push offset loc_876A22
mov eax, large fs:0
push eax
mov large fs:0, esp
sub esp, 500h
mov eax, [esp+50Ch+arg_10]
push ebx
push ebp
mov ebp, [esp+514h+arg_4]
fld dword ptr [eax]
fsub flt_809F104
push esi
push edi
mov edi, ebp
xor ebx, ebx
sar edi, 3
fstp [esp+51Ch+var_4F8]
fld dword ptr [eax+4]
fsub flt_809F108
and edi, 0Fh
fstp [esp+51Ch+var_4F4]
fld dword ptr [eax+8]
fsub flt_809F10C
cmp [esp+51Ch+arg_18], bl
fstp [esp+51Ch+var_4F0]
jz short loc_59E267
然后,这是对函数的调用:
mov edx, [esp+1Ch+var_10]
mov ecx, [esp+1Ch+arg_1C]
and edx, 0FFh
push ebx
lea eax, [esp+20h+var_C]
push edx
mov edx, [esp+24h+arg_18]
push eax
push ecx
push edx
push edi
push 23B5h
call sub_59E1F0
add esp, 1Ch
pop edi
pop esi
pop ebx
add esp, 10h
retn
我在 ASM、调试或逆向工程方面很糟糕.. 但据我所知,函数中应该有 7 个参数,其中 6 个是 DWORD(所以是某种数字),一个是 BYTE,所以我假设那可能是一个布尔值。
所以我尝试使用这样的函数,比如 function(int, int, int, int, int, int, bool) 或将 int 替换为 DWORDS 或全部替换为 DWORDS,但它不起作用(应用程序崩溃)。
所以我现在正试图挂断电话,看看实际发送了什么......但我似乎也无法捕捉到正确数量的数据......
我不是专家(显然),但是对于我在该函数调用示例中可以看到的内容,只有 4 个参数,或者可能只有 2 个?也许2个阵列?(因为 var_10、arg_1C、var_C 和 arg_18)。
你们能帮我理解我在这里看什么吗?:)
编辑:这是 IDA 图表上的下一个内容:
lea eax, [esp+51Ch+var_508]
lea ecx, [esp+51Ch+var_4F8]
push eax
push ecx
push 3D8F5C29h
jmp short loc_59E276
//
loc_59E267:
lea edx, [esp+51Ch+var_508]
lea eax, [esp+51Ch+var_4F8]
push edx
push eax
push 3DCCCCCDh
//
loc_59E276:
push offset flt_809F104
call sub_6BC5EE
mov esi, [esp+52Ch+arg_0]
mov ecx, [esp+52Ch+arg_14]
add esp, 10h
cmp esi, 342h
jnz short loc_59E2D8