由于.net下没有动态调试工具,所以很多时候都是修改文件,加入自己的代码来执行(比如在特定位置dump)。但是,对于强名称验证,修改将导致验证失败。如果删除强名称或者用其他密钥对签名,会导致publickey不同,程序里一个AssemblyName.GetPublicKey就死翘了。

所以,能蒙混过系统的验证最好。StrongName强名称相关的操作在mscorsn.dll里,里面有三个导出函数是验证相关的:
StrongNameSignatureVerification
StrongNameSignatureVerificationEx(调用StrongNameSignatureVerification)
StrongNameSignatureVerificationFromImage

为了保险起见,把StrongNameSignatureVerification和StrongNameSignatureVerificationFromImage都patch掉:

StrongNameSignatureVerification

xor eax,eax
inc eax
retn 0ch


StrongNameSignatureVerificationFromImage

xor eax,eax
inc eax
retn 10h


保存,替换原来的mscorsn.dll。运行一个修改过的具有强名称的.net可执行文件,成功~ 记得没事的时候要改回去哦,改回去要安全一些的。

有什么错误缺漏还请大虾们指正,谢谢。

注 以上环境为.net Framework 1.1

Bi11[CCG]
1 Feb 2006