Сейчас на форуме: rtsgreg1989, zds, _MBK_ (+5 невидимых)

 eXeL@B —› Основной форум —› Лоадер не тормозит прогу. Почему?
. 1 . 2 . >>
Посл.ответ Сообщение

Ранг: 138.7 (ветеран), 135thx
Активность: 0.110
Статус: Участник

Создано: 05 сентября 2007 11:53
· Личное сообщение · #1

Есть прога накрытая StarForce v.3.4.49.1 Сделал лоадер, тормознул на OEP, дамп, импорт и все ОК, старфос отломан. Вышла новая версия проги. Версия стара 3.4.76.0 Опять делаю лоадер, но прога на OEP не тормозитцо, а запускается. Аттачусь к проге, смотрю на OEP байты EBFEh, т.е. прога в памяти пропатчена, а не тормозится Впечатление такое, что прога проскакивает OEP до пропатчивания.
Может кто-нить че посоветует
OEP нашел 100% Прога на делфях. Вот исходник лодера
.486
.model flat, stdcall
option casemap :none

include \masm32\include\windows.inc
include \masm32\include\masm32.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc

includelib \masm32\lib\masm32.lib
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib

.data
hWnd dd 0

App db "Error",0
Err1 db "Program not found ",0
prog db "C:\Program Files\AD\AD.exe",0

bufwr DWORD 0EBh
bufwr1 DWORD 0FEh

va DWORD 0074E03Ch
va1 DWORD 0074E03Dh


.data?
bufr dw ?
pinfo PROCESS_INFORMATION <>
sinfo STARTUPINFO <>
n DWORD ?

.code

start:

invoke CreateProcess,addr prog,NULL,NULL,NULL,FALSE,NULL,NULL,NULL,addr sinfo,addr pinfo

.IF eax == 0
invoke MessageBox,NULL,addr Err1,addr App,MB_OK
invoke ExitProcess,0
.ENDIF
.WHILE TRUE
invoke ReadProcessMemory,pinfo.hProcess,va,addr bufr,1,n
.IF eax != 0
.IF bufr == 055h
invoke SuspendThread,addr pinfo.hThread
invoke WriteProcessMemory,pinfo.hProcess,va,addr bufwr,1,n
invoke WriteProcessMemory,pinfo.hProcess,va1,addr bufwr1,1,n
invoke ResumeThread,addr pinfo.hThread
invoke CloseHandle,pinfo.hThread
invoke ExitProcess,0
.ENDIF
.ENDIF
.ENDW

end start




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 05 сентября 2007 12:09
· Личное сообщение · #2

Конечно, метод не фонтан просто брать и читать. Вполне может и проскочить, ибо синхронизация вообще отсутствует как таковая. Как вариант-подними приоритет лоадера, будет чаще читать, меньше вероятность, что проскочит. А в идеале-надо ставить бряки на функи какие-нить и синхронизировать.



Ранг: 138.7 (ветеран), 135thx
Активность: 0.110
Статус: Участник

Создано: 05 сентября 2007 12:19
· Личное сообщение · #3

Archer пишет:
Как вариант-подними приоритет лоадера

Как это можно реализовать. Подскажи




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

Создано: 05 сентября 2007 12:22
· Личное сообщение · #4

нда, удивительно, что первый раз такое сработало. Я бы на твоем месте сделал бы перехват какой-нибудь функи (VirtualAlloc, LoadLibraryA и т.д.) а в перехвате уже проверял значение и патчил. Это конечно намного сложнее способ чем у тебя, но зато более стабильный. Я все проты таким способом и патчу.



Ранг: 138.7 (ветеран), 135thx
Активность: 0.110
Статус: Участник

Создано: 05 сентября 2007 12:50
· Личное сообщение · #5

seeq пишет:
сделал бы перехват какой-нибудь функи

Если я в лоадере перехвачу API функцию, то в запускаемой проге эта ф-ия тоже будет перехвачена?
По моему нет.
С протами я тоже так поступаю т.к. там один процесс. А тут два лодырь и сама прога




Ранг: 392.8 (мудрец), 108thx
Активность: 0.260.01
Статус: Участник
REVENGE сила, БеХоЦе могила

Создано: 05 сентября 2007 12:56
· Личное сообщение · #6

crc1 можетбыть глупость говорю, не знаю как на это среагирует StarForce, может стоить попробовать просто поставить бряк под отладчиком на ОЕП?

-----
StarForce и Themida ацтой!




Ранг: 138.7 (ветеран), 135thx
Активность: 0.110
Статус: Участник

Создано: 05 сентября 2007 13:12
· Личное сообщение · #7

Maximus пишет:
как на это среагирует StarForce

Синим экраном




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 05 сентября 2007 13:12
· Личное сообщение · #8

crc1
Приоритет может поменять, например, виндовый taskmgr. З.Ы. Приоритет реального времени лучше не задавать.
Ясен пень, если ты лоадером похукаешь функу в СВОЁМ процессе, на процессе стара это не скажется. Хукать надо в его процессе.



Ранг: 138.7 (ветеран), 135thx
Активность: 0.110
Статус: Участник

Создано: 05 сентября 2007 13:30
· Личное сообщение · #9

taskmgr'ом не получается. После следующей загрузки у лоадера снова приоритет средний. Возможно это программно реализовать?

Archer пишет:
Хукать надо в его процессе.

Научи как это сделать из лоадера. К примеру можно GetModuleHandleA




Ранг: 271.6 (наставник), 2thx
Активность: 0.30
Статус: Участник

Создано: 05 сентября 2007 13:50
· Личное сообщение · #10

crc1
На дельфиворлд было, как приоритет в своей проге поднять.

-----
iNTERNATiONAL CoDE CReW




Ранг: 11.7 (новичок)
Активность: 0=0
Статус: Участник

Создано: 05 сентября 2007 14:08
· Личное сообщение · #11

@ crc1
Странно, что у тебя в первый раз получилось.
Попробуй так, может повезет опять.
Но лучше делать по науке.

invoke SetThreadPriority,addr pinfo.hThread,THREAD_PRIORITY_LOWEST
.WHILE TRUE
invoke SuspendThread,addr pinfo.hThread
invoke ReadProcessMemory,pinfo.hProcess,va,addr bufr,1,n
.IF eax != 0
.IF bufr == 055h
invoke WriteProcessMemory,pinfo.hProcess,va,addr bufwr,1,n
invoke WriteProcessMemory,pinfo.hProcess,va1,addr bufwr1,1,n
invoke ResumeThread,addr pinfo.hThread
invoke CloseHandle,pinfo.hThread
invoke ExitProcess,0
.ENDIF
.ENDIF
invoke ResumeThread,addr pinfo.hThread
.ENDW




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

Создано: 05 сентября 2007 14:09
· Личное сообщение · #12

crc1 пишет:
bufwr DWORD 0EBh
bufwr1 DWORD 0FEh


crc1 пишет:
va DWORD 0074E03Ch
va1 DWORD 0074E03Dh

+2 раза WriteProcessMemory

Че это вообще за изврат такой?




Ранг: 104.9 (ветеран), 46thx
Активность: 0.040.02
Статус: Участник

Создано: 05 сентября 2007 14:20
· Личное сообщение · #13

crc1 пишет:
Archer пишет:
Хукать надо в его процессе.
Научи как это сделать из лоадера. К примеру можно GetModuleHandleA


присоединяюсь к вопросу



Ранг: 138.7 (ветеран), 135thx
Активность: 0.110
Статус: Участник

Создано: 05 сентября 2007 15:34
· Личное сообщение · #14

Krek пишет:
Странно, что у тебя в первый раз получилось.

На версии StarForce v.3.4.49.1 получается постоянно
Krek пишет:
Попробуй так, может повезет опять.

