首页
社区
课程
招聘
[原创]小小软件学习简单算法
发表于: 2006-1-17 19:53 7878

[原创]小小软件学习简单算法

2006-1-17 19:53
7878

【破文作者】   血草[DFCG]

【文章题目】   光驱伴侣算法

【软件名称】   光驱伴侣V1.2

【下载地址】   http://www.skycn.com/soft/13453.html

----------------------------------------------------------------------------------------------

【破解工具】   PEID,OD  

【破解平台】   Win9x/NT/2000/XP/XP SP2

----------------------------------------------------------------------------------------------
【软件简介】

   一个小巧的绿色软件,只有一个可执行文件(68kb),将它拷贝到任何一个目录即可执行。其功能是控制光驱的弹出、关闭,支持多个光驱,可随系统自动启动,在关闭系统时如果有光盘被遗忘在光驱内,该软件可以给出提示。使用本软件,您可以方便地用鼠标打开、关闭光驱。如果您经常将光盘忘记在光驱中,本软件可以为您解决这个问题,在关机时提醒您取出光驱中的光盘。1.1版新增功能:热键打开、关闭光驱。

【文章简介】

一个小小的软件,算法也简单,很适合入门。

----------------------------------------------------------------------------------------------
【破解过程】

1 首先运行软件,弹出注册框 ,任意输入用户名和密码后按注册,没有任何提示,
   想想需要的API: GetDlgItemTextA, GetWindowsTextA ,LstrLenA.EndDialog.
2 启动PIED,测壳。显示Microsoft Visual C++ 6.0   ^_^可以偷懒了,最怕脱壳;
3  OD载入软件,插件查看字符串 ,无有用字符串;
4  OD右键->查找->当前模块中的名称  发现有 LstrLenA  右键->在每个参考上设置断点
    F9运行。。

