中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 看雪学院专区 > CrackMe
[破]KeyGenMe.UTW.vb
作者:佚名 时间:2006-12-15 10:43 出处:pediy.com 责编:月夜寒箫
              摘要:[破]KeyGenMe.UTW.vb
【文章标题】: [破]KeyGenMe.UTW.vb
【文章作者】: HappyTown
【作者邮箱】: 
wxr277@163.com
【作者主页】: www.pediy.com
【软件名称】: UTW KeyGenMe
【软件大小】: 7.04KB
【下载地址】: 附件内
【加壳方式】: FSG2.0
【保护方式】: SN
【编写语言】: VB
【使用工具】: OD,PEiD,Calc,FSG2Dumper
【破解难度】: 0/10
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  一、基本信息
      1. 用PEiD查看为FSG2.0的壳,用FSG2Dumper轻松脱去;
      2. 当两个编辑框均为空时,会导致运行时错误;
      3. 输入name和错误的sn并未有任何提示。
  二、分析
      1. OD载入,输入试炼码happy和7654321;
      2. 找个VB的断点来下,比如bpx __vbaVarTstEq,关于VB函数的断点,我推荐参考kanxue的《加密与解密II》第7章。
  
  00402B74   >mov     edi, [<&MSVBVM60.__vbaStrVarVal>>;  MSVBVM60.__vbaStrVarVal
  00402B7A   >lea     eax, [ebp-64]
  00402B7D   >lea     ecx, [ebp-38]
  00402B80   >push    eax
  00402B81   >push    ecx
  00402B82   >call    edi                              ;  <&MSVBVM60.__vbaStrVarVal>
  00402B84   >push    eax
  00402B85   >call    [<&MSVBVM60.#516>]               ;  MSVBVM60.rtcAnsiValueBstr
  00402B8B   >mov     dx, ax                           ;  68('h')
  00402B8E   >lea     eax, [ebp-74]
  00402B91   >imul    dx, dx, 2                        ;  dx=dx*2=68*2=D0
  00402B95   >lea     ecx, [ebp-3C]
  00402B98   >push    eax
  00402B99   >jo      00402EAF
  00402B9F   >push    ecx
  00402BA0   >mov     [ebp-1B6], dx                    ;  D0
  00402BA7   >call    edi
  00402BA9   >push    eax                              ;  "ha"
  00402BAA   >call    [<&MSVBVM60.#516>]               ;  MSVBVM60.rtcAnsiValueBstr
  00402BB0   >mov     dx, [ebp-1B6]                    ;  D0
  00402BB7   >mov     edi, [<&MSVBVM60.__vbaLenVar>]   ;  MSVBVM60.__vbaLenVar
  00402BBD   >imul    dx, ax                           ;  eax=ax*dx=68*D0=5480
  00402BC1   >lea     eax, [ebp-34]
  00402BC4   >lea     ecx, [ebp-54]
  00402BC7   >push    eax
  00402BC8   >push    ecx
  00402BC9   >jo      00402EAF
  00402BCF   >mov     [ebp-15C], dx                    ;  5480
  00402BD6   >mov     dword ptr [ebp-164], 2
  00402BE0   >call    edi                              ;  <&MSVBVM60.__vbaLenVar>
  00402BE2   >push    eax
  00402BE3   >lea     edx, [ebp-164]
  00402BE9   >lea     eax, [ebp-84]
  00402BEF   >push    edx
  00402BF0   >push    eax
  00402BF1   >call    [<&MSVBVM60.__vbaVarAdd>]        ;  MSVBVM60.__vbaVarAdd
  00402BF7   >push    eax
  00402BF8   >call    [<&MSVBVM60.__vbaI2Var>]         ;  MSVBVM60.__vbaI2Var
  00402BFE   >lea     ecx, [ebp-3C]                    ;  5485=5480+nameLen
  00402C01   >lea     edx, [ebp-38]
  00402C04   >push    ecx
  00402C05   >push    edx
  00402C06   >push    2
  00402C08   >mov     [ebx+3C], ax
  00402C0C   >call    [<&MSVBVM60.__vbaFreeStrList>]   ;  MSVBVM60.__vbaFreeStrList
  00402C12   >lea     eax, [ebp-84]
  00402C18   >lea     ecx, [ebp-74]
  00402C1B   >push    eax
  00402C1C   >lea     edx, [ebp-64]
  00402C1F   >push    ecx
  00402C20   >push    edx
  00402C21   >push    3
  00402C23   >call    [<&MSVBVM60.__vbaFreeVarList>]   ;  MSVBVM60.__vbaFreeVarList
  00402C29   >add     esp, 1C
  00402C2C   >lea     eax, [ebp-34]
  00402C2F   >lea     ecx, [ebp-54]
  00402C32   >mov     dword ptr [ebp-15C], 64
  00402C3C   >push    eax
  00402C3D   >push    ecx
  00402C3E   >mov     dword ptr [ebp-164], 2
  00402C48   >call    edi
  00402C4A   >push    eax
  00402C4B   >lea     edx, [ebp-164]
  00402C51   >lea     eax, [ebp-64]
  00402C54   >push    edx
  00402C55   >push    eax
  00402C56   >call    [<&MSVBVM60.__vbaVarMul>]        ;  MSVBVM60.__vbaVarMul
  00402C5C   >push    eax
  00402C5D   >call    [<&MSVBVM60.__vbaI2Var>]         ;  MSVBVM60.__vbaI2Var
  00402C63   >mov     cx, [ebx+3C]                     ;  5485
  00402C67   >mov     [ebx+3E], ax
  00402C6B   >push    ecx
  00402C6C   >lea     edi, [ebx+40]
  00402C6F   >call    [<&MSVBVM60.__vbaStrI2>]         ;  MSVBVM60.__vbaStrI2
  00402C75   >mov     edx, eax                         ;  5485(hex)=21637(十进制)
  00402C77   >lea     ecx, [ebp-38]
  00402C7A   >call    esi
  00402C7C   >mov     dx, [ebx+3E]
  00402C80   >push    eax
  00402C81   >push    edx
  00402C82   >call    [<&MSVBVM60.__vbaStrI2>]         ;  MSVBVM60.__vbaStrI2
  00402C88   >mov     edx, eax                         ;  500=nameLen*100
  00402C8A   >lea     ecx, [ebp-3C]
  00402C8D   >call    esi
  00402C8F   >push    eax
  00402C90   >call    [<&MSVBVM60.__vbaStrCat>]        ;  MSVBVM60.__vbaStrCat
  00402C96   >mov     edx, eax                         ;  21637500,这就是真注册码
  00402C98   >lea     ecx, [ebp-40]
  00402C9B   >call    esi
  00402C9D   >mov     edx, eax
  00402C9F   >mov     ecx, edi
  00402CA1   >call    [<&MSVBVM60.__vbaStrCopy>]       ;  MSVBVM60.__vbaStrCopy
  00402CA7   >lea     eax, [ebp-40]
  00402CAA   >lea     ecx, [ebp-3C]
  00402CAD   >push    eax
  00402CAE   >lea     edx, [ebp-38]
  00402CB1   >push    ecx
  00402CB2   >push    edx
  00402CB3   >push    3
  00402CB5   >call    [<&MSVBVM60.__vbaFreeStrList>]   ;  MSVBVM60.__vbaFreeStrList
  00402CBB   >mov     eax, [edi]
  00402CBD   >add     esp, 10
  00402CC0   >lea     ecx, [ebp-24]
  00402CC3   >lea     edx, [ebp-164]
  00402CC9   >push    ecx
  00402CCA   >push    edx
  00402CCB   >mov     [ebp-15C], eax
  00402CD1   >mov     dword ptr [ebp-164], 8008
  00402CDB   >call    [<&MSVBVM60.__vbaVarTstEq>]      ;  MSVBVM60.__vbaVarTstEq(经典的VB比较,我的建议是你还是跟进去看一下,特别是VarBstrCmp的参数,你会有所收获的)
  
  /////这是我抓出来的一段
    7716B67A   >call    VarCyCmp
    7716B67F   >jmp     7716B959
    7716B684   >mov     eax, [ebp+14]
    7716B687   >push    eax
    7716B688   >mov     ecx, [ebp+10]
    7716B68B   >push    ecx
    7716B68C   >mov     edx, [ebp+C]
    7716B68F   >mov     eax, [edx+8]
    7716B692   >push    eax                              ; 21637500,真正的注册码
    7716B693   >mov     ecx, [ebp+8]
    7716B696   >mov     edx, [ecx+8]
    7716B699   >push    edx                              ; 7654321,输入的假码
    7716B69A   >call    VarBstrCmp
    7716B69F   >mov     [ebp-44], eax
    7716B6A2   >jmp     7716B930
  \\\\\
  
  00402CE1   >test    ax, ax
  00402CE4   >je      00402DD4
  00402CEA   >mov     eax, [404338]
  00402CEF   >test    eax, eax
  00402CF1   >jnz     short 00402D03
  
  聪明的你已经看出来了,注册码只与name的第一个字符以及name的长度有关,也就是说happy和hrtow的注册码是相同的,注册机就不写了。
  注册码的计算过程:
    1. (name[1])^2 * 2 + name长度;
    2. 把上一步的结果转化为10进制字符串sn_1;
    3. 把 name长度 * 100 的结果转化为10进制字符串sn_2;
    4. 级联sn_1和sn_2即可。
  
  我的注册名和注册码:
  happy
  21637500
    
--------------------------------------------------------------------------------
【经验总结】
  本破文主要是为了刚跨进crack大门的初学者而写,所以还是推荐一下这个keygenme。
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2006年11月07日 15:27:21
所上传文件
utw_keygenme.zip (上传时间2006-11-10,09:43,5.8 KB,23 次点击)
关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有