首页
社区
课程
招聘
[原创]神不知鬼不觉的为pe文件增加校验代码
发表于: 2014-5-7 23:04 10704

[原创]神不知鬼不觉的为pe文件增加校验代码

2014-5-7 23:04
10704
为了不让自己的程序被别人修改, 作者通常会在程序中增加校验代码, 如CheckSum, CRC32, 文件时间等, 如果校验结果有误, 则说明程序被人修改过, 从而拒绝运行
有经验的破解者马上就会知道程序中存在校验代码, 并且很快就能找到校验的代码并去除校验, 使修改后的程序正常运行

但是如果把校验代码放到dll里面, 结果就会有所不同, 具体如下:
在程序设计中通常会将程序的功能以dll的形式分成几个模块, 并由主程序调用
dll的入口点默认为DllMain, 在程序第一次加载这个dll时, 系统会调用此DllMain函数
如果DllMain返回1则表示加载成功, 返回0则表示加载失败, 这时系统会弹出一个对话框: 应用程序无法正常启动(0xc0000142)
我们把校验的代码放到DllMain函数中, 如果校验失败, 就返回0
等到破解者打开修改后的程序时, 面对系统弹出的错误信息就可能一无所措了
接下来破解者大概会使用OD载入, 打算调试一下, 但是OD载入也是提示错误(如果不设置成停留在系统断点的话), 想调试连加载都加载不了,  还怎么破解?

如果你在一些常见的dll(比如msvcrt.dll, mfc42.dll)上偷偷放进程序的校验代码的话, 或许能浪费掉破解者好几天的时间

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (32)
雪    币: 185
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
囧。这个浪费不了几天的时间的。。这思路不算新啦~
2014-5-7 23:20
0
雪    币: 346
活跃值: (129)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
3
楼主比较天真了 你放在DLL里校验 难道不用对 exe 进行 read 操作吗?
2014-5-7 23:54
0
雪    币: 2325
活跃值: (4862)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
呵呵一样没用·!
2014-5-8 00:09
0
雪    币: 257
活跃值: (67)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
呵呵,对于破解高手而言,也只是换汤不换药罢了
2014-5-8 00:29
0
雪    币: 244
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
对于没经验的新人可能会卡住,但是在经验丰富的高手面前什么也挡不住>_<
2014-5-8 01:06
0
雪    币: 194
活跃值: (21)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我2001年就发现PKPM是这样做的,不过我纯属业余,水平有限,就保留源文件,主程序换个名字。
2014-5-8 06:28
0
雪    币: 163
活跃值: (1623)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
8
如果你在一些常见的dll(比如msvcrt.dll, mfc42.dll)上偷偷放进程序的校验代码的话, 或许能浪费掉破解者好几天的时间

这个不是自己可控的DLL,如何写校验代码,直接修改二进制文件?
2014-5-8 10:25
0
雪    币: 81
活跃值: (100)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
9
你说的那个,可以下断的,对dllmain,
类似这种处理过好多了,5分钟最多了,确定你是哪个有问题的dll
2014-5-8 10:45
0
雪    币: 203
活跃值: (214)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
神和鬼是不知,但是技术人员知道,哈哈。
你这还不如校验到修改时,功能异常来得靠谱。
直接给逆向人员明确的提示本身就是很不明智的做法。
2014-5-8 10:52
0
雪    币: 15
活跃值: (28)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
11
就是在自己的程序中带上这个dll, 当然事先修改过, 自带运行库很正常啊, 应该没人会怀疑
2014-5-8 13:23
0
雪    币: 15
活跃值: (28)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
12
这个是确实啊, 破解软件不怕失败, 就怕以为破解成功, 过一阵子又跳出未注册
2014-5-8 13:25
0
雪    币: 81
活跃值: (100)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
13
怎么会没人怀疑呢,od打开alt+e,一个库dll的路径却在奇奇怪怪的位置
你可以试试,发个crakeme或者demo来证明你的想法,看看能坚持多久
2014-5-8 13:30
0
雪    币: 163
活跃值: (1623)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
14
这个修改起来会比较麻烦吧,想当于要把整个校验代码patch进那个文件。
2014-5-8 14:43
0
雪    币: 70
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
这样做一点用都没有,破解者都不是傻子。楼主你这样投机取巧的做是在羞辱破解者的智商吗?
2014-5-8 14:56
0
雪    币: 150
活跃值: (36)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
我不是很明白楼主的意思!

把检测代码放在DLL文件中和不放在主程序中有什么区别?
2014-5-9 17:37
0
雪    币: 15
活跃值: (28)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
18
检测代码放在DLL文件中 = 不放在主程序中
不是一个意思么?
2014-5-10 07:48
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
大小也会差很多吧。。。
2014-5-12 18:05
0
雪    币: 2401
活跃值: (1402)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
20
假设原程序文件名为 ThisApp.exe
我把它保留下来。

破解(修改)的文件改名为 ThisApp_Z.exe

然后我运行 ThisApp_Z.exe 的话,让 dll 去校验原来的 ThisApp.exe 就好了。

愚弄校验的 dll 有很多方法,上面只是一个简单的想法。
2014-5-13 13:25
0
雪    币: 81
活跃值: (100)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
21
完全不具有通用性,而且直接把你私有dll替换成标准dll就结束了
2014-5-13 13:37
0
雪    币: 2045
活跃值: (1834)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
22
让我等菜鸟情何以堪呀
2014-5-13 17:36
0
雪    币: 15
活跃值: (28)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
23
这是发现使用dll检验完整性之后的情况
重要的是难以发现检验代码在dll中
2014-5-13 18:31
0
雪    币: 81
活跃值: (100)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
24
关键是不难发现,最多5分钟
2014-5-14 08:28
0
雪    币: 15
活跃值: (28)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
25
好吧, 你赢了
2014-5-14 11:59
0
游客
登录 | 注册 方可回帖
返回
//