首页
社区
课程
招聘
[原创]菜鸟对xiaohui_82 CrackMe V1改进版算法分析
发表于: 2007-3-24 00:30 3641

[原创]菜鸟对xiaohui_82 CrackMe V1改进版算法分析

2007-3-24 00:30
3641
【文章标题】: 菜鸟对xiaohui_82 CrackMe V1改进版算法分析
【文章作者】: aicode
【软件名称】: xiaohui_82 CrackMe
【下载地址】: http://bbs.pediy.com/showthread.php?s=&threadid=41182
【加壳方式】: 无壳
【编写语言】: Delphi
【使用工具】: OD DeDe Peid
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
  用peid查了一下是Delphi写的。因为想练习跟算法就直接拿出DeDe找到关键点跟进
  
  004975E8  |.  E8 9BE7F9FF   call    00435D88                         ;  取注册名
  004975ED  |.  8B45 F0       mov     eax, dword ptr [ebp-10]
  004975F0  |.  E8 B3D1F6FF   call    004047A8                         ;  取用户名位数
  004975F5  |.  85C0          test    eax, eax                         ;  判断是否输入注册名
  004975F7  |.  75 17         jnz     short 00497610
  004975F9  |.  6A 00         push    0                                ; /Arg1 = 00000000
  004975FB  |.  66:8B0D AC764>mov     cx, word ptr [4976AC]            ; |
  00497602  |.  33D2          xor     edx, edx                         ; |
  00497604  |.  B8 B8764900   mov     eax, 004976B8                    ; |您没有输入用户名\n请输入用户名
  00497609  |.  E8 BE18F9FF   call    00428ECC                         ; \crackme.00428ECC
  0049760E  |.  EB 75         jmp     short 00497685
  00497610  |>  8D55 EC       lea     edx, dword ptr [ebp-14]
  00497613  |.  8B83 1C030000 mov     eax, dword ptr [ebx+31C]
  00497619  |.  E8 6AE7F9FF   call    00435D88                         ;  取注册码
  0049761E  |.  8B45 EC       mov     eax, dword ptr [ebp-14]
  00497621  |.  E8 82D1F6FF   call    004047A8                         ;  取注册码位数
  00497626  |.  85C0          test    eax, eax
  00497628  |.  75 17         jnz     short 00497641                   ;  判断是否输入注册码
  0049762A  |.  6A 00         push    0                                ; /Arg1 = 00000000
  0049762C  |.  66:8B0D AC764>mov     cx, word ptr [4976AC]            ; |
  00497633  |.  33D2          xor     edx, edx                         ; |
  00497635  |.  B8 E0764900   mov     eax, 004976E0                    ; |您没有输入注册号\n请输入注册号
  0049763A  |.  E8 8D18F9FF   call    00428ECC                         ; \crackme.00428ECC
  0049763F  |.  EB 44         jmp     short 00497685
  00497641  |>  8D45 FC       lea     eax, dword ptr [ebp-4]
  00497644  |.  50            push    eax
  00497645  |.  6A 00         push    0
  00497647  |.  8D55 E8       lea     edx, dword ptr [ebp-18]
  0049764A  |.  8B83 10030000 mov     eax, dword ptr [ebx+310]
  00497650  |.  E8 33E7F9FF   call    00435D88
  00497655  |.  8B45 E8       mov     eax, dword ptr [ebp-18]          ; |
  00497658  |.  50            push    eax                              ; |pThreadParm
  00497659  |.  68 28704900   push    00497028                         ; |ThreadFunction = crackme.00497028 算法所在函数
  0049765E  |.  6A 00         push    0                                ; |StackSize = 0
  00497660  |.  6A 00         push    0                                ; |pSecurity = NULL
  00497662  |.  E8 19F0F6FF   call    <jmp.&kernel32.CreateThread>     ; \CreateThread   关键点创建新的线程进行验证
  
  对00497028进行跟进
  
  00497028  /.  55            push    ebp
  00497029  |.  8BEC          mov     ebp, esp
  0049702B  |.  B9 07000000   mov     ecx, 7
  00497030  |>  6A 00         /push    0
  00497032  |.  6A 00         |push    0
  00497034  |.  49            |dec     ecx
  00497035  |.^ 75 F9         \jnz     short 00497030
  00497037  |.  51            push    ecx
  00497038  |.  53            push    ebx
  00497039  |.  56            push    esi
  0049703A  |.  57            push    edi
  0049703B  |.  33C0          xor     eax, eax
  0049703D  |.  55            push    ebp
  0049703E  |.  68 9B734900   push    0049739B
  00497043  |.  64:FF30       push    dword ptr fs:[eax]
  00497046  |.  64:8920       mov     dword ptr fs:[eax], esp
  00497049  |.  8D55 E4       lea     edx, dword ptr [ebp-1C]
  0049704C  |.  A1 54AD4900   mov     eax, dword ptr [49AD54]
  00497051  |.  8B80 10030000 mov     eax, dword ptr [eax+310]
  00497057  |.  E8 2CEDF9FF   call    00435D88                         ;  取用户名
  0049705C  |.  E8 9330F7FF   call    0040A0F4
  00497061  |.  83C4 F8       add     esp, -8                          ; /
  00497064  |.  DD1C24        fstp    qword ptr [esp]                  ; |Arg1 (8 字节)
  00497067  |.  9B            wait                                     ; |
  00497068  |.  8D55 E8       lea     edx, dword ptr [ebp-18]          ; |
  0049706B  |.  B8 B4734900   mov     eax, 004973B4                    ; |yyyy-mm-dd-hh
  00497070  |.  E8 CB3CF7FF   call    0040AD40                         ; \取日期
  00497075  |.  8D45 E0       lea     eax, dword ptr [ebp-20]
  00497078  |.  50            push    eax
  00497079  |.  B9 04000000   mov     ecx, 4
  0049707E  |.  BA 01000000   mov     edx, 1
  00497083  |.  8B45 E8       mov     eax, dword ptr [ebp-18]          ;  取年月日小时
  00497086  |.  E8 7DD9F6FF   call    00404A08                         ;  取年压入栈中
  0049708B  |.  8B45 E0       mov     eax, dword ptr [ebp-20]
  0049708E  |.  E8 B117F7FF   call    00408844
  00497093  |.  8945 F8       mov     dword ptr [ebp-8], eax
  00497096  |.  8D45 DC       lea     eax, dword ptr [ebp-24]
  00497099  |.  50            push    eax
  0049709A  |.  B9 02000000   mov     ecx, 2
  0049709F  |.  BA 06000000   mov     edx, 6
  004970A4  |.  8B45 E8       mov     eax, dword ptr [ebp-18]
  004970A7  |.  E8 5CD9F6FF   call    00404A08                         ;  取月压入栈中
  004970AC  |.  8B45 DC       mov     eax, dword ptr [ebp-24]
  004970AF  |.  E8 9017F7FF   call    00408844
  004970B4  |.  8945 F4       mov     dword ptr [ebp-C], eax
  004970B7  |.  8D45 D8       lea     eax, dword ptr [ebp-28]
  004970BA  |.  50            push    eax
  004970BB  |.  B9 02000000   mov     ecx, 2
  004970C0  |.  BA 09000000   mov     edx, 9
  004970C5  |.  8B45 E8       mov     eax, dword ptr [ebp-18]
  004970C8  |.  E8 3BD9F6FF   call    00404A08                         ;  取日压入栈中
  004970CD  |.  8B45 D8       mov     eax, dword ptr [ebp-28]
  004970D0  |.  E8 6F17F7FF   call    00408844
  004970D5  |.  8945 F0       mov     dword ptr [ebp-10], eax
  004970D8  |.  8D45 D4       lea     eax, dword ptr [ebp-2C]
  004970DB  |.  50            push    eax
  004970DC  |.  B9 02000000   mov     ecx, 2
  004970E1  |.  BA 0C000000   mov     edx, 0C
  004970E6  |.  8B45 E8       mov     eax, dword ptr [ebp-18]
  004970E9  |.  E8 1AD9F6FF   call    00404A08                         ;  取小时压入栈中
  004970EE  |.  8B45 D4       mov     eax, dword ptr [ebp-2C]
  004970F1  |.  E8 4E17F7FF   call    00408844
  004970F6  |.  8945 EC       mov     dword ptr [ebp-14], eax
  004970F9  |.  8B75 F8       mov     esi, dword ptr [ebp-8]
  004970FC  |.  0375 EC       add     esi, dword ptr [ebp-14]          ;  用年加小时
  004970FF  |.  8B45 E4       mov     eax, dword ptr [ebp-1C]
  00497102  |.  E8 A1D6F6FF   call    004047A8                         ;  取用户名
  00497107  |.  8B55 E4       mov     edx, dword ptr [ebp-1C]
  0049710A  |.  0FB64402 FF   movzx   eax, byte ptr [edx+eax-1]        ;  取用户名最后一位
  0049710F  |.  33C6          xor     eax, esi                         ;  与年和小时的和进行异或
  00497111  |.  8B15 54AD4900 mov     edx, dword ptr [49AD54]
  00497117  |.  8B92 04030000 mov     edx, dword ptr [edx+304]
  0049711D  |.  8B4A 48       mov     ecx, dword ptr [edx+48]
  00497120  |.  99            cdq
  00497121  |.  F7F9          idiv    ecx                              ;  用上面的计算结果除以300保留余数用来计算注册码
  00497123  |.  8BF2          mov     esi, edx
  00497125  |.  8B7D F4       mov     edi, dword ptr [ebp-C]
  00497128  |.  037D F0       add     edi, dword ptr [ebp-10]
  0049712B  |.  8B45 E4       mov     eax, dword ptr [ebp-1C]
  0049712E  |.  E8 75D6F6FF   call    004047A8
  00497133  |.  8B55 E4       mov     edx, dword ptr [ebp-1C]
  00497136  |.  0FB64402 FF   movzx   eax, byte ptr [edx+eax-1]        ;  取用户名最后一位
  0049713B  |.  33C7          xor     eax, edi                         ;  与24进行异或
  0049713D  |.  8B15 54AD4900 mov     edx, dword ptr [49AD54]
  00497143  |.  8B9A 04030000 mov     ebx, dword ptr [edx+304]
  00497149  |.  99            cdq
  0049714A  |.  F77B 4C       idiv    dword ptr [ebx+4C]               ;  用上面的计算结果除以60保留余数用来计算注册码
  0049714D  |.  8BFA          mov     edi, edx
  0049714F  |.  8BC3          mov     eax, ebx
  00497151  |.  E8 A636F9FF   call    0042A7FC
  00497156  |.  8BCF          mov     ecx, edi
  00497158  |.  8BD6          mov     edx, esi
  0049715A  |.  E8 097AF8FF   call    0041EB68                         ;  将上面取到的两个余数做为GetPixel的参数取RGB值
  0049715F  |.  8945 FC       mov     dword ptr [ebp-4], eax           ;  将RGB值存入[ebp-4]的地址中用来进行累加计算注册码
  00497162  |.  8B45 E4       mov     eax, dword ptr [ebp-1C]
  00497165  |.  E8 3ED6F6FF   call    004047A8
  0049716A  |.  8BD8          mov     ebx, eax
  0049716C  |.  83FB 01       cmp     ebx, 1
  0049716F  |.  7C 66         jl      short 004971D7                   按注册名的长度来循环从最后一位开始取每位字母
  00497171  |>  8B75 F8       /mov     esi, dword ptr [ebp-8]          ;     取年
  00497174  |.  0375 EC       |add     esi, dword ptr [ebp-14]         ;  将小时加上年
  00497177  |.  8B45 E4       |mov     eax, dword ptr [ebp-1C]         ;  取注册名
  0049717A  |.  33C9          |xor     ecx, ecx
  0049717C  |.  8A4C18 FF     |mov     cl, byte ptr [eax+ebx-1]        ;  取用户名特定位数的字符
  00497180  |.  8BC1          |mov     eax, ecx
  00497182  |.  33C6          |xor     eax, esi                        ;  将用户名特定位数的字符与年和小时的和进行异或运算
  00497184  |.  8B15 54AD4900 |mov     edx, dword ptr [49AD54]
  0049718A  |.  8B92 04030000 |mov     edx, dword ptr [edx+304]
  00497190  |.  8B72 48       |mov     esi, dword ptr [edx+48]         ;  取300
  00497193  |.  99            |cdq
  00497194  |.  F7FE          |idiv    esi                             ;  异或结果除以300
  00497196  |.  8BF2          |mov     esi, edx                        ;  余数放入esi中
  00497198  |.  8B7D F4       |mov     edi, dword ptr [ebp-C]
  0049719B  |.  037D F0       |add     edi, dword ptr [ebp-10]         ;  取24
  0049719E  |.  8BC1          |mov     eax, ecx
  004971A0  |.  33C7          |xor     eax, edi                        ;   取用户名特定位数的字符与24进行异或
  004971A2  |.  8B15 54AD4900 |mov     edx, dword ptr [49AD54]
  004971A8  |.  8B92 04030000 |mov     edx, dword ptr [edx+304]
  004971AE  |.  8B4A 4C       |mov     ecx, dword ptr [edx+4C]
  004971B1  |.  99            |cdq
  004971B2  |.  F7F9          |idiv    ecx                             ;  异或结果除以60
  004971B4  |.  8BFA          |mov     edi, edx                        ;  余数存入edi
  004971B6  |.  A1 54AD4900   |mov     eax, dword ptr [49AD54]
  004971BB  |.  8B80 04030000 |mov     eax, dword ptr [eax+304]
  004971C1  |.  E8 3636F9FF   |call    0042A7FC
  004971C6  |.  8BCF          |mov     ecx, edi
  004971C8  |.  8BD6          |mov     edx, esi
  004971CA  |.  E8 9979F8FF   |call    0041EB68                        ; 将上面取到的两个余数做为GetPixel的参数取RGB值
  004971CF  |.  0145 FC       |add     dword ptr [ebp-4], eax          ; 与[ebp-4]中的值进行累加
  004971D2  |.  4B            |dec     ebx
  004971D3  |.  85DB          |test    ebx, ebx
  004971D5  |.^ 75 9A         \jnz     short 00497171
  004971D7  |>  8D55 D0       lea     edx, dword ptr [ebp-30]
  004971DA  |.  8B45 FC       mov     eax, dword ptr [ebp-4]           ; 取出最后累加的结果(注册码)
  
  
  

--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2007年03月21日 21:50:18

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

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回
//