网维大师无盘教程(vmix64教程

源代码分析中,首先需要破译的程序源代码

# include windows.h # include stdio.h # include stdlib.h # include string # include iostream # include stdint.h # includestdestd STD : CIN输入字符串; if (输入字符串. c _ str (,’ qwe ‘ )==0) STD33603360cout (密码正确) std:endl; }else{std:cout ‘密码错误’ std:endl; }}源代码可以轻松循环输入,输入qwe后输出密码正确,其他情况下输出密码错误

打开x64dbg打开exe程序,右键单击,然后选择“搜索”-“所有模块”-“字符串”

找到密码错误的行

单击鼠标右键,然后在反组件中移动到

可以移动到EC11DD部分

000007FF61FEC11CC行包含一个名为jne dump.7FF61FEC11DD的代码,表示已进入错误判断。 可以跳至错误代码,使00007ff61FEC11cc退出F2断点进行调试过程

几种代码流的说明

00007FF61FEC11BEmov rax,rbp [rax清0]

这里,rax寄存器主要进行比较字符串个数的计数,例如由于密码是qwe,所以比较的计数在4qwe(3)上加上(0=4)

因此,有00007FF61FEC11CE cmp rax、在4个位置比较rax个数的判断

在每个周期比较strcmp时

00007 ff 61f EC 11 c5Inc rax [增加rax计数1 ]

各字符的比较

00007FF61FEC11C8 cmp cl,byte ptr ds:[rsi rax-1] |将字符串与密码qwe进行比较,每次比较一个字节

如果0007 ff 61f ec11 ccjnedump.7FF61FEC11DD中的一个字符失败,则字节跳至失败的地址7ff 61 FEC 11 DD

00007FF61FEC11CE cmp rax,4比较成功的字符数小于4 (qwe加(0) 7FF61FEC11C1跳开始下一个字符的比较,成功的话只有00007FF61FEC11D4进入成功处理

此外,我们发现这是while死循环

因此,00007FF61FEC1201 cmp RDI,10编译器创建的死循环rdi为16,绝对不是10,而是跳至7FF61FEC1160的开头

00007 ff 61f EC 1205 JB dump.7ff 61f EC 1160至此开始了一个周期

如何解读

上述代码显示了一个字符失败时的简要分析

00007 ff 61f EC 11 ccjnedump.7ff 61 FEC 11 DD将跳转到失败错误处理。 在这里修改跳转地址就可以了

将地址更改为EC11D4以跳转到正确的地址

然后生成新的exe文件

然后,运行新的exe时,您将看到输入任何输出密码都是正确的

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注