2016-03-08 2 views
0

Привет, Я в процессе демонстрации программы, и я не могу определить, для чего предназначена эта часть программы. Я понимаю, что eax - это регистр, и push eax помещает его в стек и т. Д., Но что делает push offset aTaskmgr?Нужна помощь, поясняющая следующую программу:

Объяснение было бы очень признателен.

.text:00404867 loc_404867:        ; CODE XREF: .text:00404870j 
.text:00404867     mov  cx, [eax] 
.text:0040486A     add  eax, 2 
.text:0040486D     test cx, cx 
.text:00404870     jnz  short loc_404867 
.text:00404872     sub  eax, edx 
.text:00404874     sar  eax, 1 
.text:00404876     jz  loc_404927 
.text:0040487C     lea  ecx, [esp+1389Ch] 
.text:00404883     push ecx 
.text:00404884     call __wcslwr 
.text:00404889     push offset aTaskmgr ; "taskmgr" 
.text:0040488E     push eax 
.text:0040488F     call _wcsstr 
.text:00404894     add  esp, 0Ch 
.text:00404897     test eax, eax 
.text:00404899     jnz  short loc_404917 
.text:0040489B     lea  edx, [esp+1389Ch] 
.text:004048A2     push edx 
.text:004048A3     call __wcslwr 
.text:004048A8     push offset aProcexp ; "procexp" 
.text:004048AD     push eax 
.text:004048AE     call _wcsstr 
.text:004048B3     add  esp, 0Ch 
.text:004048B6     test eax, eax 
.text:004048B8     jnz  short loc_404917 
.text:004048BA     lea  eax, [esp+1389Ch] 
.text:004048C1     push eax 
.text:004048C2     call __wcslwr 
.text:004048C7     push offset aRegedit ; "regedit" 
.text:004048CC     push eax 
.text:004048CD     call _wcsstr 
.text:004048D2     add  esp, 0Ch 
.text:004048D5     test eax, eax 
.text:004048D7     jnz  short loc_404917 
.text:004048D9     lea  ecx, [esp+1389Ch] 
.text:004048E0     push ecx 
.text:004048E1     call __wcslwr 
.text:004048E6     push offset aMsconfig ; "msconfig" 
.text:004048EB     push eax 
.text:004048EC     call _wcsstr 
.text:004048F1     add  esp, 0Ch 
.text:004048F4     test eax, eax 
.text:004048F6     jnz  short loc_404917 
.text:004048F8     lea  edx, [esp+1389Ch] 
.text:004048FF     push edx 
.text:00404900     call __wcslwr 
.text:00404905     push offset aCmd_exe ; "cmd.exe" 
.text:0040490A     push eax 
.text:0040490B     call _wcsstr 
.text:00404910     add  esp, 0Ch 
.text:00404913     test eax, eax 
.text:00404915     jz  short loc_404920 

Благодаря

+0

Похоже, что неприятный код Windows - преобразование целевой строки Unicode в нижний регистр, а затем поиск его для строк, таких как «taskmgr», «regedit» и т. Д. Может быть что-то из сканера вредоносного ПО? –

+2

Ваш дизассемблер был достаточно дружелюбен, чтобы напечатать строку как комментарий. Таким образом, 'push offset aTaskmgr' просто подталкивает адрес строки' taskmgr' в стек, в этом случае в качестве аргумента '_wcsstr'. – Jester

ответ

3

Что появляется этот кусок кода, который будет делать сначала подсчет символов в строке, ищет нулевой символ (два байта в данном случае). Это «широкая» строка, то есть 16-разрядный unicode, основанный на том факте, что каждый раз по всему циклу он умножает eax на два. Он хранит длину в eax, и пока мы не видим ее, похоже, что edx имеет указатель на начало строки. edx вычитается из eax, чтобы превратить eax из указателя в счетчик длины.

Остальная часть кода, который вы нам предоставили, использует wcsstr, которая является функцией, которая ищет одну широкую строку в другой широкой строке, возвращая местоположение, в котором оно найдено. Он проводит сравнение с различными предоставленными строками, и когда он находит соответствие, тестируя eax, чтобы узнать, отличен ли он от нуля (test eax, eax; jnz ...), он переходит к коду сразу после того, что вы нам предоставили.

Похоже, что он просматривает список процессов на основе строк, которые он сравнивает. Я уверен, что окружающий код сделает остальную часть этого яснее.

Надеюсь, это поможет.

+1

первый абзац: нулевой символ или «завершающий нуль», а не нуль * байт *. –

+0

Хороший улов, Питер. Моя вина. – querist

+0

Вы можете и должны отредактировать свой ответ, чтобы улучшить его, когда люди указывают на вещи. Я иногда просто редактирую старые ответы сам, но это более типично для SO, чтобы люди просто оставляли комментарий, как я, esp. для новых сообщений, где плакат, вероятно, все еще вокруг. Добро пожаловать в SO, BTW. :) –

Смежные вопросы