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

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

 eXeL@B —› Основной форум —› Помогите новичку разобраться в дизассемблированом С#
Посл.ответ Сообщение

Ранг: 4.0 (гость)
Статус: Участник

Создано: 01 апреля 2010 06:14 New!
Цитата · Личное сообщение · #1

Здравствуйте!
Вот возникла у меня мысль попробовать IDA PRO дизассемблировать программу. Я новичок в этом деле. А тут ещё программа попалась написанная на С#. Но мне показалось забавным то, что IDA PRO определил много чего интересного (например название классов методов и т.д.) и решил разобраться в дизасемблированном коде. Но столкнулся вот с какой проблемой. Сам я никогда не писал под C# и мне как то слабо понятно почему в дизасемблированном коде вреде как почти ассемблерные команды но без операндов. И как в С# передаются параметры функции? Что такое stloc.0, ldc.r8 и т.д. В качестве примера могу привести следующую функцию:

.method public static hidebysig float64 calculateDist(class GpsPosition p1, class GpsPosition p2)
// CODE XREF: addPosition+9Ep
// sub_1EE0+E6p ...
{
.locals init (float64 V0,
float64 V1,
float64 V2,
float64 V3,
float64 V4)
ldc.r8 0.0174532925199433
ldarg.0
ldfld float64 GpsPosition::Latitude
mul
stloc.0
ldc.r8 0.0174532925199433
ldarg.0
ldfld float64 GpsPosition::Longitude
mul
stloc.1
ldc.r8 0.0174532925199433
ldarg.1
ldfld float64 GpsPosition::Latitude
mul
stloc.2
ldc.r8 0.0174532925199433
ldarg.1
ldfld float64 GpsPosition::Longitude
mul
stloc.3
ldc.r8 2.0
ldloc.0
ldloc.2
sub
ldc.r8 2.0
div
call float64 [mscorlib]System.Math::Sin(float64)
ldc.r8 2.0
call float64 [mscorlib]System.Math::Pow(float64, float64)
ldloc.0
call float64 [mscorlib]System.Math::Cos(float64)
ldloc.2
call float64 [mscorlib]System.Math::Cos(float64)
mul
ldloc.1
ldloc.3
sub
ldc.r8 2.0
div
call float64 [mscorlib]System.Math::Sin(float64)
ldc.r8 2.0
call float64 [mscorlib]System.Math::Pow(float64, float64)
mul
add
call float64 [mscorlib]System.Math::Sqrt(float64)
call float64 [mscorlib]System.Math::Asin(float64)
mul
stloc.s 4
ldloc.s 4
ldc.r8 6371.0
mul
ret
}

Эта функция всего лишь высчитывает расстояние между 2мя точками (pgs координатами), как я подозреваю никаких переходов и прочего, довольно простая функция (метод), но ЧТО значат все эти непонятные слова типа stloc.s. И как именно этот метод возвращает результам? В инете как - то мало информации по дизасемблированию C# нашёл 1статью, и то не сильно подробную. может у кого есть стоящая литература?




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

Создано: 01 апреля 2010 06:28 New!
Цитата · Личное сообщение · #2

Возьми лучше Reflector. Там C# код увидишь, в чем намного приятней будет разбираться.



Ранг: 4.0 (гость)
Статус: Участник

Создано: 01 апреля 2010 06:36 · Поправил: Woron_lexa New!
Цитата · Личное сообщение · #3

ок, попробую, но есть одно НО, .ехе-шник (который я дизамблировал) под ARM (PocketPC). Reflector его съест?

Спасибо. Помогло. Схавал за милую душу. А как в Reflector что нибудь изменить в программе?



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

Создано: 01 апреля 2010 06:42 New!
Цитата · Личное сообщение · #4

какая разница под что, framework везде один



Ранг: 281.8 (наставник)
Статус: Участник
Destroyer of protectors

Создано: 01 апреля 2010 07:21 · Поправил: MasterSoft New!
Цитата · Личное сообщение · #5

Woron_lexa пишет:
А как в Reflector что нибудь изменить в программе?

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

Added:
А вот собственно и плаг: sourceforge.net/projects/reflexil/




Ранг: 631.1 (!)
Статус: Участник
Автор VB Decompiler

Создано: 01 апреля 2010 08:17 New!
Цитата · Личное сообщение · #6

Woron_lexa пишет:
А как в Reflector что нибудь изменить в программе?


Никак стандартно. И нестандартно - через опу. У меня это в VB Decompiler реализовано нагляднее.



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

Создано: 01 апреля 2010 08:20 New!
Цитата · Личное сообщение · #7

