首页
社区
课程
招聘
[原创][破]CrackMe.Guetta.Win32ASM.5
发表于: 2007-1-25 10:55 5526

[原创][破]CrackMe.Guetta.Win32ASM.5

2007-1-25 10:55
5526

【文章标题】: [破]CrackMe.Guetta.Win32ASM.5
【文章作者】: HappyTown
【作者主页】: www.pediy.com
【软件名称】: keyme#5
【软件大小】: 202KB(zip)
【下载地址】: 附件内
【加壳方式】: 无
【保护方式】: MD5 + SHA1 + CAST128 + ExTEA + CRC32 + RSA-100 + BASE64 + XOR + SelfDefine_32BitsHash
【编写语言】: MASM32
【使用工具】: OD,IDA,RadASM,DAMN_Hash,RSATool
【操作平台】: WinXP
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  1. PEiD之,发现许多加密算法;
  2. IDA + CryptoSIG + BigLib-roy,导出map文件;
  3. OD载入,Loadmap;
  输入:
  happy
  8765432122222222-33333333333-+-444444444
  sn_1                sn_2           sn_3
  输入成这种格式的原因在下面
  
  断点下GetDlgItemTextA
  
  00406115  |.>push    40                            ; /Count = 40 (64.)
  00406117  |.>push    0040C1EB                      ; |Buffer = keyme#5.0040C1EB
  0040611C  |.>push    194                           ; |ControlID = 194 (404.)
  00406121  |.>push    dword ptr [ebp+8]             ; |hWnd
  00406124  |.>call    <GetDlgItemTextA>             ; \GetDlgItemTextA
  00406129  |.>cmp     eax, 2                        ;  nameLen >= 2
  0040612C  |.>jb      00406468
  00406132  |.>mov     [40C445], eax
  00406137  |.>push    64                            ; /Count = 64 (100.)
  00406139  |.>push    0040C22B                      ; |Buffer = keyme#5.0040C22B
  0040613E  |.>push    195                           ; |ControlID = 195 (405.)
  00406143  |.>push    dword ptr [ebp+8]             ; |hWnd
  00406146  |.>call    <GetDlgItemTextA>             ; \GetDlgItemTextA
  0040614B  |.>test    eax, eax                      ;  snLen
  0040614D  |.>je      00406468
  00406153  |.>cmp     byte ptr [40C23B], 2D         ;  //检测应该输入'-'的位置
  0040615A  |.>jnz     00406468
  00406160  |.>mov     byte ptr [40C23B], 0
  00406167  |.>cmp     byte ptr [40C247], 2D
  0040616E  |.>jnz     00406468
  00406174  |.>mov     byte ptr [40C247], 0
  0040617B  |.>cmp     byte ptr [40C249], 2D
  00406182  |.>jnz     00406468                      ;  \\
  00406188  |.>mov     byte ptr [40C249], 0
  0040618F  |.>mov     al, [40C248]
  00406194  |.>cmp     al, 18                        ;  //0x18~0x2F
  00406196  |.>jb      00406468                      ;  '+':看起来不经意的一个字符
  0040619C  |.>cmp     al, 2F                        ;  \\
  0040619E  |.>jg      00406468
  004061A4  |.>mov     [40C4C8], al                  ;  +
  004061A9  |.>xor     edi, edi
  004061AB  |.>xor     ecx, ecx
  004061AD  |.>lea     esi, [40C47E]
  004061B3  |.>mov     ebx, 10                       ;  16
  004061B8  |>>/movsx   eax, byte ptr [ecx+40C22B]
  004061BF  |.>|cmp     edi, 8
  004061C2  |.>|je      short 004061ED
  004061C4  |.>|cmp     al, 40
  004061C6  |.>|jb      short 004061CC
  004061C8  |.>|sub     al, 37
  004061CA  |.>|jmp     short 004061CE
  004061CC  |>>|sub     al, 30
  004061CE  |>>|mul     ebx
  004061D0  |.>|xchg    ah, al
  004061D2  |.>|mov     al, [ecx+40C22C]
  004061D8  |.>|cmp     al, 40
  004061DA  |.>|jb      short 004061E0
  004061DC  |.>|sub     al, 37
  004061DE  |.>|jmp     short 004061E2
  004061E0  |>>|sub     al, 30
  004061E2  |>>|add     al, ah
  004061E4  |.>|mov     [esi], al
  004061E6  |.>|inc     esi
  004061E7  |.>|add     ecx, 2
  004061EA  |.>|inc     edi
  004061EB  |.>\jmp     short 004061B8
  004061ED  |>>mov     eax, [40C445]
  004061F2  |.>push    0040CB64                      ; /Arg3 = 0040CB64
  004061F7  |.>push    eax                           ; |nameLen
  004061F8  |.>push    0040C1EB                      ; |name
  004061FD  |.>call    <_procMD5hash@12>             ; \h_1=MD5(name)
  00406202  |.>mov     byte ptr [eax+40C1EB], 0
  00406209  |.>push    dword ptr [40CB70]            ; /<%.8x> = 2FCFC640
  0040620F  |.>push    dword ptr [40CB6C]            ; |<%.8x> = 69C5EA4
  00406215  |.>push    dword ptr [40CB68]            ; |<%.8x> = 5B72A457
  0040621B  |.>push    dword ptr [40CB64]            ; |<%.8x> = 56AB24C1
  00406221  |.>push    0040C17B                      ; |Format = "%.8x%.8x%.8x%.8x"
  00406226  |.>push    0040C2D9                      ; |s = keyme#5.0040C2D9
  0040622B  |.>call    <wsprintfA>                   ; \wsprintfA
  00406230  |.>add     esp, 18
  00406233  |.>push    0040C2D9                      ; /MD5(name)
  00406238  |.>call    <CharUpperA>                  ; \CharUpperA
  0040623D  |.>push    0040C1EB                      ;  name
  00406242  |.>push    dword ptr [40C445]            ;  nameLen
  00406248  |.>push    0040C33B
  0040624D  |.>call    <_SHA1@0>                     ;  h_2 = SHA1(name)
  00406252  |.>mov     eax, [40C33B]
  00406257  |.>mov     [40C28F], eax
  0040625C  |.>push    0040C1EB                      ; /name
  00406261  |.>push    0040C3D3                      ; |ConcatString = "happy"
  00406266  |.>call    <lstrcatA>                    ; \lstrcatA
  0040626B  |.>push    0040C351
  00406270  |.>call    <_CAST128_SetKey@4>
  00406275  |.>push    0040C3D3                      ;  name
  0040627A  |.>push    0040C413
  0040627F  |.>call    <_CAST128_Encrypt@8>          ;  CAST128(name)/key=name?: 4C C8 B2 62 FD 2A 97 D6
  00406284  |.>call    <_CAST128_Clear@0>
  00406289  |.>mov     eax, [40C413]
  0040628E  |.>mov     [40C293], eax
  00406293  |.>push    0040C1A8                      ; /ExTEA Key:Guetta#5
  00406298  |.>push    0040C47E                      ; |sn_1
  0040629D  |.>call    <_ExTEA_decode@8>             ; \90 E4 CF C8 4C 96 EE D0
  004062A2  |.>mov     eax, [40C47E]                 ;  //第一次比较
  004062A7  |.>cmp     eax, [40C28F]                 ;  (ExTEA_decode(sn_1)前4字节)90 E4 CF C8 / 39 78 D0 09(SHA(name)前4字节)
  004062AD  |.>jnz     004063DD
  004062B3  |.>mov     eax, [40C482]                 ;  ExTEA_decode(sn_1)后4字节/CAST128前4字节
  004062B8  |.>cmp     eax, [40C293]
  004062BE  |.>jnz     004063DD                      ;  \\
  
  上面就是说,要能够继续下去,必须解决这个问题:
  (1). ExTEA_decode(sn_1)前4字节须等于SHA(name)前4字节;
  (2). ExTEA_decode(sn_1)后4字节须等于CAST128前4字节。
  解决的方法就是:
  (1). 连接SHA(name)前4字节和CAST128前4字节;
  (2). 然后ExTEA_encode之。
  经过上面的处理后,我们的sn_1是F7CE28D3C1801128
  修改我们的sn为F7CE28D3C1801128-33333333333-+-444444444,OD重新载入,继续。
  
  004062C4  |.>push    0040C1EB                      ;  ASCII "happy"
  004062C9  |.>push    dword ptr [40C445]            ;  nameLen
  004062CF  |.>call    <SelfDefine_32BitsHash>       ;  CC9B
  004062D4  |.>push    eax                           ; /<%x>
  004062D5  |.>push    0040C1A5                      ; |Format = "%x"
  004062DA  |.>push    0040C43B                      ; |s = keyme#5.0040C43B
  004062DF  |.>call    <wsprintfA>                   ; \wsprintfA
  004062E4  |.>add     esp, 0C
  004062E7  |.>push    0040C43B                      ; /StringOrChar = "CC9B"
  004062EC  |.>call    <CharUpperA>                  ; \CharUpperA
  004062F1  |.>push    0040C1EB                      ;  ASCII "happy"
  004062F6  |.>push    dword ptr [40C445]            ;  nameLen
  004062FC  |.>call    <CRC32>                       ;  CRC(happy)=BEED83C9
  00406301  |.>push    eax                           ; /CRC(happy)
  00406302  |.>push    0040C1A5                      ; |Format = "%x"
  00406307  |.>push    0040C431                      ; |s = keyme#5.0040C431
  0040630C  |.>call    <wsprintfA>                   ; \wsprintfA
  00406311  |.>add     esp, 0C
  00406314  |.>push    0040C431                      ; /StringOrChar = "DEEB9C38"
  00406319  |.>call    <CharUpperA>                  ; \CharUpperA
  0040631E  |.>mov     eax, [40C431]
  00406323  |.>bswap   eax
  00406325  |.>mov     [40C431], eax
  0040632A  |.>mov     eax, [40C435]
  0040632F  |.>bswap   eax
  00406331  |.>mov     [40C435], eax
  00406336  |.>push    dword ptr [40C435]            ; /<%x> = 38334339
  0040633C  |.>push    dword ptr [40C431]            ; |<%x> = 42454544
  00406342  |.>push    0040C5C9                      ; |Format = "%x%x"
  00406347  |.>push    0040C41D                      ; |s = keyme#5.0040C41D
  0040634C  |.>call    <wsprintfA>                   ; \wsprintfA
  00406351  |.>add     esp, 10
  00406354  |.>push    0040C41D                      ; /StringOrChar = "4245454438334339"
  00406359  |.>call    <CharUpperA>                  ; \CharUpperA
  0040635E  |.>call    00406476                      ;  第二次比较的核心计算RSA
  00406363  |.>push    0040C44A                      ; |/c1
  00406368  |.>push    0040C41D                      ; ||String1 = "4245454438334339"
  0040636D  |.>call    <lstrcmpA>                    ; |\lstrcmpA
  00406372  |.>jnz     short 004063DD                ; |第二次比较
  
  注意如何生成"4245454438334339"
  跟进0040635E处的call:
  {
    00406476  /$>push    ebp
    00406477  |.>mov     ebp, esp
    00406479  |.>add     esp, -10
    0040647C  |.>pushad
    0040647D  |.>push    0
    0040647F  |.>call    <__BigCreate@4>
    ......
    0040649B  |.>push    0
    0040649D  |.>call    <__BigCreate@4>
    004064A2  |.>mov     [ebp-C], eax
    004064A5  |.>push    dword ptr [ebp-10]            ; /Arg3
    004064A8  |.>push    3C                            ; |60进制
    004064AA  |.>push    0040C23C                      ; |sn_2
    004064AF  |.>call    <__BigIn@12>                  ; \keyme#5.00407053
    004064B4  |.>push    dword ptr [ebp-4]             ; /Arg3
    004064B7  |.>push    3C                            ; |Arg2 = 0000003C
    004064B9  |.>push    0040C1BB                      ; |Arg1 = 0040C1BB ASCII "NxmLdsqLvTD"
    004064BE  |.>call    <__BigIn@12>                  ; \n1:C95D9E0C2E696B29
    004064C3  |.>push    dword ptr [ebp-8]             ; /Arg3
    004064C6  |.>push    3C                            ; |Arg2 = 0000003C
    004064C8  |.>push    0040C1C7                      ; |Arg1 = 0040C1C7 ASCII "ICH"
    004064CD  |.>call    <__BigIn@12>                  ; \e:10001
    004064D2  |.>push    dword ptr [ebp-C]             ;  c1
    004064D5  |.>push    dword ptr [ebp-4]             ;  n1
    004064D8  |.>push    dword ptr [ebp-8]             ;  e
    004064DB  |.>push    dword ptr [ebp-10]            ;  sn_2
    004064DE  |.>call    <__BigPowMod@16>              ;  c1=sn_2^e (mod n1)=9E95C8C5ADB7E05F
    004064E3  |.>push    0040C44A                      ; /Arg3 = 0040C44A
    004064E8  |.>push    10                            ; |注意:输出成16进制
    004064EA  |.>push    dword ptr [ebp-C]             ; |c1
    004064ED  |.>call    <__BigOut@12>                 ; \keyme#5.00407335
    004064F2  |.>push    dword ptr [ebp-4]
    004064F5  |.>call    <__BigDestroy@4>
    ......
    00406514  \.>retn
  }
  
  用RSATool分解n1得:
  d1 = JN66rW3e6A1
  所以,通过第二关的算法就是sn_2 = "4245454438334339" ^d1 (mod n1)
  经计算,sn_2 = NY68oQUWhkV
  修正sn为:F7CE28D3C1801128-NY68oQUWhkV-+-4444444,OD重新载入,继续。
  
  00406374  |.>call    004065B4                      ; \BASE64解码
  00406379  |.>call    00406515                      ;  第三次比较的核心计算
  0040637E  |.>push    0040C45E                      ; /String2 = "7D43D218567713A918D5AB8EE"
  00406383  |.>push    0040C43B                      ; |String1 = "CC9B"
  00406388  |.>call    <lstrcmpA>                    ; \lstrcmpA
  0040638D  |.>jnz     short 004063DD                ;  第三次比较
  
  BASE64解码的call你可以静态或动态分析一下,很明显的,所以,我们把sn_3的"4444444"BASE64编码后的NDQ0NDQ0NA==输入,即:
  sn:F7CE28D3C1801128-NY68oQUWhkV-+-NDQ0NDQ0NA==,OD重新载入,继续。跟进406379处的call
  {
    00406515  /$>push    ebp
    00406516  |.>mov     ebp, esp
    00406518  |.>add     esp, -10
    0040651B  |.>pushad
    0040651C  |.>push    0
    0040651E  |.>call    <__BigCreate@4>
    ......
    00406541  |.>mov     [ebp-C], eax
    00406544  |.>push    dword ptr [ebp-10]            ; /Arg3
    00406547  |.>push    10                            ; |Arg2 = 00000010
    00406549  |.>push    0040C488                      ; |Arg1 = 0040C488 ASCII "4444444",呵呵,还原回来了
    0040654E  |.>call    <__BigIn@12>                  ; \keyme#5.00407053
    00406553  |.>push    dword ptr [ebp-4]             ; /Arg3
    00406556  |.>push    10                            ; |Arg2 = 00000010
    00406558  |.>push    0040C1CB                      ; |Arg1 = 0040C1CB ASCII "8E77DF5C05F1FFFDEFDDAFAF9"
    0040655D  |.>call    <__BigIn@12>                  ; \n2
    00406562  |.>push    dword ptr [ebp-8]             ; /Arg3
    00406565  |.>push    10                            ; |Arg2 = 00000010
    00406567  |.>push    0040C1E5                      ; |Arg1 = 0040C1E5 ASCII "10001"
    0040656C  |.>call    <__BigIn@12>                  ; \e
    00406571  |.>push    dword ptr [ebp-C]             ; PowMod后c2 = 7D43D218567713A918D5AB8EE
    00406574  |.>push    dword ptr [ebp-4]
    00406577  |.>push    dword ptr [ebp-8]
    0040657A  |.>push    dword ptr [ebp-10]
    0040657D  |.>call    <__BigPowMod@16>
    00406582  |.>push    0040C45E                      ; /Arg3 = 0040C45E
    00406587  |.>push    10                            ; |Arg2 = 00000010
    00406589  |.>push    dword ptr [ebp-C]             ; |Arg1
    0040658C  |.>call    <__BigOut@12>                 ; \keyme#5.00407335
    00406591  |.>push    dword ptr [ebp-4]
    00406594  |.>call    <__BigDestroy@4>
    ......
    004065B3  \.>retn
  }
  很显然的算法嘛,呵呵,只需注意"CC9B"是从SelfDefine_32BitsHash来的即可。
  分解n2得d2:1EBF40355C1309C5A3D6DE51
  因此
  sn_3 = BASE_Encode("CC9B" ^d2 (mod n2)) = NTJGRTQ2QzEyODg3RTEzQkVGMjBGMzdFQw==
  重新输入修正后的sn:F7CE28D3C1801128-NY68oQUWhkV-+-NTJGRTQ2QzEyODg3RTEzQkVGMjBGMzdFQw==试试,弹出来的消息框显示的是"Cmq(a{(~idal",what's this?
  显然,成功的消息被加密了,需要解密。
  0040638F  |.>xor     ecx, ecx
  00406391  |.>xor     esi, esi
  00406393  |.>mov     eax, 0040C14A
  00406398  |>>/mov     cl, [esi+eax]
  0040639B  |.>|cmp     cl, 0
  0040639E  |.>|je      short 004063AC
  004063A0  |.>|xor     cl, [40C4C8]                 ;  与我们输入的'+'xor,0x18~0x2F之间的字符逐个试,然后看明文是否可读,结果为'#'
  004063A6  |.>|mov     [esi+eax], cl
  004063A9  |.>|inc     esi
  004063AA  |.>\jmp     short 00406398
  004063AC  |>>push    0                             ; /Style = MB_OK|MB_APPLMODAL
  004063AE  |.>push    0040C5D0                      ; |Title = " "
  004063B3  |.>push    0040C14A                      ; |Text = "hFZ",03,"JP",03,"UBOJG"
  004063B8  |.>push    dword ptr [ebp+8]             ; |hOwner
  004063BB  |.>call    <MessageBoxA>                 ; \MessageBoxA
  
  修正sn:F7CE28D3C1801128-NY68oQUWhkV-#-NTJGRTQ2QzEyODg3RTEzQkVGMjBGMzdFQw==
  最终弹出的消息是:Key is valid
  
  另一组可用的注册码:
  看雪学院
  446CF3F23D9A09C5-B1iqoJZnGFl-#-NDUwMkJGMjREMzc5QjRDRTFFNERCMzU2Nw==
  
  注册机及其源代码在附件内,供参考。
  
