OllyDbg笔记-暴力破解简单判断程序(TraceMe.exe与简单Qt程序)
目錄
?
?
基本概念
代碼與實例
打包下載
?
?
基本概念
分析一個程序,用什么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 <QMessageBox> #include <QDebug>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://github.com/fengfanchen/Qt/tree/master/checkPasswdOfOD
總結
以上是生活随笔為你收集整理的OllyDbg笔记-暴力破解简单判断程序(TraceMe.exe与简单Qt程序)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Redis工作笔记-Set类型
- 下一篇: OllyDbg笔记-修改Messageb