eXeLab
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
обновлён 2 декабря!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

Русский / Russian English / Английский

Сейчас на форуме: Adler, korsaring (+1 невидимый пользователь)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS · SVN ·

 eXeL@B —› Основной форум —› Антиотладочные приемы
<< . 1 . 2 . 3 . 4 . 5 .
Посл.ответ Сообщение

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

Создано: 6 июля 2008 12:07 · Поправил: Sturgeon New!
Цитата · Личное сообщение · #1

На днях откопал свою писульку про антиотладку. В свое время собирал всякий материал, в основном английский, переводил и собирал во одну доку. Вот решил выложить, чтобы попинали.
Может кому-то из чайников вроде меня пригодится. Хотя, конечно, хочется, чтобы кто-то из опытных реверсеров посмотрел и указал на ошибки, неточности перевода и т.д.


Ранг: 481.4 (мудрец)
Статус: Участник
Тот самый :)

Создано: 3 января 2009 01:16 New!
Цитата · Личное сообщение · #2

progopis, чо-то я не прохавал где тут антиотладка?

Антиотладка это если бы они два раза замерили, вычли и получили число неравное 0. А у тебя тут цикл, до тех пор пока не пройдет одна милисекунда.


Статус: Пришелец

Создано: 3 января 2009 01:31 · Поправил: progopis New!
Цитата #3

Если ты не понял в чём антиотладка объясню. Когда нет отладчика пройдёт, как ты верно заметил, одна миллисекунда и код пойдёт выполняться дальше. Когда он есть И (!!!) стоит анти-антиотладочный плагин типа HideDebugger.dll (прикрученный к IDA через Stealth), значение всегда будет 0 - получаем бесконечный цикл. Да, я согласен, если бы не было Stealth'а - то всё было бы ок. Но тогда отладчик легко спалить другими методами антиотладки. И тут меня осенило и я выключил флаг GetTickCount в IDA Stealth - теперь всё ок. А код который там был могу запостить здесь, чтобы разработчик защиты понял, что за него уже взялись :

Code:
  1. _Rex_UNPK_dll:009A1C7D  cmp     ds:dword_0_9AE104, 0
  2. _Rex_UNPK_dll:009A1C84  mov     [ebp+var_50], edx
  3. _Rex_UNPK_dll:009A1C87  jnz     short loc_0_9A1CA0
  4. _Rex_UNPK_dll:009A1C89  call    loc_0_9ADB62
  5. _Rex_UNPK_dll:009A1C8E  mov     ds:dword_0_9AE104, eax
  6. _Rex_UNPK_dll:009A1C93
  7. _Rex_UNPK_dll:009A1C93  loc_0_9A1C93:                           ; CODE XREF: sub_0_9A1C50+4Ej
  8. _Rex_UNPK_dll:009A1C93  call    loc_0_9ADB62
  9. _Rex_UNPK_dll:009A1C98  cmp     eax, ds:dword_0_9AE104
  10. _Rex_UNPK_dll:009A1C9E  jz      short loc_0_9A1C93
  11. _Rex_UNPK_dll:009A1CA0

P.S. Мораль: с учётом всего выше сказанного, можно с уверенностью сказать, что защиту писал крекер.


Ранг: 481.4 (мудрец)
Статус: Участник
Тот самый :)

Создано: 3 января 2009 01:39 New!
Цитата · Личное сообщение · #4

А мы тут телепаты...


Статус: Пришелец

Создано: 3 января 2009 01:50 · Поправил: progopis New!
Цитата #5

Hexxx пишет:
А мы тут телепаты...


Этот jnz (0x9A1C87) на сказанное мной в правленном выше посте не влияет.

P.S. Если твоя логика не привела тебя к моему выводу, то это проблема не телепатии, а твоя личная. Я это говорю без агрессии, не пытаюсь тебя обидеть. Но, тем не менее, ты не прав.

Ранг: 329.1 (мудрец)
Статус: Участник

Создано: 3 января 2009 09:24 New!
Цитата · Личное сообщение · #6

На сайте www.tuts4you.com/request.php?2544 появилась первая часть статьи Peter Ferrie "Anti-Unpacker Tricks 2 - Part 1". Желающие могут скачать и ознакомиться с нею.


Статус: Пришелец