00403B80  /$  83EC 18       SUB ESP,18
00403B83  |.  8D4424 00     LEA EAX,DWORD PTR SS:[ESP]
00403B87  |.  53            PUSH EBX
00403B88  |.  55            PUSH EBP
00403B89  |.  56            PUSH ESI
00403B8A  |.  57            PUSH EDI
00403B8B  |.  50            PUSH EAX
00403B8C  |.  E8 2FFFFFFF   CALL cdpartne.00403AC0
00403B91  |.  8B7C24 2C     MOV EDI,DWORD PTR SS:[ESP+2C]
00403B95  |.  57            PUSH EDI                                  ; /String
00403B96  |.  FF15 64604000 CALL DWORD PTR DS:[<&KERNEL32.lstrlenA>]  ; \lstrlenA    拦截到这里
00403B9C  |.  83F8 14       CMP EAX,14                                ;  比较注册码是否为20位
00403B9F  |.  0F85 AB000000 JNZ cdpartne.00403C50                     ;  不相等那就去试用吧^_^
00403BA5  |.  8A07          MOV AL,BYTE PTR DS:[EDI]                  ;  取注册码第一位去EAX的低位字节AL
00403BA7  |.  3C 44         CMP AL,44
00403BA9  |.  75 04         JNZ SHORT cdpartne.00403BAF               ;  比较第一位是否是D,不是就跳
00403BAB  |.  33ED          XOR EBP,EBP                               ;  是D则EBP为0 这个后面有用
00403BAD  |.  EB 23         JMP SHORT cdpartne.00403BD2
00403BAF  |>  3C 39         CMP AL,39                                 ;  是9吗?不是下去
00403BB1  |.  75 07         JNZ SHORT cdpartne.00403BBA
00403BB3  |.  BD 01000000   MOV EBP,1                                 ;  ebp为1
00403BB8  |.  EB 18         JMP SHORT cdpartne.00403BD2
00403BBA  |>  3C 41         CMP AL,41                                 ;  A同理就不解释了^_^
00403BBC  |.  75 07         JNZ SHORT cdpartne.00403BC5
00403BBE  |.  BD 02000000   MOV EBP,2                                 ;  ebp为2
00403BC3  |.  EB 0D         JMP SHORT cdpartne.00403BD2
00403BC5  |>  3C 35         CMP AL,35                                 ;  5
00403BC7  |.  0F85 83000000 JNZ cdpartne.00403C50                     ;  还不清醒啊 咳。
00403BCD  |.  BD 03000000   MOV EBP,3                                 ;  ebp为3
00403BD2  |>  33DB          XOR EBX,EBX
00403BD4  |.  BE 01000000   MOV ESI,1                                 ;  计数器=1
00403BD9  |>  8A143E        /MOV DL,BYTE PTR DS:[ESI+EDI]             ;  每次取1位到DL
00403BDC  |.  33C9          |XOR ECX,ECX                              ;  清0开始工作
00403BDE  |>  3891 EC914000 |/CMP BYTE PTR DS:[ECX+4091EC],DL         ;  从16H内查询有没有跟你输入一样的
00403BE4  |.  74 06         ||JE SHORT cdpartne.00403BEC              ;  第一不是那就移动呗
00403BE6  |.  41            ||INC ECX                                 ;  就16位注意速度哦^_^
00403BE7  |.  83F9 10       ||CMP ECX,10
00403BEA  |.^ 7C F2         |\JL SHORT cdpartne.00403BDE              ;  循环找16次
00403BEC  |>  83F9 10       |CMP ECX,10
00403BEF  |.  74 5F         |JE SHORT cdpartne.00403C50               ;  刚只想到小于再看看等于16位不
00403BF1  |.  8D04EB        |LEA EAX,DWORD PTR DS:[EBX+EBP*8]         ;  刚起头不一样时候的EBP有用了
00403BF4  |.  3B3485 6C9140>|CMP ESI,DWORD PTR DS:[EAX*4+40916C]      ;  根据(EBX+EBP*8)*4+40916C来决定比较那位
00403BFB  |.  75 29         |JNZ SHORT cdpartne.00403C26              ;  不相等就下去
00403BFD  |.  8A543E FF     |MOV DL,BYTE PTR DS:[ESI+EDI-1]           ;  后退一位的值交给DL
00403C01  |.  33C0          |XOR EAX,EAX
00403C03  |>  3890 EC914000 |/CMP BYTE PTR DS:[EAX+4091EC],DL
00403C09  |.  74 06         ||JE SHORT cdpartne.00403C11
00403C0B  |.  40            ||INC EAX
00403C0C  |.  83F8 10       ||CMP EAX,10
00403C0F  |.^ 7C F2         |\JL SHORT cdpartne.00403C03
00403C11  |>  03C6          |ADD EAX,ESI                              ;  EAX=此次数+总循环的次数
00403C13  |.  25 0F000080   |AND EAX,8000000F                         ;  做与运算
00403C18  |.  79 05         |JNS SHORT cdpartne.00403C1F
00403C1A  |.  48            |DEC EAX
00403C1B  |.  83C8 F0       |OR EAX,FFFFFFF0
00403C1E  |.  40            |INC EAX
00403C1F  |>  3BC8          |CMP ECX,EAX                              ;  比较
00403C21  |.  75 2D         |JNZ SHORT cdpartne.00403C50
00403C23  |.  43            |INC EBX
00403C24  |.  EB 15         |JMP SHORT cdpartne.00403C3B
00403C26  |>  33C0          |XOR EAX,EAX                              ;  清空
00403C28  |>  3890 EC914000 |/CMP BYTE PTR DS:[EAX+4091EC],DL
00403C2E  |.  74 06         ||JE SHORT cdpartne.00403C36
00403C30  |.  40            ||INC EAX
00403C31  |.  83F8 10       ||CMP EAX,10
00403C34  |.^ 7C F2         |\JL SHORT cdpartne.00403C28              ;  
00403C36  |>  83F8 10       |CMP EAX,10
00403C39  |.  74 15         |JE SHORT cdpartne.00403C50
00403C3B  |>  46            |INC ESI                                  ;  加1次
00403C3C  |.  83FE 14       |CMP ESI,14                               ;  到20了没。没有继续
00403C3F  |.^ 7C 98         \JL SHORT cdpartne.00403BD9
00403C41  |.  5F            POP EDI
00403C42  |.  5E            POP ESI
00403C43  |.  5D            POP EBP
00403C44  |.  B8 01000000   MOV EAX,1    标志位为1
00403C49  |.  5B            POP EBX
00403C4A  |.  83C4 18       ADD ESP,18
00403C4D  |.  C2 0400       RETN 4
00403C50  |>  5F            POP EDI
00403C51  |.  5E            POP ESI
00403C52  |.  5D            POP EBP
00403C53  |.  33C0          XOR EAX,EAX
00403C55  |.  5B            POP EBX
00403C56  |.  83C4 18       ADD ESP,18
00403C59  \.  C2 0400       RETN 4

