首页
社区
课程
招聘
[原创]我的第三个Crack me 破文 入门练习,高手飘过
发表于: 2008-3-30 22:15 4731

[原创]我的第三个Crack me 破文 入门练习,高手飘过

2008-3-30 22:15
4731
【文章标题】: 加密解密习题练习破文
【文章作者】: kanghtta
【作者邮箱】: kanghtta@hotmail.com
【作者主页】: http://kanghtta.cublog.cn
【作者QQ号】: 18381291
【软件名称】: echap515
【软件大小】: 193kb
【下载地址】: 光盘下载
【加壳方式】: 无
【编写语言】: delphi3.0
【使用工具】: peid OllyICE
【操作平台】: Windows XP
【软件介绍】: Name/Serial 中
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
    大家好,今天周末,以后打算每星期练一个。看到看雪很多挂章的,好想要哦!所以,努力学习!嘿嘿。。。
  今天做的是加密解密补充习题的515,难度中;
  
   首先,还是运行以下程序,随便输入些字符,OK它,MessageBox出来了:Wrong Serial Number!
   今天用一用OD的字串参考吧,前两个练习虽然也想用,但由于是汇编写的,程序比较小,所以上下滚动就找了关键,
  后来想想,这对我熟悉OD的环境不太好吧,还是正规点。废话不说了,用PEID收集的信息也差不多了。OD载入。
  1,
  在反汇编窗口中: 右键--〉查找--〉所有参考文本字串
                   在文本字串参考窗口中:右键-->查找文本 在弹出的文本框里输入:Wrong (注意区分大小写)
  找到一处:Wrong Serial Number! 在此文本上右键---〉反汇编窗口中跟随
  代码如下:
  00427BA3  |. /7D 1E         jge     short 00427BC3
  00427BA5  |> |6A 00         push    0
  00427BA7  |. |68 087C4200   push    00427C08                         ;  ASCII "ERROR"
  00427BAC  |. |68 107C4200   push    00427C10                         ;  ASCII "Wrong Serial Number !"
  00427BB1  |. |A1 44974200   mov     eax, dword ptr [429744]
  00427BB6  |. |E8 411EFFFF   call    004199FC
  00427BBB  |. |50            push    eax                              ; |hOwner
  00427BBC  |. |E8 4FD9FDFF   call    <jmp.&user32.MessageBoxA>        ; \MessageBoxA  注册失败
  00427BC1  |. |EB 1C         jmp     short 00427BDF
  00427BC3  |> \6A 00         push    0
  00427BC5  |.  68 287C4200   push    00427C28                         ;  ASCII "Success"
  00427BCA  |.  68 307C4200   push    00427C30                         ;  ASCII "Congratulation ! You've Did It.",CR,"Mail Us : ekhmail@egroups.com"
  00427BCF  |.  A1 44974200   mov     eax, dword ptr [429744]
  00427BD4  |.  E8 231EFFFF   call    004199FC
  00427BD9  |.  50            push    eax                              ; |hOwner
  00427BDA  |.  E8 31D9FDFF   call    <jmp.&user32.MessageBoxA>        ; \MessageBoxA  注册成功
  
   下面我们看看这两个消息框从那里跳过来的: 
  00427B44  /.  55            push    ebp
  00427B45  |.  8BEC          mov     ebp, esp    保存ebp 指针,传输esp给ebp用于堆栈操作
  00427B47  |.  6A 00         push    0
  00427B49  |.  6A 00         push    0
  00427B4B  |.  53            push    ebx
  00427B4C  |.  8BD8          mov     ebx, eax
  00427B4E  |.  33C0          xor     eax, eax
  00427B50  |.  55            push    ebp
  00427B51  |.  68 FA7B4200   push    00427BFA
  00427B56  |.  64:FF30       push    dword ptr fs:[eax]
  00427B59  |.  64:8920       mov     dword ptr fs:[eax], esp
  00427B5C  |.  8D55 FC       lea     edx, dword ptr [ebp-4]
  00427B5F  |.  8B83 DC010000 mov     eax, dword ptr [ebx+1DC]
  00427B65  |.  E8 26E2FEFF   call    00415D90
  00427B6A  |.  8B45 FC       mov     eax, dword ptr [ebp-4]        将你输入的用户名传给eax,这里是:cracker
  00427B6D  |.  E8 3EBCFDFF   call    004037B0                     初步断定为关键,F7跟进
  
  004037B0  /$  85C0          test    eax, eax                      测试eax是否为空
  004037B2  |.  74 03         je      short 004037B7                如果空则跳转
  004037B4  |.  8B40 FC       mov     eax, dword ptr [eax-4]        用户名字符数送eax
  004037B7  \>  C3            retn                                  返回
  
  00427B72  |.  48            dec     eax                           eax 减一
  00427B73  |.  7C 30         jl      short 00427BA5           这里跳转则完蛋
  00427B75  |.  8D55 FC       lea     edx, dword ptr [ebp-4]
  00427B78  |.  8B83 EC010000 mov     eax, dword ptr [ebx+1EC]
  00427B7E  |.  E8 0DE2FEFF   call    00415D90                           F7跟进
  
  
  00427B83  |.  8B45 FC       mov     eax, dword ptr [ebp-4]          注册码送eax
  00427B86  |.  50            push    eax                             
  00427B87  |.  8D55 F8       lea     edx, dword ptr [ebp-8]
  00427B8A  |.  8B83 DC010000 mov     eax, dword ptr [ebx+1DC]
  00427B90  |.  E8 FBE1FEFF   call    00415D90
  00427B95  |.  8B45 F8       mov     eax, dword ptr [ebp-8]         用户名送eax
  00427B98  |.  5A            pop     edx                            注册码送edx
  00427B99  |.  E8 82FEFFFF   call    00427A20                 注册码在此生成。 关键 F7跟进  代码如下
  
  00427A20  /$  55            push    ebp
  00427A21  |.  8BEC          mov     ebp, esp
  00427A23  |.  83C4 F0       add     esp, -10          堆栈操作,预留0x10个堆栈
  00427A26  |.  53            push    ebx
  00427A27  |.  56            push    esi
  00427A28  |.  33C9          xor     ecx, ecx
  00427A2A  |.  894D F0       mov     dword ptr [ebp-10], ecx
  00427A2D  |.  894D F4       mov     dword ptr [ebp-C], ecx
  00427A30  |.  8955 F8       mov     dword ptr [ebp-8], edx      edx为注册码
  00427A33  |.  8945 FC       mov     dword ptr [ebp-4], eax      eax用户名
  00427A36  |.  8B45 FC       mov     eax, dword ptr [ebp-4]
  00427A39  |.  E8 26BFFDFF   call    00403964                   测试用户名是否为空
  00427A3E  |.  8B45 F8       mov     eax, dword ptr [ebp-8]
  00427A41  |.  E8 1EBFFDFF   call    00403964              测试注册码是否为空   
  00427A46  |.  33C0          xor     eax, eax
  00427A48  |.  55            push    ebp
  00427A49  |.  68 2A7B4200   push    00427B2A
  00427A4E  |.  64:FF30       push    dword ptr fs:[eax]
  00427A51  |.  64:8920       mov     dword ptr fs:[eax], esp
  00427A54  |.  33DB          xor     ebx, ebx
  00427A56  |.  8B45 FC       mov     eax, dword ptr [ebp-4]
  00427A59  |.  E8 52BDFDFF   call    004037B0
  00427A5E  |.  8BF0          mov     esi, eax
  00427A60  |.  85F6          test    esi, esi
  00427A62  |.  7E 3C         jle     short 00427AA0
  00427A64  |.  B8 01000000   mov     eax, 1
  00427A69  |>  8BD0          /mov     edx, eax                        
  00427A6B  |.  8B4D FC       |mov     ecx, dword ptr [ebp-4]                将用户名送ecx
  00427A6E  |.  0FB64C11 FF   |movzx   ecx, byte ptr [ecx+edx-1]   将用户名从左到右按字节取出放ecx运算
  00427A73  |.  03D9          |add     ebx, ecx                    ebx 初值为0
  00427A75  |.  71 05         |jno     short 00427A7C              如果不溢出就跳
  00427A77  |.  E8 B4AFFDFF   |call    00402A30
  00427A7C  |>  C1E3 08       |shl     ebx, 8                      ebx逻辑左移8位
  00427A7F  |.  8B0D 80884200 |mov     ecx, dword ptr [428880]         ;  echap515.004279FC  将字串地址东ecx
  
  ds:[00428880]=004279FC (echap515.004279FC), ASCII "LANNYDIBANDINGINANAKEKHYANGNGENTOT"
  ecx=00000063
  
  00427A85  |.  0FB65411 FF   |movzx   edx, byte ptr [ecx+edx-1]   依次取上面的ADSCII字串的一字节: 首次为L
  00427A8A  |.  0BDA          |or      ebx, edx                    或运算
  00427A8C  |.  85DB          |test    ebx, ebx                   测试ebx是否为0
  00427A8E  |.  7D 0C         |jge     short 00427A9C            如果大于等于则跳
  00427A90  |.  6BD3 FF       |imul    edx, ebx, -1
  00427A93  |.  71 05         |jno     short 00427A9A
  00427A95  |.  E8 96AFFDFF   |call    00402A30
  00427A9A  |>  8BDA          |mov     ebx, edx
  00427A9C  |>  40            |inc     eax                    eax+1以便取下一字符
  00427A9D  |.  4E            |dec     esi                    堆栈指针减1
  00427A9E  |.^ 75 C9         \jnz     short 00427A69
  00427AA0  |>  81F3 78563412 xor     ebx, 12345678           ebx的值和12345678异或运算  运算前ebx的值:1DBEB649
  00427AA6  |.  8D55 F0       lea     edx, dword ptr [ebp-10]
  00427AA9  |.  8BC3          mov     eax, ebx                  ebx 0F8AE031   
  00427AAB  |.  E8 44E9FDFF   call    004063F4       F7跟进
  
  004063F4  /$  83C4 F8       add     esp, -8
  004063F7  |.  6A 00         push    0                                ; /Arg1 = 00000000
  004063F9  |.  894424 04     mov     dword ptr [esp+4], eax           ; |     0F8AE031送入堆栈
  004063FD  |.  C64424 08 00  mov     byte ptr [esp+8], 0              ; |
  00406402  |.  8D4C24 04     lea     ecx, dword ptr [esp+4]           ; |
  00406406  |.  8BC2          mov     eax, edx                         ; |
  00406408  |.  BA 20644000   mov     edx, 00406420                    ; |ASCII "%d"
  0040640D  |.  E8 42080000   call    00406C54                         ; \echap515.00406C54
  00406412  |.  59            pop     ecx
  00406413  |.  5A            pop     edx
  00406414  \.  C3            retn                    转换为D%
  堆栈地址=0012E94A, (ASCII "260759601")
  edx=00001001
  跳转来自 00406CC1
  
  00427AB0  |.  8B45 F0       mov     eax, dword ptr [ebp-10]   将转换后得的数据送eax
  00427AB3  |.  E8 F8BCFDFF   call    004037B0
  00427AB8  |.  8BF0          mov     esi, eax
  00427ABA  |.  85F6          test    esi, esi
  00427ABC  |.  7E 38         jle     short 00427AF6  
  00427ABE  |>  8BC3          /mov     eax, ebx              0F8AE031 送eax
  00427AC0  |.  B9 0A000000   |mov     ecx, 0A               0A送ecx
  00427AC5  |.  99            |cdq                            双字节转换为四字EDX: EAX
  00427AC6  |.  F7F9          |idiv    ecx                  edx:eax/ecx 的商存Eax中, 余数存EDX中
  00427AC8  |.  6215 3C7B4200 |bound   edx, qword ptr [427B3C]
  00427ACE  |.  8A92 84884200 |mov     dl, byte ptr [edx+428884]  ;00428885  41 4E 4E 59 35 36 34 36 35 32 31 00 8D 40 00 D4  ANNY5646521.岪.送dl
  00427AD4  |.  8D45 F0       |lea     eax, dword ptr [ebp-10]
  00427AD7  |.  E8 FCBBFDFF   |call    004036D8
  00427ADC  |.  8B55 F0       |mov     edx, dword ptr [ebp-10]
  00427ADF  |.  8D45 F4       |lea     eax, dword ptr [ebp-C]
  00427AE2  |.  E8 D1BCFDFF   |call    004037B8
  00427AE7  |.  8BC3          |mov     eax, ebx
  00427AE9  |.  B9 0A000000   |mov     ecx, 0A                 同上
  00427AEE  |.  99            |cdq
  00427AEF  |.  F7F9          |idiv    ecx
  00427AF1  |.  8BD8          |mov     ebx, eax
  00427AF3  |.  4E            |dec     esi
  00427AF4  |.^ 75 C8         \jnz     short 00427ABE
  00427AF6  |>  8B45 F4       mov     eax, dword ptr [ebp-C]   
  
  堆栈 ss:[0012F984]=00D259A8, (ASCII "AL6554L6N")            经过计算得到的注册码,到此此程序应该被破
  eax=00000000
  跳转来自 00427ABC
  
  00427AF9  |.  8B55 F8       mov     edx, dword ptr [ebp-8]
  00427AFC  |.  E8 BFBDFDFF   call    004038C0
  00427B01  |.  75 07         jnz     short 00427B0A
  00427B03  |.  BB 4E61BC00   mov     ebx, 0BC614E
  00427B08  |.  EB 05         jmp     short 00427B0F
  00427B0A  |>  BB 91D61200   mov     ebx, 12D691
  00427B0F  |>  33C0          xor     eax, eax
  00427B11  |.  5A            pop     edx
  00427B12  |.  59            pop     ecx
  00427B13  |.  59            pop     ecx
  00427B14  |.  64:8910       mov     dword ptr fs:[eax], edx
  00427B17  |.  68 317B4200   push    00427B31
  00427B1C  |>  8D45 F0       lea     eax, dword ptr [ebp-10]
  00427B1F  |.  BA 04000000   mov     edx, 4
  00427B24  |.  E8 2FBAFDFF   call    00403558
  00427B29  \.  C3            retn
  
  00427B9E  |.  3D 4E61BC00   cmp     eax, 0BC614E     比较,如果大于等于则注册成功,否则失败
  00427BA3  |.  7D 1E         jge     short 00427BC3   
  00427BA5  |>  6A 00         push    0
  00427BA7  |.  68 087C4200   push    00427C08                         ;  ASCII "ERROR"
  00427BAC  |.  68 107C4200   push    00427C10                         ;  ASCII "Wrong Serial Number !"
  00427BB1  |.  A1 44974200   mov     eax, dword ptr [429744]
  00427BB6  |.  E8 411EFFFF   call    004199FC
  00427BBB  |.  50            push    eax                              ; |hOwner
  00427BBC  |.  E8 4FD9FDFF   call    <jmp.&user32.MessageBoxA>        ; \MessageBoxA
  00427BC1  |.  EB 1C         jmp     short 00427BDF
  00427BC3  |>  6A 00         push    0
  00427BC5  |.  68 287C4200   push    00427C28                         ;  ASCII "Success"
  00427BCA  |.  68 307C4200   push    00427C30                         ;  ASCII "Congratulation ! You've Did It.",CR,"Mail Us : ekhmail@egroups.com"
  00427BCF  |.  A1 44974200   mov     eax, dword ptr [429744]
  00427BD4  |.  E8 231EFFFF   call    004199FC
  00427BD9  |.  50            push    eax                              ; |hOwner
  00427BDA  |.  E8 31D9FDFF   call    <jmp.&user32.MessageBoxA>        ; \MessageBoxA
  00427BDF  |>  33C0          xor     eax, eax
  00427BE1  |.  5A            pop     edx
  00427BE2  |.  59            pop     ecx
  00427BE3  |.  59            pop     ecx
  00427BE4  |.  64:8910       mov     dword ptr fs:[eax], edx
  00427BE7  |.  68 017C4200   push    00427C01
  00427BEC  |>  8D45 F8       lea     eax, dword ptr [ebp-8]
  00427BEF  |.  BA 02000000   mov     edx, 2
  00427BF4  |.  E8 5FB9FDFF   call    00403558
  00427BF9  \.  C3            retn
  在00427B44处F2 设断点: F9运行:
  用户名输入:cracker
  注册号输入:kanghtta
  程序在00427B44处被断下,下面我们返回上面分析这段代码。
  
  我们输入的用户名为: cracker
            注册码为: AL6554L6N
  
  堆栈 ss:[0012F984]=00D259A8, (ASCII "AL6554L6N")
  eax=00000000
  跳转来自 00427ABC
  
  我们输入用户名为:kanghtta
          注册码为:6A56LYYY5
  堆栈 ss:[0012F984]=00D2599C, (ASCII "6A56LYYY5")
  eax=00000000
  跳转来自 00427ABC
  
   在00427B99处下断点 ,F7跟进,F4运行到00427AF6  |> \8B45 F4       mov     eax, dword ptr [ebp-C] 后
  在信息窗口就能看到由机器算出的注册码.由于时间有限,这个算法,等以后有时间分析出在写出来.先到这吧:
  
   以后随便输入用户名,, 例如,输入 用户名: GoodNight  按上述方法找到注册码:5L4A5YN6AA
  
  堆栈 ss:[0012F984]=00D2599C, (ASCII "5L4A5YN6AA")
  eax=00000000
  跳转来自 00427ABC
  
     哈哈,有点投机取巧,但由于刚开始学习,只要找到注册码就可以了吧!  该和大家说晚安了,
   
   注:由于刚开始学习算法分析,对这个题目的算法多多少少还有些地方不明白,但时间有限,明天还有软件工程呢!
  所以,我会抽时间多努力分析分析,希望我能尽快写出第一个注册机;
  
   
  
  
  
