De4dot
参数详解
吾爱破解有比较详细的帖子
下载链接
Options
//全局参数-r DIR Scan for .NET files in all subdirs//搜索当前目录以及子目录中所有程序集并去混淆-ro DIR Output base dir for recursively found files//同-r参数,但是并不搜索子目录,仅限当前目录-ru Skip recursively found files with unsupported obfuscator//跳过查找到带有de4dot不支持的混淆器的程序集-d Detect obfuscators and exit//查明混淆器名称,然后退出de4dot--asm-path PATH Add an assembly search path//增加一个被搜索的目录--dont-rename Don't rename classes, methods, etc.//禁止所有重命名(比如类,方法,字段,属性,资源......)--keep-names FLAGSDon't rename n(amespaces), t(ypes), p(rops), e(vents), f(ields), m(ethods), a(rgs), g(enericparams), d(elegate fields). Can be combined, eg. efm//禁止对指定内容重命名。比如我不想重命名命名空间、类名和方法名,那么我可以添加这样一个参数"--keep-names ntm",这里的n代表namespaces,t代表types,m代表methods--dont-create-paramsDon't create method params when renaming//在重命名时不创建方法参数(?我也看不太懂)--dont-restore-propsDon't restore properties/events//不还原属性和事件--default-strtyp TYPEDefault string decrypter type//与--strtyp类似--default-strtok METHODDefault string decrypter method token or [type::][name][(args,...)]//与--strtok类似--no-cflow-deob No control flow deobfuscation (NOT recommended)//不还原控制流混淆(举个例子,ConfuserEx的恐怖的switch,几乎只能让程序来还原)--only-cflow-deobOnly control flow deobfuscation//仅还原控制流混淆--load-new-processLoad executed assemblies into a new process//将程序集放在新进程中进行脱壳处理--keep-types Keep obfuscator types, fields, methods//保留混淆器类、字段和方法--preserve-tokensPreserve important tokens, #US, #Blob, extra sig data//保持tokens不变,包括#US, #Blob, extra sig data。比如有个方法的token是0x06000008,不使用这个选项,去混淆之后某方法的token可能会变成0x06000004(比如这之前有4个无效方法被de4dot移除了),使用这个选项之后,无论怎样,方法的token始终是0x06000008--preserve-table FLAGSPreserve rids in table: tr (TypeRef), td (TypeDef), fd (Field), md (Method), pd (Param), mr (MemberRef), s (StandAloneSig), ed (Event), pr (Property), ts (TypeSpec), ms (MethodSpec), all (all previous tables). Use - to disable (eg. all,-pd). Can be combined: ed,fd,md//保持表中指定种类的tokens不变。比如"--preserve-table ed,fd,md","--preserve-table all"--preserve-stringsPreserve #Strings heap offsets//保持#Strings堆偏移不变--preserve-us Preserve #US heap offsets//保持#US堆偏移不变--preserve-blob Preserve #Blob heap offsets//保持#Blob堆偏移不变--preserve-sig-dataPreserve extra data at the end of signatures//保持额外的签名数据偏移不变--one-file Deobfuscate one file at a time//一次只对一个程序集去混淆-v Verbose//显示详细信息-vv Very verbose//显示更多详细信息(?应该是,反正和-v一样都会显示信息)-h Show this help message//显示帮助,就是我翻译的这些内容--help Same as -h//同-h
File options
//局部参数-f FILE Name of .NET file//指定被去混淆的程序集的路径(可以是相对路径或者绝对路径)-o FILE Name of output file//指定输出去混淆后的程序集的路径(可以是相对路径或者绝对路径)-p TYPE Obfuscator type (see below)//指定混淆器类型(下面写了)--strtyp TYPE String decrypter type//指定如何使用字符串解密器(字符串解密器指的是被混淆程序集中的一个方法)--strtok METHOD String decrypter method token or [type::][name][(args,...)]//指定哪一个方法作为字符串解密器
Deobfuscator options
//混淆器参数(我就不翻译了,因为有些没用过,不是很常用)//比如"--un-name REGEX Valid name regex pattern (^[a-zA-Z_<{$][a-zA-Z_0-9<>{}$.`-]*$)"//全大写单词代表一个参数,最尾处有一个括号,里面代表默认参数,如果你不填这个参数,那么de4dot认为你输入了--un-name "^[a-zA-Z_<{$][a-zA-Z_0-9<>{}$.`-]*$",因为这是默认的//这里有个地方要注意,REGEX的内容一定要用""包起来,比如--un-name ^就是无效的,--un-name "^"是有效的//而BOOL只要直接输入True/False,比如--an-methods TrueType un (Unknown)--un-name REGEX Valid name regex pattern (^[a-zA-Z_<{$][a-zA-Z_0-9<>{}$.`-]*$)
Type
Type an (Agile.NET)--an-name REGEX Valid name regex pattern (^[\u2E80-\u9FFFa-zA-Z_<{$][\u2E80-\u9FFFa-zA-Z_0-9<>{}$.`-]*$)--an-methods BOOLDecrypt methods (True)--an-rsrc BOOL Decrypt resources (True)--an-stack BOOL Remove all StackFrameHelper code (True)--an-vm BOOL Restore VM code (True)--an-initlocals BOOLSet initlocals in method header (True)Type bl (Babel .NET)--bl-name REGEX Valid name regex pattern (^[\u2E80-\u9FFFa-zA-Z_<{$][\u2E80-\u9FFFa-zA-Z_0-9<>{}$.`-]*$)--bl-inline BOOL Inline short methods (True)--bl-remove-inlined BOOLRemove inlined methods (True)--bl-methods BOOLDecrypt methods (True)--bl-rsrc BOOL Decrypt resources (True)--bl-consts BOOL Decrypt constants and arrays (True)--bl-embedded BOOLDump embedded assemblies (True)Type cf (CodeFort)--cf-name REGEX Valid name regex pattern (!^[a-zA-Z]{1,3}$&!^[_<>{}$.`-]$&^[\u2E80-\u9FFFa-zA-Z_<{$][\u2E80-\u9FFFa-zA-Z_0-9<>{}$.`-]*$)--cf-embedded BOOLDump embedded assemblies (True)Type cv (CodeVeil)--cv-name REGEX Valid name regex pattern (!^[A-Za-z]{1,2}$&^[\u2E80-\u9FFFa-zA-Z_<{$][\u2E80-\u9FFFa-zA-Z_0-9<>{}$.`-]*$)Type cw (CodeWall)--cw-name REGEX Valid name regex pattern (!^[0-9A-F]{32}$&!^[_<>{}$.`-]$&^[\u2E80-\u9FFFa-zA-Z_<{$][\u2E80-\u9FFFa-zA-Z_0-9<>{}$.`-]*$)--cw-embedded BOOLDump embedded assemblies (True)--cw-decrypt-main BOOLDecrypt main embedded assembly (True)Type cr (Confuser)--cr-name REGEX Valid name regex pattern (^[a-zA-Z_<{$][a-zA-Z_0-9<>{}$.`-]*$)--cr-antidb BOOL Remove anti debug code (True)--cr-antidump BOOLRemove anti dump code (True)--cr-decrypt-main BOOLDecrypt main embedded assembly (True)Type co (Crypto Obfuscator)--co-name REGEX Valid name regex pattern (!^(get_|set_|add_|remove_)?[A-Z]{1,3}(?:`\d+)?$&!^(get_|set_|add_|remove_)?c[0-9a-f]{32}(?:`\d+)?$&^[\u2E80-\u9FFFa-zA-Z_<{$][\u2E80-\u9FFFa-zA-Z_0-9<>{}$.`-]*$)--co-tamper BOOL Remove tamper protection code (True)--co-consts BOOL Decrypt constants (True)--co-inline BOOL Inline short methods (True)--co-ldnull BOOL Restore ldnull instructions (True)Type ds (DeepSea)--ds-name REGEX Valid name regex pattern (^[\u2E80-\u9FFFa-zA-Z_<{$][\u2E80-\u9FFFa-zA-Z_0-9<>{}$.`-]*$)--ds-inline BOOL Inline short methods (True)--ds-remove-inlined BOOLRemove inlined methods (True)--ds-rsrc BOOL Decrypt resources (True)--ds-embedded BOOLDump embedded assemblies (True)--ds-fields BOOL Restore fields (True)--ds-keys BOOL Rename resource keys (True)--ds-casts BOOL Deobfuscate casts (True)Type df (Dotfuscator)--df-name REGEX Valid name regex pattern (!^(?:eval_)?[a-z][a-z0-9]{0,2}$&!^A_[0-9]+$&^[\u2E80-\u9FFFa-zA-Z_<{$][\u2E80-\u9FFFa-zA-Z_0-9<>{}$.`-]*$)Type dr3 (.NET Reactor)--dr3-name REGEX Valid name regex pattern (^[\u2E80-\u9FFFa-zA-Z_<{$][\u2E80-\u9FFFa-zA-Z_0-9<>{}$.`-]*$)--dr3-types BOOL Restore types (object -> real type) (True)--dr3-inline BOOLInline short methods (True)--dr3-remove-inlined BOOLRemove inlined methods (True)--dr3-ns1 BOOL Clear namespace if there's only one class in it (True)--dr3-sn BOOL Remove anti strong name code (True)Type dr4 (.NET Reactor)--dr4-name REGEX Valid name regex pattern (^[\u2E80-\u9FFFa-zA-Z_<{$][\u2E80-\u9FFFa-zA-Z_0-9<>{}$.`-]*$)--dr4-methods BOOLDecrypt methods (True)--dr4-bools BOOL Decrypt booleans (True)--dr4-types BOOL Restore types (object -> real type) (True)--dr4-inline BOOLInline short methods (True)--dr4-remove-inlined BOOLRemove inlined methods (True)--dr4-embedded BOOLDump embedded assemblies (True)--dr4-rsrc BOOL Decrypt resources (True)--dr4-ns1 BOOL Clear namespace if there's only one class in it (True)--dr4-sn BOOL Remove anti strong name code (True)--dr4-sname BOOL Rename short names (False)Type ef (Eazfuscator.NET)--ef-name REGEX Valid name regex pattern (!^[a-zA-Z]$&!^#=&!^dje_.+_ejd$&^[\u2E80-\u9FFFa-zA-Z_<{$][\u2E80-\u9FFFa-zA-Z_0-9<>{}$.`-]*$)Type go (Goliath.NET)--go-name REGEX Valid name regex pattern (!^[A-Za-z]{1,2}(?:`\d+)?$&^[\u2E80-\u9FFFa-zA-Z_<{$][\u2E80-\u9FFFa-zA-Z_0-9<>{}$.`-]*$)--go-inline BOOL Inline short methods (True)--go-remove-inlined BOOLRemove inlined methods (True)--go-locals BOOL Restore locals (True)--go-ints BOOL Decrypt integers (True)--go-arrays BOOL Decrypt arrays (True)--go-sn BOOL Remove anti strong name code (True)Type il (ILProtector)--il-name REGEX Valid name regex pattern (^[\u2E80-\u9FFFa-zA-Z_<{$][\u2E80-\u9FFFa-zA-Z_0-9<>{}$.`-]*$)Type mc (MaxtoCode)--mc-name REGEX Valid name regex pattern (!^[oO01l]+$&!^[A-F0-9]{20,}$&^[\u2E80-\u9FFFa-zA-Z_<{$][\u2E80-\u9FFFa-zA-Z_0-9<>{}$.`-]*$)--mc-cp INT String code page (936)Type mp (MPRESS)--mp-name REGEX Valid name regex pattern (^[\u2E80-\u9FFFa-zA-Z_<{$][\u2E80-\u9FFFa-zA-Z_0-9<>{}$.`-]*$)Type rm (Rummage)--rm-name REGEX Valid name regex pattern (!.)Type sk (Skater .NET)--sk-name REGEX Valid name regex pattern (!`[^0-9]+&^[\u2E80-\u9FFFa-zA-Z_<{$][\u2E80-\u9FFFa-zA-Z_0-9<>{}$.`-]*$)Type sa (SmartAssembly)--sa-name REGEX Valid name regex pattern (^[\u2E80-\u9FFFa-zA-Z_<{$][\u2E80-\u9FFFa-zA-Z_0-9<>{}$.`-]*$)--sa-error BOOL Remove automated error reporting code (True)--sa-tamper BOOL Remove tamper protection code (True)--sa-memory BOOL Remove memory manager code (True)Type sn (Spices.Net)--sn-name REGEX Valid name regex pattern (!^[a-zA-Z0-9]{1,2}$&^[\u2E80-\u9FFFa-zA-Z_<{$][\u2E80-\u9FFFa-zA-Z_0-9<>{}$.`-]*$)--sn-inline BOOL Inline short methods (True)--sn-remove-inlined BOOLRemove inlined methods (True)--sn-ns1 BOOL Clear namespace if there's only one class in it (True)--sn-rsrc BOOL Restore resource names (True)Type xc (Xenocode)--xc-name REGEX Valid name regex pattern (!^[oO01l]{4,}$&!^(get_|set_|add_|remove_|_)?[x_][a-f0-9]{16,}$&^[\u2E80-\u9FFFa-zA-Z_<{$][\u2E80-\u9FFFa-zA-Z_0-9<>{}$.`-]*$)
字符串解密器
String decrypter types//如何使用字符串解密器none Don't decrypt strings//不解密default Use default string decrypter type (usually static)//默认(?)static Use static string decrypter if available//静态(?)delegate Use a delegate to call the real string decrypter//创建一个委托,传入相应参数,获取解密后的字符串emulate Call real string decrypter and emulate certain instructions//模拟(?)Multiple regexes can be used if separated by '&'.//如果要用多个正则,可以使用&连接Use '!' if you want to invert the regex. Example: !^[a-z\d]{1,2}$&!^[A-Z]_\d+$&^[\w.]+$//要反转正则表达式可以使用"!"
语法例子
de4dot.exe -r c:\my\files -ro c:\my\outputde4dot.exe file1 file2 file3de4dot.exe file1 -f file2 -o file2.out -f file3 -o file3.outde4dot.exe file1 --strtyp delegate --strtok 06000123
使用
查壳
dnspy
解混淆
运行软件
以控制台界面,在所在目录打开运行
可通过Shift+右击,选择在此处打开PowerShell窗口:
需要解混淆的文件,放在同目录下面比较方便,不放的话,输入绝对路径也行
de4dot.exe [同文件夹下要解混淆的文件名(或者绝对路径)] -o [解混淆后.exe(或者绝对路径)]
解混淆后查壳
解混淆一查,还是有混淆,应该是没解干净,不过还是有变的信息?
解混淆后dnspy


