飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 7305|回复: 27

[原创] 我的第一次追码

[复制链接]

该用户从未签到

发表于 2009-6-8 23:14:22 | 显示全部楼层 |阅读模式
【破文标题】我的第一次追码
【破文作者】ujtyug
破解工具】PEID,Ollydbg
【破解平台】WinXP SP2
【软件名称】易优超级字典生成器 V3.35
【软件大小】348KB
【原版下载】未知
【作者声明】很早以前破的,最近闲下来了,就发上来,只为研究,没有其他目的。失误之处敬请诸位大侠赐教!
【保护方式】注册码,重启验证
【软件简介】
一款字典制作工具,功能十分强大。
主要特征:
程序采用高度优化算法,制作字典速度极快
精确选择所需要的字符,针对性更强
自定义字符串采用了绝对长度匹配算法,使生成密码长度与你所选择的长度严格吻合
特殊位字符定义,可以满足用户的特殊要求,从而使字典长度更小
修改字典功能可将一本现成的字典按需求进行字符串的前插和后插
生日字典制作包含了十几种典型的生日模式,符合人们的一般习惯
利用特殊位设置(如:把前几位设置成6234)可实现电话密码的制作
------------------------------------------------------------------------
【破解过程】
------------------------------------------------------------------------
用PEID查壳为 Microsoft Visual C++ 6.0,无壳。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
运行软件,切换到注册标签,看到申请号和注册密码两栏,随意输入注册密码,点注册提示“感谢使用…!请重启本程序,如果你输入的注册密码正确,将能使用本软件的全部功能,并享受后续版本的免费升级。”。
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
用OD载入,入口点附近代码如下:

0041CE06 >/$  55            PUSH EBP
0041CE07  |.  8BEC          MOV EBP,ESP
0041CE09  |.  6A FF         PUSH -1
0041CE0B  |.  68 B0E34300   PUSH superdic.0043E3B0
纵观入口代码段的代码,可以判断出,程序流程清晰,而且没有出现MFC相关调用,那就应该是Win32编程编出来的。
由于是重启验证,那么注册密码应该是在窗口出现之前就算好了的。在字符串参考里,找到了如下字串:
超级字串参考+        , 条目 3
地址=0040264F
反汇编=PUSH superdic.00446128
文本字串=software\eusoft\superdic
超级字串参考+        , 条目 6
地址=004026E0
反汇编=PUSH superdic.00446128
文本字串=software\eusoft\superdic
那这个程序应该把申请号存在注册表里,在命令栏里下断点:“bpx RegQueryValueExA”,F9运行,中断在这里:
0040272C  |.  50            PUSH EAX                                 ; /pBufSize
0040272D  |.  8B4424 08     MOV EAX,DWORD PTR SS:[ESP+8]             ; |
00402731  |.  8D5424 0C     LEA EDX,DWORD PTR SS:[ESP+C]             ; |
00402735  |.  51            PUSH ECX                                 ; |Buffer
00402736  |.  52            PUSH EDX                                 ; |pValueType
00402737  |.  6A 00         PUSH 0                                   ; |Reserved = NULL
00402739  |.  68 20614400   PUSH superdic.00446120                   ; |user
0040273E  |.  50            PUSH EAX                                 ; |hKey
0040273F  |.  FFD6          CALL ESI                                 ; \RegQueryValueExA
说明这里是获取申请号的语句,然后应该就是注册密码运算了,单步这个函数的时候,发现还有一个password注册表项,这里面应该主是用来存放注册密码了。函数单步完,来到这里:
00403AEA   .  8DB3 FC060000 LEA ESI,DWORD PTR DS:[EBX+6FC]
一直单步下去,直到步过这个call,发现堆栈里出现一串未知字符串,记下这个call和出现的字符串:
00403D50   .  E8 8BF7FFFF   CALL superdic.004034E0
继续往下,直到步过这句代码:
00403EB9   .  8D7C24 30     LEA EDI,DWORD PTR SS:[ESP+30]
发现后面是一段字符串比较的代码,而在ESI中存放的是我输入的假码、EDI中存放的是刚才记下的字符串:
00403EBD   > /8A16          MOV DL,BYTE PTR DS:[ESI]      ;将假码第1个字符的值移入DL寄存器中
00403EBF   . |8A0F          MOV CL,BYTE PTR DS:[EDI]      ;将EDI所存字符串中第1个字符的值移入CL寄存器中
00403EC1   . |8AC2          MOV AL,DL                     ;将DL寄存器的值移入AL
00403EC3   . |3AD1          CMP DL,CL                     ;CL和DL中的值进行比较
00403EC5   . |75 1E         JNZ SHORT superdic.00403EE5   ;若不等,则跳出循环
00403EC7   . |84C0          TEST AL,AL
00403EC9   . |74 16         JE SHORT superdic.00403EE1    ;(1)若AL为零则跳出循环
00403ECB   . |8A4E 01       MOV CL,BYTE PTR DS:[ESI+1]    ;将假码第2个字符的值移入CL寄存器中
00403ECE   . |8A57 01       MOV DL,BYTE PTR DS:[EDI+1]    ;将EDI所存字符串中第2个字符的值移入DL寄存器中
00403ED1   . |8AC1          MOV AL,CL                     ;将CL寄存器的值移入AL
00403ED3   . |3ACA          CMP CL,DL                     ;DL和CL中的值进行比较
00403ED5   . |75 0E         JNZ SHORT superdic.00403EE5   ;若不等,则跳出循环
00403ED7   . |83C6 02       ADD ESI,2                     ;ESI指向假码的第3个字符
00403EDA   . |83C7 02       ADD EDI,2                     ;EDI指向其所存字符串的第3个字符
00403EDD   . |84C0          TEST AL,AL
00403EDF   .^\75 DC         JNZ SHORT superdic.00403EBD   ;(2)若AL不为零则跳回循环开始处