--------------------------------------------------------------------------------
【经验总结】
  估计是一位密码算法狂的作品,用了这么多。好在思路清晰明了,没什么难度可言,只是比较费时而已。
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪软件论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2007年01月23日 10:29:58


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

上传的附件:
收藏
免费 7
支持
分享
最新回复 (4)
雪    币: 2943
活跃值: (1788)
能力值: ( LV9,RANK:850 )
在线值:
发帖
回帖
粉丝
2
http://www.crackmes.de/users/guetta/keyme5/download

18. jan
Download Keyme#5 - not so easy Windows crackme by Guetta

MASM32 / TASM32
用了许许多多的加密算法,作者说not easy ,想来是真的了。
bpx GetDlgItemTextA

00406115  |.  6A 40         push    40                               ; /Count = 40 (64.)
00406117  |.  68 EBC14000   push    0040C1EB                         ; |Buffer = keyme#5.0040C1EB
0040611C  |.  68 94010000   push    194                              ; |ControlID = 194 (404.)
00406121  |.  FF75 08       push    dword ptr [ebp+8]                ; |hWnd
00406124  |.  E8 570C0000   call    <jmp.&user32.GetDlgItemTextA>    ; \GetDlgItemTextA
00406129  |.  83F8 02       cmp     eax, 2                           ;  以上是取注册名,返回注册名长度,它不能少于2个字符
0040612C  |.  0F82 36030000 jb      00406468
00406132  |.  A3 45C44000   mov     dword ptr [40C445], eax
00406137  |.  6A 64         push    64                               ; /Count = 64 (100.)
00406139  |.  68 2BC24000   push    0040C22B                         ; |Buffer = keyme#5.0040C22B
0040613E  |.  68 95010000   push    195                              ; |ControlID = 195 (405.)
00406143  |.  FF75 08       push    dword ptr [ebp+8]                ; |hWnd
00406146  |.  E8 350C0000   call    <jmp.&user32.GetDlgItemTextA>    ; \GetDlgItemTextA
0040614B  |.  85C0          test    eax, eax                         ;  取注册码,看它是否为空
0040614D  |.  0F84 15030000 je      00406468
00406153      803D 3BC24000>cmp     byte ptr [40C23B], 2D            ;  看注册码相应位置是否是边接符:0x2D,这里是测试注册码的第17位是否是连接符
0040615A  |.  0F85 08030000 jnz     00406468
00406160  |.  C605 3BC24000>mov     byte ptr [40C23B], 0             ;  如果是连接符,则现在使它为:#0
00406167  |.  803D 47C24000>cmp     byte ptr [40C247], 2D            ;  第29位也该是连接符
0040616E  |.  0F85 F4020000 jnz     00406468
00406174  |.  C605 47C24000>mov     byte ptr [40C247], 0             ;  使它为:#0
0040617B  |.  803D 49C24000>cmp     byte ptr [40C249], 2D            ;  第31位也是连接符
00406182  |.  0F85 E0020000 jnz     00406468
00406188  |.  C605 49C24000>mov     byte ptr [40C249], 0             ;  使它为:#0
0040618F  |.  A0 48C24000   mov     al, byte ptr [40C248]            ;  将第30位的ASCII码送AL
00406194  |.  3C 18         cmp     al, 18                           ;  它不应该少于0x18
00406196  |.  0F82 CC020000 jb      00406468
0040619C  |.  3C 2F         cmp     al, 2F                           ;  也不应该大于0x2F
0040619E  |.  0F8F C4020000 jg      00406468
004061A4  |.  A2 C8C44000   mov     byte ptr [40C4C8], al            ;  把它存起来
004061A9  |.  33FF          xor     edi, edi                         ;  清零EDI
004061AB  |.  33C9          xor     ecx, ecx                         ;  清零计数器ECX
004061AD  |.  8D35 7EC44000 lea     esi, dword ptr [40C47E]
004061B3  |.  BB 10000000   mov     ebx, 10                          ;  一个基数0x10
004061B8  |>  0FBE81 2BC240>/movsx   eax, byte ptr [ecx+40C22B]      ;  注册码ASCII码带符号扩展送到EAX
004061BF  |.  83FF 08       |cmp     edi, 8
004061C2  |.  74 29         |je      short 004061ED
004061C4  |.  3C 40         |cmp     al, 40
004061C6  |.  72 04         |jb      short 004061CC
004061C8  |.  2C 37         |sub     al, 37                          ;  大于0x40,表明它是字母,则减0x37
004061CA  |.  EB 02         |jmp     short 004061CE
004061CC  |>  2C 30         |sub     al, 30                          ;  如果是数字就减0x30
004061CE  |>  F7E3          |mul     ebx                             ;  然后乘以基数0x10
004061D0  |.  86C4          |xchg    ah, al                          ;  交换
004061D2  |.  8A81 2CC24000 |mov     al, byte ptr [ecx+40C22C]       ;  下一位注册码
004061D8  |.  3C 40         |cmp     al, 40                          ;  进行同样的处理
004061DA  |.  72 04         |jb      short 004061E0
004061DC  |.  2C 37         |sub     al, 37
004061DE  |.  EB 02         |jmp     short 004061E2
004061E0  |>  2C 30         |sub     al, 30
004061E2  |>  02C4          |add     al, ah                          ;  加起来
004061E4  |.  8806          |mov     byte ptr [esi], al              ;  存放
004061E6  |.  46            |inc     esi                             ;  指针下移
004061E7  |.  83C1 02       |add     ecx, 2                          ;  计数
004061EA  |.  47            |inc     edi                             ;  控制循环,EDI初值为8
004061EB  |.^ EB CB         \jmp     short 004061B8                  ;  这个循环的意思是:原样复制注册码到内存
004061ED  |>  A1 45C44000   mov     eax, dword ptr [40C445]          ;  注册名长度送EAX
004061F2  |.  68 64CB4000   push    0040CB64                         ; /Arg3 = 0040CB64
004061F7  |.  50            push    eax                              ; |Arg2 => 00000005
004061F8  |.  68 EBC14000   push    0040C1EB                         ; |Arg1 = 0040C1EB ASCII "wofan"
004061FD  |.  E8 97C0FFFF   call    00402299                         ; \keyme#5.00402299
00406202  |.  C680 EBC14000>mov     byte ptr [eax+40C1EB], 0         ;  以下就是格式化输出MD5密文
00406209  |.  FF35 70CB4000 push    dword ptr [40CB70]               ; /<%.8x> = 5B6E2BAC
0040620F  |.  FF35 6CCB4000 push    dword ptr [40CB6C]               ; |<%.8x> = 8BE72473
00406215  |.  FF35 68CB4000 push    dword ptr [40CB68]               ; |<%.8x> = 30CD28A3
0040621B  |.  FF35 64CB4000 push    dword ptr [40CB64]               ; |<%.8x> = 778F10F7
00406221  |.  68 7BC14000   push    0040C17B                         ; |Format = "%.8x%.8x%.8x%.8x"
00406226  |.  68 D9C24000   push    0040C2D9                         ; |s = keyme#5.0040C2D9
0040622B  |.  E8 EA0A0000   call    <jmp.&user32.wsprintfA>          ; \wsprintfA
00406230  |.  83C4 18       add     esp, 18                          ;  以下就看到了标准的MD5密文了
00406233  |.  68 D9C24000   push    0040C2D9                         ; /StringOrChar = "778F10F730CD28A38BE724735B6E2BAC"
00406238  |.  E8 EF0A0000   call    <jmp.&user32.CharUpperA>         ; \CharUpperA
0040623D  |.  68 EBC14000   push    0040C1EB                         ;  ASCII "wofan"
00406242  |.  FF35 45C44000 push    dword ptr [40C445]               ;  注册名长度
00406248  |.  68 3BC34000   push    0040C33B                         ;  存放密文的缓冲区
0040624D  |.  E8 AEADFFFF   call    00401000                         ;  对注册名进行SHA1加密处理
00406252  |.  A1 3BC34000   mov     eax, dword ptr [40C33B]          ;  第一个8位,送到EAX
00406257  |.  A3 8FC24000   mov     dword ptr [40C28F], eax          ;  存放在储单元中
0040625C  |.  68 EBC14000   push    0040C1EB                         ; /StringToAdd = "wofan"
00406261  |.  68 D3C34000   push    0040C3D3                         ; |ConcatString = "wofan"
00406266  |.  E8 DB0B0000   call    <jmp.&kernel32.lstrcatA>         ; \lstrcatA
2007-1-25 13:40
0
雪    币: 313
活跃值: (250)
能力值: ( LV9,RANK:650 )
在线值:
发帖
回帖
粉丝
3
研究了一天,总是没搞懂BigMod,没想到今天看到了。
上传的附件:
2007-1-25 20:40
0
雪    币: 721
活跃值: (350)
能力值: ( LV9,RANK:1250 )
在线值:
发帖
回帖
粉丝
4
最初由 hbqjxhw 发布
研究了一天,总是没搞懂BigMod,没想到今天看到了。

你用的是什么软件侦测的?好像不是PEiD。
2007-1-31 15:48
0
雪    币: 263
活跃值: (10)
能力值: ( LV9,RANK:210 )
在线值:
发帖
回帖
粉丝
5

三楼那玩意也太先进了吧
那么清晰
2007-1-31 15:56
0
游客
登录 | 注册 方可回帖
返回
//