在Assembly中更改值并将它们保存到exe

时间:2017-12-14 02:43:36

标签: assembly

我正在尝试使用ollydb和作弊引擎修改C ++程序。

无论出于何种原因,我想删除一个内存地址并将其替换为数字0(或以相同结果结尾的任何内容)。

我需要用0代替代码中有四个点。

这是我的问题:

CPU瘫痪 前

01411E38  |.  8BD0          MOV EDX,EAX
01411E3A      3315 0020A701 XOR EDX,DWORD PTR DS:[1A72000]
01411E40  |.  8995 B8FCFFFF MOV DWORD PTR SS:[EBP-348],EDX

更改为:

01411E38  |.  8BD0          MOV EDX,EAX
01411E3A      83F2 00       XOR EDX,00000000
01411E3D      90            NOP
01411E3E      90            NOP
01411E3F      90            NOP
01411E40  |.  8995 B8FCFFFF MOV DWORD PTR SS:[EBP-348],EDX

保存/重新加载时:

01111E38   .  8BD0          MOV EDX,EAX
01111E3A      83            DB 83
01111E3B      F2            DB F2
01111E3C   .  00906090      DD 90609000
01111E40  /.  8995 B8FCFFFF MOV DWORD PTR SS:[EBP-348],EDX

那么为什么要改变呢 XOR EDX,DWORD PTR DS:[1A72000]

XOR EDX,0

当我进行更改时工作,但是如果我保存exe并重新加载它,则修改后的程序集会被更改/破坏。

1 个答案:

答案 0 :(得分:2)

感谢您的帮助。

  

因为仍有针对这些字节的修正记录。程序   图像不是二进制转储。它们要复杂得多。注意   当你修补它的位置是01411E38,但是01111E38的时候   它被重新加载。这就是为什么其中一个改为60。

- Raymond Chen

XOR EDX,DWORD PTR DS:[1A72000]

- 杰斯特

替换

JMP 01411E40

app.post('/keyword', isLoggedIn, function (req, res) {
               User.update({_id:req.user._id},{$addToSet:{keyword:req.body.tags}},function (err, result) {
                    if (err) return handleError(err);

                    return true;
                  });
                  console.log(w);
                  res.json({user:req.user})

        })