首页
社区
课程
招聘
[原创]小菜鸟破解劣作[2]
发表于: 2008-7-14 00:26 5745

[原创]小菜鸟破解劣作[2]

2008-7-14 00:26
5745

既然菜了,就要努力啊,这是个必经的过程.不要气馁,我为自己打气.感谢看雪论坛给了个交流的平台,再次谢谢.今天又学分析一个简单的程序,我把整个过程详细地说出来,虽然简单,初学最忌小而不为.源程序由群上的朋友提供,下面我们开始,

1.照旧运行程序
 

好,没输入的时候会提示的.下来输入用户和密码,可是没反应,猜是要正确了就会对话框的

用peid检测一下,没壳,不知道什么语言编写.我们先来找没输入密码的提示框是在哪里运行的.用OD附加,标题上显示到ntDLL,让它回到软件的领空.在反汇编窗口,右键==>查看==>我这里选择的是"EE",好了,回到软件的领空了.

按住CTRL+N来看看导入了什么函数,来到这里
图2:
 

为messageboxa下断,右键==>在每个参考上设置断点,此时看到左下角状态栏的提示:"没有参考命令",也就是说我们没设成功断点啦.下来我摸索,用了这样的方法成功下了断.

1.在图2中的MessageBoxA按住ENTER键,查找输入函数参考,来到下面


2.回车,来到这里

  
3.右键==>选定"查找参考"==>选择"选定命令",来到这里


为前三个分别下断点,按住F2,成功了下了断就地址那栏地就成红色的了.呵~是不是下个断都觉得是大费周章啊,不要紧啦,开头难

切换到破解的程序,用户名与密码都留空,我们开始来捕捉弹出的提示框,单击"确定"按钮,被OD断下来了

0040112F    6A 1F           PUSH 1F
00401131    8D45 E0         LEA EAX,DWORD PTR SS:[EBP-20]
00401134    50              PUSH EAX
00401135    68 EA030000     PUSH 3EA
0040113A    FF75 08         PUSH DWORD PTR SS:[EBP+8]
0040113D    E8 DC000000     CALL <JMP.&user32.GetDlgItemTextA>
00401142    0BC0            OR EAX,EAX
00401144    75 14           JNZ SHORT gg.0040115A
00401146    6A 00           PUSH 0
00401148    6A 00           PUSH 0
0040114A    68 00304000     PUSH gg.00403000
0040114F    6A 00           PUSH 0
00401151    E8 CE000000     CALL <JMP.&user32.MessageBoxA>           ; 判断用户名为空
00401156    C9              LEAVE
00401157    C2 1000         RETN 10
0040115A    6A 1F           PUSH 1F
0040115C    8D45 C0         LEA EAX,DWORD PTR SS:[EBP-40]
0040115F    50              PUSH EAX
00401160    68 EC030000     PUSH 3EC
00401165    FF75 08         PUSH DWORD PTR SS:[EBP+8]
00401168    E8 B1000000     CALL <JMP.&user32.GetDlgItemTextA>
0040116D    0BC0            OR EAX,EAX
0040116F    75 14           JNZ SHORT gg.00401185
00401171    6A 00           PUSH 0
00401173    6A 00           PUSH 0
00401175    68 00304000     PUSH gg.00403000
0040117A    6A 00           PUSH 0
0040117C    E8 A3000000     CALL <JMP.&user32.MessageBoxA>           ; 判断密码为空
00401181    C9              LEAVE
00401182    C2 1000         RETN 10
00401185    8D45 C0         LEA EAX,DWORD PTR SS:[EBP-40]
00401188    50              PUSH EAX
00401189    8D45 E0         LEA EAX,DWORD PTR SS:[EBP-20]
0040118C    50              PUSH EAX
0040118D    E8 D8FEFFFF     CALL gg.0040106A                         ; 此处比较可疑,把之前的断点全部禁掉,在这里按下断

下来再输入用户名及密码,分别是:TheUser,ThePassword来到这里

