[原创]新手的第一篇破文
发表于:
2006-7-28 23:21
7786
【文章标题】: 新手的第一篇破文
【文章作者】: jdxyw
【作者邮箱】: jdxyw2004@163.com
【软件名称】: abexcm5.exe
【软件大小】: 8kb
【下载地址】: 可能搜索不到,不知哪位有上传权限的联系我,我把软件发给你,你帮我上传吧!谢谢!
【加壳方式】: 无
【编写语言】: MASM
【使用工具】: W32Dasm,PEiD
【操作平台】: XP
【作者声明】: 这真是个很简单的crack,也是我第一次做,有做的不好的地方,请大家多多指教。
--------------------------------------------------------------------------------
【详细过程】
首先,用PEiD查看,知道这是个无壳的用MASM编写的。
再就是运行一下这个软件,随便输入个序列号,check后,弹出一个出错对话框。看来我们即可以从字符串下手,也可以
从API函数入手了。
运行W32Dasm,将crack载入,查看函数输入和字符串参考,我们首先转到"The serial you entered is not "
所在的行数,从这个行数往上,可以发现有连续三个字符串操作的函数,可以猜想,上面应该是序列号
生成代码了。再往上看,发现一个函数GetVolumeInformationA,这是一个获取机器信息的API函数。我们可以猜想
,序列号是与硬件有关的,也就是说,这个软件的序列号在不同的机器上是不同的。(但似乎好像没用上,请各位
指教下)下面是相关代码
* Reference To: KERNEL32.GetVolumeInformationA, Ord:0000h
|
:00401099 E8B5000000 Call 00401153 调用GetVolumeInformationA函数,获取机器信息
* Possible StringData Ref from Data Obj ->"4562-ABEX"
|
:0040109E 68F3234000 push 004023F3 将4562-ABEX压栈
:004010A3 685C224000 push 0040225C 将一个指向0040225C的缓冲区压栈,用来接受lstrcatA返回值
* Reference To: KERNEL32.lstrcatA, Ord:0000h
|
:004010A8 E894000000 Call 00401141
:004010AD B202 mov dl, 02 循环计数为两次
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004010CD(C)
|
:004010AF 83055C22400001 add dword ptr [0040225C], 00000001 前个字符串的第一位加上一位
:004010B6 83055D22400001 add dword ptr [0040225D], 00000001 前个字符串的第二位加上一位
:004010BD 83055E22400001 add dword ptr [0040225E], 00000001 前个字符串的第三位加上一位
:004010C4 83055F22400001 add dword ptr [0040225F], 00000001 前个字符串的第四位加上一位
:004010CB FECA dec dl
:004010CD 75E0 jne 004010AF 经过两次后4562-ABEX变成6784-ABEX
* Possible StringData Ref from Data Obj ->"L2C-5781"
|
:004010CF 68FD234000 push 004023FD 将L2C-5781压栈
:004010D4 6800204000 push 00402000 将一个指向00402000的缓冲区压栈,用来接受lstrcatA返回值
* Reference To: KERNEL32.lstrcatA, Ord:0000h
|
:004010D9 E863000000 Call 00401141
:004010DE 685C224000 push 0040225C 将6784-ABEX压栈
:004010E3 6800204000 push 00402000 将一个指向00402000的缓冲区压栈,用来接受lstrcatA返回值
* Reference To: KERNEL32.lstrcatA, Ord:0000h 结果是组成了一个新的字符串L2C-57816784-ABEX
|
:004010E8 E854000000 Call 00401141
:004010ED 6824234000 push 00402324 将你输入的序列号压栈
:004010F2 6800204000 push 00402000 将新字符串压栈
* Reference To: KERNEL32.lstrcmpiA, Ord:0000h
|
:004010F7 E851000000 Call 0040114D 比较两个字符串
:004010FC 83F800 cmp eax, 00000000 相当跳转
:004010FF 7416 je 00401117
:00401101 6A00 push 00000000
* Possible StringData Ref from Data Obj ->"Error!"
|
:00401103 6834244000 push 00402434
* Possible StringData Ref from Data Obj ->"The serial you entered is not "
->"correct!"
|
:00401108 683B244000 push 0040243B
:0040110D FF7508 push [ebp+08]
* Reference To: USER32.MessageBoxA, Ord:0000h
|
:00401110 E856000000 Call 0040116B
:00401115 EB16 jmp 0040112D
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004010FF(C)
|
:00401117 6A00 push 00000000
* Possible StringData Ref from Data Obj ->"Well Done!"
|
:00401119 6806244000 push 00402406
* Possible StringData Ref from Data Obj ->"Yep, you entered a correct serial!"
|
:0040111E 6811244000 push 00402411
:00401123 FF7508 push [ebp+08]
* Reference To: USER32.MessageBoxA, Ord:0000h
由上面可知,序列号为L2C-57816784-ABEX。
第一次,希望大家多多指教,指出不足。
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!
2006年07月28日 23:19:40
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
上传的附件: