首页
社区
课程
招聘
一个适合新手的crackme算法分析[原创]
发表于: 2006-7-26 03:23 6889

一个适合新手的crackme算法分析[原创]

2006-7-26 03:23
6889

【文章标题】: 一个适合新手的crackme算法分析
【文章作者】: 网游难民
【作者邮箱】: goqq2008
【软件名称】: k4n
【软件大小】: 60.0
【下载地址】: 本地下载
【加壳方式】: 无
【保护方式】: 注册码
【编写语言】: Borland C++ [Overlay]
【使用工具】: OD
【操作平台】: winxp
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  一,用PEID查壳为Borland C++ [Overlay]无壳。
  +++++++++++++++++++++++++++++++++++++++++++++++++++++++
  二,运行软件,注册窗口进行注册,输入错误的注册信息进行检测!软件有尾巴!
   提示说:“This serial is *NOT* Valid!! Try again... : UNREGISTERED”
  用OD载入,右键超级字串查找,找到"This serial is *NOT* Valid!! Try again... : UNREGISTERED",双击进入程序代码段,往上查找,在一个合适的地方下断。
  然后运行程序,输入注册名和注册码,程序成功被断了下来,断在这里:
  00401108  |.  90            NOP-------------------------------------程序被断在这里。
  00401109  |.  90            NOP
  0040110A  |.  90            NOP
  0040110B  |.  90            NOP
  0040110C  |>  0FBE840D 48FF>/MOVSX EAX,BYTE PTR SS:[EBP+ECX-B8]-----把用户名的第一位ASCII码送入EAX
  00401114  |.  41            |INC ECX--------------------------------ECX加1,初值为0。
  00401115  |.  33C1          |XOR EAX,ECX----------------------------EAX和ECX进行逻辑异或运算。值保存在EAX中。
  00401117  |.  03D8          |ADD EBX,EAX----------------------------EAX和EBX相加,值放在EBX中。
  00401119  |.  3B4D D8       |CMP ECX,DWORD PTR SS:[EBP-28]----------SS:[EBP-28]里的值和ECX相比较。
  0040111C  |.^ 75 EE         \JNZ SHORT k4n.0040110C-----------------这里是一个循环,求的用户名第一位ASCII码XOR1,第二位用户名ASCII码XOR2~~~~~~~一直到最后一位的和放入EBX,记为A,
  0040111E  |.  6BC0 06       IMUL EAX,EAX,6--------------------------EAX*6,也就是说 最后一位用户名XOR用户名位数 的值乘6,值记为B。
  00401121  |.  C1E3 07       SHL EBX,7-------------------------------EBX左移7位,也就是A左移7位。值放入EBX,值记为C。
  00401124  |.  03C3          ADD EAX,EBX-----------------------------EAX和EBX相加,即A+C,值放入EAX中,记为D。
  00401126  |.  8945 C8       MOV DWORD PTR SS:[EBP-38],EAX
  00401129  |.  FF75 C8       PUSH DWORD PTR SS:[EBP-38]               ; /Arg3
  0040112C  |.  68 38B44000   PUSH k4n.0040B438                        ; |%lx
  00401131  |.  8D8D 80FEFFFF LEA ECX,DWORD PTR SS:[EBP-180]           ; |
  00401137  |.  51            PUSH ECX                                 ; |Arg1
  00401138  |.  E8 873D0000   CALL k4n.00404EC4                        ; \k4n.00404EC4
  0040113D  |.  83C4 0C       ADD ESP,0C
  00401140  |.  8D85 80FEFFFF LEA EAX,DWORD PTR SS:[EBP-180]
  00401146  |.  50            PUSH EAX                                 ; /String2
  00401147  |.  8D95 E4FEFFFF LEA EDX,DWORD PTR SS:[EBP-11C]-----------我们的注册码放入EDX
  0040114D  |.  52            PUSH EDX                                 ; |String1
  0040114E  |.  E8 339C0000   CALL <JMP.&KERNEL32.lstrcmpA> -----------关键CALL,我们的注册码和D相比较,相等返回0,不相等返回1,值放入EAX中,即D即为真码。
  00401153  |.  85C0          TEST EAX,EAX
  00401155  |.  75 0D         JNZ SHORT k4n.00401164-------------------关键跳转,可以在此爆破。
  00401157  |.  68 3CB44000   PUSH k4n.0040B43C                        ; /congratulations! if this number comes *from your* keygen, write a tutorial dude ;).
  0040115C  |.  56            PUSH ESI                                 ; |hWnd
  0040115D  |.  E8 289B0000   CALL <JMP.&USER32.SetWindowTextA>        ; \SetWindowTextA
  00401162  |.  EB 18         JMP SHORT k4n.0040117C
  00401164  |>  68 90B44000   PUSH k4n.0040B490                        ; /this serial is *not* valid!! try again... : unregistered
  00401169  |.  56            PUSH ESI                                 ; |hWnd
  0040116A  |.  E8 1B9B0000   CALL <JMP.&USER32.SetWindowTextA>        ; \SetWindowTextA
  0040116F  |.  EB 0B         JMP SHORT k4n.0040117C
  00401171  |>  68 C9B44000   PUSH k4n.0040B4C9                        ; /name must contain more than 4 chars and less than 50 chars !!
  00401176  |.  56            PUSH ESI                                 ; |hWnd
  
  
--------------------------------------------------------------------------------
【经验总结】
  它的算法是:
  第一位用户名与1异或,第二位用户名与2异或依次类推,把它们的值放入EBX中,记为A。
  用户名最后一位与用户名位数异或的值乘以6,值记为B。
  A的值左移7位(2进制)。值记为C。
  A和C的值相加,记为D。D即为真码。
  次crackme比较简单,适合新手学习~~~
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2006年07月26日 3:22:52


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

上传的附件:
收藏
免费 7
支持
分享
最新回复 (13)
雪    币: 333
活跃值: (40)
能力值: ( LV9,RANK:730 )
在线值:
发帖
回帖
粉丝
2
写得很详细,学习。
2006-7-26 12:34
0
雪    币: 210
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
越来越棒,学习的说!   
2006-7-26 21:11
0
雪    币: 472
活跃值: (20)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
4
跟着来学习
2006-7-26 21:41
0
雪    币: 309
活跃值: (15)
能力值: ( LV9,RANK:610 )
在线值:
发帖
回帖
粉丝
5
最初由 WildCatIII 发布
越来越棒,学习的说!


可以说全部是猫兄的指点滴说~~~~
偶还需要努力~~
2006-7-28 21:40
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
试过了,能破爆,能做内存注册机,至于算法好像不难,对于俺这个新手来说,还要好好理解一下。
2006-7-29 00:02
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
初学破解,很好的教材,顶
2006-7-29 03:12
0
雪    币: 1301
活跃值: (25)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
很不错的初学教材,从中学习了。
2006-7-29 09:09
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
对初学着正合适,谢谢
2006-7-29 14:16
0
雪    币: 338
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
分析的不错!!
2006-7-29 17:25
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
多多努力,总会有天变成高手
2006-7-31 08:51
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
谁能用VB把这注册机写一下?
2006-7-31 16:17
0
雪    币: 151
活跃值: (66)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
13
不错.呵呵
2006-8-1 10:57
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
菜鸟最怕的是没注解清楚(还要用猜的),楼主写的很详细,推........
2006-8-1 12:09
0
游客
登录 | 注册 方可回帖
返回
//