Сейчас на форуме: zds, -Sanchez- (+9 невидимых)

 eXeL@B —› Протекторы —› проблема с армой
. 1 . 2 . 3 . >>
Посл.ответ Сообщение

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

Создано: 04 января 2006 17:39
· Личное сообщение · #1

пытался сделать по туториалу Benina (PART 1: DUMP FILE Unpack Armadillo - Copymem Target: GetRight 5.0) дамп одной проги, но застрял на шаге Find Cripter Call!
там надо было прерваться по bp WriteProcessMemory и сделать F9, после чего посмотреть в списке Call Stack of main Thread и найти в этом окне декриптор.
у меня же в этом окне кроме самой функции kernel32.WriteProcessMemory нету других вызовов.
что делать в таком случае?




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

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

Что-то мутишь Значит это не тот WriteProcessMemory который тебе нужен. Лови следующий.
Еще начало копимем-процедуры можно поискать по сигнатуре:
and eax, 80000007h
или:
and edx, 80000007h

А место которое ты ищешь, тоже по сигнатуре можно найти:
add eax, 0EBFB74E8h

А если ты все таки ты копимем не отрубишь, то знай, что дамп можно снять и не убивая копимем. Только дампить придется небольшими кусками, с размером думаю сам разберешься.




Ранг: 303.7 (мудрец), 4thx
Активность: 0.190
Статус: Участник
tPORt Manager

Создано: 05 января 2006 08:23
· Личное сообщение · #3

А, видел я этот глюк в статье. Вот мой метод решение (поправил статью и выдрал этот кусок):