Не тормозит




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 05 сентября 2007 15:36
· Личное сообщение · #15

Конечно, при следущей загрузке лоадера будет дефолтный приоритет. Как вариант-можешь его менять сразу из лоадера. Точного кода под рукой нет, но уверен, что гугл и дофига сайтов по программированию это знают.
Насчёт лоадеров-также кода под рукой нет, посмотри примеры других лоадеров, статейки почитай, типа статеек по трейсерам у ARTeam. Если кратко, то процесс дебажиццо фактически твоим лоадером и в нужный момент меняет память.



Ранг: 29.2 (посетитель)
Активность: 0.010
Статус: Участник

Создано: 05 сентября 2007 19:25
· Личное сообщение · #16

~~ в лоадере для одной ботвы (написан на VS2005 C++) применил такой алгоритм :
читаем необходимые байты до тех пор, пока они не станут такие, какие должны быть, затем РайтПроцессМемори + плюс сразу читаем эту мемори - такая как нам надо ? ок, выход, нет - пишем опять +
после РайтПроцессМемори вызов ГетЛастЕррор для контроля + все это в консольной версии с выводом
ретурнВалуе от ГетЛастЕррора и выводом прочитанных и вписанных байтов - этакая отладка визуальная...
.... тк написана на С++ и успевает вписать - то Резум и Саспент убрал, а у тебя на дельфине, то код на
АССЕМБЛЕРЕ успее 100% !!! ... кстати, может защита проверяет участок кода и есть резон писать теда до
тех пор, пока он не пройдет через EIP ?



Ранг: 28.0 (посетитель)
Активность: 0.020
Статус: Участник
anarchist

Создано: 05 сентября 2007 20:35
· Личное сообщение · #17

а не пробывал запускать процес суспенденым, а не суспендить его потом?




Ранг: 283.6 (наставник), 56thx
Активность: 0.130
Статус: Участник
Author of GeTaOEP

Создано: 05 сентября 2007 21:01
· Личное сообщение · #18

vins пишет:
а не пробывал запускать процес суспенденым, а не суспендить его потом?

...это,во-первых.

А во-вторых лучше действительно перехватывать функции в исследуемом процессе,например,ту же GetModuleHandleA.Перехватывать методом внедрения своей библиотеки,а потом из этой библиотеки сплайсить функции.Почитать можно например тут:
www.xakep.ru/post/28092/default.asp?print=true
...смотри тот раздел,что "Внедрение DLL, находящейся на диске".

Приложу исходник с моей программкой для перехвата функции GetModuleHandleA, чтобы остановиться чуть ниже OEP.Не знаю правда как это будет работать со старом,но с седьмым Securom'ом работает.В общем,смотри исходник(MASM32) и заодно потестишь


fabc_05.09.2007_CRACKLAB.rU.tgz - GetApproxOEP.rar

-----
the Power of Reversing team




Ранг: 62.3 (постоянный)
Активность: 0.020
Статус: Участник

Создано: 06 сентября 2007 05:58
· Личное сообщение · #19

vins пишет:
а не пробывал запускать процес суспенденым, а не суспендить его потом?


Иногда из за не понятных бубнов writeprocessmemory веозвращает 229 ошибку по гетластэррор "Функция выполнена не полностью" если суспенденым сразу запускать.




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 06 сентября 2007 10:07
· Личное сообщение · #20

Faza если перед этем VirtualProtectEx юзать то всё будет ОК

-----
Yann Tiersen best and do not fuck




Ранг: 138.7 (ветеран), 135thx
Активность: 0.110
Статус: Участник

Создано: 06 сентября 2007 11:29
· Личное сообщение · #21

Суспендить процесс сразу, результата не дал. Прга запускается
DillerInc пишет:
Приложу исходник с моей программкой

Greatest thanks
Все работает Прога тормозит сразу за вызовом GetModuleHandleA



Ранг: 2.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 06 сентября 2007 11:41
· Личное сообщение · #22

