近日破解了一个国外的串口通信控件,.net写的,中间破费周折,写下来希望能给大火一点启示帮助。具体名字就不写了,用xx.2.dll替代。
1、IDLASM进行反汇编,结果提示
受保护的模块 -- 无法进行反汇编
看来需要改造版本的 ILDASM
下载ILDASM修改版V2.0
可以成功进行反编译了。
ildasm xx.2.dll /out=xx.2.il
2、大量的名称被混淆,需要仔细分析相关代码
反编译后,il大量的name被混淆,
直接尝试 ilasm
ilasm /dll /res:xx.2.res /key:xx.2.snk xx.2.il /out:xx.2.dll /quiet
结果发现根本不能编译反汇编出来的il文件
看来要进行 名称反混淆后 ,再进行处理才可以。
3、名称反混淆
使用在pediy下载的Simple Assembly Explorer 进行名称反混淆,之前使用过一个DeObfuscator反混淆,反混淆后有问题,很多能读的类都给修改了,导致暴露给外界调用的类名找不到。使用Simple Assembly Explorer 的没有问题。
使用Simple Assembly Explorer 进行名称反混淆后。Ildasm成IL,再ilasm后 可以正常组装成dll了
但是运行例子的时候出现了
未能加载文件或程序集 “xx.2, Version=2.0.0.3108, Culture=neutral, PublicKeyToken=98fd87b7d0f115c7” 或它的某一个依赖项。强名称验证失败。 (异常来自 HRESULT:0x8013141A)
因为自己生成一个SNK,编译后导致
PublicKeyToken改变了。重新编译例子程序,ok,这个错误消失,但是出现了新错误