通过对代码的简析,可以知道这段代码将ESI中所存的假码和EDI中所存的字符串逐个比较,若不同则跳出,若到达字符串末尾也跳出。那么这个字符串应该就是我们要找的注册密码了。将它输入到注册密码框中并重启软件,切换到注册标签,发现注册按钮已不可用,完成注册,破解成功。

[ 本帖最后由 ujtyug 于 2009-6-20 10:26 编辑 ]
PYG19周年生日快乐!

该用户从未签到

发表于 2009-6-10 17:54:34 | 显示全部楼层
写的不错,谢谢楼主。
PYG19周年生日快乐!

该用户从未签到

发表于 2009-6-11 19:35:49 | 显示全部楼层
LZ写的很仔细,呵呵 谢谢破文
PYG19周年生日快乐!
  • TA的每日心情
    开心
    2020-11-10 08:52
  • 签到天数: 3 天

    [LV.2]偶尔看看I

    发表于 2009-6-13 11:58:11 | 显示全部楼层
    写得很仔细,多谢分享!  :handshake
    PYG19周年生日快乐!
  • TA的每日心情
    无聊
    2017-5-31 13:17
  • 签到天数: 5 天

    [LV.2]偶尔看看I

    发表于 2009-6-13 18:24:39 | 显示全部楼层
    /:001 有前途
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2009-6-13 23:58:20 | 显示全部楼层
    初学的好文章
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2009-6-14 00:27:06 | 显示全部楼层
    00403ECB   . |8A4E 01       MOV CL,BYTE PTR DS:[ESI+1]    ;将假码第2个字符的值移入DL寄存器中
    00403ECE   . |8A57 01       MOV DL,BYTE PTR DS:[EDI+1]    ;将EDI所存字符串中第2个字符的值移入CL寄存器中
    这有两句笔误哦
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2009-6-16 12:02:05 | 显示全部楼层
    学习了。。。。。
    PYG19周年生日快乐!
  • TA的每日心情
    开心
    2016-5-13 10:37
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2009-6-16 18:06:26 | 显示全部楼层
    来学习啦,很详细
    PYG19周年生日快乐!

    该用户从未签到

    发表于 2009-6-17 00:05:40 | 显示全部楼层
    写的不错,学习一了
    PYG19周年生日快乐!
    您需要登录后才可以回帖 登录 | 加入我们

    本版积分规则

    快速回复 返回顶部 返回列表