llh001 发表于 2008-9-20 08:14:29

如何更改代码。

求助:在调试某软件时,遇到一个问题,软件多次调用一个CALL来判断注册与否,此call内部分代码如下:
00432B2F      CC            int3
00432B30      8B41 08       mov   eax, dword ptr //我断在这里,发现这里代码为EAX赋值了,若赋给EAX是0以后软件就显示未注册版了。
00432B33      C3            retn
00432B34      CC            int3
------------------------------------------------------------------------
提示:ds:=00000000
eax=0016C7B0
本地调用/跳转来自 004284E6

我的最初改法是
00432B2F      CC            int3
00432B30      B8 01000000   mov   eax, 1
00432B35      C3            retn
00432B36      CC            int3

不知这样改是否可以(软件倒是显示注册版了,就怕别处有暗桩!!)。
我的想法最好是让01716570=00000000变为00000001,于是ctrl+G来到这里,代码为.

0171656E    0000            add   byte ptr , al
01716570    0000            add   byte ptr , al
01716572    0000            add   byte ptr , al
01716574    2C 8D         sub   al, 8D
01716576    2B78 F8         sub   edi, dword ptr
01716579    6B71 01 2C      imul    esi, dword ptr , 2C
0171657D    8D2B            lea   ebp, dword ptr
0171657F    78 FF         js      short 01716580

这样软件在别处设暗桩的话,读取这里就不会出问题了,请问是否应改这里(还是使用我的最初改法)。若改这里又该如何进行更改好呢(最好给详细一点的直接改法或内存补丁法)?
谢谢大家关注此帖!!十分感谢回帖的朋友!!

[ 本帖最后由 llh001 于 2008-9-20 16:17 编辑 ]

Nisy 发表于 2008-9-20 11:00:41

里边只是一个变量的地址 可以下硬件断点看是哪里做的赋初值 然后修改就可以了

Patch 到空白地址这样写或许可以 如果其他地方没有继续验证的话 最好的方法就是 硬断然后分析

mov   byte ptr ,1
mov   eax, dword ptr

llh001 发表于 2008-9-20 16:17:17

感谢回复,硬件断点还真没用过,我试试。多谢提醒!!

老海 发表于 2008-9-21 17:36:39

2楼回复的方法是暴破的根本方法。
页: [1]
查看完整版本: 如何更改代码。