首页
社区
课程
招聘
[原创]新人arct1cer,加密与解密的学习笔记。破解一个简单的程序
发表于: 2023-4-18 17:13 5924

[原创]新人arct1cer,加密与解密的学习笔记。破解一个简单的程序

2023-4-18 17:13
5924

大家好,这里是新人arct1cer。刚学到加密与解密基础操作的破解第一个程序,在明白原理后非常兴奋发帖子,这个帖子也算是我的个人笔记,今后我也会发更多的学习笔记在账号上。在写帖子的时候发现自己还有很多不足,希望各位大佬发现不足之处请提出,我会改正的。^—^

 

首先打开ollydbg并且打开程序
在windos中,只要api函数被使用,想隐藏东西是比较困难的。我们应当以api函数为切入点
这是一个调用文本的函数
所以我们猜测可能是 GetDlgItemTextA 或 GetDlgItemTextW
在ascII版本中为GetDlgItemTextA 而在unicode版本中为 GetDlgItemTextW
我这个是ascII版本的 我们使用ctrl+g 进行搜素

我们在这里按f2下一个断点然后运行一遍程序
f8单步步过,当我们听到蹬的一声的时候发现显示序列号错误
我们再次运行程序来到断点处,在这里到call时可以按f7进入原函数进行查看,这一部分《加密与解密》有对这一部分详细的解释
但我们需要的并不是这些,这只是一个验证程序,我们只需修改返回值就好,我们按ctrl+9返回,边按f8单步过边查看系统窗口的提示

当我们运行到这里时发现这是我们所输入的数据,且接着运行发现下面有我们的断点。

这里补充一个知识点:大部分数据是储存在eax里的,这里我们对汇编代码进行解析发现这个call引用了上面几个指令并且在je的时候进行一个判断并且跳转
{je 表示等于就跳转
je 指令【Jump if Equals】在ZF被置位时跳转。je 是 jz 【Jump if Zero】的别名
test 指令用于两个操作数的按位AND运算,并根据结果设置标志寄存器,结果本身不会写回到目的操作数}
tips:大括号这一段是我从网上查来的资料(我在学汇编的时候并没有记下来所有的标志寄存器,只是草草带了一眼)^-^
指令执行后,其结果是否为0,若结果为0,那么ZF=1;如果不为0,那么ZF=0。

我们找到右上方将双击zf标志寄存器将zf的值改为0

我们这时候再进行f8单步运行
这个程序即被我们破解

 

这是我写的第一个帖子,有很多不足指出希望各位大佬多多包涵和指正


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 2
支持
分享
最新回复 (2)
雪    币: 26588
活跃值: (63252)
能力值: (RANK:135 )
在线值:
发帖
回帖
粉丝
2
鼓励一下,加油!
2023-4-18 20:23
0
雪    币: 208
活跃值: (427)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
Editor 鼓励一下,加油!
谢谢支持

2023-4-18 22:10
0
游客
登录 | 注册 方可回帖
返回
//