Сейчас на форуме: -Sanchez- (+9 невидимых) |
eXeL@B —› Основной форум —› Как обойти large fs:0 ??? |
Посл.ответ | Сообщение |
|
Создано: 07 декабря 2007 19:43 · Поправил: shob_vas · Личное сообщение · #1 Я пытаюсь инверсить прогу. Пусть прога называется Program.exe. Она использует библиотеку Library.dll. С помощью LordPe создал свою библиотеку ImportDll.dll и приатачил ее к екзешнику. В функции DllMain моей библиотеки создается новый поток. Этот поток через какое то время вызывает процедуру Procedure из Library.dll. Но процедура Procedure в самом начале содержит следующий код: .text:008DB720 push 4294967295
Я прочитал статью http://www.wasm.ru/article.php?article=packers2 http://www.wasm.ru/article.php?article=packers2 (Об упаковщиках в последний раз. Часть вторая /06.11.03/) и понял что видимо мой поток находится в кольце 3, а должен находиться в кольце 1. По крайне мере вызов процедуры из моего потока приводит к ошибке. В строке 008DB727 при штатной работе проги в eax помещается всегда одно и тоже число (04DEFF30). Можно ли тупо замазать этот кусок на mov eax,04DEFF30h ? Какие другие решения есть? Как назначить своему потоку приоритет кольца 0? |
|
Создано: 07 декабря 2007 19:46 · Личное сообщение · #2 |
|
Создано: 07 декабря 2007 21:03 · Поправил: x-code · Личное сообщение · #3 |
|
Создано: 07 декабря 2007 21:23 · Личное сообщение · #4 все бряки запускаются без проблем. Пробовал менять значение регистра eax в строке 008DB727 на 04DEFF30. Вроде поначалу процедура работает нормально. Но потом идет большое количество вызовов других процедур с такими же обращениями к fs:0. Причем все они написаны по одной схеме:
В строке 008DB72D идет отправление large fs:0 в стек, а в 008DB9A0 восстановление предыдущего значения. На самом деле я не уверен что это сделано для защиты (слишком уж криво написана вся другая часть программы). Может ли быть что это производится предохранения от ошибок мультипотоковости? Причем у меня еще такая проблема есть с вызовом этой функции. Вот как выглядит анализ переменных в IDA: .text:008DB720 var_40 = dword ptr -40h
В процедуре используется стек выше esp (переменные var_*) (сдвиг стека происходит, например, по адресу 008DB735, см пост #1), но никакой явной инициализации этих переменных (обнуление или задание начальных параметров) нет. А между тем почему то в процедуре происходят над этими переменными какие то арифметические операции. Штатно вызов этой процедуры (она находится в библиотеке Library.dll) происходит из екзешника (Program.exe) поэтому абсолютно непонятно почему происходит использование стека выше esp... |
|
Создано: 07 декабря 2007 22:19 · Личное сообщение · #5 Нарыл ток что статью www.wasm.ru/article.php?article=Win32SEHPietrek1 про SEH почитал ее и понял, что видимо fs:[0] помещен лдя обработки исключений. но почему то я всеравно не могу запустить прогу. Может ли обработка исключений использоваться какнибудь для защиты программы от взлома? Вопрос про переменные var_* остается открытым... |
|
Создано: 07 декабря 2007 23:06 · Личное сообщение · #6 Вообщем я понял почему у меня были проблемы с запуском функции Procedure. Видимо в исходнике стоит что-то типа (извените никогда есепшинами не пользовался, поэтому точно не помню синтаксис) __try
Это также подтверждается тем что если поставить bp на вызов процедуры Procedure в Program.exe, то вызов выполняется один раз. А если поставить bp на начло процедуры Procedure (на первую инструкцию), то вызов происходит два или три раза. По идее адрес процедуры ексепшина должен находиться в fs:0, но почему то когда я ставил bp на этот адрес (fs:0), то ничего не происходило. Как отлавливать такие ексепшены в IDA? |
|
Создано: 21 мая 2019 04:01 · Личное сообщение · #7 не пойму, какого хера!!!!! заведомо шлет shob_vas этот пользователь в тупик яное дело что .text:008DB9A7 add esp, 40h после этого убдет конец, т.к. дальше идти не куда он тупо пропушил .text:008DB72D push eax вы понимаете тчо он написал? после этого дальше можно ыбло бы не продолжать, ну ладно он заведомо прости от чего ты пытаешься отнять? .text:008DB720 var_40 = dword ptr -40h на том месте ты пишешь 0 .text:008DB720 var_3C = dword ptr -3Ch здесь ты тоже пишешь 0 это нехера не код программы, это просто стерание старого куска программы, это уже делается когда программа напишется и там надо чисто стереть, можно этого в принципи и не делать, ну допустим идиальный прогер. это не рабочий код, первое сообщение респект далее просто сбивает с пути, кто не понимает чтов первом написано и как работает и что нужно написать, недойдет. Последнее сообщение меня просто напрочь добила у него была проблема с запуском процедуры. Я хренею где он код взял... ну то что дальше напсиано то просто не хочу коментить, за код спасибо! некаких запомните стороних библиотек удачи! прости 2007 год я вывиду в топ тебя пипец мое детство(( | Сообщение посчитали полезным: plutos |
|
Создано: 21 мая 2019 04:28 · Поправил: plutos · Личное сообщение · #8 |
eXeL@B —› Основной форум —› Как обойти large fs:0 ??? |
Эта тема закрыта. Ответы больше не принимаются. |