Создано: 3 января 2009 10:33 · Поправил: progopis New!
Цитата #7

vnekrilov
Спасибо за материал. Забавно, про MeltICE уже молчат. Вроде как и не метод уже. Зато "MeltICE для Syser" есть. Код для поимки трассировки особенно порадовал, не стандартно. Хотя на сколько я знаю для Syser'а пофиг на эти методы - он единственный известный мне отладчик (не считая эмулирующих) который не боится флаг трассировки.

Статья интересная, но особо нового в ней пока не было. Будем ждать следующие части.

Вообще есть вопрос: кто-нибудь делал сравнительную таблицу по обнаружению отладчиков различными методами? У меня такая таблица есть, но сделана она с помощью проекта AntiSoftICE, который не обладает достаточным кол-вом приёмов обнаружения. Как SoftICE не палится при проходе call XXXXXX при трассировке до сих пор не понял.


Ранг: 481.4 (мудрец)
Статус: Участник
Тот самый :)

Создано: 5 января 2009 17:34 New!
Цитата · Личное сообщение · #8

progopis пишет:
P.S. Если твоя логика не привела тебя к моему выводу, то это проблема не телепатии, а твоя личная. Я это говорю без агрессии, не пытаюсь тебя обидеть. Но, тем не менее, ты не прав.


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


Статус: Пришелец

Создано: 5 января 2009 17:52 New!
Цитата #9

Hexxx пишет:
бесконечный цикл длиной 1 милисекунда.


Ты меня за идиота держишь?

Hexxx пишет:
человек постит маленький кусок кода, а подразумевает больший

Прочитай мой пост внима-а-ательно! Я ничего не подразумевал. В следующий раз специально для тебя отпущу всю программу, ок?

Ранг: 1045.7 (!!!!)
Статус: Участник

Создано: 5 января 2009 17:53 New!
Цитата · Личное сообщение · #10

progopis пишет:
с учётом всего выше сказанного, можно с уверенностью сказать, что защиту писал крекер. Возможно кто-нибудь вроде AHTeam.

ткни пальцем в любой прот котрый запускется на одной из десяти машин типа NSEProtect, LARP и т.д ..
и можно с уверенностью сказать, что защиту писал крекер, бездумно нафаршировав антиотладкой


Статус: Пришелец

Создано: 5 января 2009 17:56 New!
Цитата #11

pavka
Да это вообще был странный код, поэтому была такая фраза. Я сначала думал, что защиту писали для этой проги отдельно. Оказалось, что это код Refox XI+.

Обратите внимание на _Rex_UNPK_dll - видимо Refox Unpacker...


Ранг: 660.7 (! !)
Статус: Участник
ALIEN Hack Team

Создано: 5 января 2009 23:45 New!
Цитата · Личное сообщение · #12

pavka
LARP вроде бы без проблем запускается. Антидебаг злой, конечно, но про бездумность Лены слышу впервые.

Ранг: 329.1 (мудрец)
Статус: Участник

Создано: 7 января 2009 06:45 · Поправил: vnekrilov New!
Цитата · Личное сообщение · #13

Я что-то не нашел топика по Java, а также не имея желания создавать новый топик, решил выложить информацию на этом топике. По ссылке http://ricardonarvaja.info/WEB/CURSO%20NUEVO/TEORIAS%20NUMERADAS/1001- 1100/1089-Covert_Java_-_Techniques_For_Decompiling__Patching__And_Reve rse_Engineering__2004_.pdf.7z http://ricardonarvaja.info/WEB/CURSO%20NUEVO/TEORIAS%20NUMERADAS/1001-1100/1089-Covert_Java_-_Techniques_For_Decompiling__Patching__And_Reverse_Engineering__2004_.pdf.7z можно скачать прекрасную книгу Алекса Калиновски "Covert Java: Techniques for Decompiling, Patching, and Reverse Engineering" (на английском языке). Вдруг кому-то понадобится эта информация.

Ранг: 1045.7 (!!!!)
Статус: Участник

Создано: 11 января 2009 13:59 New!
Цитата · Личное сообщение · #14

