这是我刚学破解时的实验品,破的是《我的flash播放器》,
软件的功能还是很强大的,还能把flash作成屏保,挺符合我的口味,刚装上去的
时候还以为是免费软件,装上去才知道要注册,对我们这些学生一族,20元的
注册费用还是太 high了,于是拿起我的破解三工具,PEid汉化版,w32dasm黄金
版,trw2000,这三款软件不用我介绍了吧!下面就是我的破解过程。
首先用peid侦察一下,还真加的壳,是aspack2.11,用了对对应的脱壳工具脱了,还好,没遇到意外情况,
下面用trw2000载入执行,再要求输入注册码的窗口添入99999999然后下万能断点,
n次f12n次f10来到这里
0167:0047AD3C MOV ECX,0047AEC8
0167:0047AD41 MOV EAX,0047AED8
0167:0047AD46 CALL 0046819C
0167:0047AD4B MOV EAX,[EBP-44]
0167:0047AD4E LEA EDX,[EBP-40]
0167:0047AD51 CALL 004683F4
0167:0047AD56 MOV EDX,[EBP-40] ;这是真的注册码的内存地址,是以后的分析得出的!
0167:0047AD59 POP EAX ;假的注册码99999999是我输入的
0167:0047AD5A CALL 00404B84 ;这可是关键的 call主要作用对输入的注册码进行验证!
0167:0047AD5F JNZ 0047ADC4 ;这可是关键jmp一跳就完了!
0167:0047AD61 MOV EAX,0047AEE8
0167:0047AD66 CALL 00436ED4
0167:0047AD6B LEA EAX,[EBP-50]
0167:0047AD6E CALL 00468A04
0167:0047AD73 MOV EAX,[EBP-50]
下面让我们看看 call 00404b84的程序吗!
167:00404B84 PUSH EBX
0167:00404B85 PUSH ESI
0167:00404B86 PUSH EDI
0167:00404B87 MOV ESI,EAX ;用esi做eax 的镜像
0167:00404B89 MOV EDI,EDX ;用edi做edx的镜像
0167:00404B8B CMP EAX,EDX ;比较真假注册码的地址是否一样,一样就跳到注册码错误
0167:00404B8D JZ NEAR 00404C22
0167:00404B93 TEST ESI,ESI ;看假注册吗的地址是不是0是零,跳到错误
0167:00404B95 JZ 00404BFF
0167:00404B97 TEST EDI,EDI ;看注册吗的地址是不是0是零,跳到错误
0167:00404B99 JZ 00404C06
0167:00404B9B MOV EAX,[ESI-04] ;获取假注册吗的位数放到eax
0167:00404B9E MOV EDX,[EDI-04] ;获取真注册吗的位数放到edx
0167:00404BA1 SUB EAX,EDX ;比较真假注册吗位数的大小
0167:00404BA3 JA 00404BA7
0167:00404BA5 ADD EDX,EAX ;假注册吗的位数放到edx
0167:00404BA7 PUSH EDX
0167:00404BA8 SHR EDX,02 ;移2位
0167:00404BAB JZ 00404BD3 ;为零跳到错误
0167:00404BAD MOV ECX,[ESI] ;获取假注册吗的前4位
0167:00404BAF MOV EBX,[EDI] ;获取真注册吗的前四位
0167:00404BB1 CMP ECX,EBX ; 比较
0167:00404BB3 JNZ 00404C0D ;不相等跳到错误
0167:00404BB5 DEC EDX ;把输入的注册吗的位数再减1
0167:00404BB6 JZ 00404BCD ;为零跳到错误
0167:00404BB8 MOV ECX,[ESI+04] ;获取假注册吗的后四位
0167:00404BBB MOV EBX,[EDI+04] ;获取真注册吗的后四位
0167:00404BBE CMP ECX,EBX ;比较
0167:00404BC0 JNZ 00404C0D ;不等跳到错误
0167:00404BC2 ADD ESI,BYTE +08 ;把假注册吗的地址加8位
0167:00404BC5 ADD EDI,BYTE +08 ;把真注册吗的地址家8位
0167:00404BC8 DEC EDX ;再把假注册吗的位数再减1
0167:00404BC9 JNZ 00404BAD ;不为零跳到上面再比较
0167:00404BCB JMP SHORT 00404BD3
0167:00404BCD ADD ESI,BYTE +04
0167:00404BD0 ADD EDI,BYTE +04
0167:00404BD3 POP EDX ;取出保存假注册吗的位数
0167:00404BD4 AND EDX,BYTE +03 ;把假注册吗的位数和三与一下
0167:00404BD7 JZ 00404BFB ;为零跳到错误
0167:00404BD9 MOV ECX,[ESI] ;取出假注册吗后面的4位数
0167:00404BDB MOV EBX,[EDI] ;取出真注册吗后面的4位数
0167:00404BDD CMP CL,BL ;比较
0167:00404BDF JNZ 00404C22 ;不相等跳到错误
0167:00404BE1 DEC EDX ;把假注册吗的位数减一
0167:00404BE2 JZ 00404BFB ;为零跳到错误
0167:00404BE4 CMP CH,BH ;比较前两位
0167:00404BE6 JNZ 00404C22 ;不等跳到错误
0167:00404BE8 DEC EDX ;把假注册吗的位数再减一
0167:00404BE9 JZ 00404BFB ;为零跳到错误
0167:00404BEB AND EBX,00FF0000
0167:00404BF1 AND ECX,00FF0000
0167:00404BF7 CMP ECX,EBX ;比较后两位
0167:00404BF9 JNZ 00404C22 ;不等跳到错误
0167:00404BFB ADD EAX,EAX
0167:00404BFD JMP SHORT 00404C22
0167:00404BFF MOV EDX,[EDI-04]
0167:00404C02 SUB EAX,EDX
0167:00404C04 JMP SHORT 00404C22
0167:00404C06 MOV EAX,[ESI-04]
0167:00404C09 SUB EAX,EDX
0167:00404C0B JMP SHORT 00404C22
0167:00404C0D POP EDX
0167:00404C0E CMP CL,BL
0167:00404C10 JNZ 00404C22
0167:00404C12 CMP CH,BH
0167:00404C14 JNZ 00404C22
0167:00404C16 SHR ECX,10
0167:00404C19 SHR EBX,10
0167:00404C1C CMP CL,BL
0167:00404C1E JNZ 00404C22
0167:00404C20 CMP CH,BH
0167:00404C22 POP EDI ;弹出堆栈里保存的东西
0167:00404C23 POP ESI
0167:00404C24 POP EBX
ret
其实在关键擦call上面的用d edx 就能显示出真注册吗的值,我的机子上的是94E211d1,添上去,感谢注册的
窗口出来了!
其实这个软件的加密手法还是比较脆弱的,只是对输入的注册吗进行简单的比较的,
破解这个软件前后用了不到20分钟的事!
其实爆破这款软件也行,软件包里有我用wd32asm的破解录象,
注册机很想写一个,但没有时间,但我把破解的方法告诉了大家,
破解所用的工具都在软件包里,
呵呵!
沉沦心雨制作: 2005,1,17
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!