吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 14795|回复: 4
收起左侧

[转贴] 去除可执行文件数字签名的方法

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

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

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

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

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

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

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

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


本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

lfly453 发表于 2014-8-5 16:25
文件右键属性确实是看不到数字签名的属性了。
linglong2013 发表于 2014-5-28 21:35
uan 发表于 2014-5-28 21:59
之前有过用手工方式添加数字签名,感觉加了数字签名之后,很多安全软件都失效了...
lfly453 发表于 2014-8-5 16:22
按你的方法,改了两处后,提示ocx无效了。是怎么回事呢?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-18 02:47

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表