首页
社区
课程
招聘
[旧帖] [求助]请教用OD修改堆栈后保存问题 0.00雪花
发表于: 2009-7-18 12:34 6005

[旧帖] [求助]请教用OD修改堆栈后保存问题 0.00雪花

2009-7-18 12:34
6005
最近研究一个有功能限制的软件

先是脱壳   然后跳过注册

最后 注册 是成功跳过了  但是功能限制依然还在

所以就想到了 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期)

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 8185
活跃值: (2681)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
动态生成的,堆栈内容不能这样保存
2009-7-18 12:38
0
雪    币: 1632
活跃值: (13)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
看看哪里入栈
2009-7-18 14:04
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
那该怎样修改堆栈的东西啊
2009-7-18 14:06
0
雪    币: 8185
活跃值: (2681)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
看看哪里入栈,改对应的代码
2009-7-18 19:59
0
游客
登录 | 注册 方可回帖
返回
//