Сейчас на форуме: Magister Yoda, johnniewalker, Kybyx, vsv1, r0lka, -Sanchez-, testrev1337 (+4 невидимых)

 eXeL@B —› Крэки, обсуждения —› Запуск в нескольких экземплярах или проблема с CreateMutexA.
Посл.ответ Сообщение

Ранг: 42.9 (посетитель), 13thx
Активность: 0.040
Статус: Участник

Создано: 11 февраля 2011 19:44 · Поправил: cryptX
· Личное сообщение · #1

Здравствуйте друзья. У меня есть вопрос,буду рад, если поможете.

Есть одна программа и моей задачей било запустить программу в нескольких экземплярах, без модификаций программа нормально запускался только в одном экземпляре(там стоит проверка).

Она была упакованная Asprotect 1.23-ом, распаковали с скриптом(Aspr2.XX_unpacker_v1.15E) за 5 секунд.

Изменили место проверки,чтоб было возможно запустить несколько экземпляров.

Но теперь после распаковки, функций программы стали не работать (кликаеам и нечего не происходит)...

Проанализировали и вот нашли этy функцию:

Code:
  1. 0040766E  |.  50            PUSH EAX                                 ; /MutexName
  2. 0040766F  |.  837D 0C 01    CMP DWORD PTR SS:[EBP+C],1               ; |
  3. 00407673  |.  1BC0          SBB EAX,EAX                              ; |
  4. 00407675  |.  40            INC EAX                                  ; |
  5. 00407676  |.  83E0 7F       AND EAX,7F                               ; |
  6. 00407679  |.  50            PUSH EAX                                 ; |InitialOwner
  7. 0040767A  |.  8B45 08       MOV EAX,DWORD PTR SS:[EBP+8]             ; |
  8. 0040767D  |.  50            PUSH EAX                                 ; |pSecurity
  9. 0040767E  |.  E8 DDFFFFFF   CALL <JMP.&kernel32.CreateMutexA>        ; \CreateMutexA


и эту где происходит проверка на 'multiple instances':

