Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler, MASM, TASM
Войти
Регистрация
Восстановить пароль
 
darksector
-5 / 4 / 4
Регистрация: 05.05.2013
Сообщений: 296
1

Узнать все переменные передающие в функцию

03.04.2015, 13:51. Просмотров 412. Ответов 1
Метки нет (Все метки)

Как узнать все переменные передающие в функцию? Многие для этого используют IDA + HexRay для примерного определения, но данные расходятся.
Например: моя IDA Version 6.6.140604 (32-bit) + Hex-Rays SA 2.0.0.140604 показывает такое
Кликните здесь для просмотра всего текста
Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
006EC354 sub_6EC354      proc near               ; CODE XREF: sub_6ED0FA+CBp
.text:006EC354                                         ; sub_6ED1F9+29Fp ...
.text:006EC354
.text:006EC354 var_28          = dword ptr -28h
.text:006EC354 var_18          = byte ptr -18h
.text:006EC354 var_C           = byte ptr -0Ch
.text:006EC354 arg_0           = byte ptr  8
.text:006EC354 arg_4           = byte ptr  0Ch
.text:006EC354
.text:006EC354                 push    ebp
.text:006EC355                 mov     ebp, esp
.text:006EC357                 sub     esp, 18h
.text:006EC35A                 push    esi
.text:006EC35B                 mov     esi, ecx
.text:006EC35D                 call    sub_6E9BD2
.text:006EC362                 test    al, al
.text:006EC364                 jz      loc_6EC43A
.text:006EC36A                 cmp     CTM_type, 3
.text:006EC371                 jnz     short loc_6EC381
.text:006EC373                 push    0
.text:006EC375                 push    105h
.text:006EC37A                 call    sub_428A79
.text:006EC37F                 pop     ecx
.text:006EC380                 pop     ecx
.text:006EC381
.text:006EC381 loc_6EC381:                             ; CODE XREF: sub_6EC354+1Dj
.text:006EC381                 push    ebx
.text:006EC382                 push    edi
.text:006EC383                 call    sub_41C290
.text:006EC388                 cmp     [ebp+arg_0], 0
.text:006EC38C                 mov     ebx, eax
.text:006EC38E                 mov     edi, offset dword_11D0CD0
.text:006EC393                 jz      short loc_6EC3DD
.text:006EC395                 push    48DAh
.text:006EC39A                 push    offset aUnit_c_cpp ; "Unit_C.cpp"
.text:006EC39F                 push    1
.text:006EC3A1                 push    edi
.text:006EC3A2                 call    sub_6680E0
.text:006EC3A7                 add     esp, 10h
.text:006EC3AA                 test    eax, eax
.text:006EC3AC                 jz      short loc_6EC3DD
.text:006EC3AE                 mov     edx, [eax]
.text:006EC3B0                 lea     ecx, [ebp+var_C]
.text:006EC3B3                 push    ecx
.text:006EC3B4                 mov     ecx, eax
.. порезал спец

