首页
社区
课程
招聘
[求助]利用加减法饶过DLL重定位来加密DLL代码段,为什么失败?
发表于: 2009-9-25 18:49 4657

[求助]利用加减法饶过DLL重定位来加密DLL代码段,为什么失败?

2009-9-25 18:49
4657
00971B89   .  60                    pushad
00971B8A   .  E8 00000000           call 3.00971B8F
00971B8F   $  58                    pop eax
00971B90   .  2D 8F0B0100           sub eax,10B8F
00971B95   .  B9 DC420000           mov ecx,42DC
00971B9A   >  8B18                  mov ebx,dword ptr ds:[eax]
00971B9C   .  81C3 DC010000         add ebx,1DC
00971BA2   .  8918                  mov dword ptr ds:[eax],ebx
00971BA4   .  83C0 04               add eax,4
00971BA7   .^ E2 F1                 loopd short 3.00971B9A
00971BA9   .  61                    popad
00971BAA   .^ E9 6BFFFFFF           jmp 3.00971B1A
利用上面这段代码对DLL的整个代码段进行变形加密,解密时就变减法~应该饶过了DLL的重定位问题,可是运行调用这个DLL文件的时候不是弹出错就是蓝屏,而对EXE文件却没问题,这是为什么?

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
2
因为DLL本身有重定位表,你这个解密代码执行时系统已经对某些指令做了重定位处理,再执行你这个就把重定位部分数据搞乱了,而EXE不存在重定位问题,所以你怎么折腾都没事。你凭什么说就绕过了重定位处理呢?检查一下你的加载地址不就知道了?调试一下,或者你可以在编译时指定DLL的基址为象0x20000000这样不会被别人占用的地址来测试一下就知道了
2009-9-25 22:13
0
雪    币: 192
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
重定位不就是加基址吗?如果是异或的话,解密的时候就会把已经异或加密过的数据先进行重定位再异或一遍,当然就出错了,如果是加减法加密的话,应该是不影响重定位的,这一点我在OD载入时比较了有重定位地方的数据的,不是这样的么?
2009-9-25 23:26
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
4
觉得你的问题还是在重定位,你是四字节为单位作加减法,但是系统处理重定位时的加减法跟你的存在对齐问题(指令长度不定),重定位处理的那四个字节也许刚好被你拆开了吧,纯属猜测,让调试器说话吧
2009-9-26 15:20
0
雪    币: 192
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
刚试过了BYTE加一减一,还是不行...
2009-9-28 00:42
0
雪    币: 7651
活跃值: (523)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
6
即使是byte也存在上溢下溢的问题,你无法保证你做的加减法掺和重定位处理后还能够还原到原来的效果吧,不对重定位做处理是不行的啊,有重定位表在那儿,似乎也不难做嘛~
2009-9-28 10:29
0
游客
登录 | 注册 方可回帖
返回
//