PDA

Просмотр полной версии : Реверс оконного приложения


VERte][
01.03.2010, 04:24
У меня появилось задание - реверснуть вредоносное приложение. Но я столкнулся с проблемой так как не прошарен таких вещах. Вообщем есть процедура обработки сообщений, в ней 3 ветки: WM_DESTROY, WM_CREATE, WM_TIMER
c WM_DESTROY все понятно, в WM_CREATE проверяется версия винды, вызывается функция запускающая какое-то левое приложение, и устанавливается таймер, в WM_TIMER приложение соединяется с каким-то хостом, добавляет в реестр новый ключ для какого-то приложения. Вся загвоздка в том, что у меня отладчик вылавливает только ветку WM_TIMER, минуя ветку, где таймер устанавливается. И вообще после CreateWindow отладчик вылетает на процедуре обработки сообщений, минуя цикл обработки. Соответсвенно 2 вопроса - как-так может быть, что минуется цикл обработки, и каким образом мы попадаем на ветку WM_TIMER минуя ветку установки таймера WM_CREATE?

если кому совсем интересно то приложение я взял здесь http://vx.netlux.org/vl.php?dir=Trojan-Spy.Win32.Small там взял Trojan-Spy.Win32.Small.i

fluffylion
01.03.2010, 13:43
Посмотрел файлик, скорее всего это происходит из-за того, что трой хукает обработку сообщений (с помощью функции SetWindowsHookExA):


seg025:00401584 push 0
seg025:00401586 push hCurModule
seg025:0040158C push offset GetMsgProc
seg025:00401591 push 0
seg025:00401593 call sub_401ACE

VERte][
01.03.2010, 20:23
Посмотрел файлик, скорее всего это происходит из-за того, что трой хукает обработку сообщений (с помощью функции SetWindowsHookExA):


seg025:00401584 push 0
seg025:00401586 push hCurModule
seg025:0040158C push offset GetMsgProc
seg025:00401591 push 0
seg025:00401593 call sub_401ACE


ты видимо не тот файлик посмотрел, у меня такого нету

0x0c0de
01.03.2010, 20:49
У меня нормально попадает на


004011CF |. 68 8C324000 PUSH 40328C ; /String2 = "WinNT"
004011D4 |. 68 8E374000 PUSH 40378E ; |String1 = Trojan-S.0040378E
004011D9 |. E8 F8020000 CALL 004014D6 ; \lstrcpyA
004011DE |> E8 5D010000 CALL 00401340 ; Trojan-S.00401340
004011E3 |. 6A 00 PUSH 0 ; /Timerproc = NULL
004011E5 |. FF35 D7304000 PUSH DWORD PTR DS:[4030D7] ; |Timeout = 30000. ms
004011EB |. 68 32270000 PUSH 2732 ; |TimerID = 2732 (10034.)
004011F0 |. FF75 08 PUSH DWORD PTR SS:[EBP+8] ; |hWnd
004011F3 |. E8 A8020000 CALL 004014A0 ; \SetTimer
004011F8 |. A3 A8324000 MOV DWORD PTR DS:[4032A8],EAX
004011FD |. E9 AB000000 JMP 004012AD ; Trojan-S.004012AD



Дебажу олькой...

fluffylion
01.03.2010, 20:58
[']ты видимо не тот файлик посмотрел, у меня такого нету

Хех. точно)))
я смотрел Trojan-Spy.Win32.Small.a, щас i посмотрю

