Сейчас на форуме: asfa, bartolomeo, hgdagon (+6 невидимых)

 eXeL@B —› Программирование —› Поиск сигнатуры на асме
Посл.ответ Сообщение


Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 05 февраля 2006 12:18 · Поправил: Hellspawn
· Личное сообщение · #1

вот собственно написал... наверное не много кривовато =\
ищется сигнатура в буфере...
если в исходном образце содержится байт FF (аналогично 55::EC)
то ищем дальше...
можно ли здесь что нит упростить??? а то мои скромные знания асма
больше ничё сделать не позволяют.... %(

asm
pushad
lea eax,@sign1
lea edx,@end
sub edx,eax <-- получаем размер сигнатуры
mov signsz,edx
mov ecx,MEMSZ <-- размер буфера
mov eax,MEMPTR <-- указатель на буфер
jmp @start
@st:
mov ecx,_ecx <-- восстанавиваем зн-я счётчика
mov eax,_eax <-- и указателя
inc eax
@start:
cmp eax,maxadd <-- данные закончились??
jae @end
cmp byte [eax],$DB <-- первый байт
je @next
inc eax
loop @start
jmp @end
@next:
mov _ecx,ecx <-- сохранили зн-я счётчика
mov _eax,eax <-- и указателя
inc eax
cmp byte [eax],$87 <-- второй байт
jne @st
dec eax
mov count,0
mov ebx,0
mov ecx,signsz <-- размер сиг-ры
lea edx,@sign1 <-- указатель на сиг-ру
@find:
cmp byte [edx],$FF <-- пропускаем если FF
je @nextb
mov bh,[edx]
mov bl,[eax]
cmp bh,bl <-- собственно сравниваем
jne @nextb
inc count <-- увеличиваем счётчик
@nextb:
inc eax
inc edx
loop @find
cmp count,8 <-- совпало хотя бы 8 байт?
jae @end
jmp @st
@sign1:
DB $DB,$87,$33,$44,$55,$66,$77,$FF,$11,$22
@end:
mov c1,eax <-- сохраняем указатель
popad
end;


-----
[nice coder and reverser]




Ранг: 162.2 (ветеран)
Активность: 0.090
Статус: Участник

Создано: 05 февраля 2006 12:32
· Личное сообщение · #2

Ты б написал как тебе оптимизировать: по скорости или по размеру.




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 05 февраля 2006 12:33 · Поправил: Hellspawn
· Личное сообщение · #3

сорри =) по скорости конечно... в принципе данный алго работает тоже шустро....
(по сравнению с тем что было до этого на дельфи) но хотелось бы выжать максимум...

-----
[nice coder and reverser]





Ранг: 1288.1 (!!!!), 273thx
Активность: 1.290
Статус: Участник

Создано: 05 февраля 2006 12:40
· Личное сообщение · #4

REPE CMPSB заюзай для сравнения. На wasm.ru люди шарят, туда бы запостил вопрос, оптимизируют влет.




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 05 февраля 2006 12:47
· Личное сообщение · #5

Ara пишет:
REPE CMPSB
хм.. ща поищу описание....
ок спасиб... пойду тама пошурую...

-----
[nice coder and reverser]




Ранг: 13.1 (новичок)
Активность: 0.040
Статус: Участник
EGOiSM FEELiNG

Создано: 05 февраля 2006 13:07 · Поправил: EGOiST
· Личное сообщение · #6

а у Неокса нельзя случаем исходник надыбать? пе-сниффер его ведь детище




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 05 февраля 2006 13:12
· Личное сообщение · #7

EGOiST пишет:
а у Неокса нельзя случаем исходник надыбать? пе-сниффер его ведь детище

да можно наверное, тока зачем? =\ хочется самому разобраться...
попробовал я команду REPE CMPSB ... хм странно она определяет конец буфера..
если пошли FF то типа хватит =\ (а в ехе их может быть много) или я не догнал...

asm
pushad
CLD
mov ESI,MEMPTR
@A20:
MOV ECX,$1 < -- сравниваем по 1 байту
LEA EDI,@55 <-- наш байт для сравнения
REPE CMPSB
JE @A30 <-- совпало?
JA @A30 <-- конец?
ADD ESI,ECX <-след элемент
JMP @A20 <-- ищем =\
@A55:
DB $DB
@A30:
popad
end;


-----
[nice coder and reverser]




Ранг: 162.2 (ветеран)
Активность: 0.090
Статус: Участник

Создано: 05 февраля 2006 14:28
· Личное сообщение · #8

Ногами прошу не пинать:
pushad
mov edx,offset @endsign - offset @sign
dec edx
lea esi,@sign
lodsb ;получаем 1-ый байт сигнатуры
mov edi,memptr
mov ebp,memz
next_str:
push esi
mov ecx,ebp
repne scasb ;ищем первый байт
jne @end ;нет 1-го байта
mov ebp,ecx
mov first_sym,edi
mov ecx,edx
next_sym:
repe cmpsb ;сравниваем остальную сигнатуру
je @end1
cmp byte ptr [esi-1],0ffh ;если наткнулись на ff
je next_sym
add ebp,ecx
sub ebp,edx
add ecx,7
cmp ecx,edx
jb @end1 ;если совпало 8 или болбше
pop esi
jmp next_str
@end1:
mov eax,first_sym
dec eax
mov c1,eax
@end:
pop esi
popad
@sign:
DB 55h,066h,077h,0FFh,099h,011h,022h,033h,044h
@endsign:




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 06 февраля 2006 21:53 · Поправил: Hellspawn
· Личное сообщение · #9

asd пишет:
Ногами прошу не пинать:

да нет =) не получится =) вообще код ничё... основной принцип я понял
repne scasb рулит.. её и буду узать...
а терь пара пинков...
mov ebp,memz <-- ну зачем в регистр ебп что то пихать???
ведь потом любое обращение к переменной, например: mov first_sym,edi - будет
ошибкой... так как переменная - это [ebp-$XX] ... так что вот...
а вообще сенкс... поправлю и будет ок...

-----
[nice coder and reverser]




Ранг: 162.2 (ветеран)
Активность: 0.090
Статус: Участник

Создано: 06 февраля 2006 22:22 · Поправил: asd
· Личное сообщение · #10

Hellspawn
mov ebp,memz <-- ну зачем в регистр ебп что то пихать???

если first_sym локальная переменная,то да.
Если её сделать глобальной, то команды типа:
add memz,ecx
sub memz,edx
заменяются на более быстрые
add ebp,ecx
sub ebp,edx
а т.к. всё это в цикле, то можно существенно выграть




Ранг: 990.2 (! ! !), 380thx
Активность: 0.680
Статус: Модератор
Author of DiE

Создано: 07 февраля 2006 13:04
· Личное сообщение · #11

asd пишет:
если first_sym локальная переменная,то да.

всё исправил... не знал просто...
и ещё пара моментов...
@end1 и @end всё таки нуно в самый конец переместить...
а то сигнатура будет выполняться +)
и в своём коде я увидел ошибку... с1 будет указывать на конец
сигны в файле... (но мне это не важно... главное её наличие)
а вообще твой код кулл... терь осталость только добавлять сигны
чуть его переделаю, чтоб универсальным был...

-----
[nice coder and reverser]



 eXeL@B —› Программирование —› Поиск сигнатуры на асме
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати