由于.net下没有动态调试工具,所以很多时候都是修改文件,加入自己的代码来执行(比如在特定位置dump)。但是,对于强名称验证,修改将导致验证失败。如果删除强名称或者用其他密钥对签名,会导致publickey不同,程序里一个AssemblyName.GetPublicKey就死翘了。 所以,能蒙混过系统的验证最好。StrongName强名称相关的操作在mscorsn.dll里,里面有三个导出函数是验证相关的: StrongNameSignatureVerification StrongNameSignatureVerificationEx(调用StrongNameSignatureVerification) StrongNameSignatureVerificationFromImage 为了保险起见,把StrongNameSignatureVerification和StrongNameSignatureVerificationFromImage都patch掉: StrongNameSignatureVerification xor eax,eax inc eax retn 0chStrongNameSignatureVerificationFromImage xor eax,eax inc eax retn 10h保存,替换原来的mscorsn.dll。运行一个修改过的具有强名称的.net可执行文件,成功~ 记得没事的时候要改回去哦,改回去要安全一些的。 有什么错误缺漏还请大虾们指正,谢谢。 注 以上环境为.net Framework 1.1 Bi11[CCG] 1 Feb 2006
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课