VERte][
01.03.2010, 21:12
У меня нормально попадает на


004011CF |. 68 8C324000 PUSH 40328C ; /String2 = "WinNT"
004011D4 |. 68 8E374000 PUSH 40378E ; |String1 = Trojan-S.0040378E
004011D9 |. E8 F8020000 CALL 004014D6 ; \lstrcpyA
004011DE |> E8 5D010000 CALL 00401340 ; Trojan-S.00401340
004011E3 |. 6A 00 PUSH 0 ; /Timerproc = NULL
004011E5 |. FF35 D7304000 PUSH DWORD PTR DS:[4030D7] ; |Timeout = 30000. ms
004011EB |. 68 32270000 PUSH 2732 ; |TimerID = 2732 (10034.)
004011F0 |. FF75 08 PUSH DWORD PTR SS:[EBP+8] ; |hWnd
004011F3 |. E8 A8020000 CALL 004014A0 ; \SetTimer
004011F8 |. A3 A8324000 MOV DWORD PTR DS:[4032A8],EAX
004011FD |. E9 AB000000 JMP 004012AD ; Trojan-S.004012AD



Дебажу олькой...

дебажу так же олькой, не брякает ни на обычном бряке на сеттаймер например, ни когда после входа в CreateWindow ставлю бряк на всю секцию кода на доступ, вылезает сразу на функции обработки и заходит только в ветку WM_TIMER =(

вообще по сути, при вызове CreateWindow приложению должно посылаться сообщение WM_CREATE? как в этом случае происходит обработка этого сообщения? насколько я понимаю оно лежит в очереди, пока не завершится CreateWindow и мы не попадем на цикл принятия сообщений, а дольше сообщение берется из очереди и пинается функции обработки, я правильно понимаю ситуацию с WM_CREATE?

зы. Олька совсем не патченная

0x0c0de
01.03.2010, 21:28
>> при вызове CreateWindow приложению должно посылаться сообщение WM_CREATE

да

Здесь брякнись и трейси до SetTimer ...


0040117C |. C785 6CFFFFFF >MOV DWORD PTR SS:[EBP-94],94
00401186 |. 8D85 6CFFFFFF LEA EAX,DWORD PTR SS:[EBP-94]
0040118C |. 50 PUSH EAX ; /pVersionInformation
0040118D |. E8 32030000 CALL 004014C4 ; \GetVersionExA
00401192 |. 83BD 7CFFFFFF >CMP DWORD PTR SS:[EBP-84],0
00401199 |. 75 11 JNZ SHORT 004011AC ; Trojan-S.004011AC
0040119B |. 68 85324000 PUSH 403285 ; /String2 = "Win32s"
004011A0 |. 68 8E374000 PUSH 40378E ; |String1 = Trojan-S.0040378E


PS Тут не надо патчить ольку...

VERte][
01.03.2010, 21:30
>> при вызове CreateWindow приложению должно посылаться сообщение WM_CREATE

да

Здесь брякнись и трейси до SetTimer ...


0040117C |. C785 6CFFFFFF >MOV DWORD PTR SS:[EBP-94],94
00401186 |. 8D85 6CFFFFFF LEA EAX,DWORD PTR SS:[EBP-94]
0040118C |. 50 PUSH EAX ; /pVersionInformation
0040118D |. E8 32030000 CALL 004014C4 ; \GetVersionExA
00401192 |. 83BD 7CFFFFFF >CMP DWORD PTR SS:[EBP-84],0
00401199 |. 75 11 JNZ SHORT 004011AC ; Trojan-S.004011AC
0040119B |. 68 85324000 PUSH 403285 ; /String2 = "Win32s"
004011A0 |. 68 8E374000 PUSH 40378E ; |String1 = Trojan-S.0040378E


PS Тут не надо патчить ольку...

брякуюсь там где ты сказала, и на cmp msg, WM_TIMER, вылетает только на cmp. Я в замешательстве :confused:

Запускаю на вынь хр, под виртуальной машиной vmware, права администраторские, если это может иметь отношение

fluffylion
01.03.2010, 21:33
Перед WM_CREATE окну посылается еще несколько сообщений

Вот код WNdProc

text:00401149 ; =============== S U B R O U T I N E =======================================
.text:00401149
.text:00401149 ; Attributes: bp-based frame
.text:00401149
.text:00401149 ; int __stdcall sub_401149(HWND hWnd, UINT Msg, WPARAM wParam, LPARAM lParam)
.text:00401149 sub_401149 proc near ; DATA XREF: sub_401080+14o
.text:00401149
.text:00401149 VersionInformation= _OSVERSIONINFOA ptr -94h
.text:00401149 hWnd= dword ptr 8
.text:00401149 Msg= dword ptr 0Ch
.text:00401149 wParam= dword ptr 10h
.text:00401149 lParam= dword ptr 14h
.text:00401149
.text:00401149 push ebp
.text:0040114A mov ebp, esp
.text:0040114C add esp, 0FFFFFF6Ch
.text:00401152 cmp [ebp+Msg], 2
.text:00401156 jnz short loc_401172


Сообщение лежит в стеке
Вот здесь text:00401152 cmp [ebp+Msg], 2 проверяется какое сообщение поступило окну


дебажу в IDA, бряк ставлю на начало окнонной процедуры (.text:00401149), все работает

0x0c0de
01.03.2010, 21:38
>> Запускаю на вынь хр, под виртуальной машиной vmware, права администраторские, если это может иметь отношение

У меня тоже варя, вин xp sp2 и непропатченная олли...

Не понимаю, почему может WM_CREATE не работать, оно должно=\ Ось-то чистая (в смысле софт какой нелигитимный не обитает)?

http://msdn.microsoft.com/en-us/library/ms632619(VS.85).aspx

VERte][
01.03.2010, 21:53
ок, спасибо всем, косяк не опазнан, но дальнейший анализ с полученной от вас инфой думаю не вызовет особых затруднений