Woron_lexa пишет:
ЧТО значат все эти непонятные слова типа stloc.s.

msdn.microsoft.com/ru-ru/library/system.reflection.emit.opcodes_members.aspx




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

Создано: 01 апреля 2010 13:07 New!
Цитата · Личное сообщение · #8

Вот вещь интерессная www.softpedia.com/get/Programming/Debuggers-Decompilers-Dissasemblers/NetDasm.shtml



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

Создано: 02 апреля 2010 17:57 New!
Цитата · Личное сообщение · #9

Woron_lexa пишет:
А как в Reflector что нибудь изменить в программе?


sourceforge.net/projects/reflexil/



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

Создано: 02 апреля 2010 20:42 New!
Цитата · Личное сообщение · #10

Woron_lexa пишет:
В инете как - то мало информации по дизасемблированию C# нашёл 1статью, и то не сильно подробную. может у кого есть стоящая литература?

www.ntcore.com/articles.php и tuts4you.com/download.php?list.48



Ранг: 203.3 (наставник)
Статус: Участник
UPX Killer -d

Создано: 03 апреля 2010 12:22 New!
Цитата · Личное сообщение · #11

Woron_lexa пишет:
А как в Reflector что нибудь изменить в программе?

Довольно дерьмово это получается даже через плагин.
Так что сильно редактировать не надейся.



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

Создано: 09 апреля 2010 16:19 New!
Цитата · Личное сообщение · #12

а что мешает посмотреть в той же IDA мнемонику команд? и потом обычным hiew подправить нужные байты?



Ранг: 4.0 (гость)
Статус: Участник

Создано: 12 апреля 2010 22:58 New!
Цитата · Личное сообщение · #13

sataron пишет:
а что мешает посмотреть в той же IDA мнемонику команд? и потом обычным hiew подправить нужные байты?


Спасибо за совет.

Изменил одну переменную в редакторе (hiew), проверил в IDA и Reflector'e - всё нормально. Но когда запускаю .exe'шник (на кпк) то вылазиет ошибка типа переустановите Фреймворк.
Подскажите в чём может быть проблема?
Изменил число 6371.0(40 B8 E3 00 00 00 00 00) на 7645.2(40 BD DD 33 33 33 33 33) тип double.

Заранее спасибо.



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

Создано: 13 апреля 2010 06:18 New!
Цитата · Личное сообщение · #14

Woron_lexa, возможно сборка подписана strong name



Ранг: 4.0 (гость)
Статус: Участник

Создано: 13 апреля 2010 06:33 · Поправил: Woron_lexa New!
Цитата · Личное сообщение · #15

Av0id пишет:
Woron_lexa, возможно сборка подписана strong name


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



Ранг: 60.6 (постоянный)
Статус: Участник

Создано: 13 апреля 2010 07:21 New!
Цитата · Личное сообщение · #16

www.nirsoft.net/dot_net_tools/strong_name_remove.html



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

Создано: 13 апреля 2010 10:49 New!
Цитата · Личное сообщение · #17

Woron_lexa пишет:
А можно по подробнее я всётаки пока в танке, достаточно будет ссылки на инфу.И если возможно как с этим бороться.

Ты слепой? Я же тебе дал ссылки там про стронг тоже есть(тутс4ю), на каком то из последних хакеров тоже проскакивала инфа. Ты что поиском пользоваться не умеешь? Такие вопросы да ещё в основном форуме.



Ранг: 4.0 (гость)
Статус: Участник

Создано: 13 апреля 2010 23:57 New!
Цитата · Личное сообщение · #18

Спасибо за ссылки.
У меня вот такое сообщение выдаёт при попытке запустить изменённый файл.

Программе не удаётся загрузить необходимый компонент. Если платформа .NET Compact Framework установлена на карте памяти убедитесь что карта установлена и запустите программу снова. Если это не поможет рекомендуется переустановить платформу .NET Compact Framework .

Как я понял на симптомы strong name не похоже, или я ошибаюсь?



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

Создано: 14 апреля 2010 00:12 New!
Цитата · Личное сообщение · #19

Поставь новый .NET Compact.



Ранг: 78.7 (постоянный)
Статус: Участник

Создано: 14 апреля 2010 11:45 New!
Цитата · Личное сообщение · #20

Попробуй Разобрать и Пересобрать, со своими Изменения Прогу ! ildasm&ilasm Поможет !


 eXeL@B —› Основной форум —› Помогите новичку разобраться в дизассемблированом С#

Видеокурс ВЗЛОМ