--------------------------------------------------------------------------------
【经验总结】
     在分析算法的时候,由于很多函数调用都是 Call  call   等等, 还是对我分析过程造成干扰,同时,通过这篇文章,也知
  道,其实找到关键不难,但对关键点进行分析,也就是算法分析,才是破解的难点.
    也不知道这样说对不对,但能够用计算机解决的问题,抽象度在高 ,也有解法.
   
     希望自己能在这星期内分析好这篇文章的算法,并尝试着写写注册机,毕竟感觉这样得出的注册码,不算真正的掌握算法.
   
    望看雪的大哥们莫取笑,小弟不过菜鸟一只,也刚刚开始练习破文.
  
--------------------------------------------------------------------------------
【版权声明】: 本文原创于看雪技术论坛, 转载请注明作者并保持文章的完整, 谢谢!

                                                       2008年03月30日 下午 10:10:50

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

上传的附件:
收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 485
活跃值: (12)
能力值: ( LV9,RANK:490 )
在线值:
发帖
回帖
粉丝
2
支持一下,向你学习
2008-3-30 22:28
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我也学下!~嘿嘿
2008-3-30 23:19
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
强.....
2008-4-2 20:48
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
支持下。                                                                                                         

我下载看看
2008-4-4 10:23
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
支持下,我也下来学习学习
2008-4-4 10:36
0
游客
登录 | 注册 方可回帖
返回
//