bbs.cracktool.com/viewthread.php?tid=31681&extra=page%3D1
shoooo the anti-od1.1 analysis (also posted a profit here, ha ha UB)
I would like to talk about my understanding of the process of it (I was a big rookie, a master joke Mo dual ah):
OD loading anti-od1.1, results not to the point of entry OD was FUCK, the guess is the question of importation of table.
Loadpe Canal opened, the importation of Table View, point L to see the back of a lot of Ntdll line (excited).
Name: 0x000040A8 ( "ntdll

Point H Open 40A8 Department to look at the back a lot of 0D0A, 0D0A is a carriage return line meant to lead a lot of 00 after the end of 0D0A. Here I thought it was a simple system to recognize the 0D0A, OD did not know the cause of the error. Then put aside. It was issued today to see the analysis of the post, given the results of shoooo solutions that only the symptoms, here I thought I had the wrong idea.
Guess it does not appear alone do not work.

loadpe open again, I 0D0A changed the whole 3333 is ntdl333333333333. . . The results of running the same program, it appears that the input table entry system useless when filled with IAT, the obvious in the input table, the system did not how to fill it? Had no choice but to point Ntdll the importation of table entry carefully read, point H from OriginalFirstThunk, FirstThunk order to see. Finally found the problem FirstThunk, as long as FirstThunk Department (anti-od1.1ntdll is 409C) the value of value is 0, this table entry is not filled. I 409C Department arbitrarily changed the value of value of non-0, Ai Iijima not up on the run (unless ntdll, ZwSetInformationProcess into the end of 00). I also tried the values behind Kernel32.dllFirstThunk value, as long as the first not to 0, normally filled.
Here the problem of uncertainty, shoooo use FirstThunk construct a useless form of input, as long as the value of Office FirstThunk value to 0, the input form of the name and function can be obtained, when the system is running anyway, no matter. But our OD on the point of death, it will read the names from this chaos, if the malicious structure names, the consequences are very serious.

OK, we do under our OD patch it first FirstThunk Department to determine the value to 0 on no matter the time of the next table.

Wordy for a long time, huh, huh. A copy of OD, with the goal open OD copy OD process, F9, object program loading antiod,
004A4EE5 3A5B 17 cmp bl, byte ptr ds: [ebx +17] Department has gone wrong under the Department 4A4ED8 off reload procedures, once again loading antiod note abnormal off the last of the return value, 45DAED
Too long to see this function, I posted under the main code
0045D0E6> / 6A 03 push 3
0045D0E8. | 6A 14 push 14
0045D0EA. | 8B45 CC mov eax, dword ptr [ebp-34]
0045D0ED. | 0345 BC add eax, dword ptr [ebp-44]
0045D0F0. | 0345 FC add eax, dword ptr [ebp-4]
0045D0F3. | 50 push eax
0045D0F4. | 8D95 30F9FFFF lea edx, dword ptr [ebp-6D0]
0045D0FA. | 52 push edx
0045D0FB. | E8 0C420000 call _Readmemory / / / / here to read a IMAGE_IMPORT_DESCRIPTOR
0045D100. | 83C4 10 add esp, 10
0045D103. | 85C0 test eax, eax
0045D105. | 75 0C jnz short 0045D113
0045D107. | C745 F4 02000> mov dword ptr [ebp-C], 2
0045D10E. | E9 1C050000 jmp 0045D62F
0045D113> | 83BD 3CF9FFFF> cmp dword ptr [ebp-6C4], 0
0045D11A. | 0F84 0F050000 je 0045D62F
0045D120. | 6A 03 push 3
0045D122. | 68 04020000 push 204
0045D127. | 8B4D CC mov ecx, dword ptr [ebp-34]
0045D12A. | 038D 3CF9FFFF add ecx, dword ptr [ebp-6C4]
0045D130. | 51 push ecx / / / NameRVA
0045D131. | 8D85 78FDFFFF lea eax, dword ptr [ebp-288]
0045D137. | 50 push eax
0045D138. | E8 CF410000 call _Readmemory / / Reading Name of
0045D13D. | 83C4 10 add esp, 10
0045D140. | 85C0 test eax, eax
0045D142. | 75 4E jnz short 0045D192

We need to finish IMAGE_IMPORT_DESCRIPTOR also not read when the Name of the patch to determine FirstThunk
0045D11A Department patch on. I began looking for a piece of code segment 0 string, the result changed from preservation, depressing! I would add a section of their own VA: 1AA000
45D11A Department changed
0045D11A .- E9 E1CE1400 jmp 005AA000
0045D11F 90 nop
Department 5AA000 code to write:
005AA000 - 0F84 2936EBFF je 0045D62F
005AA006 60 pushad
005AA007 6A 00 push 0
005AA009 6A 04 push 4
005AA00B 8B4D CC mov ecx, dword ptr [ebp-34]
005AA00E 038D 40F9FFFF add ecx, dword ptr [ebp-6C0]
005AA014 68 50A05A00 push 005AA050
005AA019 51 push ecx ///// FirstThunk value 409C
005AA01A A1 685A4D00 mov eax, dword ptr [4D5A68]
005AA01F 50 push eax
005AA020 E8 4951F0FF call <jmp.&KERNEL32.ReadProcessMemory>
005AA025 A1 50A05A00 mov eax, dword ptr [5AA050]
005AA02A 85C0 test eax, eax
005AA02C 61 popad
005AA02D - 0F85 ED30EBFF jnz 0045D120 / / / not to 0 to continue the implementation of
005AA033 - E9 DC35EBFF jmp 0045D614 / / / to 0 to add size, have already read, read the next IMAGE_IMPORT_DESCRIPTOR
005AA038 90 nop

Then save it. Use this modified OllyICE.exe to try to open antiod No problem, something else to load the procedure did not make mistakes.


Halo how to commentary illegal ah? Summed up under this BUG:
System to load the process of filling IAT is: first to determine the IAT array FirstThunk point, if for not filling the empty structure, and then judge OriginalFirstThunk, there used OriginalFirstThunk point to calculate the address of INT filled FirstThunk point load time IAT.OD input table did not determine the first step, resulting in invalid time I enter the table attached to the revised OllyICE.exe


Ранг: 990.3 (! ! !)
Статус: Модератор
Author of DiE

Создано: 11 января 2009 20:22 · Поправил: Hellspawn New!
Цитата · Личное сообщение · #15

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

да, именно import bug.


Ранг: 238.8 (наставник)
Статус: Участник
CyberHunter

Создано: 11 января 2009 20:50 New!
Цитата · Личное сообщение · #16

Я правильно понял, эта таже бага что юзается в NoobyProtect SE 1.1.6.0 ?


Ранг: 116.6 (ветеран)
Статус: Участник

Создано: 12 января 2009 07:10 New!
Цитата · Личное сообщение · #17

Flint пишет:
Я правильно понял, эта таже бага что юзается в NoobyProtect SE 1.1.6.0 ?

Да. Багу опубликовал shoooo, а потом её кетайцы растащили по своим протекторам )


