Universal Fixer 1.0 - fix dumps after dumping them whit Dotnet Dumper or other similiar tools and will also fix nasty things: multiple assembly/module definitions, wrong extends, etc. iMPROVE .NET Deobfuscator - деобфускатор
Medsft Не, ну я впринципе согласен с NikolayD. Обфускаторов для .NET нереально много, как на паблике так и самопальных, смысла гадать что это за зверь - нет, если он не оставил подсказок в метадате или ещё где.
Я посмотрел - там обфускация имён, строк и control flow. Это умеет делать любой более-менее солидный обфускатор, так что перовое, что я бы сделал - тоже воспользовался бы автоматическими средствами для деобфускации, дедот справляется с именами и control flow, а обфускацию строк можно уже руками обратить, написав утиль для замены методов, получающих строки на сами строки. Ну и после деобфускации уже можно реверсить логику и решать что и как дальше - кодить кейген или патчить оригинальную сборку.
Зачем тут ещё что-то мудрить?
----- Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.
Да я и не писал что за такой подход надо вешать)))) Просто такой принцип не способствует развитию мозга начинающего реверсера....
P.S. Но в этом есть и свои плюсы. Как говаривал один мой знакомый профессор ставя на экзамене, тем кто заслуживал по уровню знаний только колы, четверки.... "Чем больше дураков я выпущу в жизнь, тем ценнее буду я.."
Airenikus пишет: Кстати, кто может там писать, чирканите чтобы добавил http://ru.netobf.com/download - инквартос на ура снимается Megadumper`ом Если`б друзья программисты не разошлись по разным углам, наверное этот прот был бы "cool".
Ну это только проблемы нативного пакера решает, а как быть с обфусцированными методами + копии этих же методов, но которые не используются. В целом я всего лишь предложил, чтобы люди отписали автору на ехетулзе, т.к он спрашивал о редких протах.
Airenikus пишет: Ну это только проблемы нативного пакера решает А дальше,если не хватит а в большинстве случаев хватает, SAE deobfuscator в руки и вперед.... на Краков Airenikus пишет: методов, но которые не используются А на хрена нам методы never used ????
Ты сам пробывал получить полностью деобфусцированную сборку, которую можно править в сае и чтобы оно потом сохранялось без проблем и работало также как и оригинал?
Airenikus пишет: Ты сам пробывал получить полностью деобфусцированную сборку Да пробовал и Да сохранил и Да работает.... Разговор по инквартосу закончен. Пахнешь автором парень
Кто какие удобные тулзы для редакторования ресурсов в сборках знает? ildasm -> редакторование файла .resources -> ilasm не предлагать, ilasm не может сассемблировать IL файл обратно, т.к. он почти 4 гига получается в размере
SAE тоже не подоходит, сборка обфусцирована и mono.cecil, который юзает SAE не умеет работать с такими сборками.
Попробовал ResourceManager от CodeCracker, но не вдуплил как он работает. Очень не хотелось бы кодить тулзу для этого самому (вариант поменять руками не канает, т.к. надо менять в разных файлах разные ресурсы, надо автоматизировать), я наверняка упускаю какой-то общеизвестный велосипед для этой задачи.
----- Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.
4kusNick пишет: Очень не хотелось бы кодить тулзу для этого самому Есть библиотека, используемая в de4dot - --> dnlib <--. Там выполнена вся грязная работа по парсингу таблицы метаданных и тп. И он умеет записывать изменения. Есть парочка примеров в исходниках.
помогите ребята не понимаю чем накрыт Что я сделал сам Сделал Дамп И попробовал его скормить деду но он не помог Может вы чего подскажите или же сможете чем помочь --> Link <--
Ранг: 748.2 (! !), 390thx Активность: 0.37↘0 Статус: Участник bytecode!
Создано: 10 сентября 2013 23:07 · Поправил: 4kusNick · Личное сообщение · #24
Mishar_Hacker пишет: не понимаю чем накрыт Атрибут "[module: ConfusedBy("Confuser v1.9.0.0")]" в метадате как бы намекает, хоть бы изучили сборку сперва. PS: последний писк моды против конфуза - NoFuser, хоть бы на пару страниц назад листнули.
----- Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.
Jonny пишет: Есть библиотека, используемая в de4dot - --> dnlib <--. Там выполнена вся грязная работа по парсингу таблицы метаданных и тп. И он умеет записывать изменения. Есть парочка примеров в исходниках. Эта либа тоже не справилась =( Падает при сохранении сборки (даже если я ничего в ней не менял) где-то в районе записи методов - похоже она всю сборку пересобирает и обламывается из-за обфускации.
----- Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.
4kusNick пишет: Именно. Вы поправили эту проблему в своей версии dnlib.dll? Вроде в либе есть возможность заставить записывать старое значение стека. Например, тут (de4dot.code.AssemblyModule):
var writerOptions =new ModuleWriterOptions(module, writerListener);
writerOptions.MetaDataOptions.Flags |= mdFlags;
writerOptions.Logger = Logger.Instance;
module.Write(newFilename, writerOptions);
}
module.Write(newFilename, writerOptions); - module является объектом типа ModuleDefMD из dnlib, а в writerOptions.MetaDataOptions.Flags можно передать значение KeepOldMaxStack = 0x8000.
Ранг: 748.2 (! !), 390thx Активность: 0.37↘0 Статус: Участник bytecode!
Создано: 20 сентября 2013 17:20 · Поправил: 4kusNick · Личное сообщение · #30
Я пробовал принудительно выставлять KeepOldMaxStack прямо в самой либе, в месте записи методов - не помогло. Попробую ваш вариант, может там в дебрях этот параметр ещё на что-то влияет.
---
Попробовал, теперь другая ошибка при записи методов: Instruction operand is null
Пробовал ещё флаг MetaDataFlags.PreserveAll ставить, тоже не помогло - либа все равно перефаршмачивает всю сборку (
----- Флэш, ява, дотнет - на завтрак, обед и ужин. Unity3D на закуску.
4kusNick пишет: Попробовал, теперь другая ошибка при записи методов: Instruction operand is null Чаще всего это связанао с тем, что MDToken является невалидным, в соответсвующей таблице нет записи с таким индексом. Например, в Dotnet reactor используется следующий прием:
Code:
IL_0000: br.s IL_000a
IL_0002:call<b>XXXXXXX</b>
IL_0007: ldnull
IL_0008: ldind.ref
IL_0009:pop
IL_000a: ldc.i4.0
IL_000b: brtrue.s IL_0007
XXXXXXXX - это рандомное число, которое является токеном. Dnlib ругнется как у тебя , и запишет в операнд токен под номером FFFFFFFF.
В твоем случае нужно найти кусок кода отвечающий за запись MethodBody при сохранении и вместо ассемблирования просто подставлять байты из ориг образа. Возможно там реализован механизм для таких случаев, иначе придется патчить либу. Нечто такое например используется при восстановлении спертых тел методов:
Code:
class DumpedMethodsRestorer : IRowReader<RawMethodRow>, IColumnReader, IMethodDecrypter {