首页
社区
课程
招聘
[原创][破]KeyGenMe.UTW.vb
发表于: 2006-11-10 09:43 5752

[原创][破]KeyGenMe.UTW.vb

2006-11-10 09:43
5752

【文章标题】: [破]KeyGenMe.UTW.vb
【文章作者】: HappyTown
【作者邮箱】: [email]wxr277@163.com[/email]
【作者主页】: 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


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

上传的附件:
收藏
免费 7
支持
分享
最新回复 (1)
雪    币: 405
活跃值: (10)
能力值: ( LV9,RANK:1130 )
在线值:
发帖
回帖
粉丝
2
嘿嘿。非常简单,不过自己还得试试动动手哦。

.版本 2

.子程序 _按钮1_被单击
.局部变量 name, 文本型
.局部变量 tou, 整数型
.局部变量 sn1, 整数型
.局部变量 sn2, 整数型

name = 编辑框1.内容
tou = 取代码 (name, 1)
sn1 = tou × 2
sn1 = sn1 × tou + 取文本长度 (name)
sn2 = 取文本长度 (name) × 100
编辑框2.内容 = 到文本 (sn1) + 到文本 (sn2)
2006-11-10 14:15
0
游客
登录 | 注册 方可回帖
返回
//