Сейчас на форуме: asfa, HaRpY, Vicshann, vasilevradislav (+4 невидимых) |
![]() |
eXeL@B —› Оффтоп —› OllyDBG Trace... |
. 1 . 2 . >> |
Посл.ответ | Сообщение |
|
Создано: 07 января 2007 21:52 · Личное сообщение · #1 Это проект для создания плагина для отладчика чтобы расширить возможности трейсера. Вот три темы, которые я нашел здесь на сайте, которые относятся непосредственно к сабжу. http://www.exelab.ru/f/action=vthread&forum=2&topic=6136&p age=0 http://www.exelab.ru/f/action=vthread&forum=1&topic=7109 http://www.exelab.ru/f/action=vthread&topic=7236&forum=1&p age=-1 Вы можете скачать архив(11kb) в котором находятся плагин и минихелрпер тут Прошу не пинать, хелп писал быстро и постарался описать все на данный момент, что есть в плагине. Решил выложить, чтобы посоветовали в плане как лучше сделать, чтобы удобно было использовать и послушать идеи по улучшению функционала. В частности стал вопрос формата вывода в лог данных, вот что должно будет выводиться Address Hex Command Register Flag Смещение колонок в текстовом файле, могу табы включить для выравнивания колонок, но мне кажется, неудобно или пробелами выравнивать тогда не очень ровные колонки получаются… Вообщем идеи и предложения буду рад выслушать… ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
|
Создано: 07 января 2007 21:53 · Поправил: Demon666 · Личное сообщение · #2 Так на всякий случай, чтобы не спрашивали, для чего этот плаги нужен! Этот простой код является для трейсера ловушкой 00B93D4C MOVSX DI,DH 00B93D50 JE 00B93D56 00B93D56 MOV EAX,E2181588 00B93D5B ADD EAX,8935A5D 00B93D61 ROL EAX,25 00B93D64 NOT EAX 00B93D66 ADD EAX,739BE285 00B93D6C JMP 00B93D76 00B93D76 PUSH -2D 00B93D78 POP EBP 00B93D79 MOV EBX,666BB103 00B93D7E SUB EBX,934D1EBD 00B93D84 MOV EBP,EBX 00B93D86 NOT EBP 00B93D88 SUB EBP,B887A6C5 00B93D8E MOV EDI,EBP 00B93D90 ROL EDI,39 00B93D93 MOV ECX,EDI 00B93D95 XOR ECX,3D89ADB5 00B93D9B ADD ECX,BAD549A5 00B93DA1 MOV EBX,BA42DE36 00B93DA6 MOV ESI,6817D8C0 00B93DAB SUB ESI,34D2E5D 00B93DB1 XOR ESI,A60B1311 00B93DB7 ROR ESI,0EA 00B93DBA NOT ESI 00B93DBC XOR ESI,A34F4F91 00B93DC2 ROR ESI,0D4 00B93DC5 ROR ESI,47 00B93DC8 INC EAX 00B93DC9 MOV ESI,EAX 00B93DCB ROL ESI,1 00B93DCD XOR ESI,ACD78FA3 00B93DD3 CMP ESI,ECX 00B93DD5 JNZ 00B93DC8 Давайте его разберем Для начала стоит почикать мусор, а именно найти то, что действительно является главным в этом коде Если внимательно посмотреть на код то можно заметить что, начиная с адреса 00B93DC8, образуется цикл и надо понять, при каком условии мы из него можем выйти. А все банально просто, если ESI будет равен ECX, то должны выйти из цикла. Если короче, то этот код в реальности должен выглядеть так mov ecx,903667DDh mov eax,1E2DE5C7h LoopAntiTrace: INC EAX MOV ESI,EAX ROL ESI,1 XOR ESI,0ACD78FA3h CMP ESI,ECX JNZ LoopAntiTrace Но этот код является своего рода массовкой для трейсера и больше ничем другим Если еще проще, то код выглядит так mov ecx,1E70F43Fh mov eax,1E2DE5C7h LoopAntiTrace: INC EAX CMP EAX,ECX JNZ LoopAntiTrace Образно говоря 1E70F43Fh-1E2DE5C7h=430E78h(Десятичное 4394616) Для процессора прокрутить такой цикл займет доли миллисекунд его времени, но не для трейсера! Теперь давайте разберем, почему этот код является губительным для трейсера После нажатия клавиш в отладчике Ctrl+F11 (меню->Debug->Trace into) включается движок трейсера и код который там используется, гораздо больше требует процессорного времени, чем этот цикл! Отладчик в течении 10 минут обрабатывает около ~70000 проходов 4394616:70000=627*10=6270 минут займет обработка трейсером. Если не вдаваться в более тонкую работу отладчика и выразить это утрировано, то при записи в лог отладчик передает пакетами один проход по ~500 байт. 4394616*500=2197308000 байт получиться файл, причем будет содержать только этот цикл, то есть один только мусор! Далее (это еще не все) отладчик также сохраняет эту информацию в памяти, где требуется гораздо больше объема для хранения информации. 4394616*600=2636769600 байт нужно в “памяти&файл_подкачки”, отладчик юзает функцию GlobalMemoryStatus, что само за себя уже о многом говорит. Сравним: Protectors mov ecx,903667DDh mov eax,1E2DE5C7h LoopAntiTrace: INC EAX MOV ESI,EAX ROL ESI,1 XOR ESI,0ACD78FA3h CMP ESI,ECX JNZ LoopAntiTrace доли миллисекунд Trace into 6270 минут файл 2197308000 байт память 2636769600 байт Вот хотелось, чтобы с помощью ваших советов сделать хороший трейсер в отладчике… ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
|
Создано: 12 января 2007 05:22 · Поправил: Demon666 · Личное сообщение · #3 гы-гы, нашел время.., вот прикрутил мощный фильтр… результат плагина: 004010E1 PUSHAD 004010E2 CMP EAX,1 004010E5 JE SHORT 004010F9 004010E7 CALL 004010ED 004010ED JMP SHORT 004010F0 004010F0 CALL 004010F6 004010F6 INC EAX EAX=00000001 004010F7 JMP SHORT 004010E2 004010E2 CMP EAX,1 004010E5 JE SHORT 004010F9 004010F9 ADD ESP,8 004010FC POPAD EAX=00000000 004010FD PUSH EAX 004010FE CALL DWORD PTR DS:[<&KERNEL32.GetModuleHandleA>] EAX=00400000 00401104 MOV DWORD PTR DS:[402000],EAX 00401109 PUSH 0 0040110B PUSH 00401123 00401110 PUSH 0 00401112 PUSH 1 00401114 PUSH EAX 00401115 CALL DWORD PTR DS:[<&USER32.DialogBoxParamA>] отсюда можно скачать TraceExpand (beta v 0.2) http://demonteam.narod.ru/download/download.html Ааа...! Чуть не забыл, вот! Заскриншотил =))) ![]() ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
|
Создано: 12 января 2007 05:24 · Личное сообщение · #4 aspirin пишет: По статье он говорит нажать Trace into, я нажимаю и он повисает. ValdiS пишет: Комп не повисает, а начинает трассировку кода. На это нужно время. Бывают проги, когда ждешь по 15-20 минут. Viper_Ya пишет: Извиняюсь, что немного торможу, но 1) Долго ли трейсить нужно?(желательно ответ в минутах, ато я трейсю уже минут 30 - нифига не брякаюсь) [EXE]_cutor пишет: И будет трассировать его довольно долго. Выглядит он приблизительно следующим образом: 00A33671 41 INC ECX 00A33672 8BF9 MOV EDI,ECX 00A33674 D1C7 ROL EDI,1 00A33676 81F7 A38FD7AC XOR EDI,ACD78FA3 00A3367C 3BFB CMP EDI,EBX 00A3367E ^ 0F85 EDFFFFFF JNZ 00A33671 (пример кода взял из register.exe, т.к. сама electra.exe - распакована) трассировать его она будет ОООчень долго. НО!!! 1. Жмешь ESC. 2. Ставишь бряк (F2) на первую команду после JNZ 00A33671 и жмешь F9. Все. цикл обошли за 2 секунды. После этого снова запускаешь Trace into и ждёшь буквально 5 минут. Далее делаешь как в туторе. Весь процесс отлома аспра занимает от силы минут десять. Девять из которых уходят на трассировку. Подробнее… http://exelab.ru/f/action=vthread&forum=2&topic=6123 Мой второй пост как раз описывает очень подробно, почему это происходит глазами кодера! Естественно это все было посчитано на калькуляторе, ну и время также зависит от процессора и от значений в регистрах ECX&EAX! Защиту от Anti-trace (этот движок уже написан) решил добавить после того, как будет дописан и проверен GUI на работоспособность. P. S. Мысли вслух… ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
|
Создано: 12 января 2007 07:56 · Личное сообщение · #5 |
|
Создано: 22 января 2007 09:29 · Личное сообщение · #6 WoLFeR Эти функции приватные пока(!), но в релизе все, ну или, по крайней мере, большая часть будет! Все идеи тут написанные будут учтены и добавлены в плуг, так что пишем! По частям выкладываю для тестирования так легче на этапе создания каркаса увидеть и пофиксить баги! Так теперь о плуге, что нового: Добавлено в меню New log В любой момент можно начать запись нового лога, активным это становиццо когда прога загружена в отладчик и включена запись в лог. При этом создается копия старого лога. Улучшен вызов папки, где хранятся логи В опции добавлено String и Comments – думаю, очень информативные функции и лишними не будут, но их также можно и отключить, если они не нужны! LastError пока не рабочая, будет время прикручу! Ну и об этом Over system DLLs чуть подробнее Некоторые могут сказать БАЯН и в отладчике есть такая функция Меню->Options->Debugging options->Trace->Always trace over system DLLs, но это не совсем так! Ну, как всегда результаты плагина при определенных настройках!!! Вот пример записи в лог плагина с включенной Over system DLLs: 00401000 PUSH 0 00401002 CALL <JMP.&kernel32.GetModuleHandleA> EAX=00400000 IMAGEBASE "X:exampleexample.exe" 00401007 PUSH 3E8 0040100C CALL 0040103F 0040103F PUSH EBP 00401040 MOV EBP,ESP EBP=0012FFB8 00401042 PUSH 0040301D ASCII "ACPUDUMP" 00401047 CALL <JMP.&kernel32.GlobalFindAtomA> EAX=00120000 ECX=7C80CB22 EDX=00000002 ZF=0 0040104C MOV EAX,DWORD PTR SS:[EBP+8] EAX=000003E8 0040104F PUSH 1 00401051 PUSH 0 00401053 PUSH 00403034 ASCII "/select, ""X:WINDOWSExplorer.EXE""" 00401058 PUSH 0040302B ASCII "explorer" 0040105D PUSH 00403026 ASCII "open" 00401062 PUSH 0 00401064 CALL <JMP.&shell32.ShellExecuteA> EAX=0000002A ECX=00006BA2 EDX=00140608 ZF=1 00401069 LEAVE EBP=0012FFF0 0040106A RETN 4 00401011 MOV EAX,0040300A ASCII "explorer",CR,LF,"ACPUDUMP" EAX=0040300A ASCII "explorer",CR,LF,"ACPUDUMP" 00401016 MOV DWORD PTR DS:[40305C],EAX DS:[0040305C]=00000000 0040101B CALL <JMP.&kernel32.GetCommandLineW> EAX=0002077C UNICODE """X:exampleexample.exe""" 00401020 MOV EAX,DWORD PTR DS:[403060] EAX=00000000 00401025 PUSH 0 00401027 PUSH 00403000 UNICODE "Icze" 0040102C PUSH 0040300A ASCII "explorer",CR,LF,"ACPUDUMP" 00401031 PUSH 0 00401033 CALL <JMP.&user32.MessageBoxA> EAX=00000001 ECX=7C91056D ZF=0 SF=1 00401038 PUSH 0 0040103A CALL <JMP.&kernel32.ExitProcess> Вот еще: 0040102E POP EBP EBP=00401000 0040102F LEA EAX,DWORD PTR SS:[EBP+36C] EAX=0040136C ASCII "user32.dll" 00401035 PUSH EAX 00401036 CALL DWORD PTR SS:[EBP+305] SS:[00401305]=7C801D77 (kernel32.LoadLibraryA) EAX=77D30000 IMAGEBASE "X:WINDOWSsystem32user32.dll" ECX=7C801BF6 EDX=00080608 ZF=1 0040103C TEST EAX,EAX ZF=0 0040103E JE SHORT 00401090 00401040 LEA ESI,DWORD PTR SS:[EBP+311] ESI=00401311 ASCII "DialogBoxParamA" 00401046 LEA EDI,DWORD PTR SS:[EBP+358] EDI=00401358 0040104C CALL 00401198 А вот кусочек лога отладчика (Оля любительница посрать в лог), думаю, 2000 строк бреда сюда постить смысла нет! Сравниваем и делаем выводы сами... Address Thread Command ; Registers and comments 00401002 Main CALL <JMP.&kernel32.GetModuleHandleA> ; EAX=00400000 00401007 Main CALL 0040103F 0040103F Main PUSH EBP ; AtomName = "" 00401040 Main MOV EBP,ESP ; EBP=0012FFBC 00401042 Main PUSH 00403021 00401047 Main CALL <JMP.&kernel32.GlobalFindAtomA> ; EAX=00120000, ECX=7C80CB22, EDX=00000002 0040104C Main MOV EAX,DWORD PTR SS:[EBP+8] ; EAX=7C816D4F 0040104F Main PUSH 1 00401051 Main PUSH 0 00401053 Main PUSH 00403038 00401058 Main PUSH 0040302F 0040105D Main PUSH 0040302A 00401062 Main PUSH 0 00401064 Main CALL <JMP.&shell32.ShellExecuteA> ; EAX=001F5328, ECX=7C9C0000, EDX=7FFB001C, EBX=00000000, EBP=0012E82C, ESI=00000000, EDI=00000000 KiFastSystemCallR>RETN ; EAX=00000000, ECX=00870000, EDX=7C90EB94, EBP=0012E218 KiFastSystemCallR>RETN ; ECX=008C0000, EBP=0012E21C KiFastSystemCallR>RETN ; ECX=00910000, EBP=0012E1CC KiFastSystemCallR>RETN ; EAX=FEEEFEEE, ECX=00000400, EDX=0014003D, EBP=0012E7F0 KiFastSystemCallR>RETN ; EAX=7CBC35C0, ECX=0012EBC8, EDX=00000002, EBP=0012E2D8 KiFastSystemCallR>RETN ; EAX=FEEEFEEE, ECX=00000326, EDX=00242CC0, EBP=0012E118 KiFastSystemCallR>RETN ; EAX=77038000, ECX=0000FFFF, EDX=00000002, EBP=0012DDE8 KiFastSystemCallR>RETN ; EAX=77C48A54, ECX=77C11868, EDX=7718DC00 KiFastSystemCallR>RETN ; EAX=77C494AC, ECX=77C1C21B, EDX=77032C00 KiFastSystemCallR>RETN ; EAX=00000000, ECX=00950000, EDX=7C90EB94, EBP=0012D3B0 KiFastSystemCallR>RETN ; EAX=77C49710, ECX=77825000, EDX=00000000, EBP=0012D080 KiFastSystemCallR>RETN ; EAX=77C496CC, ECX=77C37FCC, EDX=77AF3A00, EBP=0012CD50 KiFastSystemCallR>RETN ; EAX=77C48CF0, ECX=77C523D8, EDX=77B1DE00, EBP=0012D080 KiFastSystemCallR>RETN ; EAX=77C496CC, ECX=77C37FCC, EDX=76696800, EBP=0012CD50 KiFastSystemCallR>RETN ; EAX=77C490E8, ECX=77C24DF8, EDX=76C47B00, EBP=0012CA20 KiFastSystemCallR>RETN ; EAX=77C49470, ECX=77C2EEF6, EDX=76CA1A00, EBP=0012CD50 KiFastSystemCallR>RETN ; EAX=0012CB0C, ECX=7FFD9000, EDX=7FFDF000 KiFastSystemCallR>RETN ; EAX=0015D000, ECX=0012C728, EDX=00001000, EBP=0012CC2C KiFastSystemCallR>RETN ; EAX=E434B613, ECX=0095185C, EDX=00000000, EBX=74DF1519, EBP=0012D250, ESI=00243640, EDI=0012D224 KiFastSystemCallR>RETN ; EAX=00000000, ECX=00000001, EDX=FFFFFFFF 7C90E96C Main RETN 8 7C91E7D3 Main MOV DWORD PTR SS:[EBP-38],EAX 7C91E7D6 Main PUSH DWORD PTR DS:[ESI+18] 7C91E7D9 Main CALL LdrUnloadAlternateResourceModule ; EAX=0012D101, ECX=7C91A06C, EDX=7C97C0D8 7C91E7DE Main XOR EAX,EAX ; EAX=00000000 7C91E7E0 Main CMP BYTE PTR DS:[7C97C030],AL ......... ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
|
Создано: 26 января 2007 12:39 · Личное сообщение · #7 Если сможешь улучшить трейс - респект тебе и уважуха ![]() ![]() |
|
Создано: 27 января 2007 07:57 · Поправил: AlexZ · Личное сообщение · #8 |
|
Создано: 29 января 2007 23:26 · Поправил: Demon666 · Личное сообщение · #9 stahh Ближе к третьему билду, в первом только GUI… Что нового в бетке 0.3 (0.26 удалил) Исправлено: Если в строке встречался символ процент(%), отладчик падал… Некоторые CALL`ы плагин считал как системные API… Теперь на всех регистрах работает определение символьных строк… Добавлено: Незначительные изменения в интерфейсе ;) прикрутил функцию LastError Функция Loop[n/nz] – не дает записываться в лог повторяющимся циклам команд процессора LOOP/LOOPZ/LOOPNZ (Программно циклы в этой версии не прокручиваются!) Функция Anti PREFIX подробнее на ней остановлюсь, для чего нужна: Оля любительница комментировать лишние префиксы символьной строкой Superfluous prefix Вот код, который в отладчике запускался для записи логов: 00401000 B9 0A000000 MOV ECX,3 00401005 F2: PREFIX REPNE: ; Superfluous prefix 00401006 50 PUSH EAX 00401007 40 INC EAX 00401008 36: PREFIX SS: ; Superfluous prefix 00401009 2E:E2 FB LOOPD SHORT 00401007 ; Superfluous prefix 0040100C 58 POP EAX Вот результаты логов, которые писались параллельно Отладчика: Address Thread Command ; Registers and comments 00401005 Main PREFIX REPNE: 00401007 Main INC EAX ; EAX=00000001 00401008 Main PREFIX SS: ; ECX=00000002 00401007 Main INC EAX ; EAX=00000002 00401008 Main PREFIX SS: ; ECX=00000001 00401007 Main INC EAX ; EAX=00000003 00401008 Main PREFIX SS: ; ECX=00000000 Breakpoint at example.0040100C Плагина: EAX=00000000 ECX=0012FFB0 00401000 B9 03000000 MOV ECX,3 ECX=00000003 00401006 F2:50 PUSH EAX 00401007 40 INC EAX EAX=00000001 0040100A 36:2E:E2 FB LOOPD SHORT 00401007 EAX=00000003 ECX=00000000 ; вот здесь если у кого есть идеи что должно записаться чтобы понятнее цикл выглядел пишите желательно с примером, короче… отчет о цикле 0040100C 58 POP EAX Были включены опции Loop[n/nz] и Anti PREFIX Плагин с включенной функцией Anti PREFIX не позволяет нарушить правильности записи в лог исполняемых команд процессором, пишет присутствующие префиксы в коде только в HEX dump в одну строку, отделяя друг от друга двоеточием, как и должно, быть! ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
|
Создано: 01 марта 2007 11:02 · Личное сообщение · #10 TraceExpand plugin v0.36 (beta) Loop[n/nz]/Jcc/Jmp + счетчик циклов Значение счетчика циклов может быть от 0 до 16 Если 0, то циклы писаццо не будут… Если хочется увидеть вложенные циклы или рекурсивные увеличиваем значение, но это так для “юных математиков”… Указанное значение в Size (по умолчанию 320) позволяет не записывать циклы не превышающие (в байтах) этот размер Это то чего не догадались попросить, этот фильтр позволяет игнорировать маленькие вложенные циклы в больших циклах… Clear run trace освобождает ресурсы отладчика, от хлама ускоряя тем самым работу run trace… Так теперь о том, где плуг будет упираться Не обрабатываются извращенные выходы из циклов (в этой версии только джампы) Для примера вот такой простой код из прота плуг не обработает, вернее я временно добавил сигнатуру, но это универсальным методом назвать нельзя 0043C015 JMP SHORT 0043C021 0043C021 JLE SHORT 0043C01B 0043C01B CALL 0043C02B 0043C02B ADD DWORD PTR SS:[ESP],6 Stack SS:[0012FFBC]=0043C020 0043C02F RETN 0043C026 JBE SHORT 0043C018 0043C028 JA SHORT 0043C018 0043C018 JMP SHORT 0043C030 0043C030 DEC EBX Многим кажеццо, что это мусор из ненужных джампов, но на самом деле тут нет, не одного лишнего байта кода… Вся эта игра с джампами есть ничто иное, как защита от автоматических анализаторов полиморфов… причем самая простая из существующих. По этой причине многие не выдерживают и предпочитают статик-анализ… Также плагин не обрабатывает циклы, такие как у говнопрота, то есть, к примеру, полиморф в версии 2.2… у которого основа джампов через стЭк в цикле.., но рипнуть полиморфный движок при помощи плагина за 4-5 часов реально… Программного ускорителя циклов тоже нет (скорее всего, появяццо только с выходом новой версии отладчика, автор обещал улучшить две основные возможности…) И для Jmp счетчик косячить может, но это если файл превышает 20метров или вложенных циклов будет больше 1000 Так теперь пример как это заюзать (думаю надо это попробовать, чтобы действительно прихуеть…) Для примера взял прожку попроще так сказать, чтобы было понятно… www.password-protect-software.com/download/password-protect.exe до последнего исключения доходим как в статье “Шаг за шагом”. (LaBBa & Nice) я использовал стандартный метод 6A0C PUSH 0C (не приходиццо ничего считать) F2 на первый RET Shift+F9,F2 и F7 F2 на секции .code Теперь подключим к работе плагин меню->Debug-> Trace save log start (Ctrl+Z) меню->Plugins->TraceExpand->Options Loop[n/nz]/Jcc/Jmp 0 Address Hex dump Command String Comments Anti PREFIX Kill jmp 2 Trace into (Ctrl+F11) функу Clear run trace не включаем дабы потом сравнить! И курим пару минут (время зависит от мощности компа) Остановились, скролим вверх и видим нули (38) Ну, теперь надо их восстановить эти самые… меню->Debug-> Go to folder... и откроем наш лог (password-protect_log.txt) скролим вниз до конца а бля забыл, мы же нИхрена не знаем о проге =))) так нам надо знать, что мы будем искать в логе для этого запустим PEiD->Task Viewer ПЛМ на нашем процессе Load in PEiD (Dump) Microsoft Visual C++ 6.0 [Overlay] Берем любую прогу (no Pack) и смотрим, как выглядит EP Я взял для примера EffeTech HTTP Sniffer (Microsoft Visual C++ 7.0) 0040D771 PUSH EBP 0040D772 MOV EBP,ESP 0040D774 PUSH -1 0040D776 PUSH 004127F8 0040D77B PUSH 0040FEF4 0040D780 MOV EAX,DWORD PTR FS:[0] 0040D786 PUSH EAX 0040D787 MOV DWORD PTR FS:[0],ESP 0040D78E SUB ESP,58 0040D791 PUSH EBX 0040D792 PUSH ESI 0040D793 PUSH EDI 0040D794 MOV DWORD PTR SS:[EBP-18],ESP Теперь нам надо найти такие байты в логе – поищем 009A781B 55 PUSH EBP 009A7820 8F4424 00 POP DWORD PTR SS:[ESP] Stack SS:[0012FFBC]=0012FFF0 009A7824 8BEC MOV EBP,ESP 009A7826 6A FF PUSH -1 009A7828 68 40574400 PUSH 445740 009A782D 68 80024200 PUSH 420280 009A7832 64:A1 00000000 MOV EAX,DWORD PTR FS:[0] 009A7838 66:812D 41789A00 3E36 SUB WORD PTR DS:[9A7841],363E DS:[009A7841]=EB64 009A784A 8D643C FE LEA ESP,DWORD PTR SS:[ESP+EDI-2] 009A784E 2BE7 SUB ESP,EDI 009A7850 81EC 02000000 SUB ESP,2 009A7859 50 PUSH EAX 009A785E 8F4424 00 POP DWORD PTR SS:[ESP] Stack SS:[0012FFAC]=009AAE24, 009A7862 64:8925 00000000 MOV DWORD PTR FS:[0],ESP FS:[00000000]=[7FFDE000]=0012FFB0 009A7869 83EC 58 SUB ESP,58 009A786C 66:812D 75789A00 3E36 SUB WORD PTR DS:[9A7875],363E DS:[009A7875]=EB64 009A787E 8D643C FE LEA ESP,DWORD PTR SS:[ESP+EDI-2] 009A7882 2BE7 SUB ESP,EDI 009A7884 81EC 02000000 SUB ESP,2 009A788D 53 PUSH EBX 009A7892 8F4424 00 POP DWORD PTR SS:[ESP] Stack SS:[0012FF50]=7FFDF000 009A7896 66:812D 9F789A00 3E36 SUB WORD PTR DS:[9A789F],363E DS:[009A789F]=EB64 009A78A8 8D643C FE LEA ESP,DWORD PTR SS:[ESP+EDI-2] 009A78AC 2BE7 SUB ESP,EDI 009A78AE 81EC 02000000 SUB ESP,2 009A78B7 56 PUSH ESI 009A78BC 8F4424 00 POP DWORD PTR SS:[ESP] Stack SS:[0012FF4C]=FFFFFFFF 009A78C0 66:812D C9789A00 3E36 SUB WORD PTR DS:[9A78C9],363E DS:[009A78C9]=EB64 009A78D2 8D643C FE LEA ESP,DWORD PTR SS:[ESP+EDI-2] 009A78D6 2BE7 SUB ESP,EDI 009A78D8 81EC 02000000 SUB ESP,2 009A78E1 57 PUSH EDI 009A78E6 8F4424 00 POP DWORD PTR SS:[ESP] Stack SS:[0012FF48]=7C910738 (ntdll.7C910738) 009A78EA 8965 E8 MOV DWORD PTR SS:[EBP-18],ESP Stack SS:[0012FFA8]=0012FF4C 009A78F4 68 9E084200 PUSH 42089E 009A78F9 68 00779A00 PUSH 9A7700 009A78FE C3 RETN 009A7703 51 PUSH ECX 009A7704 57 PUSH EDI 009A7705 9C PUSHFD 009A7706 FC CLD 009A7707 BF 44779A00 MOV EDI,9A7744 009A770C B9 5E140000 MOV ECX,145E 009A7711 F3:AA REP STOS BYTE PTR ES:[EDI] ES:[EDI]=[009A7744]=24 ('$') 009A7713 9D POPFD Stack [0012FF3C]=00000202 (O0 D0 T0 S0 Z0 A0 P0 C0) 009A7714 5F POP EDI 009A7715 59 POP ECX 009A7716 C3 RETN 0042089E FF15 70114400 CALL NEAR DWORD PTR DS:[441170] DS:[00441170]=00991C8C Посчитаем бинарик хм… 38 то, что надо Ну, а теперь откроем окно у Оли Run trace и сравним =))) Потраченного времени меньше пяти минут… Kill jmp - очень нужная и полезная функция плагина Не для кого не секрет что проты любители пасрать в код джампами, причем ненужными и нарушающими анализ кода отладчиком Kill jmp безжалостно убивает их, причем не только JMP, но и JCC тоже которые являются мусором И еще если, к примеру, выбрать запись в лог двух очень сложных циклов, то плагин может записать около 16000 строк, но если анализ полиморфного движка не так важен, то при включении функции Kill jmp (127) плагин запишет 500 строк Еще некоторые проты устраивают игры с системными функциями – эта версия не может корректно их обрабатывать и если функция System DLLs включена, то запись в лог будет прекращаться полностью, да и, скорее всего корректная работа и связанные дополнительные с этим функции на паб… Короче… обойти это можно склеиванием логов, начиная с адреса, где была прервана запись… Реализация полиморфа в этот мир принесла только – зло! защищают протами свои творения говнокодеры дабы скрыть свою некомпетентность и 70% использования в своих программах чужого кода – совет им один, вытащить голову из жопы!!! ![]() ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
|
Создано: 02 марта 2007 08:41 · Личное сообщение · #11 |
|
Создано: 03 марта 2007 05:11 · Личное сообщение · #12 |
|
Создано: 03 марта 2007 07:59 · Личное сообщение · #13 |
|
Создано: 03 марта 2007 22:21 · Личное сообщение · #14 |
|
Создано: 05 марта 2007 08:39 · Личное сообщение · #15 lord_Phoenix Так что? Вердикт-то, какой(?) или тоже времени нет??? =) P. S. (мысли в слух) Ссылка, к теме топика относиццо – так нА-всякий случай запостил Хакерские трюки или как поставить бряк на "jmp eax" http://www.insidepro.com/kk/124/124r.shtml Для тех, кто нИразу не грамотный обязательное чтиво… (что такое "трассировка") =))) Говнотеория из статьи: очень сложная задача, которую можно осуществить только написав свой собственный дизассемблер длин, а это... уже настоящий монстр получается! Такие вещи лучше писать на Си и цеплять к отладчику как плагин, тем более, что исходные тексты дизассемблера распространяются вместе с OllyDbg (http://www.ollydbg.de/srcdescr.htm), а, значит, основная часть работы уже сделана за нас. Остальное доделает... Perl (c)Крис Касперски ака мыщъх прежде чем писать такое, надо хорошо перед этим подумать, ведь читать будет (прочитало), наверное, очень много людей! Советую ака мыщъх посмотреть: Ollydbg-> PLUGINS->PSDK “можно осуществить только написав свой собственный дизассемблер длин, а это... уже настоящий монстр получается!(ц)”-> Readcommand& Disasm(вот этот монстр помощнее да побыстрее будет, возможности, которого ограничиваются только фантазией…) “Остальное доделает... Perl(ц)”-LOL, я пацтолом целый час был… ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
|
Создано: 15 апреля 2007 17:20 · Личное сообщение · #16 Ламоистория, может кого улыбнет ![]() Поставив перед собой много пива, решил сегодня расслабиться, ну и потестить движок для автоматического заполнения баз сигнатур… Тупо почесав моск, при этом, выпив одну баночку пива, я все-таки выбрал жертву для теста, им оказался VMProtect… Решил я не напрягаццо, вступил и скомпилировал проект-ик “ЗдраствуйМир” (на Del(Пии..)), ну и заодно сталобыть истЕну найти %) Открыл я этот ламопрот(Demo(!)),ну и выбрал в нем свою суперпрогу (ЗдраствуйМир) и опцию “мутация” (“EntryPoint”) После этого отправил на дальняк ламопрот подумать… и о чудо(!!!) он ВЫсрал супермегапрогу!!!!.... О(!) дааа, а он меня не разочаровал, она запускаеццо!!! (фуххх.., первый этап пройден, птьфу- птьфу) Ну, сталобыть запускаем сразу две Оли, в первой оригинал, во второй не ломаемая супермегапрога… Запустил я свой движок, смотрю, а он мне выдал код, ну очень похожий на оригинал EP, только вместо валидных адресов стоят вопросы… Хм… допивая вторую баночку пива, толчок мысли, а дай думаю копипаст сделаю… Выделил в оригинале до нулей бинарик и, скопировав, делаю паст по тем же адресам в моей не ломаемаемой супермегапроге и сохраняю это дело… Оригинал (copy) 0044E874 PUSH EBP 0044E875 MOV EBP,ESP 0044E877 ADD ESP,-10 0044E87A MOV EAX,0044E694 0044E87F CALL 00406064 0044E884 MOV EAX,DWORD PTR DS:[44FFCC] 0044E889 MOV EAX,DWORD PTR DS:[EAX] 0044E88B CALL 0044CE40 0044E890 MOV ECX,DWORD PTR DS:[4500A8] 0044E896 MOV EAX,DWORD PTR DS:[44FFCC] 0044E89B MOV EAX,DWORD PTR DS:[EAX] 0044E89D MOV EDX,DWORD PTR DS:[44E4B4] 0044E8A3 CALL 0044CE58 0044E8A8 MOV EAX,DWORD PTR DS:[44FFCC] 0044E8AD MOV EAX,DWORD PTR DS:[EAX] 0044E8AF CALL 0044CED8 0044E8B4 CALL 004040E8 0044E8B9 LEA EAX,DWORD PTR DS:[EAX] Жертва (paste) 0044E874 JMP 0044E879 0044E879 TEST SP,0C768 0044E87E PUSH EBP 0044E87F INC AL 0044E881 AAS 0044E882 INC BP 0044E885 LEA EBP,DWORD PTR DS:[EDI+D6283D39] 0044E88B MOV EBP,ESP 0044E88D AAD 0F 0044E88F ROR AL,CL 0044E891 DAA 0044E892 ADD ESP,-10 0044E895 PUSHFD 0044E896 NOT EAX 0044E898 MOV EAX,0044E694 0044E89D PUSHFD 0044E89E PUSHAD 0044E89F LEA ESP,DWORD PTR SS:[ESP+28] 0044E8A3 CALL 00406064 0044E8A8 BSWAP EAX 0044E8AA MOVSX AX,CL 0044E8AE NOT AL 0044E8B0 MOV EAX,DWORD PTR DS:[44FFCC] 0044E8B5 CALL 00456006 0044E8BA POP ESP 0044E8BB JA SHORT 0044E8BD Старт(!) и что мы видим, а прога запустилась и МУТАТОРА, как и не было двумя щелчками мыши %) Пойдем дальше, почитаем редми: Про историю я молчу, она походу писялась для конченых бакланов, которые свято верят в непобедимость защиты… а да, чуть не забыл, там есть опция, которая является просто не заменимой при взломе других прог - при восстановлении импорта ;) (Ну что ж, кто нам вредит, тот нам и поможет (ц) PE_Kill) Цитата: Мутация. Исполняемый код видоизменяется на уровне команд процессора (существующие команды видоизменяются, добавляются различные мусорные команды и т.д.). Данный тип компиляции слабо защищает обрабатываемый код от взлома и анализа -1 (правильнее будет сказать, вообще не защищает!!!) За это ламо просят на оффсайте 3500&7000 плюс время (которое стоит дороже) на тестирование… Приговор: Полный дерьмолохотологический развод… Пссс От писателейговнозащит претензии не принимаюццо, сталобыть не достойные сцуко!!! Это предупреждение(!) в следующий раз не коверкайте доброе имя CRACKL@B!!!!... ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
|
Создано: 15 апреля 2007 18:55 · Поправил: Hellspawn · Личное сообщение · #17 |
|
Создано: 15 апреля 2007 21:09 · Личное сообщение · #18 |
|
Создано: 16 апреля 2007 03:13 · Личное сообщение · #19 Маленький анонс (обещать ничего не буду, но постараюсь ближе к субботе/воскресению) выложить без предварительного тестирования бетку 0.4, времени катастрофически не хватает… ![]() В плуге появиться новый раздел таба Signatures В нем пока будут доступен только Black list И три функи (фейс сразу скажу убойный, буду надеяццо, что работать будет у всех) Первая Filter garbage Здесь можно будет заполнять сигнатуры (100 штук), которые будут запрещать в лог запись кода соответствующий требованию этих сигнатур То есть, если для примера сделать одну сигну 90909090, то плуг, если встретит четыре NOP`а, их не запишет в лог, тем самым можно делать своего рода маски по очистке от мусора, длина маски может составлять до одного килобайта, причем в разных комбинациях… Ну, а теперь не падать пацтол и неубиваццо апстену %) Синтаксис самих сигнатур, варианты Просто 90… и т. д. (длина одной сигны, скорее всего, будет 32 байта) Просто E9????????... – эта сигна позволит запретить любого JMP имеющего опкод E9 Просто ?9 ну или E? – FE C0 3? 66 ?F C5… (тут я пробелы специально вставил для наглядности) Ну и для тех, кто дизасмит в уме слету ![]() Напряжно (00?1??01) – это побитовые сигны одного байта, там, где вопросы плугу будет пох, что там за бит, а остальные будут сравниваться на наличие инфы в бите, если 0 бит, не установлен, 1 установлен Пример сигнатуры FE C0 3? (00?1??01) ?F C5… Так теперь о базе В одной базе 100 сигнатур может быть Неограниченное число баз сигнатур, имя базы пишем сами любое 255 символов Будет присутствовать возможность включения/выключения сигнатур в базе, тоже неограниченно (там чекобоксы имеюццо у каждой добавляемой сигнатуры) Вторая banning CALL Иногда бывает нужно записать цикл, но в нем может быть много CALL`ов от которых важен только результат и из-за них лог может получаться большой… Эта функа позволяет выбрать, какие CALL`ы запретить записывать, все просто находим любую подходящую сигну в этом CALL`е и записываем в базу Но также можно в дополнительных опциях выбрать возможность Floating Signatures и установить счетчик диапазон сканирования в байтах… все короче заипался я уже писать… все равно всех возможностей не смогу описать… P. S. если у кого есть идеи, пишем(!), вот это была бы неоценимая помощь… ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
|
Создано: 16 апреля 2007 11:43 · Личное сообщение · #20 Demon666 пишет: Тупо почесав моск, при этом, выпив одну баночку пива, я все-таки выбрал жертву для теста, им оказался VMProtect: Решил я не напрягаццо, вступил и скомпилировал проект-ик "ЗдраствуйМир" (на Del(Пии..)), ну и заодно сталобыть истЕну найти %) Открыл я этот ламопрот(Demo(!)),ну и выбрал в нем свою суперпрогу (ЗдраствуйМир) и опцию "мутация" ("EntryPoint") Перед тем как тупо чесать моск, не плохобы почитать что пишут про режим "мутация" разработчики VMProtect: * Мутация. Исполняемый код видоизменяется на уровне команд процессора (существующие команды видоизменяются, добавляются различные мусорные команды и т.д.). Данный тип компиляции слабо защищает обрабатываемый код от взлома и анализа и главным образом припятствует определению обрабатываемых функций с помощью сигнатурных анализаторов (PEiD+KANAL, IDA+FLIRT и т.д.). Как правило библиотечные функции не нуждаются в защите от взлома и анализа и достаточно будет только изменить их сигнатуры, чтобы взломщик не смог автоматически определить какие именно библиотеки Вы используете в своем приложении (степень защиты от взлома и анализа - низкая, скорость исполнения кода - высокая).
Demon666 пишет: Мутация. Исполняемый код видоизменяется на уровне команд процессора (существующие команды видоизменяются, добавляются различные мусорные команды и т.д.). Данный тип компиляции слабо защищает обрабатываемый код от взлома и анализа -1 (правильнее будет сказать, вообще не защищает!!!) Приводи цитаты из мануала до конца ![]() Данный тип компиляции слабо защищает обрабатываемый код от взлома и анализа и главным образом припятствует определению обрабатываемых функций с помощью сигнатурных анализаторов (PEiD+KANAL, IDA+FLIRT и т.д.). Как правило библиотечные функции не нуждаются в защите от взлома и анализа и достаточно будет только изменить их сигнатуры, чтобы взломщик не смог автоматически определить какие именно библиотеки Вы используете в своем приложении DEMO вообще предназначена для ознакомления с продуктам и все дополнительные возможности (в том числе и продвинутая мутация) представлены ТОЛЬКО в полной версии. Demon666 пишет: Приговор: Полный дерьмолохотологический развод… Пссс От писателейговнозащит претензии не принимаюццо, сталобыть не достойные сцуко!!! Это предупреждение(!) в следующий раз не коверкайте доброе имя CRACKL@B!!!!... Гыыы ![]() ![]() |
|
Создано: 16 апреля 2007 15:23 · Личное сообщение · #21 WASM.RU dermatolog пишет: Да нет - тут как раз все с точность наоборот - сказать нечего как раз тебе. Я заметил любой спор ты постоянно пытаешься свести к своим "мегакрутым" продуктам (хоть WASM, хоть RSDN, хоть СРЯКЛАБ), это такой новый вид рекламы что-ли? dermatolog Покайтесь(публично!) и сталобыть первый после бога вас простит… (ц) ИМХО – dermatolog мегакультно-облажался сталобыть достоин ВЕЧНОГО БАНА!!! Ни одного полезного поста на форуме, один пьиар (реклама) VMProtect`а от него! dermatolog пишет: Перед тем как тупо чесать моск, не плохобы почитать что пишут про режим "мутация" разработчики VMProtect: ЛОЛ!!! Просто “мутоген” говнопрота немного ПАсрал на EP и не одной команды не замутогенил (сталобыть неасилил %)), все в чистом виде, один секундный проход моего движка, одним махом снял весь говномусор… Ваша команда в корне НЕЗНАЕТ, что такое настоящий мутатор, идите НАХ через гугЫль просвещайтесь и НЕ ПОЗОРЬТЕСЬ… dermatolog пишет: главным образом припятствует определению обрабатываемых функций с помощью сигнатурных анализаторов (PEiD+KANAL, IDA+FLIRT и т.д.). Не смешите я уже поцталом, ЛОЛ!!! Нашли же чем потешить народ KANAL ОНИ наипали %), детский сад мля, ВЫ очередной раз на паблике свою деградацию говнозащит показываете… Правильно сделал Зумик, что над вами тогда прикололся, просто в то время народ по достоинству не оценил его ЮМОР, он на паблике засветил несостоятельность ваше ГОВНОПРОГРАММЕРСКОЙ команды… dermatolog ИДИТЕ, ПОДМОЙТЕСЬ!!! Demon666 пишет: ну и заодно сталобыть истЕну найти %) Demon666 пишет: Пссс От писателейговнозащит претензии не принимаюццо, сталобыть не достойные сцуко!!! Это предупреждение(!) в следующий раз не коверкайте доброе имя CRACKL@B!!!!... Ну, а теперь сталобыть докажи и покажи где я неправ, а? ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
|
Создано: 16 апреля 2007 15:34 · Поправил: lord_Phoenix · Личное сообщение · #22 |
|
Создано: 16 апреля 2007 15:43 · Личное сообщение · #23 |
|
Создано: 16 апреля 2007 16:09 · Личное сообщение · #24 |
|
Создано: 16 апреля 2007 16:46 · Личное сообщение · #25 |
|
Создано: 16 апреля 2007 17:30 · Личное сообщение · #26 |
|
Создано: 16 апреля 2007 17:37 · Личное сообщение · #27 |
|
Создано: 16 апреля 2007 17:48 · Личное сообщение · #28 |
|
Создано: 16 апреля 2007 17:51 · Личное сообщение · #29 |
|
Создано: 16 апреля 2007 19:19 · Личное сообщение · #30 Сразу извиняюсь за свой падоновский гонор, но вроде он был разрешен в оффтопе… lord_Phoenix Это не разборки!!! И все имеет прямое отношение к двигуразбораVM!!! Заметь я первый начал разговор о протекторе, и знал, что произойдет наперед… Ara ВЫ просите ЗА МЕНЯ совершено неТО!!! Мне нужен приватный VMProtect->full + паблик разрешение от оффразроботчиков на релиз ОПЕНСОРСА VMProtect`а (самого прота!!!) Сталобыть отказ dermatolog от авторских прав, если он конечно не являеццо обычным бАрыгой Я лично сталобыть обещаю, буду релизить сорсы, когда будет свободное время в качестве доказательства на другом языке программирования, ВОТ мои условия!!! Ara ПОПРОСИТЕ, ПОЖАЛУЙСТА(!!!) его выполнить мои требования!!! он ведь неломаемый %) сталобыть вам нечего бояццо… ;P P. S. А срякмиксссс оставьте себе, НА ПАМЯТЬ ;) ----- ЗЫ: истЕна где-то рядом, Welcome@Google.com ![]() |
. 1 . 2 . >> |
![]() |
eXeL@B —› Оффтоп —› OllyDBG Trace... |