登录暴力破解 | 逆向笔记(一)
前阵子ONDragon之前在群中了做了一个公开课,我觉得蛮受用的。决定和各位分享下,自己的过程,同时也是给我自己做个笔记。
1.源代码
1 | #include <stdio.h> |
2.编译运行
1 | root@demon:~# ls |
因为本机是OSX 懒得用windows下编译,我这里直接用mingw32 编译,用wine运行,结果是输错账户密码,循环让用户输入,直到正确的用户名和密码。
3.载入IDA
将secist.exe 拖入IDA查看下流程图,看下程序是如何运行
这里我们需要将他跳到
这里很明显可以看到,从程序入口点到键入用户名和密码,是如何循环的
1.JNZ : jump if not zero 结果不为零则转移,单标志条件转移,当ZF=0时转移。
2.我们这里需要将它跳转到不为0,也就是z标志位为1
4.载入Ollydebug
接下来我们将程序载入OD 看看。前面我们已经知道程序的整个流程了,我们需要找到jmp的关键处
我们在反汇编窗口,右键,使用字符串搜索功能,搜索关键处。
在搜索处,我们可以看到熟悉的字符串
这里我们可以找Login successful ,我们这里双击跟进跟踪,我们找到Login successful相关的汇编代码,在往上看我们可以看到,我们之前在IDA看到的 jnz 汇编跳转指令。
我们这里可以使用几种方法。
判断后如果不跳,就会到下一个jmp,jmp是无条件跳,既然错误的话,jnz会跳到错误信息,那么我们输入错误后,jz就肯定不跳. (Akkuman师傅教了我也很多)
修改Z标志位。
我们来看看 jnz ,也就说jmp not zero(跳转不是0的地方) 现在z标志位为1,需要将其修改为 0.即可实现输入错误信息,就跳转到成功登陆。
1.我们在 jnz 处下个断点。(断点快捷点F2)
2.我们将其程序运行,输出错误的用户名和密码,断点处,自动断下。
这里我们可以看到Z标注处为1
我们将其z标志位 双击 修改成1
我们将其程序运行,显示登录成功
程序停止
修改汇编指令
我们重新载入OD ,依旧找到 jnz 位置,双击jnz 处汇编代码,将jnz其修改为je
JE——若ZF=1,则跳转,jnz 与je 相反
修改完后,我们将其运行程序,同样得到成功登录
学无止境,有兴趣看OND 老哥的逆向课,可以加入技术群 群号:307283889 ,一起交流技术性探讨。如有文章相关不对的地方,可指出,谢谢!!!