首页
社区
课程
招聘
[原创]王子的第一次
发表于: 2008-3-6 11:48 6320

[原创]王子的第一次

2008-3-6 11:48
6320

【文章标题】: 王子的第一次
【文章作者】: 铁面王子
【作者QQ号】: 173991904
【软件名称】: KeyGenMe_01.exe
【软件大小】: 24k
【下载地址】: http://bbs.pediy.com/showthread.php?t=33853
【加壳方式】: 无
【编写语言】: VB
【使用工具】: OD+计算器
【操作平台】: xpsp2
【软件介绍】: happytown的CRACK入门系列第一题
【作者声明】: 第一次写破文,希望大家能看得明白,在个,有不足之处望手指点
--------------------------------------------------------------------------------
【详细过程】
  【分析过程】
   打开程序试着注册了下,没提示错误。对__vbaStrMove函数下断点
  输入注册名:123456
      注册码:456789
  代码:
  004023F9   .  FF15 20104000 call    dword ptr [<&MSVBVM60.__vbaHres>;  MSVBVM60.__vbaHresultCheckObj
  004023FF      8B55 C8       mov     edx, dword ptr [ebp-38]         ;  此处注册名传入EDX
  00402402   .  895D C8       mov     dword ptr [ebp-38], ebx
  00402405   .  8D4D CC       lea     ecx, dword ptr [ebp-34]
  00402408   .  8B3D A0104000 mov     edi, dword ptr [<&MSVBVM60.__vb>;  断在此处
  0040240E   .  FFD7          call    edi                             ;  <&MSVBVM60.__vbaStrMove>
  00402410   .  8D4D C4       lea     ecx, dword ptr [ebp-3C]
  00402413   .  FF15 B0104000 call    dword ptr [<&MSVBVM60.__vbaFree>;  MSVBVM60.__vbaFreeObj
  00402419   .  8B45 CC       mov     eax, dword ptr [ebp-34]         ;  注册名传入EAX
  0040241C   .  50            push    eax                             ;  保存用户名
  0040241D   .  FF15 08104000 call    dword ptr [<&MSVBVM60.__vbaLenB>;  取注册名长度
  00402423   .  8BC8          mov     ecx, eax                        ;  注册名长度传到ECX
  00402425   .  FF15 50104000 call    dword ptr [<&MSVBVM60.__vbaI2I4>;  MSVBVM60.__vbaI2I4
  0040242B   .  8945 D0       mov     dword ptr [ebp-30], eax
  0040242E   .  66:3D 0300    cmp     ax, 3                           ;  查看注册名位数是否大于3位
  00402432   .  0F8C CD010000 jl      00402605                        ;  小于3位,结束
  00402438   .  8B0E          mov     ecx, dword ptr [esi]
  0040243A   .  56            push    esi
  0040243B   .  FF91 0C030000 call    dword ptr [ecx+30C]
  00402441   .  50            push    eax
  00402442   .  8D55 C4       lea     edx, dword ptr [ebp-3C]
  00402445   .  52            push    edx
  00402446   .  FF15 30104000 call    dword ptr [<&MSVBVM60.__vbaObjS>;  MSVBVM60.__vbaObjSet
  0040244C   .  8BF0          mov     esi, eax
  0040244E   .  8B06          mov     eax, dword ptr [esi]
  00402450   .  8D4D C8       lea     ecx, dword ptr [ebp-38]
  00402453   .  51            push    ecx
  00402454   .  56            push    esi
  00402455   .  FF90 A0000000 call    dword ptr [eax+A0]
  0040245B   .  DBE2          fclex
  0040245D   .  3BC3          cmp     eax, ebx
  0040245F   .  7D 12         jge     short 00402473
  00402461   .  68 A0000000   push    0A0
  00402466   .  68 401C4000   push    00401C40
  0040246B   .  56            push    esi
  0040246C   .  50            push    eax
  0040246D   .  FF15 20104000 call    dword ptr [<&MSVBVM60.__vbaHres>;  MSVBVM60.__vbaHresultCheckObj
  00402473   >  8B55 C8       mov     edx, dword ptr [ebp-38]
  00402476   .  895D C8       mov     dword ptr [ebp-38], ebx
  00402479   .  8D4D DC       lea     ecx, dword ptr [ebp-24]
  0040247C   .  FFD7          call    edi
  0040247E   .  8D4D C4       lea     ecx, dword ptr [ebp-3C]
  00402481   .  FF15 B0104000 call    dword ptr [<&MSVBVM60.__vbaFree>;  MSVBVM60.__vbaFreeObj
  00402487   .  8B55 DC       mov     edx, dword ptr [ebp-24]         ;  假注册码传到EDX
  0040248A   .  52            push    edx                             ;  保存假码
  0040248B   .  FF15 08104000 call    dword ptr [<&MSVBVM60.__vbaLenB>;  取假码长度
  00402491   .  8BC8          mov     ecx, eax                        ;  假码长度传到ECX
  00402493   .  FF15 50104000 call    dword ptr [<&MSVBVM60.__vbaI2I4>;  MSVBVM60.__vbaI2I4
  00402499   .  66:3BC3       cmp     ax, bx                          ;  注册码为空,退出
  0040249C   .  0F84 63010000 je      00402605
  004024A2   .  BF 01000000   mov     edi, 1                          ;  初始化循环变量
  004024A7   .  8BF7          mov     esi, edi
  004024A9   .  8B1D 0C104000 mov     ebx, dword ptr [<&MSVBVM60.__vb>;  MSVBVM60.__vbaFreeVarList
  004024AF   >  66:3B75 D0    cmp     si, word ptr [ebp-30]           ;  循环是否结束?
  004024B3   .  0F8F 93000000 jg      0040254C
  004024B9   .  C745 BC 01000>mov     dword ptr [ebp-44], 1           ;  此处到.....
  004024C0   .  C745 B4 02000>mov     dword ptr [ebp-4C], 2           ;  .....
  004024C7   .  8D45 CC       lea     eax, dword ptr [ebp-34]         ;  ....
  004024CA   .  8985 7CFFFFFF mov     dword ptr [ebp-84], eax         ;  .....
  004024D0   .  C785 74FFFFFF>mov     dword ptr [ebp-8C], 4008        ;  .....
  004024DA   .  8D4D B4       lea     ecx, dword ptr [ebp-4C]         ;  ....
  004024DD   .  51            push    ecx                             ;  ....
  004024DE   .  0FBFD6        movsx   edx, si                         ;  .....
  004024E1   .  52            push    edx                             ;  ....
  004024E2   .  8D85 74FFFFFF lea     eax, dword ptr [ebp-8C]         ;  ....
  004024E8   .  50            push    eax                             ;  .....
  004024E9   .  8D4D A4       lea     ecx, dword ptr [ebp-5C]         ;  ....
  004024EC   .  51            push    ecx                             ;  ....
  004024ED   .  FF15 44104000 call    dword ptr [<&MSVBVM60.#632>]    ;  .....
  004024F3   .  8D55 A4       lea     edx, dword ptr [ebp-5C]         ;  ....
  004024F6   .  52            push    edx                             ;  ....
  004024F7   .  8D45 C8       lea     eax, dword ptr [ebp-38]         ;  ....
  004024FA   .  50            push    eax                             ;  以上这段代码不知道起什么作用,请高手指出
  004024FB   .  FF15 74104000 call    dword ptr [<&MSVBVM60.__vbaStrV>;  转换成16进制的ASSICC码
  00402501   .  50            push    eax                             ;  保存ASSICC码
  00402502   .  FF15 18104000 call    dword ptr [<&MSVBVM60.#516>]    ;  MSVBVM60.rtcAnsiValueBstr
  00402508   .  66:0FAFC6     imul    ax, si                          ;  ASSICC码*循环变量,得出的值保存在AX中
  0040250C   .  0F80 5F010000 jo      00402671                        ;  查看是否溢出
  00402512   .  0FBFC8        movsx   ecx, ax                         ;  ax值传ECX
  00402515   .  03CF          add     ecx, edi                        ;  ECX=ECX+EDI
  00402517   .  0F80 54010000 jo      00402671                        ;  是否溢出?
  0040251D   .  8BF9          mov     edi, ecx                        ;  EDI保存计算出的新值
  0040251F   .  8D4D C8       lea     ecx, dword ptr [ebp-38]
  00402522   .  FF15 B4104000 call    dword ptr [<&MSVBVM60.__vbaFree>;  MSVBVM60.__vbaFreeStr
  00402528   .  8D55 A4       lea     edx, dword ptr [ebp-5C]
  0040252B   .  52            push    edx
  0040252C   .  8D45 B4       lea     eax, dword ptr [ebp-4C]
  0040252F   .  50            push    eax
  00402530   .  6A 02         push    2
  00402532   .  FFD3          call    ebx
  00402534   .  83C4 0C       add     esp, 0C
  00402537   .  B8 01000000   mov     eax, 1
  0040253C   .  66:03C6       add     ax, si                          ;  循环变量递增
  0040253F   .  0F80 2C010000 jo      00402671
  00402545   .  8BF0          mov     esi, eax
  00402547   .^ E9 63FFFFFF   jmp     004024AF                        ;  跟据注册名,循环计算注册码
  0040254C   >  69FF 96740100 imul    edi, edi, 17496                 ;  edi=计算出的注册码*95382(17496转换后的10进制数)
  00402552   .  0F80 19010000 jo      00402671
  00402558   .  897D D8       mov     dword ptr [ebp-28], edi
  0040255B   .  DB45 D8       fild    dword ptr [ebp-28]              ;  装入整数,推入隐含的ST中 ,这是真注册码
  0040255E   .  DD9D 14FFFFFF fstp    qword ptr [ebp-EC]              ;  此处用浮点运算,计算出真正的注册码
  00402564   .  8B4D DC       mov     ecx, dword ptr [ebp-24]         ;  假码传入ECX
  00402567   .  51            push    ecx                             ;  保存假码
  00402568   .  FF15 80104000 call    dword ptr [<&MSVBVM60.__vbaR8St>;  vbaR8Str:将数值型字串转为数值
  0040256E   .  DC9D 14FFFFFF fcomp   qword ptr [ebp-EC]              ;  浮点数比较函数
  00402574   .  DFE0          fstsw   ax                              ;  把状态字存入AX中
  00402576   .  F6C4 40       test    ah, 40                          ;  测试
  00402579      0F84 86000000 je      00402605                        ;  关键跳,可暴破
  
  
  由上看出,解密算法为:
  m=username每一位转换16进制的ASSICC码(此处和alpsdew分析的有点出入,请高手指出)
  password=m*i(循环变量)+password
  password=password*95382
  再经过fild(password)转换成10制码,得出真正的注册码
  可用的注册码
  注册名:123456
  注册码:104920200
  
  
  以上分析有错误的地方,请高手指出.
  
--------------------------------------------------------------------------------
【经验总结】
  算法比较简单,明码比较.非常适合新手练习
   http://www.yhlive.com/simple/index.php?t63656.html,此网站介绍了VB程序几个常用 函数断点,里面就有提到VBASTRMOVE函数,用于移动字符串.http://bbs.pediy.com/showthread.php?t=60499这里是高手对浮点运算指令的解释
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2008年03月06日 11:49:53


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

收藏
免费 7
支持
分享
最新回复 (11)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
vb的我喜欢
2008-3-6 12:03
0
雪    币: 164
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
vb的我不喜欢
2008-3-6 12:35
0
雪    币: 218
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
希望得到高手们的宝贵意见
2008-3-6 13:34
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
学习           .
2008-3-6 20:05
0
雪    币: 485
活跃值: (12)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
6
004024B9   .  C745 BC 01000>mov     dword ptr [ebp-44], 1
004024C0   .  C745 B4 02000>mov     dword ptr [ebp-4C], 2
004024C7   .  8D45 CC       lea     eax, dword ptr [ebp-34]
004024CA   .  8985 7CFFFFFF mov     dword ptr [ebp-84], eax
004024D0   .  C785 74FFFFFF>mov     dword ptr [ebp-8C], 4008
004024DA   .  8D4D B4       lea     ecx, dword ptr [ebp-4C]
004024DD   .  51            push    ecx                              ; /Length8
004024DE   .  0FBFD6        movsx   edx, si                          ; |
004024E1   .  52            push    edx                              ; |Start
004024E2   .  8D85 74FFFFFF lea     eax, dword ptr [ebp-8C]          ; |
004024E8   .  50            push    eax                              ; |dString8
004024E9   .  8D4D A4       lea     ecx, dword ptr [ebp-5C]          ; |
004024EC   .  51            push    ecx                              ; |RetBUFFER
004024ED   .  FF15 44104000 call    dword ptr [<&MSVBVM60.#632>]     ; \rtcMidCharVar
004024F3   .  8D55 A4       lea     edx, dword ptr [ebp-5C]
004024F6   .  52            push    edx                              ; /String8
004024F7   .  8D45 C8       lea     eax, dword ptr [ebp-38]          ; |
004024FA   .  50            push    eax                              ; |ARG2
004024FB   .  FF15 74104000 call    dword ptr [<&MSVBVM60.__vbaStrVa>; \__vbaStrVarVal
00402501   .  50            push    eax                              ; /String
00402502   .  FF15 18104000 call    dword ptr [<&MSVBVM60.#516>]     ; \rtcAnsiValueBstr

这一段是在按位取字符

m=username每一位转换16进制的ASSICC码(此处和alpsdew分析的有点出入,请高手指出)


分析的很好,个人认为你是对的
2008-3-6 21:20
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
同学习…………
2008-3-7 00:39
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
都没有一点头绪
2008-3-7 00:39
0
雪    币: 163
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
__vbaStrMove 可以在VB中通用吗?
2008-3-7 07:53
0
雪    币: 218
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
10
__vbaStrMove程序用了此函数,我想应该可以下断吧,除非作者对此函作做了INT 3检测

happytown的CRACK入门系列中VB写的程序,好像此函数都有用,明天接着把第二题的破文上传上来,
2008-3-7 16:32
0
雪    币: 340
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
本人爆破不精通啊
2008-3-8 02:17
0
雪    币: 218
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
12
感谢,PETNT的指教,
2008-3-8 09:00
0
游客
登录 | 注册 方可回帖
返回
//