ujtyug 发表于 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:             ; |
00402731|.8D5424 0C   LEA EDX,DWORD PTR SS:             ; |
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:
一直单步下去,直到步过这个call,发现堆栈里出现一串未知字符串,记下这个call和出现的字符串:
00403D50   .E8 8BF7FFFF   CALL superdic.004034E0
继续往下,直到步过这句代码:
00403EB9   .8D7C24 30   LEA EDI,DWORD PTR SS:
发现后面是一段字符串比较的代码,而在ESI中存放的是我输入的假码、EDI中存放的是刚才记下的字符串:
00403EBD   > /8A16          MOV DL,BYTE PTR DS:      ;将假码第1个字符的值移入DL寄存器中
00403EBF   . |8A0F          MOV CL,BYTE PTR DS:      ;将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:    ;将假码第2个字符的值移入CL寄存器中
00403ECE   . |8A57 01       MOV DL,BYTE PTR DS:    ;将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 编辑 ]

kkr 发表于 2009-6-10 17:54:34

写的不错,谢谢楼主。

dying 发表于 2009-6-11 19:35:49

LZ写的很仔细,呵呵 谢谢破文

nietsme 发表于 2009-6-13 11:58:11

写得很仔细,多谢分享!:handshake

cjteam 发表于 2009-6-13 18:24:39

/:001 有前途

geii 发表于 2009-6-13 23:58:20

初学的好文章

gzzy 发表于 2009-6-14 00:27:06

00403ECB   . |8A4E 01       MOV CL,BYTE PTR DS:    ;将假码第2个字符的值移入DL寄存器中
00403ECE   . |8A57 01       MOV DL,BYTE PTR DS:    ;将EDI所存字符串中第2个字符的值移入CL寄存器中
这有两句笔误哦

dyg98 发表于 2009-6-16 12:02:05

学习了。。。。。

龙卷风之恋 发表于 2009-6-16 18:06:26

来学习啦,很详细

lsb2002 发表于 2009-6-17 00:05:40

写的不错,学习一了
页: [1] 2 3
查看完整版本: 我的第一次追码