00402A40  /$  56            PUSH ESI
00402A41  |.  8BF1          MOV ESI,ECX
00402A43  |.  57            PUSH EDI
00402A44  |.  8D86 68010000 LEA EAX,DWORD PTR DS:[ESI+168]
00402A4A  |.  8DBE 78020000 LEA EDI,DWORD PTR DS:[ESI+278]
00402A50  |.  50            PUSH EAX                                 ; /IniFileName
00402A51  |.  6A 15         PUSH 15                                  ; |BufSize = 15 (21.)
00402A53  |.  57            PUSH EDI                                 ; |ReturnBuffer
00402A54  |.  68 10944000   PUSH cdpartne.00409410                   ; |Default = ""
00402A59  |.  68 28914000   PUSH cdpartne.00409128                   ; |licensecode
00402A5E  |.  68 20914000   PUSH cdpartne.00409120                   ; |license
00402A63  |.  FF15 54604000 CALL DWORD PTR DS:[<&KERNEL32.GetPrivate>; \GetPrivateProfileStringA
00402A69  |.  57            PUSH EDI                                 ; /Arg1 = 0012F88C
00402A6A  |.  8D8E 6C020000 LEA ECX,DWORD PTR DS:[ESI+26C]           ; |
00402A70  |.  E8 0B110000   CALL cdpartne.00403B80                   ; \cdpartne.00403B80    返回到这里
00402A75  |.  85C0          TEST EAX,EAX    标志为测试
00402A77  |.  75 09         JNZ SHORT cdpartne.00402A82      不为零则后面写入INI文件,提示注册成功。
00402A79  |.  8986 74020000 MOV DWORD PTR DS:[ESI+274],EAX
00402A7F  |.  5F            POP EDI
00402A80  |.  5E            POP ESI
00402A81  |.  C3            RETN

----------------------------------------------------------------------------------------------
【破解心得】

   软件根据第一位来选定需要比较的注册码位置  需要比较的注册码=前一位+此位-1
   比如:我第一位输入的是 5 ,则判断 第 6,7,10,13,16,17,19,20位。
   第6位=第5位的数字+6-1。

----------------------------------------------------------------------------------------------
【破解声明】   算法千变万化,但汇编代码只有那些。

【版权声明】   本文纯属技术交流, 转载请注明作者并保持文章的完整, 谢谢!
----------------------------------------------------------------------------------------------
                                                                    


[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 7
支持
分享
最新回复 (8)
雪    币: 443
活跃值: (200)
能力值: ( LV9,RANK:1140 )
在线值:
发帖
回帖
粉丝
2
坐个沙发!!

支持一下血草大哥!!

好文!!!
2006-1-17 20:37
0
雪    币: 313
活跃值: (440)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
3
呵呵,还好我没写文章,不然就碰头了呵呵
2006-1-17 20:43
0
雪    币: 313
活跃值: (440)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
4
hex(char[i])=hex(char[i-1])+i,比较的位置的代码,i就是比较的位置
2006-1-17 20:46
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
很经典的范文,以后这类的软件可以爆破了! 嘻...
2006-1-17 22:25
0
雪    币: 817
活跃值: (1927)
能力值: ( LV12,RANK:2670 )
在线值:
发帖
回帖
粉丝
6
哟?血草来啦~~支持一个~~~
2006-1-18 11:28
0
雪    币: 217
活跃值: (91)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
容易明白
2006-1-18 13:26
0
雪    币: 205
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
好文!收藏了!

居然还有人要坐沙发,去搜索一下坐沙发什么意思吧,呵呵。
2006-1-19 00:44
0
雪    币: 201
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
好贴,支持下
2006-1-19 09:43
0
游客
登录 | 注册 方可回帖
返回
//