А сейчас у нас нет такого лога, видать Нарваха где-то промахнулся или что. Нарваха пишет (В call stack верхняя строчка - где мы находимся в настоящее время, а столбец CALLED FROM показывает адрес 4684A4 – место в программе, из которого была вызвана эта функция api. Т.к. этот вызов внутри вышесказанного декриптора,сам декриптор - следующий (ниже) - 467217.).
Если у Вас всё как у Нарвахи, тогда делайте, как написал он, у меня по другому и я “придумал” другой способ. Перейдите обратно с CPU и нажмите два раза Ctrl+F9. Видим:
00469386 52 PUSH EDX
00469387 E847030000 CALL 004696D3
0046938C 83C40C ADD ESP, 0C <-Тут очутились
0046938F 25FF000000 AND EAX, 0FF
00469394 85C0 TEST EAX, EAX
00469396 7507 JNZ SHORT 0046939F
Дак вот CALL 004696D3 и есть CALL DECRYPTOR. Конец примечания от BiT-H@ck`а.


Статья ru_83_84_Arm_3_Lydia_CopyMemII_IAT




Ранг: 332.0 (мудрец)
Активность: 0.180
Статус: Участник
•Pr0tEcToRs KiLLeR•

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

Bit-hack пишет:
и есть CALL DECRYPTOR

дык он же вроде про "Find Cripter Call" спрашивает ;) при чём тут декриптор ?

nobody пишет:
после чего посмотреть в списке Call Stack of main Thread и найти в этом окне декриптор.

есть у меня старый скриптик, который получает полную секцию кода и в том числе логит значение
ENCRIPTER CALL и OEP, скриптик работает на всех версиях армы (за исключением мб совсем старых), но по понятным причинам на новых армах он ненужен...


var WaitForDebugEvent
var temp
var WaitForDebugEvent_end
var DebugEvent
var oep
var mbase
var cbase
var csize
var cend

gmi eip, MODULEBASE
mov mbase, $RESULT
log mbase
mov temp, mbase
add temp, 3c
mov temp, [temp]
add temp, mbase
add temp, 100
mov csize, [temp]
log csize
add temp, 4
mov cbase, [temp]
add cbase, mbase
log cbase
mov cend, cbase
add cend, csize
log cend

mov WaitForDebugEvent_end, 77eaf186 // конец апи (XP_SP1)
bpcnd WaitForDebugEvent_end, "[[esp+4]+0c]==80000001"
eoe lab1
eob lab1
esto

lab1:
mov DebugEvent, esp
add DebugEvent, 4
mov DebugEvent, [DebugEvent]
mov oep, DebugEvent
add oep, 18
mov oep, [oep]
log "+++++++++++++++"
log oep
log "+++++++++++++++"
bc WaitForDebugEvent_end
gpa "WaitForDebugEvent", "kernel32.dll"
mov WaitForDebugEvent, $RESULT
mov [WaitForDebugEvent], #c3#
bp WaitForDebugEvent
eoe lab2
eob lab2
run

lab2:
mov temp, DebugEvent
add temp, 18
mov [temp], cbase
add temp, 0c
mov [temp], cbase
add temp, 4
mov [temp], cbase
mov temp, [esp]
find temp, #8B048A50#
mov temp, $RESULT
add temp, 4
mov [temp], #9090909090#
log "+++++++++++++++"
log "ENCRIPTER CALL"
log temp
log "+++++++++++++++"
eoe lab3
eob lab3
run

lab3:
mov eip, [esp]
add esp, 0c
mov temp, DebugEvent
add temp, 18
add [temp], 1000
add temp, 0c
add [temp], 1000
add temp, 4
add [temp], 1000
log [temp]
cmp [temp], cend
ja loc_end
esto

loc_end:
ret




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

Создано: 05 января 2006 14:20
· Личное сообщение · #5

mov WaitForDebugEvent_end, 77eaf186 // конец апи (XP_SP1)
Mario555, а не подскажешь какой конец апи будет для SP2?



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

Создано: 05 января 2006 14:38
· Личное сообщение · #6

В любом дебаггере можно увидеть(хоть в той же ольке ctrl+F9) или в иде. 7C85A2B4 конец.



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

Создано: 05 января 2006 14:52 · Поправил: nobody
· Личное сообщение · #7

А если ты все таки ты копимем не отрубишь, то знай, что дамп можно снять и не убивая копимем. Только дампить придется небольшими кусками, с размером думаю сам разберешься.
TOG, шутишь чтоли?))
я так понимаю что в
0012DB2C 00649937 /CALL to WriteProcessMemory from soft.00649931
0012DB30 00000048 |hProcess = 00000048 (window)
0012DB34 005ED000 |Address = 5ED000
0012DB38 0037CE58 |Buffer = 0037CE58
0012DB3C 00001000 |BytesToWrite = 1000 (4096.)
0012DB40 0012DC48 \pBytesWritten = 0012DC48

BytesToWrite=1000 это и есть тот кусок проги которую копимем пишет в память?

так какже найти encryptor и занопить его, чтобы он "хороший" код не портил!




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

Создано: 05 января 2006 15:06
· Личное сообщение · #8

nobody пишет:
так какже найти encryptor и занопить его, чтобы он "хороший" код не портил!


Что ты мучишься ?
bpm [_любой_адрес_из_секции_кода_который_уже_раскриптован] W

и ты внутри енкриптора

TOG пишет:
Только дампить придется небольшими кусками, с размером думаю сам разберешься.

nobody пишет: TOG, шутишь чтоли?))

Никаких шуток. Я так и делал, когда не знал как отрубать копимем.



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

Создано: 05 января 2006 15:12
· Личное сообщение · #9

Mario555, я так понял, что после выполнения твоего скрипта можно делать дамп проги?




Ранг: 332.0 (мудрец)
Активность: 0.180
Статус: Участник
•Pr0tEcToRs KiLLeR•

Создано: 05 января 2006 17:15
· Личное сообщение · #10

nobody пишет:
я так понял, что после выполнения твоего скрипта можно делать дамп проги?

ну я бы сказал как минимум дамп секции кода, а дамп проги лучше снимать уже потом из второго процесса.
но, повторюсь, в новых версиях армы (начиная где-то с 3,7 вроде) такой способ уже не нужен, т.к.
1) в секция кода будет испорчена (илиминатион, кодесплитинг)
2) с появлением илиминатиона появилась и возможность получить от армы всю расшифрованную секцию кода непосредственно во втором процессе.



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

Создано: 05 января 2006 17:32
· Личное сообщение · #11

Подскажите, можно ли как-нибудь убрать этот code splicing полностью в последних версиях армы или обязательно код спёртый при запуске на место записывать



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

Создано: 05 января 2006 19:20 · Поправил: nobody
· Личное сообщение · #12

хмммм...
с "грехом пополам" дошёл я до пункта 6.Find address start and end IAT:
в нем надо child process'e найти вызов библиотечных функций и затем выделить IAT

но! в процессе нет не одного прямого вызова! т.е. имею примерно следующее
005C15AE E8 E96BE4FF CALL KNA4Repo.0040819C ; JMP to USER32.SetRectEmpty

что с этим мне делать?
знаете, такое у меня ощущение что у меня процесс неправильно распаковался...




Ранг: 332.0 (мудрец)
Активность: 0.180
Статус: Участник
•Pr0tEcToRs KiLLeR•

Создано: 05 января 2006 19:41
· Личное сообщение · #13

dragon пишет:
убрать этот code splicing полностью


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

nobody пишет:
но! в процессе нет не одного прямого вызова! т.е. имею примерно следующее
005C15AE E8 E96BE4FF CALL KNA4Repo.0040819C ; JMP to USER32.SetRectEmpty


это и есть обычный вызов апи.

PS это первая прога которую ты распаковываешь чтоли ? =)



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

Создано: 05 января 2006 19:59
· Личное сообщение · #14

Mario555 пишет:
PS это первая прога которую ты распаковываешь чтоли ? =)

почти вторая
до этого была прога с ASPack v2.12
Caspr 4ever))

Mario555 пишет:
это и есть обычный вызов апи.


Знаешь, в туториалах всё так красиво: "прямой вызов АПИ в дизассемблере, тут же по дампу этого адреса название самой АПИ. осталось только прокрутить на верх и найти участок откуда таблица импорта начинается"
красота...
а вот у меня такого нет, и в дампе кроме крякозяблей ничего интересного)))

поэтому и попросил тебя, как более опытного, взглянуть, может вообще мне "другой дорогой" надо идти



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

Создано: 05 января 2006 20:23
· Личное сообщение · #15

Mario555 пишет:
это и есть обычный вызов апи.

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



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

Создано: 05 января 2006 21:22
· Личное сообщение · #16

Mario555
Просто кто-то мне сказал что мусора поначалу нет и можно восстановить оригинал, значит мне наврали или в это было в старой версии.

Mario555 пишет:
я не смотрел особо, но вроде они так и зашиты с мусором, а не разбавляются им при выполнение. А вообще кодесплитинг прекрасно редиректится при выделении страницы под него.


Помню я этот полиморф, несколько мусорных инструкций, типа двухкратных bswap, ещё что-то, а также заменяются оригинальные инструкции. В общем таких конструкций не больше 10, плагин для иды можно легко написать, чтоб получить такую же секцию кода как и была.

Просто например я не считаю полностью распакованных экзешник, если код не восстановлен в оригинале, а тем более оставлен в таком виде, копаться в нём противно



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

Создано: 05 января 2006 22:28
· Личное сообщение · #17

вот ещё одна проблема
не получается найти мэджик джамп
попытка перейти на "начало ИАТ" приводит к сообщению "No memory on the specified address"

адрес начала ИАТ находил примерно как в туторе, т.е. нахожу в приатаченном процессе что-нибудь похожее на следующее:
0048AD48 8B40 30 MOV EAX,DWORD PTR DS:[EAX+30]
0048AD4B 50 PUSH EAX
0048AD4C E8 ABD2F7FF CALL KNA4Repo.00407FFC ; JMP to USER32.IsIconic
0048AD51 85C0 TEST EAX,EAX
0048AD53 0F85 0C010000 JNZ KNA4Repo.0048AE65
0048AD59 E8 0ED1F7FF CALL KNA4Repo.00407E6C ; JMP to USER32.GetFocus
0048AD5E 8B55 FC MOV EDX,DWORD PTR SS:[EBP-4]
0048AD61 3B42 30 CMP EAX,DWORD PTR DS:[EDX+30]

делаю Follow на строке
0048AD4C E8 ABD2F7FF CALL KNA4Repo.00407FFC ; JMP to USER32.IsIconic

в дизассемблере появляется примерно следующее:
00407FEA 8BC0 MOV EAX,EAX
00407FEC - FF25 80D70001 JMP DWORD PTR DS:[100D780] ; USER32.IsClipboardFormatAvailable
00407FF2 8BC0 MOV EAX,EAX
00407FF4 - FF25 5CDF0001 JMP DWORD PTR DS:[100DF5C] ; USER32.IsDialogMessageA
00407FFA 8BC0 MOV EAX,EAX
00407FFC - FF25 F8DC0001 JMP DWORD PTR DS:[100DCF8] ; USER32.IsIconic
00408002 8BC0 MOV EAX,EAX
00408004 - FF25 5CD50001 JMP DWORD PTR DS:[100D55C] ; USER32.IsRectEmpty

на любом джампе делаю Follow in Dump -> Memory Address
ищу начало таблицы и её конец.
получил
Start IAT:0100D500
End IAT:0100DFDC

в туторе надо было поставить hardware бряк на запись на начало ИАТ, но туда перейти не получается из-за описанной выше ошибки...




Ранг: 332.0 (мудрец)
Активность: 0.180
Статус: Участник
•Pr0tEcToRs KiLLeR•

Создано: 05 января 2006 22:35
· Личное сообщение · #18

dragon пишет:
Просто кто-то мне сказал что мусора поначалу нет и можно восстановить оригинал


тогда лучше проверь, так как всё-таки

Mario555 пишет:
я не смотрел особо, но вроде

;)
просто в арме функции мутные, а при работе с кодесплитингом юзаются довольно объёмные функции. =)



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

Создано: 06 января 2006 14:42
· Личное сообщение · #19

Проверяется это так, надо просто посмотреть как этот код лежит до распаковки, если уже с мусором, то ничего не поделаешь придётся тулзу для восстановления этого кода писать. На неделе может проверю, только прога запакованная нужна какая-нибудь



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

Создано: 06 января 2006 14:52
· Личное сообщение · #20

dragon, может мою посмотришь?
я тебе ссылку в личку отправлю.



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

Создано: 06 января 2006 15:14
· Личное сообщение · #21

Посмотрю только быстро не обещаю, дела есть..

Я арму по другому снимаю, айсом. Например OEP находится после простого просмотра дампа security.dll за пару минут, debugger blocker - это просто вызов OpenServiceA, бряк на него, исправляешь имя сервиса и всё. Для импорта я подправил dll какого-то дампера, ему IAT указываешь, он теперь импорт восстанавливает без всяких скриптов. А вот наномиты и этот самый code splicing посложнее кажуться.



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

Создано: 06 января 2006 15:48
· Личное сообщение · #22

спасибо! помощь эксперта как раз лишней не будет!



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

Создано: 07 января 2006 13:22
· Личное сообщение · #23

парни, подскажите пути, как ещё можно найти енкриптор в копимем?
Mario555, извини, но у меня есть такое чувство, что в моем случае твой скрипт находит енкриптор не верно...




Ранг: 332.0 (мудрец)
Активность: 0.180
Статус: Участник
•Pr0tEcToRs KiLLeR•

Создано: 07 января 2006 16:16
· Личное сообщение · #24

nobody пишет:
Mario555, извини, но у меня есть такое чувство, что в моем случае твой скрипт находит енкриптор не верно...

ну может и непрально, я сам им мало пользовался т.к.
Mario555 пишет:
но по понятным причинам на новых армах он ненужен...


PS кста проверить правильность очень просто - сдампить секцию кода второго процесса и посмотерть восстановлена она или нет.
PPS ессно для работы этого скрипта надо отлючать реакцию олли на все эксепшены.



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

Создано: 07 января 2006 16:50
· Личное сообщение · #25

Mario555 пишет:
PS кста проверить правильность очень просто - сдампить секцию кода второго процесса и посмотерть восстановлена она или нет.

а как определить точно ли она восстановлена? попробовать запустить имеешь ввиду?
кстати, у меня там мусорных кодов вообще полно! где-то читал что надо удалять куски кода
pushad
...
popad

но их вроде там не мало, и советуют использовать плагин DeJunk. где можно качнуть?



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

Создано: 15 января 2006 17:43
· Личное сообщение · #26

существуют ли какие-нибудь "свежие" туторы по распаковке армы на руском языке? сайт эстета не предлагать

я сейчас застрял на шаге

3.PATCH MAGIC JUMP

-DETACH FATHER (1st step)
-Attach child
-Patch EP return
-Set bp memory on write at begin IAT

начала таблицы(0100D450) в памяти ещё нету, соответственно и бряк на него не поставить...

может есть другой способ восстановить ИАТ?
и в чём вообще заключается патч мэджик джампа?



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

Создано: 15 января 2006 18:40
· Личное сообщение · #27

Mario555 пишет:
2) с появлением илиминатиона появилась и возможность получить от армы всю расшифрованную секцию кода непосредственно во втором процессе.

только заметил... что это значит? и как это сделать?



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

Создано: 15 января 2006 20:41
· Личное сообщение · #28

nobody пишет:
в чём вообще заключается патч мэджик джампа?


Это чтобы в таблице импортов переходников не было, а только правильные адреса.
Я начал распаковывать copymem убрал как и раньше, а вот прогу свою для восстановления IAT потерял А заново влом её делать.

И вообще не советую по этим туторам распаковывать, imho туповатые они какие-то




Ранг: 332.0 (мудрец)
Активность: 0.180
Статус: Участник
•Pr0tEcToRs KiLLeR•

Создано: 15 января 2006 21:41
· Личное сообщение · #29

dragon
а кодесплитинг-то посмотрел ? ) в каком виде там байты хранятся ?



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

Создано: 15 января 2006 21:45
· Личное сообщение · #30

dragon
млин...
на форуме кроме тебя отказались помогать, а сам я как видно не особо разбираюсь в этом деле...
не могу понять что можно сделать имея адрес magic jump'a!
и надоели уже советы типа "поизучай статьи", "забей на это дело", "рано тебе ещё..."
ну нету нормальных статей на русском(всё самое интересное на немецком)!!! а статья про лидию уже порядком постарела!
и не могу я забить раз уже начал, к тому же это надо мне и ещё паре сотен людей! но из-за особенностей распространения проги, выложить её не могу, поэтому и прошу уже проверенных людей хотя бы взглянуть и подсказать что надо делать и в каком направлении двигаться...


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


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