Code:
  1. ...
  2. 006ADEA4   .  68 7CDF6A00   PUSH PDFWMR.006ADF7C   ; /Arg3 = 006ADF7C ASCII "PDF Watermark Remover"
  3. 006ADEA9   .  6A 00         PUSH 0                                      ; |Arg2 = 00000000
  4. 006ADEAB   .  6A 00         PUSH 0                                      ; |Arg1 = 00000000
  5. 006ADEAD   .  E8 B697D5FF   CALL PDFWMR.00407668                     ; \PDFWMR.00407668
  6. 006ADEB2   .  8BD8          MOV EBX,EAX
  7. 006ADEB4   .  E8 E798D5FF   CALL <JMP.&kernel32.GetLastError>        ; [GetLastError
  8. 006ADEB9   .  3D B7000000   CMP EAX,0B7
  9. ...


Вообщем создается mutex- 006ADEAD, а потом перед переходом проверяется на ошибку,т.е GetLastError возвращает значение ERROR_ALREADY_EXISTS (т.е Mutex уже существует) и программа таким образам знает запущен другой экземпляр или нет, т.е здесь нет проверки имени процесса или другое.

Теперь вопрос:

Как изменить аргумент (имя Mutex-a,сейчас оно "PDF Watermark Remover") CreateMutexA в не запакованной версий программы ?
Или возможно изменить это имя после запуска программы ?

(т.к у распакованной версий есть еще места проверки, а я не могу их найти)
Чтоб смог запустить в нескольких экземплярах.


Спасибо заранее за ваше время.

Вот распакованная exe программы (можно запустить несколко экз. но функций неработают ):

-->http://www.sendspace.com/file/x3tmhx <--


Оригинал:
-->http://www.pdfwatermarkremover.com/pdfwmremover.exe<--

С Уважением,
Cryptx.




Ранг: 109.3 (ветеран), 55thx
Активность: 0.060
Статус: Участник
Yes! I_m noob!

Создано: 11 февраля 2011 19:50
· Личное сообщение · #2

cryptX, какие функции?
Вы уверены что это не проблема кривой распаковки?

-----
z+7v+/Lq4CAtIO/l8OL76SD44OMg6iDv8O7i4OvzLiCpIMPu7OXwINHo7O/x7u0=




Ранг: 42.9 (посетитель), 13thx
Активность: 0.040
Статус: Участник

Создано: 11 февраля 2011 19:55
· Личное сообщение · #3

[0utC4St]
нет,100%ов.

Незнаю какие,там скажем когда нажимаем на кнопку 'Add Pdf'(процедура - sbtaddpdfClick),процедура начинается не с 'рабочего' кода, а там некоторые другие функций которые генерируют exception и программа вылетает на kernel32.RaiseException в отладчике(т.е это предусмотренный финт однозначно!)

Но разобраться в них я не смог.



Ранг: 23.5 (новичок), 5thx
Активность: 0.020
Статус: Участник

Создано: 12 февраля 2011 00:04
· Личное сообщение · #4

Использовать неименованые мютексы
Code:
  1. 006ADEA4   .  68 7CDF6A00   PUSH PDFWMR.006ADF7C
заменить на
Code:
  1. PUSH 0




Ранг: 42.9 (посетитель), 13thx
Активность: 0.040
Статус: Участник

Создано: 12 февраля 2011 00:13
· Личное сообщение · #5

tino
Как это сделать в запакованной версий программы ?

А так распакованную я изменил проверку GetLastError и теперь можно запустить несколько экземпляров, но распакованная программа не работает нормально (там еще и другие проверки стоят)....



Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 12 февраля 2011 12:40 · Поправил: Clerk
· Личное сообщение · #6

> Использовать неименованые мютексы
Именованные обьекты глобальны в системе, не именованные локальны для процесса.

> Как это сделать в запакованной версий программы ?
Давайте подумаем:
o Распаковать вручную и поправить код. Тоесть изменять код на диске.
o Распаковать автоматически(само приложение это делает) и поправить код в памяти. Таким образом это отложенный вызов целевого кода. Обычно это с помощью загрузчиков делается.



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

Создано: 12 февраля 2011 12:58 · Поправил: tomac
· Личное сообщение · #7

Или захучить CreateMutexA, чтобы она на имя "PDF Watermark Remover" генерила другое имя, зависящее, скажем, от PIDa процесса. Может быть, этот же мьютекс создается еще где-нибудь и честно используется для синхронизации.

Кроме того, откуда уверенность, что только этот мьютекс используется для проверки?



Ранг: 42.9 (посетитель), 13thx
Активность: 0.040
Статус: Участник

Создано: 12 февраля 2011 13:42
· Личное сообщение · #8

Clerk
Друг создал лоадер,но Asprotect палит (Protection error, Error: 45).

tomac
Потому что только в одном месте это проверка.(Т.е проверка на 'multiple instances')

А в проге есть очень много проверок на распаковку...найти их трудно.




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

Создано: 12 февраля 2011 13:58
· Личное сообщение · #9

Сделай нормальный лоадер или инлайн, если проверок на распаковку много, и патчить их все лень.



Ранг: 255.8 (наставник), 19thx
Активность: 0.150.01
Статус: Участник
vx

Создано: 12 февраля 2011 14:44 · Поправил: Clerk
· Личное сообщение · #10

Code:
  1. .code
  2. $Mutex   CHAR "PDF Watermark Remover",0
  3.  
  4. STACK_FRAME struct
  5. Next         PVOID ?
  6. Ip             PVOID ?
  7. STACK_FRAME ends
  8. PSTACK_FRAME typedef ptr STACK_FRAME
  9.  
  10. API_FRAME struct
  11. Sfc               STACK_FRAME <>
  12. Attributes        PSECURITY_ATTRIBUTES ?
  13. InitialOwner      BOOLEAN ?
  14. MutexName                 PSTR ?
  15. API_FRAME ends
  16. PAPI_FRAME typedef ptr API_FRAME
  17.  
  18. $Msg     CHAR "Ip: %p", CR, LF, 0
  19.  
  20. xCreateMutexA proc uses esi edi Attributes:PSECURITY_ATTRIBUTES, InitialOwner:BOOLEAN, MutexName:PSTR
  21.          .if MutexName
  22.             mov esi,MutexName
  23.             mov edi,offset $Mutex
  24.             cld
  25.             mov ecx,sizeof $Mutex
  26.             repe cmpsb
  27.             .if Zero? && !Ecx
  28.                invoke DbgPrint, addr $Msg, API_FRAME.Sfc.Ip[Ebp]
  29.                mov API_FRAME.MutexName[Ebp],NULL
  30.             .endif
  31.          .endif
  32.          pop edi
  33.          pop esi
  34.          leave
  35.          jmp RTL_VERIFIER_THUNK_DESCRIPTOR.ThunkOldAddress[DllThunk]
  36. xCreateMutexA endp
  37.  
  38. .data
  39. Tnunk    CHAR "CreateMutexA",0
  40. $DLL         WCHAR "k", "e", "r", "n", "e", "l", "3", "2", ".", "d", "l", "l", 0
  41.  
  42. ; RTL_VERIFIER_THUNK_DESCRIPTOR:
  43. DllThunk          dd Tnunk
  44.                         dd 0
  45.                         dd xCreateMutexA
  46.  
  47.                         dd 0
  48.  
  49. ; RTL_VERIFIER_DLL_DESCRIPTOR:
  50. DLL               dd $DLL
  51.                         dd 0
  52.                         dd 0
  53.                         dd DllThunk
  54.                         
  55.                         dd 0
  56.  
  57. ; RTL_VERIFIER_PROVIDER_DESCRIPTOR:
  58. Avrf            dd sizeof(RTL_VERIFIER_PROVIDER_DESCRIPTOR)
  59.                         dd DLL
  60.                         dd 0
  61.                         dd 0
  62.                         dd 0
  63.                         dd 0
  64.                         
  65. .code
  66. InitRoutine proc DllHandle:PVOID, Reason:ULONG, Context:PVOID
  67.          .if Reason == DLL_PROCESS_VERIFIER
  68.             mov eax,Context
  69.             mov dword ptr [eax],offset Avrf
  70.          .endif
  71.          mov eax,TRUE
  72.          ret
  73. InitRoutine Endp

В реестр внести следующую инфу:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\ИмяПриложения.exe]
"VerifierDlls"="avrf.dll"
"GlobalFlag"=dword:00000100
91f0_12.02.2011_CRACKLAB.rU.tgz - avrf.zip



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

