国外网站大全·环游世界互联网

当前位置:首页 > 汉化宝典 > >

内容详情

收录时间:2010-06-22

标题

去除可执行文件数字签名的方法

已阅0
投稿须知

网站介绍

记得在汉化新世纪的技术论坛中有人提到过去除软件数字签名方法,还为此提供了去除签名的工具,但是,用此工具去除数字签名后,无法再为此程序重新添加数字签名,对此我就怀疑此工具没有彻底删除数字签名。但是一直以来我并没有遇到此类问题,因此也没有对此进行深究。
\
前不久做了一个商业汉化,对方需要重新添加数字签名,在对我所提供的汉化后的程序重新进行数字签名时,却发生问题,无法添加,问我解决的方法。对此,我就怀疑对方提供的原始文件已经进行过了数字签名,因此要求对方提供一个确认尚未进行过汉化签名的程序版本给我,以便于我进行对比研究。

事实也证实了我的猜测,请看下面的对比图

\

    对比二个文件,我们可以看到二个文件,除了文件头部有二处地方稍有不同,以及在程序的尾部被添加了一段代码外,其他地方并无不同之处。同时我又对其他几个文件进行了对比,除了偏移量不同外,其他和上图的情况一模一样。也就是说,我们可以将程序尾部附加的代码去除,并将程序头部的这二处地方填“00”就可以将签过数字签名的程序恢复到未签名状态。

那么,如何来找到这三处地方,如何来删除它们呢。最好找的是程序的尾部那部分代码,因为它们被附加在程序的最后,因此我们可以通过找到程序原始的结束位置,就可以确定程序被附加数据的大小。看下图。

\

这是程序中的的区段情况,可以看到这个程序的最后一个区段是资源段,它的资源段数据大小是002C7000,而资源段的开始位置(数据入口)是00180000,将这二个相加就能得出原始程序的结束偏移量为:00447000。也就是说在这个位置之后的数据是被数字签名添加上去的代码。那么这段代码有多长呢,见下图:

\

我们可以看到,它的结束位置是00448668,和上面的00447000相减后就得到1668,1668和00447000都是十六进制数字,将它们写成程序中的代码就成了6816和00704400,而这个就是我们刚才发现的文件头部不同的地方之一:007044006816,也就是说,007044006816代表的是数字签名附加的代码的开始位置和长度。

那么,我们又如何来确定第一个不同的地方呢,其实这个更简单,因为它和第二个不同的地方相隔的位置是固定的,找到第二个后,往上推60个字节就找到了。

好了,让我们总结一下去除数字签名的方法,首先根据程序的原始结束位置,得出数字签名附加代码的开始位置和长度,然后根据这二个数值找到需要删除的第二处代码的内容,找到需要删除的内容后,往上推六十个字节,就能找到需要删除的第一处代码。删除这三处代码后,我们的程序也就恢复到了数字签名前的状态了。

分享给小伙伴们:
站长头像赫赫无敌:探索互联网世界,收集和分享实用互联网资源,推荐国内和国外知名、实用、创新、科技、优质的站点资源!互联无极限,探索无止境;分享求真知,网络无国界!
更多>>

同类站点推荐

评论

关于我们|联系方式|版权声明|关于图片|友情链接|

分享互联网优秀资源-国外网站推荐

Copyright ◎ 2014 egouz.com, All Rights Reserved.| 目前收录国外网站 个!

国外网站大全 版权所有 冀ICP备11014106号-