Ранг: 660.7 (! !)
Статус: Участник
ALIEN Hack Team

Создано: 12 января 2009 10:39 New!
Цитата · Личное сообщение · #18

dermatolog
Думаю, в недалёком будущем не только китайцы перенесут её на свои ВМпроты


Ранг: 539.6 (!)
Статус: Участник
оптимист

Создано: 15 февраля 2009 04:48 · Поправил: ClockMan New!
Цитата · Личное сообщение · #19

На тутси выложели новые статьи про антиотладку --> Anti-Unpacking Tricks 2 - Part 2 <-- http://www.tuts4you.com/download.php?view.2630

Ранг: 255.8 (наставник)
Статус: Участник
vx

Создано: 22 марта 2009 03:34 · Поправил: Clerk New!
Цитата · Личное сообщение · #20

Заметил интересную особенность. Если под олей освободить файловую проецию, то по возврату из сервиса взводится TF(по возврату в ядре из NtUnmapViewOfSection содержит TRAP_FRAME взведённый TF), вероятно при обработке нотификации о выгрузке модуля оля устанавливает TF в контексте потока, не смотрел, впрочем кому интересно тот расковыряет. Пример:
Code:
  1. invoke LoadLibrary, addr DllName
  2. invoke ZwUnmapViewOfSection, NtCurrentProcess, eax

Модель вызова сервиса подчиняется определённым правилам, соответственно изза взведённого TF под отладчиком Edx = -1, не зависимо от трассировки.
<< . 1 . 2 . 3 . 4 . 5 .
 eXeL@B —› Основной форум —› Антиотладочные приемы

Оригинальный DVD-ROM: eXeL@B DVD !

Вы находитесь на форуме сайта EXELAB.RU
Проект ReactOS