Создано: 12 февраля 2011 16:26
· Личное сообщение · #11

Clerk
Ух ты, надо куда-нибудь записать такой метод.

Только мне все равно не нравится mov API_FRAME.MutexName[Ebp],NULL. Может, все-таки дописывать PID? А то если какой-нибудь еще поток решит синхронизироваться по этому имени, он создаст новый мьютекс, и синхронизации не получится.

Или я не прав?



Ранг: 42.9 (посетитель), 13thx
Активность: 0.040
Статус: Участник

Создано: 12 февраля 2011 16:52 · Поправил: cryptX
· Личное сообщение · #12

Clerk
Сделал как ты написал,теперь когда пытаюсь открыть программу вылетает сообшение:

"The application failed to initialize properly (0xc0000142) . Click OK to terminate the application."

Archer
Лоадер есть,только срабатывает CRC Asprotect-a палит и пишет: "Protection error, Error: 45"
и программа закрывается,как crc можно обойти ?




Ранг: 95.2 (постоянный), 26thx
Активность: 0.060
Статус: Участник

Создано: 12 февраля 2011 17:49
· Личное сообщение · #13

во первых это:
1.56 build 03.17

А во вторых, функции перестают работать не из за неправильного анпака, а из за проверок которые понакодил автор, подсказка: смотри оверлей



Ранг: 42.9 (посетитель), 13thx
Активность: 0.040
Статус: Участник

Создано: 12 февраля 2011 18:08
· Личное сообщение · #14

inf1kek

cryptX пишет:
(т.к у распакованной версий есть еще места проверки, а я не могу их найти)


Я и сам знаю что проверки понакодил автор и что анпак сделан правильно,проблема в нахождений этих самих проверок или создание рабочего лоадера который обходит crc Asprotect-a.




Ранг: 95.2 (постоянный), 26thx
Активность: 0.060
Статус: Участник

Создано: 12 февраля 2011 18:19
· Личное сообщение · #15

Ну так и смотри оверлей, последние 200h. можешь смело дизасмить.
скрипт volx'а их отрезал нахрен.



Ранг: 42.9 (посетитель), 13thx
Активность: 0.040
Статус: Участник

Создано: 12 февраля 2011 18:39
· Личное сообщение · #16

Спасибо друзья!!!
Проблема решилась!

Большое Спасибо Clerk,uncleua,inf1kek

Особые благадарности SReg-у кто любезно предоставил рабочий лоадер.


 eXeL@B —› Крэки, обсуждения —› Запуск в нескольких экземплярах или проблема с CreateMutexA.
Эта тема закрыта. Ответы больше не принимаются.
   Для печати Для печати