-
-
[旧帖]
[求助]请教用OD修改堆栈后保存问题
0.00雪花
-
发表于:
2009-7-18 12:34
6005
-
[旧帖] [求助]请教用OD修改堆栈后保存问题
0.00雪花
最近研究一个有功能限制的软件
先是脱壳 然后跳过注册
最后 注册 是成功跳过了 但是功能限制依然还在
所以就想到了 Enablewindow 这个函数
于是在这个函数上面下断点 断下程序后 在堆栈窗口中发现如下内容:
0012F540 0041F2BB /CALL 到 EnableWindow
0012F544 0009022E |hWnd = 0009022E ('QQzo>
0012F548 00000000 \Enable = FALSE
于是猜想(新手猜想,第一次,不知道对不对) 将 Enable = FALSE 修改掉
接下来 右键→修改→改为 FFFFFFFF
0012F540 0041F2BB /CALL 到 EnableWindow 来自>
0012F544 0009022E |hWnd = 0009022E ('QQzo>
0012F548 FFFFFFFF \Enable = TRUE
Enable = FALSE 成功改成了 Enable = TRUE
运行下去 限制成功解除 最后就是保存了
在调试窗口中 全选→复制到可执行文件→选择部分→右键→保存文件。。。。
意外出现了 居然要我保存的是DLL
按我 的想法应该是EXE的格式撒
不知道是什么问题 所以在此请教大家
又想到个方法 可以不改堆栈内容 在CALL EnableWindow 之前 肯定有 PUSH
我找到了这个PUSH 就在这个 CALL 前面 内容如下:
0041F2B1 57 push edi
0041F2B2 FF75 EC push dword ptr ss:[ebp-14]
0041F2B5 FF15 DCE44200 call dword ptr ds:[<&USER32.Enable>; USER32.EnableWindow
其中第一条 0041F2B1 57 push edi
在寄存器窗口中看到 EDI 的值是 00000000
所以我想 只要在 “0041F2B1 57 push edi ” 执行之前把EDI寄存器内容 改成FFFFFFFF 也可以达到
预想效果
不过新的问题又出现了
怎样改寄存器的值呢·····就算改了寄存器 会不会关了程序后 修改又失效了呢
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)