文件实现自效验,原理详解

易语言 2020-07-21 00:02:47

文件实现自效验,原理详解

首先,在我给出的压缩包里面有一个 模块 源码 ,我们把他编译成模块,以方便我们的使用,源码文件名是 : 安全模块.e
效验_代码段动态效验 这个子程序还不能用,我有时间会补上!

然后新建一个易程序,启动的时候执行: 效验_是否修改 这个子程序,根据返回值来判断是否被修改:【返回值说明: 返回:4 表示效验未通过 返回:5 表示效验通过 返回小于4的值表示出错】

如果返回 4 表示程序已经被不法分子修改。
注意这个在易语言调试版本下是无效的,所以,我们要编译我们的代码。
编译完成后我们得到一个 test.exe文件,这一步相信大家都会!!!!!!
如果好奇,不妨运行试试看。
是不是感到莫名其妙?
程序弹出了 被修改的信息。
这是因为我们还没有对exe进行加工。

把exe拖入这个工具即可,这个工具的源代码已经在压缩包里,源文件名是:最后一步 处理可执行文件.e
大家自行编译。
拖入exe文件后,加工工具提示处理成功后,就可以在exe目录下找到一个以 处理好_ 开头的文件,不是原来的文件,不要搞错了!
这就是最终的exe了,运行试试看,没有错误信息,用OD修改后保存试试看,就会提示错误。注意: 如果软件要加壳的话,请先进行加壳!!!

原理:
注意是用了PE结构中一些不用的地方保存了CRC或MD5代码,这个位置在PE文件头的前 0x10(大约)这块数据里面。
运行时读取出来进行判断就可以了,不过,千万不要取整个文件的CRC或MD5,因为PE文件头的前 0x10这里我们做了手脚,CRC或MD5会变,
所以就分段取,先取0x0到PE头减去0x10处的CRC字节集,然后在取PE头到文件尾部的CRC或MD5,这样中间就有0x10字节数据没有取到,拼接起来就ok,
整个代码就这样实现。