打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
OllyDBG简单爆破小记
一假期东逛逛西逛逛……逛荡了好几天。总算是抽空干了点正事,看着教程试着用OllyDBG爆破了一个极简单的TraceMe小程序。东西不难,算是个基础吧。
004013A0 <模块入口点>          PUSH EBP
程序入口在004013A0处。按F9让程序跑起来:
很清晰的看到这是一个验证用户名和序列号的小程序,那么我们要跟踪的当然是USER32.GetDlgItemText或者类似的API函数。我这里占个便宜,联系程序已经给出是32位ANSI版的,那很自然的我们要锁定USER32.GetDlgItemTextA
这时,我们可以按Ctrl+N来获取应用程序输入表,很容易我们就能找到我们要的东东~之后按ENTER转入即可。
当然,也可以用Ctrl+G来跟随这个函数
总之我们的目的就是找到这个USER32.GetDlgItemTextA的入口,现在我们的目的达到了:
76632AE1 GetDlgItemTextA          MOV EDI,EDI
入口位置在76632AE1。当然这个位置不同系统是不一样的,不必在意。在这里用F2设置一个断点,再用Alt+F9返回TraceMe程序领空。按F9将程序跑起来。用户名和序列号我们随便输入一个即可:
点击Check之后当然会卡在刚才设置的断点处,再用Alt+F9回到程序领空,我们很容易的就找到了调用USER32.GetDlgItemTextA函数的位置。
我们用Alt+B打开断点列表,禁用掉76632AE1处的断点,然后在程序调用API函数的地方设置一个新的断点:
004011AE    PUSH 51                         ; /Count = 51 (81.)
004011B0    PUSH EAX                        ; |Buffer
004011B1    PUSH 6E                         ; |ControlID = 6E (110.)
004011B3    PUSH ESI                        ; |hWnd
004011B4    CALL EDI                        ; \GetDlgItemTextA
004011B6    LEA ECX,DWORD PTR SS:[ESP+9C]
004011BD    PUSH 65                         ; /Count = 65 (101.)
004011BF    PUSH ECX                        ; |Buffer
004011C0    PUSH 3E8                        ; |ControlID = 3E8 (1000.)
004011C5    PUSH ESI                        ; |hWnd
004011C6    MOV EBX,EAX                     ; |
004011C8    CALL EDI                        ; \GetDlgItemTextA
我们就在这个004011AE处设置一个新的断点,然后再重新来过,把程序再跑一遍。到达这个004011AE处,程序会停住,然后我们就用F8单步执行这个程序。
在004011B0处我们看到命令是PUSH EAX,那么就在旁边的寄存器窗口中右键点击EAX寄存器,选择“数据窗口中跟随”。
这时下方的数据窗口中就会锁定EAX寄存器指向的位置。我们继续用F8单步跟踪,并注意观察下方的数据窗口。
运行到004011B4时调用API函数,到004011B6时,下方的数据窗口显示出我们刚刚输入的用户名:
同理,运行到004011CA的时候,序列号也会相应的显示出来:
那么下面就应该是计算用户名和序列号的关键了:
004011CA    MOV AL,BYTE PTR SS:[ESP+4C]
004011CE    TEST AL,AL
004011D0    JE SHORT TraceMe.00401248
004011D2    CMP EBX,5
004011D5    JL SHORT TraceMe.00401248
004011D7    LEA EDX,DWORD PTR SS:[ESP+4C]
004011DB    PUSH EBX
004011DC    LEA EAX,DWORD PTR SS:[ESP+A0]
004011E3    PUSH EDX
004011E4    PUSH EAX
004011E5    CALL TraceMe.00401340
004011EA    MOV EDI,DWORD PTR DS:[<&USER32.GetDlgItem>]   ;  USER32.GetDlgItem
004011F0    ADD ESP,0C
004011F3    TEST EAX,EAX
004011F5    JE SHORT TraceMe.0040122E
根据上面的代码可看出,004011F5处如果不跳转,则注册成功。
那么我们可以通过给标志寄存器ZF取反或者直接把004011F5处代码修改为控指令来实现我们的爆破。
后面就是保存文件之类的事情了,不再赘述。而具体的算法分析,就真的是要靠读程序了,这次就不再发了。
后面小附一个这回常用的OllyDBG快键功能表:
OllyDBG快键功能
F2在光标处设置断点/取消断点
Ctrl+F2OllyDBG结束被调试程序并重新加载
F7单步步进,遇到CALL跟进
Ctrl+F7连续步进,遇到CALL跟进
F8单步步进,遇到CALL路过,不跟进
Ctrl+F8连续步进,遇到CALL路过,不跟进
F9运行程序
Ctrl+F9直到出现RET指令时中断
Alt+F9若进入系统领空,此命令可瞬间回到应用程序领空
F12暂停运行程序
Ctrl+B查找二进制字串
Alt+B打开断点窗口
Ctrl+G跟随表达式
Ctrl+N打开应用程序输入表
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
Ted's Blog
OllyDBG 入门系列(四)-内存断点
【原创】OllyDBG分析报告系列(1)
读取明文之代码详解(通达信破解工具源码)
一个简单的C++程序反汇编解析
【代码真相】函数调用 堆栈 转载 - liangxiufei - 博客园
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服