飘云阁

 找回密码
 加入我们

QQ登录

只需一步,快速开始

查看: 3375|回复: 0

[原创] **神数 V1.7注册分析

[复制链接]

该用户从未签到

发表于 2006-12-16 20:51:15 | 显示全部楼层 |阅读模式
【文章标题】: **神数 V1.7注册分析
【文章作者】: yzslly
【软件名称】: 诸葛铁板神数 V1.7
【软件大小】: 111KB
【下载地址】: 自己搜索下载
【加壳方式】: ASPack 2.12 -> Alexey Solodovnikov
【保护方式】: 注册码
【编写语言】: VB
【使用工具】: OD
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  脱壳很简单,这里就不写,OD加载运行,点注册输入试炼码,注册码:123456,用户名:yzs,下断bp __vbaStrCmp,点注册
  中断后按ALT+F9返回到:
  0044703D        .  FFD3             call ebx                            ;  <&MSVBVM60.__vbaStrCmp>
  0044703F        .  8B4D 08          mov ecx,dword ptr ss:[ebp+8]    ;返回到这里
  00447042        .  8BD0             mov edx,eax
  00447044        .  F7DA             neg edx
  00447046        .  8B01             mov eax,dword ptr ds:[ecx]          ;压入机器码
  00447048        .  1BD2             sbb edx,edx
  0044704A        .  50               push eax
  0044704B        .  F7DA             neg edx
  0044704D        .  68 1CCB4000      push TBShSh_u.0040CB1C
  00447052        .  8995 50FFFFFF    mov dword ptr ss:[ebp-B0],edx
  00447058        .  FFD3             call ebx                            ;  <&MSVBVM60.__vbaStrCmp>
  0044705A        .  8B8D 50FFFFFF    mov ecx,dword ptr ss:[ebp-B0]
  00447060        .  F7D8             neg eax
  00447062        .  1BC0             sbb eax,eax
  00447064        .  F7D8             neg eax
  00447066        .  85C8             test eax,ecx
  00447068        .  75 0D            jnz short TBShSh_u.00447077
  0044706A        .  8975 E8          mov dword ptr ss:[ebp-18],esi
  0044706D        .  68 A7714400      push TBShSh_u.004471A7
  00447072        .  E9 26010000      jmp TBShSh_u.0044719D
  /////////////////////////////////////////////////////////////////////////////////////////////////
  00447077        >  8B35 E8104000    mov esi,dword ptr ds:[<&MSVBVM60.#6>;  MSVBVM60.rtcMidCharVar
  0044707D        .  8D55 D8          lea edx,dword ptr ss:[ebp-28]
  00447080        .  52               push edx
  00447081        .  8D45 88          lea eax,dword ptr ss:[ebp-78]
  00447084        .  6A 01            push 1
  00447086        .  8D4D C8          lea ecx,dword ptr ss:[ebp-38]
  00447089        .  BB 08400000      mov ebx,4008
  0044708E        .  50               push eax
  0044708F        .  51               push ecx
  00447090        .  C745 E0 03000000 mov dword ptr ss:[ebp-20],3
  00447097        .  C745 D8 02000000 mov dword ptr ss:[ebp-28],2
  0044709E        .  897D 90          mov dword ptr ss:[ebp-70],edi
  004470A1        .  895D 88          mov dword ptr ss:[ebp-78],ebx
  004470A4        .  FFD6             call esi                            ;  <&MSVBVM60.#632>
  004470A6        .  8D55 B8          lea edx,dword ptr ss:[ebp-48]
  004470A9        .  8D85 68FFFFFF    lea eax,dword ptr ss:[ebp-98]
  004470AF        .  52               push edx
  004470B0        .  6A 05            push 5
  004470B2        .  8D4D A8          lea ecx,dword ptr ss:[ebp-58]
  004470B5        .  50               push eax
  004470B6        .  51               push ecx
  004470B7        .  C745 C0 04000280 mov dword ptr ss:[ebp-40],80020004
  004470BE        .  C745 B8 0A000000 mov dword ptr ss:[ebp-48],0A
  004470C5        .  89BD 70FFFFFF    mov dword ptr ss:[ebp-90],edi
  004470CB        .  899D 68FFFFFF    mov dword ptr ss:[ebp-98],ebx
  004470D1        .  FFD6             call esi                            ;  <&MSVBVM60.#632>
  004470D3        .  8D55 C8          lea edx,dword ptr ss:[ebp-38]
  004470D6        .  8D45 A8          lea eax,dword ptr ss:[ebp-58]
  004470D9        .  52               push edx
  004470DA        .  8D4D 98          lea ecx,dword ptr ss:[ebp-68]
  004470DD        .  50               push eax
  004470DE        .  51               push ecx
  004470DF        .  FF15 98114000    call dword ptr ds:[<&MSVBVM60.__vba>;  MSVBVM60.__vbaVarCat
  004470E5        .  50               push eax
  004470E6        .  FF15 30104000    call dword ptr ds:[<&MSVBVM60.__vba>;  MSVBVM60.__vbaStrVarMove
  ///////////////////////////////////////////////////////////////////////////////////////////////////
  上面这段主要完成的功能是去掉注册码的第四位字符,我们输入的注册码到这里就变成了“12356”,记为S
  //////////////////////////////////////////////////////////////////////////////////////////////////
  004470EC        .  8BD0             mov edx,eax           ;这里就可以看到组装后的注册码
  004470EE        .  8D4D EC          lea ecx,dword ptr ss:[ebp-14]
  004470F1        .  FF15 3C124000    call dword ptr ds:[<&MSVBVM60.__vba>;  MSVBVM60.__vbaStrMove
  004470F7        .  8D55 98          lea edx,dword ptr ss:[ebp-68]
  004470FA        .  8D45 A8          lea eax,dword ptr ss:[ebp-58]
  004470FD        .  52               push edx
  004470FE        .  8D4D C8          lea ecx,dword ptr ss:[ebp-38]
  00447101        .  50               push eax
  00447102        .  8D55 B8          lea edx,dword ptr ss:[ebp-48]
  00447105        .  51               push ecx
  00447106        .  8D45 D8          lea eax,dword ptr ss:[ebp-28]
  00447109        .  52               push edx
  0044710A        .  50               push eax
  0044710B        .  6A 05            push 5
  0044710D        .  FF15 38104000    call dword ptr ds:[<&MSVBVM60.__vba>;  MSVBVM60.__vbaFreeVarList
  00447113        .  8B55 EC          mov edx,dword ptr ss:[ebp-14]
  00447116        .  83C4 18          add esp,18
  00447119        .  8D4D EC          lea ecx,dword ptr ss:[ebp-14]
  0044711C        .  895D 88          mov dword ptr ss:[ebp-78],ebx
  0044711F        .  52               push edx
  00447120        .  894D 90          mov dword ptr ss:[ebp-70],ecx
  00447123        .  FF15 2C104000    call dword ptr ds:[<&MSVBVM60.__vba>;  取S的长度
  00447129        .  33DB             xor ebx,ebx
  0044712B        .  83F8 0B          cmp eax,0B             ;是否小于过11位
  0044712E        .  8D45 88          lea eax,dword ptr ss:[ebp-78]
  00447131        .  50               push eax
  00447132        .  0F9EC3           setle bl
  00447135        .  FF15 20114000    call dword ptr ds:[<&MSVBVM60.#561>>;  判断S是否为数值
  0044713B        .  66:F7D8          neg ax
  0044713E        .  1BC0             sbb eax,eax
  00447140        .  F7D8             neg eax
  00447142        .  85D8             test eax,ebx
  00447144        .  74 30            je short TBShSh_u.00447176
  ////////////////////////////////////////////////////////////////////////////////////////////////
  前面2个判断如果不满足,这里就会跳,跳就OVER
  ////////////////////////////////////////////////////////////////////////////////////////////////
  00447146        .  8B4D EC          mov ecx,dword ptr ss:[ebp-14]
  00447149        .  8B35 D8114000    mov esi,dword ptr ds:[<&MSVBVM60.__>;  MSVBVM60.__vbaI4Str
  0044714F        .  51               push ecx
  00447150        .  FFD6             call esi                            ;  <&MSVBVM60.__vbaI4Str>
  00447152        .  8B55 08          mov edx,dword ptr ss:[ebp+8]
  /////////////////////////////////////////////////////////////////////////////////////////////////
  上面是将S转化为16进制,将结果存在EAX,记为A
  ////////////////////////////////////////////////////////////////////////////////////////////////
  00447155        .  8BF8             mov edi,eax             ;将A移至EDI
  00447157        .  81EF 1BCE6101    sub edi,161CE1B           ;将A-161ce1b,记为B 
  0044715D        .  8B02             mov eax,dword ptr ds:[edx]      ;将机器码送入EAX
  0044715F        .  50               push eax
  00447160        .  70 5C            jo short TBShSh_u.004471BE
  00447162        .  FFD6             call esi                            ;  <&MSVBVM60.__vbaI4Str>
  ///////////////////////////////////////////////////////////////////////////////////////////////
  将机器码转化为16进制,结果存在EAX,记为C
  //////////////////////////////////////////////////////////////////////////////////////////////
  00447164        .  33F8             xor edi,eax            ;B XOR C,记为D
  00447166        .  81EF 76718401    sub edi,1847176           ;D-1847176,记为E
  0044716C        .  F7DF             neg edi                           ;取反,
  0044716E        .  1BFF             sbb edi,edi            ;补位求减
  00447170        .  F7DF             neg edi                  ;取反
  00447172        .  4F               dec edi                ;减去1
  00447173        .  897D E8          mov dword ptr ss:[ebp-18],edi    ;标志位赋值
  /////////////////////////////////////////////////////////////////////////////////////////////////
  根据标志位比较数值,和前面4个运算步骤,可以推算出E=0。
  ////////////////////////////////////////////////////////////////////////////////////////////////
  00447176        >  68 A7714400      push TBShSh_u.004471A7
  0044717B        .  EB 20            jmp short TBShSh_u.0044719D
  0044717D        .  8D4D 98          lea ecx,dword ptr ss:[ebp-68]
  00447180        .  8D55 A8          lea edx,dword ptr ss:[ebp-58]
  00447183        .  51               push ecx
  00447184        .  8D45 B8          lea eax,dword ptr ss:[ebp-48]
  00447187        .  52               push edx
  00447188        .  8D4D C8          lea ecx,dword ptr ss:[ebp-38]
  0044718B        .  50               push eax
  0044718C        .  8D55 D8          lea edx,dword ptr ss:[ebp-28]
  0044718F        .  51               push ecx
  00447190        .  52               push edx
  00447191        .  6A 05            push 5
  00447193        .  FF15 38104000    call dword ptr ds:[<&MSVBVM60.__vba>;  MSVBVM60.__vbaFreeVarList
  00447199        .  83C4 18          add esp,18
  0044719C        .  C3               retn
  0044719D        >  8D4D EC          lea ecx,dword ptr ss:[ebp-14]
  004471A0        .  FF15 84124000    call dword ptr ds:[<&MSVBVM60.__vba>;  MSVBVM60.__vbaFreeStr
  004471A6        .  C3               retn                          
  004471A7        .  8B4D F0          mov ecx,dword ptr ss:[ebp-10]
  004471AA           66:8B45 E8       mov ax,word ptr ss:[ebp-18]
  004471AE        .  5F               pop edi
  004471AF        .  5E               pop esi
  004471B0        .  64:890D 00000000 mov dword ptr fs:[0],ecx
  004471B7        .  5B               pop ebx
  004471B8        .  8BE5             mov esp,ebp
  004471BA        .  5D               pop ebp                              ;返回
  004471BB        .  C2 0800          retn 8
  
  
  返回到这里:
  00431FD2        .  66:3D FFFF       cmp ax,0FFFF           ; 标志位比较 
  00431FD6        .  0F85 98020000    jnz TBShSh_u.00432274       ;跳就OVER,否则注册成功。
  00431FDC        .  8B55 DC          mov edx,dword ptr ss:[ebp-24]
  00431FDF        .  52               push edx
  00431FE0        .  68 88F04000      push TBShSh_u.0040F088              ;  pawd
  00431FE5        .  68 F0CA4000      push TBShSh_u.0040CAF0              ;  shenshu
  00431FEA        .  68 DCCA4000      push TBShSh_u.0040CADC              ;  zhuge
  
  
  
  
  
--------------------------------------------------------------------------------
【经验总结】
  1、注册码必需小于11位,且为数字
  2、将注册码的第四位去掉,组成新的字窜,记为S
  3、如果[(S(16H)-161CE1B)XOR 机器码(16H)]-1847176=0,注册成功,否则注册失败。
  4、整个注册过程与注册名无关。
  
--------------------------------------------------------------------------------
【版权声明】: 转载请注明作者并保持文章的完整, 谢谢!

                                                       2006年12月16日 20:44:46
PYG19周年生日快乐!
您需要登录后才可以回帖 登录 | 加入我们

本版积分规则

快速回复 返回顶部 返回列表