我在用SMC破解一个DLL的时候再OD里破解成功了,可是保存后在OD也可以运行,但脱离OD后我运行他时基址变了,内存地址当然也跟着变了,所以又打不开了,有啥解决办法吗,大家告诉下。

  • 标 题:答复
  • 作 者:skyege
  • 时 间:2009-04-18 23:50

call $+5
pop ebp
sub xxxxxx

  • 标 题:答复
  • 作 者:wqhlgr
  • 时 间:2009-04-19 11:41

我没有脱DLL得壳,用的SMC,不用重定位,我只想知道如何在OD中用指令获取基址的方法
我的SMC代码,谁能告诉下怎么改?
再OD中基址是910000,用这代码可以破解。而在不同的机子上基址也不同,所以内存地址也就跟着变了怎么办呢?
mov     dword ptr [B091EF], FFEA3ED0
jmp     009AD268
cmp     dword ptr [AFEA4E], 4A388647
je      short 009AD0D4
jmp     00B0607A
mov     dword ptr [AFEA4E], 4EAFBF11
jmp     00B0607A
nop

  • 标 题:答复
  • 作 者:jackozoo
  • 时 间:2009-04-19 12:16

以第一条指令mov     dword ptr [B091EF], FFEA3ED0为例:
改成这样:
push edx //保护一下
call $+5   //机器码为E8 00 就是call它下面的一条指令
pop edx  //把刚push进去的eip弹出至edx. edx存放该指令地址.
sub edx, [你调试时上条指令的地址]   //得到差值.

mov     dword ptr [B091EF+edx], FFEA3ED0 //加差值即为重定位后值.
pop  edx //恢复现场.