Функция вызова с адреса - PullRequest
0 голосов
/ 05 июля 2018

у меня есть вызов функции asm

push ebx                                            | Lenght Of Buf
lea eax,dword ptr ss:[ebp]                          |
push eax                                            | Address To Write Crypted Buf
push dword ptr ss:[ebp-18]                          | Address Of Orignal Buf
mov ecx,edi                                         |
call 0x008EC40E                                     | crypter function

мне нужно вызвать эту функцию из моего Dll (C ++), введённого в target что-то подобное не работает

typedef int func(void* Source, void* Dest, int len);
func* f = (func*)(base + 0x341E38);
int i = f(Src, Dst, sizeof Dst);

Я не знаю, мой C ++ правильный или нет, поэтому, пожалуйста, помогите. Мне нужно исправить вызов C ++, после того, как я запустил этот код целевой сбой процесса

Это моя функция тела

push ebp
mov ebp,esp
xor eax,eax
cmp byte ptr ds:[ecx+C],al
je lordsco.8EC44E
cmp dword ptr ds:[ecx],eax
je lordsco.8EC44E
cmp dword ptr ss:[ebp+C],eax
je lordsco.8EC44E
cmp dword ptr ss:[ebp+8],eax
je lordsco.8EC44E
cmp dword ptr ss:[ebp+10],eax
jle lordsco.8EC44E
push 1
lea eax,dword ptr ds:[ecx+8]    
push eax
lea eax,dword ptr ds:[ecx+15]
push eax
add ecx,20
push ecx
push dword ptr ss:[ebp+10]
push dword ptr ss:[ebp+C]
push dword ptr ss:[ebp+8]
call lordsco.996560
add esp,1C
mov al,1
jmp lordsco.8EC450
xor al,al
pop ebp
ret C

и то, что IDA Pro объявляет функцию

char __thiscall CaypterFunc(int this, int a2, int a3, int a4)

И этот Func называет это func

int *__cdecl CaypterFunc2(int a1, int a2, int a3, int a4, int a5, int *a6, int a7)

Это буфер шифрования для игры перед использованием в функции отправки. поэтому мне нужно зашифровать мой пользовательский буфер и использовать его в send func

итак, что ты видишь?

1 Ответ

0 голосов
/ 05 июля 2018

Ваша подпись функции:

typedef int func(void* Source, void* Dest, int len);

Это просто неправильно, или, скорее, не подходит для функции, которую вы хотите вызвать. IDA идентифицирует это как __thiscall, так что это (скорее всего) функция-член C ++. Это означает, что вызов должен передать аргументы в стек и поместить указатель this в ecx:

push ebx                                            | Lenght Of Buf
lea eax,dword ptr ss:[ebp]                          |
push eax                                            | Address To Write Crypted Buf
push dword ptr ss:[ebp-18]                          | Address Of Orignal Buf

mov ecx,edi                                         | <<< "this" pointer set here

call 0x008EC40E     

Так что объявление C ++ будет ближе к чему-то вроде

class Something;
typedef int (Something::*func)(void* Source, void* Dest, int len);

Вам все еще нужно выяснить, что такое «что-то», или, по крайней мере, получить указатель this, по которому должна вызываться функция-член (которая в предоставленном вами коде находится в edi, но, конечно, у нас нет Идея, как он туда попал).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...