HexRay
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int __thiscall sub_6EC354(void *this, char a2, char a3)
{
  void *v3; // esi@1
  int result; // eax@1
  int v5; // ebx@4
  int v6; // eax@6
  int v7; // eax@6
  float v8; // ST0C_4@6
  char *v9; // edi@11
  char v10; // [sp+18h] [bp-18h]@6
  char v11; // [sp+24h] [bp-Ch]@6
 
  v3 = this;
  result = sub_6E9BD2();
  if ( (_BYTE)result )
  {
    if ( CTM_type == 3 )
..//ит.д.
}

Т.е. 1 указатель и 2 переменных типа char. Но вот, что показывает у других людей: Ida [неизвестно] + hexrey 1.1
Кликните здесь для просмотра всего текста

Assembler
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
.text:006939F0     ; =============== S U B R O U T I N E =======================================
.text:006939F0
.text:006939F0     ; Attributes: bp-based frame
.text:006939F0
.text:006939F0     ; char __usercall ClickToMove__GetInteractDistanceOfAction<al>(WGUID *guid<eax>, CLICKTOMOVETYPE ctmType<edx>, WoWUnit *unit<ebx>, float *pInteractDistance<edi>)
.text:006939F0     ClickToMove__GetInteractDistanceOfAction proc near
.text:006939F0                                             ; CODE XREF: CGPlayer_C__ClickToMove+93p
.text:006939F0
.text:006939F0     var_8           = byte ptr -8
.text:006939F0     var_4           = dword ptr -4
.text:006939F0
.text:006939F0 000                 push    ebp
.text:006939F1 004                 mov     ebp, esp
.text:006939F3 004                 lea     ecx, [edx+edx*2] ; Load Effective Address
.text:006939F6 004                 add     ecx, ecx        ; Add
.text:006939F8 004                 add     ecx, ecx        ; Add
.text:006939FA 004                 sub     esp, 8          ; Integer Subtraction
.text:006939FD 00C                 cmp     byte_1051E08[ecx], 0 ; Compare Two Operands
.text:00693A04 00C                 jz      loc_693B81      ; Jump if Zero (ZF=1)
.text:00693A04
.text:00693A0A 00C                 cmp     byte ptr stru_1051E11.anonymous_0[ecx], 0 ; Compare Two Operands
.text:00693A11 00C                 jnz     loc_693B81      ; Jump if Not Zero (ZF=0)
.text:00693A11
.text:00693A17 00C                 lea     ecx, [edx-3]    ; Load Effective Address
.text:00693A1A 00C                 cmp     ecx, 8          ; switch 9 cases
.text:00693A1D 00C                 push    esi
.text:00693A1E 010                 ja      loc_693B7A      ; default
.text:00693A1E                                             ; jumptable 00693A24 case 5
.text:00693A1E
.text:00693A24 010                 jmp     ds:off_693B88[ecx*4] ; switch jump
.text:00693A24
.text:00693A2B
.text:00693A2B     loc_693A2B:                             ; DATA XREF: .text:off_693B88o
.text:00693A2B 010                 mov     ecx, [eax+4]    ; jumptable 00693A24 case 2
.text:00693A2E 010                 mov     edx, [eax]
.text:00693A30 010                 push    492Dh
.text:00693A35 014                 push    offset a_Unit_c_cpp ; ".\\Unit_C.cpp"
.text:00693A3A 018                 push    8               ; filter
.text:00693A3C 01C                 push    ecx
.text:00693A3D 020                 push    edx             ; guid
.text:00693A3E 024                 call    ClntObjMgrObjectPtr ; Call Procedure
.text:00693A3E
.text:00693A43 024                 add     esp, 14h        ; Add
.text:00693A46 010                 test    eax, eax        ; Logical Compare
.text:00693A48 010                 jz      short loc_693A6D ; Jump if Zero (ZF=1)
.text:00693A48
.text:00693A4A 010                 mov     eax, [eax+0D0h]
.text:00693A50 010                 fld     dword ptr [eax+0ECh] ; Load Real
.text:00693A56 010                 mov     al, 1
.text:00693A58 010                 fmul    ds:flt_9A2D6C   ; Multiply Real
.text:00693A5E 010                 pop     esi
.text:00693A5F 00C                 fadd    ds:flt_9A0DA0   ; Add Real
.text:00693A65 00C                 fmul    st, st          ; Multiply Real
.text:00693A67 00C                 fstp    dword ptr [edi] ; Store Real and Pop
.text:00693A69 00C                 mov     esp, ebp
.text:00693A6B 004                 pop     ebp
.text:00693A6C 000                 retn                    ; Return Near from Procedure
.text:00693A6C
.text:00693A6D     ; ---------------------------------------------------------------------------
.text:00693A6D
.text:00693A6D     loc_693A6D:                             ; CODE XREF: ClickToMove__GetInteractDistanceOfAction+58j
.text:00693A6D 010                 fld     flt_12979B8     ; Load Real
.text:00693A73 010                 mov     al, 1
.text:00693A75 010                 fstp    dword ptr [edi] ; Store Real and Pop
.text:00693A77 010                 pop     esi
.text:00693A78 00C                 mov     esp, ebp
.text:00693A7A 004                 pop     ebp
.text:00693A7B 000                 retn                    ; Return Near from Procedure
.text:00693A7B
.text:00693A7C     ; ---------------------------------------------------------------------------
.text:00693A7C
.text:00693A7C     loc_693A7C:                             ; CODE XREF: ClickToMove__GetInteractDistanceOfAction+34j
.text:00693A7C                                             ; DATA XREF: .text:off_693B88o
.text:00693A7C 010                 fld     flt_1051E00     ; jumptable 00693A24 case 1
.text:00693A82 010                 mov     al, 1
.text:00693A84 010                 fstp    dword ptr [edi] ; Store Real and Pop
.text:00693A86 010                 pop     esi
.text:00693A87 00C                 mov     esp, ebp
.text:00693A89 004                 pop     ebp
.text:00693A8A 000                 retn                    ; Return Near from Procedure
.text:00693A8A
.text:00693A8B     ; ---------------------------------------------------------------------------
.text:00693A8B
.text:00693A8B     loc_693A8B:                             ; CODE XREF: ClickToMove__GetInteractDistanceOfAction+34j
.text:00693A8B                                             ; DATA XREF: .text:off_693B88o
.text:00693A8B 010                 fld     flt_1051DF4     ; jumptable 00693A24 case 0
.text:00693A91 010                 mov     al, 1
.text:00693A93 010                 fstp    dword ptr [edi] ; Store Real and Pop
.text:00693A95 010                 pop     esi
.text:00693A96 00C                 mov     esp, ebp
.text:00693A98 004                 pop     ebp
.text:00693A99 000                 retn                    ; Return Near from Procedure
.text:00693A99
.text:00693A9A     ; ---------------------------------------------------------------------------
.text:00693A9A
.text:00693A9A     loc_693A9A:                             ; CODE XREF: ClickToMove__GetInteractDistanceOfAction+34j
.text:00693A9A                                             ; DATA XREF: .text:off_693B88o
.text:00693A9A 010                 mov     ecx, [eax+4]    ; jumptable 00693A24 cases 3,7
.text:00693A9D 010                 mov     edx, [eax]
.text:00693A9F 010                 push    493Fh
.text:00693AA4 014                 push    offset a_Unit_c_cpp ; ".\\Unit_C.cpp"
.text:00693AA9 018                 push    8               ; filter
.text:00693AAB 01C                 push    ecx
.text:00693AAC 020                 push    edx             ; guid
.text:00693AAD 024                 call    ClntObjMgrObjectPtr ; Call Procedure
.text:00693AAD
.text:00693AB2 024                 add     esp, 14h        ; Add
.text:00693AB5 010                 test    eax, eax        ; Logical Compare
.text:00693AB7 010                 jz      short loc_693AD2 ; Jump if Zero (ZF=1)
.text:00693AB7
.text:00693AB9 010                 push    eax
.text:00693ABA 014                 mov     ecx, ebx
.text:00693ABC 014                 call    sub_649920      ; Call Procedure
.text:00693ABC
.text:00693AC1 010                 fsub    ds:flt_9E65B4   ; Subtract Real
.text:00693AC7 010                 mov     al, 1
.text:00693AC9 010                 pop     esi
.text:00693ACA 00C                 fmul    st, st          ; Multiply Real
.text:00693ACC 00C                 fstp    dword ptr [edi] ; Store Real and Pop
.text:00693ACE 00C                 mov     esp, ebp
.text:00693AD0 004                 pop     ebp
.text:00693AD1 000                 retn                    ; Return Near from Procedure
.text:00693AD1
.text:00693AD2     ; ---------------------------------------------------------------------------
.text:00693AD2
.text:00693AD2     loc_693AD2:                             ; CODE XREF: ClickToMove__GetInteractDistanceOfAction+C7j
.text:00693AD2 010                 fld     ds:flt_9A78EC   ; Load Real
.text:00693AD8 010                 mov     al, 1
.text:00693ADA 010                 fmul    st, st          ; Multiply Real
.text:00693ADC 010                 pop     esi
.text:00693ADD 00C                 fstp    dword ptr [edi] ; Store Real and Pop
.text:00693ADF 00C                 mov     esp, ebp
.text:00693AE1 004                 pop     ebp
.text:00693AE2 000                 retn                    ; Return Near from Procedure
.text:00693AE2
.text:00693AE3     ; ---------------------------------------------------------------------------
.text:00693AE3
.text:00693AE3     loc_693AE3:                             ; CODE XREF: ClickToMove__GetInteractDistanceOfAction+34j
.text:00693AE3                                             ; DATA XREF: .text:off_693B88o
.text:00693AE3 010                 mov     ecx, [eax+4]    ; jumptable 00693A24 case 8
.. проезал спец.

и hexray C++
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
char __usercall ClickToMove__GetInteractDistanceOfAction<al>(WGUID *guid<eax>, CLICKTOMOVETYPE ctmType<edx>, WoWUnit *unit<ebx>, float *pInteractDistance<edi>)
{
  WoWUnit *v4; // eax@4
  char result; // al@5
  WoWObject *v6; // eax@9
  WoWObject *v7; // eax@12
  int v8; // ST04_4@13
  char *v9; // ST08_4@13
  int *v10; // ST0C_4@13
  WoWObject *v11; // ST10_4@13
  WoWObject *v12; // eax@15
  WoWObject *v13; // esi@15
  int v14; // eax@16
  int v16; // [sp+4h] [bp-4h]@13
  char v17; // [sp+0h] [bp-8h]@13
 
  if ( !byte_1051E08[12 * ctmType] || stru_1051E11[12 * ctmType] )
  {
    result = 1;
  }
  else
  {
    switch ( ctmType )
    { ... // и т.д.
}

или у другого даже так:
hexrey
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
char __usercall WoWClickToMove__GetInteractDistanceOfAction<al>(int a1<eax>, int a2<edx>, int a3<ebx>, int a4<edi>)
{
  int v4; // eax@4
  char result; // al@5
  double v6; // st7@5
  int v7; // eax@9
  double v8; // st7@10
  int v9; // eax@12
  int v10; // eax@15
  int v11; // esi@15
  int v12; // eax@16
  int v13; // [sp-14h] [bp-1Ch]@13
  char *v14; // [sp-10h] [bp-18h]@13
  float *v15; // [sp-Ch] [bp-14h]@13
  int v16; // [sp-8h] [bp-10h]@13
  char v17; // [sp+0h] [bp-8h]@13
  float v18; // [sp+4h] [bp-4h]@13
 
  if ( !byte_1051E08[12 * a2] || byte_1051E11[12 * a2] )
  {
    result = 1;
  }
  else
  {
    switch ( a2 )
    {..//и т.д.
}

НО! Все определили (как-то) и вызывают функцию использовав CLR inject и объявив как:
на С++
C++
1
BOOL __thiscall CGPlayer_C__ClickToMove(WoWActivePlayer *this, CLICKTOMOVETYPE clickType, WGUID *interactGuid, WOWPOS *clickPos, float precision)
на С#
C#
1
2
3
[UnmanagedFunctionPointer(CallingConvention.ThisCall)]
        public delegate bool CGPlayer_C__ClickToMove(IntPtr pObject, int ClickToMoveType, IntPtr pGuid, IntPtr pClickPosition, float Precision);
        public static CGPlayer_C__ClickToMove _ClickToMove;
И собственно вопрос? Как определить входящие в функцию переменные?
PS: у меня только самые базовые познания в ассемблере, но и то не знаю какие флаги и в каких регистрах происходит результат при операциях.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.04.2015, 13:51
Ответы с готовыми решениями:

Узнать переменные равные 0?
Доброе время суток всем, у меня возник такой вопрос, я получаю ассоциативный...

Узнать переменные заголовков и содержимого Livejournal
Как узнать переменные заголовков и содержимого записи Livejournal? Только не...

Как узнать внутренние переменные windows?
Как узнать внутренние переменные windows например path

Надо вывести ВСЕ существующие переменные session и все поля из формы.
Надо вывести ВСЕ существующие переменные session и все поля из формы. ...

Символьные переменные. Узнать, есть ли введенное слово в предложении
Ввести предложение. Затем с клавиатуры запросить слово слово.Узнать, есть ли...

1
NoNaMe
EkdezMK7
Эксперт по компьютерным сетям
668 / 317 / 52
Регистрация: 10.06.2009
Сообщений: 1,417
05.04.2015, 13:02 2
Выше у людей оказалась дебаг информация в релизе. ; Что позволяет хорошо изучать работу приложения
Ида занесла в PDB дебаг информацию. Вот от туда и появились оригинальные имена функций.
Мелкософт про thiscall
Цитата Сообщение от darksector Посмотреть сообщение
Как определить входящие в функцию переменные?
Я не понял это приложение! Запятой где-то явно не хватает, перечитал раза 4
Той-же идой можно сдампить для конкретного случия переменные, если они статические. Или написать ещё 3-4 иньекции, для динамического их получения.
p.s. Реверсия штука тонкая. Серых Шляпников.
По данному эксплойту вам виднее.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.04.2015, 13:02

Хочу узнать больше про переменные со сроком действия
вот мой код. сейчас читаю тему про переменные внутри блока кода в данном случае...

Передать переменные в функцию
Здравствуйте. Есть сценарий: function template($tpl, $template) ...

Как передаются переменные в функцию?
Форма: $object=new user; if (isset($_POST)){ $login=$_POST; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru