exe的破译问题,如果只有exe文件的前提下怎样修改其功能?

来源:百度知道 编辑:UC知道 时间:2024/05/31 19:07:55
是这样的,假设我有个.exe文件,我想在没有源代码的情况下改变其功能。该exe功能是创建一个名为abc的窗口。我想改为def。我的做法是这样的:
我将后缀名修改为txt,用记事本打开,查找找到abc的位置,把abc改为cba,保存退出。改回exe,执行。可是这样做并没有成功,因为记事本保存的时候自动改变了编码格式,将它变成了文本因而去掉了无效字符。所以就算我什么都不改,保存后改后缀的exe仍然不能运行。
我尝试了第二种方法,我写了个c程序以字符串流方式打开该exe文件,然后查找匹配char类型字符串abc,但是失败了,因为我根本就没有找到abc。甚至,我找到的全部字符只有开始的MZ(exe的标准开头)。请问我怎样做才能达到我的目的呢?
顺便说一下,我用记事本打开的时候看到了文件最后的部分代码,如果这个方法可行的话,我就可以没有源程序的情况下更改程序的许多功能了。
我知道记事本是不能打开exe的,但是我改了后缀就能打开了。如果我不用记事本打开而把后缀改回去的话exe是不会有任何变化的。问题是为什么记事本能看到exe中的目标字符串而c程序不能看到?c程序是一个一个char读入的,根本就没有检测到‘a’‘b’‘c’的出现。我猜也有可能跟我的c程序打开方式有关,我用的是fopen()函数。该函数对于二进制流可能打开错误。

记事本是ansi编辑,EXE是binary的,修改后其实已与以前完全不同了,不信你看看hash
Program too big to fit in memory是修改后WINDOWS已不识别为PE程序了,将之直接以COM格式全部装入(16位虚拟模式),自然太大了(对16位而言,640KB已是最大了)

C程序你都会写了,怎么会不知道记事本不能编辑exe的道理呢?

这样是不可以的,exe属于二进制数据,记事本查看的是ascii码,如果要改得改它的十六进制码/二进制码

呵呵,可能吗? 你能用记事本直接打开?

你要修改已经编译好的Exe程序,那就叫反向工程,你需要反编译软件才而已做到,软件破解,软件逆向工程都是这么来的

你必须具备下面这些软件,还要掌握一定的汇编语言基础才可以修改

WinHex 这个是最常用的反编译解析
Unpack 很多Exe软件都加了壳防止破解,你可以用这个软件来脱壳
UltraEdit 这个是16进制的修改器,利用它可以直接修改Exe程序了,呵呵,而不是简单的用记事本就可以了

w32dasm 这个不多说了,看你会多少吧