0040106A    55              PUSH EBP
0040106B    8BEC            MOV EBP,ESP
0040106D    83C4 F8         ADD ESP,-8
00401070    FF75 08         PUSH DWORD PTR SS:[EBP+8]
00401073    E8 94010000     CALL <JMP.&kernel32.lstrlenA>
00401078    8BC8            MOV ECX,EAX
0040107A    83F9 06         CMP ECX,6
0040107D    75 7E           JNZ SHORT gg.004010FD                    ; 用户名长度不等于6则完蛋
0040107F    FF75 0C         PUSH DWORD PTR SS:[EBP+C]
00401082    E8 85010000     CALL <JMP.&kernel32.lstrlenA>
00401087    8BC8            MOV ECX,EAX
00401089    83F9 06         CMP ECX,6                                ; 密码长度不为6同样完蛋
0040108C    75 6F           JNZ SHORT gg.004010FD
0040108E    8B75 08         MOV ESI,DWORD PTR SS:[EBP+8]
00401091    B9 04000000     MOV ECX,4
00401096    33FF            XOR EDI,EDI
00401098    8A06            MOV AL,BYTE PTR DS:[ESI]
0040109A    8A5E 01         MOV BL,BYTE PTR DS:[ESI+1]
0040109D    32C3            XOR AL,BL
0040109F    3E:88443D F8    MOV BYTE PTR DS:[EBP+EDI-8],AL           ; 每操作一次,将异或后的字符写入指定内存
004010A4    83C6 02         ADD ESI,2
004010A7    47              INC EDI
004010A8  ^ E2 EE           LOOPD SHORT gg.00401098                  ; 循环操作用户前四位字符,主要是异或,后总共生成四个字符
004010AA    8B75 0C         MOV ESI,DWORD PTR SS:[EBP+C]
004010AD    B9 04000000     MOV ECX,4
004010B2    33FF            XOR EDI,EDI
004010B4    8A06            MOV AL,BYTE PTR DS:[ESI]
004010B6    8A5E 01         MOV BL,BYTE PTR DS:[ESI+1]
004010B9    32C3            XOR AL,BL
004010BB    3E:88443D FC    MOV BYTE PTR DS:[EBP+EDI-4],AL           ; 循环操作密码前四位字符,主要是异或,后总共生成四个字符
004010C0    83C6 02         ADD ESI,2
004010C3    47              INC EDI
004010C4  ^ E2 EE           LOOPD SHORT gg.004010B4                  ; 算法与用户名一样
004010C6    B9 03000000     MOV ECX,3
004010CB    33FF            XOR EDI,EDI
004010CD    36:8A442F F8    MOV AL,BYTE PTR SS:[EDI+EBP-8]
004010D2    36:8A5C2F FC    MOV BL,BYTE PTR SS:[EDI+EBP-4]
004010D7    32C3            XOR AL,BL                                ; 用户中得到的前三个,每个字符依次与密码中的每个字符进异或
004010D9    88442F F8       MOV BYTE PTR DS:[EDI+EBP-8],AL           ; 存入异或的结果
004010DD    47              INC EDI
004010DE  ^ E2 ED           LOOPD SHORT gg.004010CD
004010E0    8B45 F8         MOV EAX,DWORD PTR SS:[EBP-8]
004010E3    2D 0E151C00     SUB EAX,1C150E                           ; 异或后的结果的三个字若不等于1c150E则完蛋
004010E8    75 13           JNZ SHORT gg.004010FD
004010EA    6A 00           PUSH 0
004010EC    68 15304000     PUSH gg.00403015
004010F1    68 15304000     PUSH gg.00403015
004010F6    6A 00           PUSH 0
004010F8    E8 27010000     CALL <JMP.&user32.MessageBoxA>           ; 弹出成功的地方
004010FD    C9              LEAVE
004010FE    C2 0800         RETN 8                                   ; 传说的中栈平衡


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 7
支持
分享
最新回复 (6)
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
感谢楼主分享经验
学习..下载下来再分析下
2008-7-14 09:47
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
为什么我f9运行,就说访问违例00000000不可写入
我2000的系统
2008-7-14 22:26
0
雪    币: 239
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
没在2000上试过,我的是xp的啊,没见任何故障
2008-7-14 22:38
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我的是xp系统,也碰到这个情况。
2008-7-15 12:15
0
雪    币: 239
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
6
該文件不能直接打開調試的,具體原因我也不知道,這個有待有以後深入學習才能分析得出來,暫時不要理會,我只是拿來練手的,我是用附加的方式調試的

忘記把此點寫在上面了,給大家帶來不便了
2008-7-15 13:32
0
雪    币: 213
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
终于看懂了一篇文章,谢谢搂住了,
最关键的地方就是跳到004010E8,呵呵!
2008-7-15 14:19
0
游客
登录 | 注册 方可回帖
返回
//