1H[QJ9{KBW22GO1}J(T1BN5.png (25.2 KB, 下载次数: 0)
下载附件
2023-4-18 17:28 上传
在windos中,只要api函数被使用,想隐藏东西是比较困难的。我们应当以api函数为切入点
这是一个调用文本的函数
所以我们猜测可能是 GetDlgItemTextA 或 GetDlgItemTextW
在ascII版本中为GetDlgItemTextA 而在unicode版本中为 GetDlgItemTextW
我这个是ascII版本的 我们使用ctrl+g 进行搜素
BDXI1LFE60RXC4_R(}}0PS8.png (929 KB, 下载次数: 0)
下载附件
2023-4-18 17:28 上传
我们在这里按f2下一个断点然后运行一遍程序
f8单步步过,当我们听到蹬的一声的时候发现显示序列号错误
M1(0%[`9YER@[~]T[YVJ}S6.png (1.09 MB, 下载次数: 0)
下载附件
2023-4-18 17:29 上传
我们再次运行程序来到断点处,在这里到call时可以按f7进入原函数进行查看,这一部分《加密与解密》有对这一部分详细的解释
但我们需要的并不是这些,这只是一个验证程序,我们只需修改返回值就好,我们按ctrl+9返回,边按f8单步过边查看系统窗口的提示
2.png (889.49 KB, 下载次数: 0)
下载附件
2023-4-18 17:29 上传
当我们运行到这里时发现这是我们所输入的数据,且接着运行发现下面有我们的断点。
(46T(0183SV3JT$U@`(J7`K.png (979.75 KB, 下载次数: 0)
下载附件
2023-4-18 17:31 上传
这里补充一个知识点:大部分数据是储存在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
3.png (605.57 KB, 下载次数: 0)
下载附件
2023-4-18 17:31 上传
我们这时候再进行f8单步运行
5.png (229.56 KB, 下载次数: 0)
下载附件
2023-4-18 17:30 上传
这个程序即被我们破解
9.png (39.49 KB, 下载次数: 0)
下载附件
2023-4-18 17:33 上传
这是我写的第一个帖子,有很多不足指出希望各位大佬多多包涵和指正