Есть похожая проблема, только с dll. Есть упакованная дллка, знаю ОЕР, как тормознуть лоадером?



Ранг: 28.0 (посетитель)
Активность: 0.020
Статус: Участник
anarchist

Создано: 06 сентября 2007 19:01
· Личное сообщение · #23

crc1 пишет:
Суспендить процесс сразу, результата не дал. Прга запускается

а ты тот процес запускаешь? =)

з.ы. фантастека....



Ранг: 138.7 (ветеран), 135thx
Активность: 0.110
Статус: Участник

Создано: 06 сентября 2007 20:02
· Личное сообщение · #24

vins пишет:
а ты тот процес запускаешь? =)

Епт, конечно тот, но я в цикле делаю резюме, потом опять суспендю, читаю память и т.д. В памяти OEP патчится, но прога запускается.
Перехват API по методе DillerInc принес результат



Ранг: 28.0 (посетитель)
Активность: 0.020
Статус: Участник
anarchist

Создано: 06 сентября 2007 21:05 · Поправил: vins
· Личное сообщение · #25

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




Ранг: 793.4 (! !), 568thx
Активность: 0.740
Статус: Участник
Шаман

Создано: 07 сентября 2007 07:03
· Личное сообщение · #26

crc1 у меня пол года назад такая же фича с гавнопротом была, я тогда тоже GetModuleHandleA перехватил и всё получилось. ХЗ почему в одном случае работает в другом нет Кстати вспомнил один раз даже перехват этой АПИ не помог, по другому как то делал.

-----
Yann Tiersen best and do not fuck




Ранг: 160.9 (ветеран), 1thx
Активность: 0.050
Статус: Участник

Создано: 07 сентября 2007 17:03
· Личное сообщение · #27

PE_Kill пишет:
Кстати вспомнил один раз даже перехват этой АПИ не помог, по другому как то делал.


Так как код просто эмулился.

PE_Kill пишет:
ХЗ почему в одном случае работает в другом нет


Такое в старе часто встречается.



Ранг: 115.1 (ветеран), 3thx
Активность: 0.070
Статус: Участник

Создано: 08 сентября 2007 05:57
· Личное сообщение · #28

можно юзать в EBFE где-нить по ходу распаковки в таком месте чтобы на этом EBFE код c OEP
был уже распакован, тогда можно циклически проверять код с OEP(или другого места проги) не боясь что прога запустится,
как только код распаковался можно сделать SuspendThread, убрать EBFE далее по смыслу в зависимости от сложности пакера



Ранг: 138.7 (ветеран), 135thx
Активность: 0.110
Статус: Участник

Создано: 08 сентября 2007 11:38
· Личное сообщение · #29

__ пишет:
где-нить по ходу распаковки в таком месте чтобы на этом EBFE код c OEP был уже распакован

Ещебы знать где. StarForce v 3.xx.xx не дает себя трассировать



Ранг: 62.3 (постоянный)
Активность: 0.020
Статус: Участник

Создано: 08 сентября 2007 23:00 · Поправил: Faza
· Личное сообщение · #30

crc1
то место это второй Jmp eax в VM

Циклишь прогу на ОЕП стара, аттачишся, из ОЕП идешь в вызов ВМ смотришь конец функции там есть jmp eax , ставишь на него бряк (один бряк 3 стар позволяет ольке поставить ) , правишь OEP отправляешь прогу на волю как следствие брякаешься смотришь что там в eax , в этом eax идешь в низ функции внимательно высматриваешь первый jmp "кудатотам" , идешь в"кудатотам" там будет начало, таково вида MOV EDX,DWORD PTR DS:[EDI] , в конце этой штуки есть jmp eax за ним куча нулей , там и патч. Адрес второго джампа один и тот же так, что делаешь лоадер, чтоб он туда сразу пачил как надо , через этот джам стар пробежит раз тыщу и раз сто после того как распакует прогу и будет мудрить с импортом, так что там не промахнешся и передачей управления вагон.


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


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