XXXX快速邮件地址搜索器 by upfeed[FCG]
真的是其貌不扬,内部算法居然是MD5的,正好最近有看过,正好练习一下:
============================================================
VC的程序,用DASM反汇编以后,发现信息报存在\harrow.cur的指针数据的后面,于是用OllyDbg载入:
========================
00410AB8 |. 68 64DE4600 PUSH fastsear.0046DE64
; ASCII "\harrowzs.cur"查找文件
........
00410AF2 |. E8 B6410200 CALL fastsear.00434CAD
; 获得文件大小
00410AF7
|. 8BF0 MOV ESI,EAX
00410B06 |. 81FE
FE020000 CMP ESI,2FE
; 判断文件后面是否有信息
........
00410B5C
|. 50 PUSH EAX
; 读出的注册数据
00410B5D |. E8 52290200 CALL fastsear.004334B4
注册名和注册码用0a0d来分离
........
00410C47 |. 8B5424 14 MOV EDX,DWORD
PTR SS:[ESP+14] ; 注册名
00410C4B
|. 8B42 F8 MOV EAX,DWORD PTR DS:[EDX-8]
00410C4E
|. 83F8 08 CMP EAX,8
00410C51 |. 0F8C F8000000
JL fastsear.00410D4F ;
长度大于等于8
........
00410C86 |. 50
PUSH EAX
; 注册名
00410C87 |. E8 A4020000
CALL fastsear.00410F30 ;
算注册码
跟踪进去看一看:
0041101B |. 50
PUSH EAX
0041101C |. E8 4D290200 CALL fastsear.0043396E
; 几个字符串的连接,如下所示
---------------------------------------------
| 'zsday-' + 机器码 + '-scy33dds-' + 用户名 |
---------------------------------------------
往下面走就是MD5的计算地方了:
00411070 |. 51
PUSH ECX
; 注册名
00411071 |. 52
PUSH EDX
; 连接串
00411072 |. E8 F9F2FFFF
CALL fastsear.00410370 ;
MD5
----------------------------------------------------------------------
| 这里的MD5算了两次,直接用0补齐64位注册名,一次xor $36,一次xor $5C |
| 每一次都会将连接串也算一次,见下面的说明
|
----------------------------------------------------------------------
关于摘要的计算有一点说明:
MD5(MD5(default, name xor $36), MCode) ...... (1)
; 相当于分组求出的结果
MD5(MD5(default,
name xor $5C), (1)) ...... (2)
; 这里利用了上一次的结果
得到的摘要转换成字符串就是下面的样子了:
8f554cbca228294b4c2134538f2360cd
下面的工作就是拼凑注册码:
0041108D |. 6A 01
PUSH 1
0041108F |. 8D4C24 2C
LEA ECX,DWORD PTR SS:[ESP+2C]
00411093 |. 6A 1A
PUSH 1A
00411095 |. 51
PUSH ECX
00411096 |. 8D4C24 1C
LEA ECX,DWORD PTR SS:[ESP+1C]
0041109A |. C68424 E0000000
0>MOV BYTE PTR SS:[ESP+E0],8
004110A2 |. E8 A7F40100
CALL fastsear.0043054E ;
从1A位开始的1位
所以形式如下了:
(1A,1)(14,4)(0E,1)-(0B,1)(08,4)(1E,1)-(0F,1)(10,4)(15,1)-(1C,1)(00,4)(0F,1)-
(04,1)(1C,4)(12,1)-(0F,1)(04,4)(07,1)-(03,1)(0C,4)(00,1)-(13,1)(18,4)(09,1)
其实我正好把它反过来了!
结果在下面了:
28f231-8294b5-c4cbcb-260cd4-b8f556-44c21b-ca2288-434532
========================
关于MD5的具体实现,要感谢看学老师提供的Crack Tutorial,其中有详细的讲解。
- 标 题:MD5初次尝试 (2千字)
- 作 者:upfeed1
- 时 间:2002-8-19 1:12:33
- 链 接:http://bbs.pediy.com