OllyDbg笔记-暴力破解简单判断程序(TraceMe.exe与简单Qt程序)
发布日期:2021-06-30 10:40:56 浏览次数:2 分类:技术文章

本文共 1667 字,大约阅读时间需要 5 分钟。

目录

 

 


 

 

基本概念

分析一个程序,用什么API函数作为切入点十分关键。

设置OllyDbg中断在程序的入口:

System breakpoint:系统断点,OllyDbg用CreateProcessA加载DEBUG_ONLY_THIS_PROCESS参数执行,程序运行之后会触发一个INT13,在系统空间里。

Entry point of main module:主模块的入口点,即文件的入口点。

WinMain:程序的WinMain()函数入口点。

点击选项,再点击开始,即可选择暂停点:

普通的Win32项目或者MFC程序

程序通常读取文本框内容的字符串用的是以下两个函数:

GetDlgItemTextA(GetDlgItemTextW)

GetWindowTextA(GetWindowTextW)

Qt程序在Windows逆向过程中其实也有这个,但可以根据Qt函数特意的特征,进行破解,在下面的代码与实例中将会给出。

关于返回值,汇编代码的返回值约定是存放在eax这个寄存器里边的,如果32位的eax不够存放返回值,系统会将返回值放在内存某个位置并把该位置的地址放在eax返回。

 

 

代码与实例

这里首先破解下TraceMe这个程序。

程序运行截图如下

随机输入用户名和密码,点击确定:

使用OD打开,Ctrl + G 直接搜索:

GetDlgItemTextA

在此处下个断点,在写代码的时候,可以知道当要计算时,基本上要先获取用户的数据,然后进行算法,最后得到结果。

暴力破解,就是在得到结果的那个时间,把以前如果是fale的,变成true,让其成功的运行。

如下分析下:

发现,这个开始把用户名压入栈,估计要开始调用判断函数了!再走

这里用户名,密码都传进去了。这个Call估计就是算法,然后后的这个Test EAX,EAX就是存放结果。

走到JS跳转那个地方

把Z这个标志位改为0.看看

此时显示不跳转了,在这个地方放个断点,然后跑起来。

提示登录成功。

双击JZ这个地方:

进了这个页面后,右键保存

然后是

生成好文件后,随便输入用户名密码即可:

 

这里用Qt写一个小程序,关键代码如下:

#include "widget.h"#include "ui_widget.h"#include 
#include
Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget){ ui->setupUi(this); connect(ui->pushButton, SIGNAL(clicked()), this, SLOT(btnClicked()));}Widget::~Widget(){ delete ui;}void Widget::btnClicked(){ QString passwd = ui->lineEdit->text(); if(isOK(passwd)){ QMessageBox::information(this, "提示", "成功"); } else{ QMessageBox::information(this, "提示", "失败"); }}bool Widget::isOK(QString str){ if(str == "www.it1995.cn") return true; return false;}

这个是自己写的,密码是www.it1995.cn,现在破解他,来看看是怎么样的逻辑:

演示下,输入正确的密码:

输入错误的密码:

破解他,让其输入任意的用户名密码都能登录成功!

 

用OD打开他,经过慢慢的分析(其实和上面有异曲同工之妙),得到结果:

在此附近重新下个断点:

这里是关键:

成功了,像刚刚那样修改下,就算暴力破解了!

 

 

 

打包下载

转载地址:https://it1995.blog.csdn.net/article/details/103399566 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:OllyDbg笔记-对标志寄存器中ZF的理解(逆向方面)
下一篇:Java工作笔记-@Value注解的使用(可用于配置文件)

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2024年04月18日 08时07分18秒