首页
社区
课程
招聘
Easy Sticky Note 算法分析
发表于: 2005-10-7 14:31 3982

Easy Sticky Note 算法分析

2005-10-7 14:31
3982
文章作者:xsy3660

软件介绍:
   Easy Sticky Note 是一个记录和提醒的电子便条工具软件,能像桌面便条那样“贴”在你的桌面上。软件可以设置便条平时处于隐藏状态,然后在指定时间跳出提醒。
   本人使用时觉得较好,当提示事件字符串较长时不会出现有部分不能看到的情况。

分析过程:
   国庆结束最后一天,返回无事,拿一软柿子看了看。
   PEID查看,无壳,Microsoft Visual C++ 6.0。哈哈,太好了!OD载入,查看字符串,好家伙,有“Registration finished, thank for your registration!",双击,往上看看,有一跳转(40BEC4),暴破的话就是它了(不过还有启动验证的啦!)!算法也看了看,过程好下:

0040BD68    53        push ebx
0040BD69    55        push ebp
0040BD6A    56        push esi
0040BD6B    8BF1      mov esi,ecx
0040BD6D    57        push edi
0040BD6E    8B86 7001>mov eax,dword ptr ds:[esi+170]
0040BD74    83F8 02   cmp eax,2
0040BD77    0F8F E801>jg StickyNo.0040BF65
0040BD7D    40        inc eax
0040BD7E    6A 01     push 1
0040BD80    8986 7001>mov dword ptr ds:[esi+170],eax
0040BD86    E8 382102>call StickyNo.0042DEC3
0040BD8B    8D86 6001>lea eax,dword ptr ds:[esi+160]
0040BD91    8DBE 5C01>lea edi,dword ptr ds:[esi+15C]
0040BD97    50        push eax
0040BD98    8D4C24 1C lea ecx,dword ptr ss:[esp+1C]
0040BD9C    57        push edi
0040BD9D    51        push ecx
0040BD9E    E8 C73902>call StickyNo.0042F76A
0040BDA3    8D96 6401>lea edx,dword ptr ds:[esi+164]
0040BDA9    33DB      xor ebx,ebx
0040BDAB    52        push edx
0040BDAC    50        push eax
0040BDAD    8D4424 1C lea eax,dword ptr ss:[esp+1C]
0040BDB1    895C24 34 mov dword ptr ss:[esp+34],ebx
0040BDB5    50        push eax
0040BDB6    E8 AF3902>call StickyNo.0042F76A
0040BDBB    8D8E 6801>lea ecx,dword ptr ds:[esi+168]
0040BDC1    8D5424 10 lea edx,dword ptr ss:[esp+10]
0040BDC5    51        push ecx
0040BDC6    50        push eax
0040BDC7    52        push edx
0040BDC8    C64424 38>mov byte ptr ss:[esp+38],1
0040BDCD    E8 983902>call StickyNo.0042F76A            //以上四个call为分别获取假码的四段
0040BDD2    50        push eax
0040BDD3    8BCF      mov ecx,edi
0040BDD5    C64424 30>mov byte ptr ss:[esp+30],2
0040BDDA    E8 953802>call StickyNo.0042F674
0040BDDF    8D4C24 10 lea ecx,dword ptr ss:[esp+10]
0040BDE3    C64424 2C>mov byte ptr ss:[esp+2C],1
0040BDE8    E8 4E3702>call StickyNo.0042F53B
0040BDED    8D4C24 14 lea ecx,dword ptr ss:[esp+14]
0040BDF1    885C24 2C mov byte ptr ss:[esp+2C],bl
0040BDF5    E8 413702>call StickyNo.0042F53B
0040BDFA    8D4C24 18 lea ecx,dword ptr ss:[esp+18]
0040BDFE    C74424 2C>mov dword ptr ss:[esp+2C],-1
0040BE06    E8 303702>call StickyNo.0042F53B
0040BE0B    68 206945>push StickyNo.00456920
0040BE10    8D4C24 14 lea ecx,dword ptr ss:[esp+14]
0040BE14    E8 903702>call StickyNo.0042F5A9
0040BE19    8DAE 5801>lea ebp,dword ptr ds:[esi+158]
0040BE1F    8D4424 18 lea eax,dword ptr ss:[esp+18]
0040BE23    BB 030000>mov ebx,3
0040BE28    55        push ebp
0040BE29    50        push eax
0040BE2A    B9 486A45>mov ecx,StickyNo.00456A48
0040BE2F    895C24 34 mov dword ptr ss:[esp+34],ebx
0040BE33    E8 28F4FF>call StickyNo.0040B260           // 取出注册名的前二位(大写)与字符串

“wefwfrw3rf32wasfaf“相连后记为n1
0040BE38    50        push eax
0040BE39    8D4C24 14 lea ecx,dword ptr ss:[esp+14]
0040BE3D    C64424 30>mov byte ptr ss:[esp+30],4
0040BE42    E8 2D3802>call StickyNo.0042F674
0040BE47    8D4C24 18 lea ecx,dword ptr ss:[esp+18]
0040BE4B    885C24 2C mov byte ptr ss:[esp+2C],bl
0040BE4F    E8 E73602>call StickyNo.0042F53B
0040BE54    8B4424 10 mov eax,dword ptr ss:[esp+10]      // n1给eax
0040BE58    8B48 F8   mov ecx,dword ptr ds:[eax-8]       // n1位数给ecx
0040BE5B    51        push ecx
0040BE5C    8D4C24 18 lea ecx,dword ptr ss:[esp+18]      // 注册名前二位
0040BE60    50        push eax
0040BE61    51        push ecx
0040BE62    E8 19A2FF>call StickyNo.00406080             // 用n1进行D5算法,得到真码,跟进1
0040BE67    83C4 0C   add esp,0C
0040BE6A    50        push eax
0040BE6B    8D4C24 14 lea ecx,dword ptr ss:[esp+14]
0040BE6F    C64424 30>mov byte ptr ss:[esp+30],5
0040BE74    E8 FB3702>call StickyNo.0042F674
0040BE79    8D4C24 14 lea ecx,dword ptr ss:[esp+14]
0040BE7D    885C24 2C mov byte ptr ss:[esp+2C],bl
0040BE81    E8 B53602>call StickyNo.0042F53B
0040BE86    8D5424 1C lea edx,dword ptr ss:[esp+1C]
0040BE8A    6A 10     push 10
0040BE8C    52        push edx
0040BE8D    8D4C24 18 lea ecx,dword ptr ss:[esp+18]
0040BE91    E8 65D201>call StickyNo.004290FB
0040BE96    50        push eax
0040BE97    8D4C24 14 lea ecx,dword ptr ss:[esp+14]
0040BE9B    C64424 30>mov byte ptr ss:[esp+30],6
0040BEA0    E8 CF3702>call StickyNo.0042F674
0040BEA5    8D4C24 1C lea ecx,dword ptr ss:[esp+1C]
0040BEA9    885C24 2C mov byte ptr ss:[esp+2C],bl
0040BEAD    E8 893602>call StickyNo.0042F53B
0040BEB2    8B07      mov eax,dword ptr ds:[edi]            // 取假码
0040BEB4    50        push eax
0040BEB5    8B4424 14 mov eax,dword ptr ss:[esp+14]         //真码
0040BEB9    50        push eax
0040BEBA    E8 69F600>call StickyNo.0041B528                //真假比较,等则返回0
0040BEBF    83C4 08   add esp,8
0040BEC2    85C0      test eax,eax
0040BEC4    75 53     jnz short StickyNo.0040BF19
0040BEC6    83CB FF   or ebx,FFFFFFFF
0040BEC9    8D4C24 10 lea ecx,dword ptr ss:[esp+10]
0040BECD    895C24 2C mov dword ptr ss:[esp+2C],ebx
0040BED1    E8 653602>call StickyNo.0042F53B
0040BED6    8D4C24 1C lea ecx,dword ptr ss:[esp+1C]
0040BEDA    51        push ecx
0040BEDB    B9 486A45>mov ecx,StickyNo.00456A48
0040BEE0    E8 0BF5FF>call StickyNo.0040B3F0
0040BEE5    8B00      mov eax,dword ptr ds:[eax]
0040BEE7    6A 40     push 40
0040BEE9    50        push eax
0040BEEA    68 941E45>push StickyNo.00451E94                  ; ASCII "Registration finished,

thank for your registration!"
0040BEEF    8BCE      mov ecx,esi
0040BEF1    C74424 38>mov dword ptr ss:[esp+38],7
0040BEF9    E8 CF1702>call StickyNo.0042D6CD
0040BEFE    8D4C24 1C lea ecx,dword ptr ss:[esp+1C]
0040BF02    895C24 2C mov dword ptr ss:[esp+2C],ebx
0040BF06    E8 303602>call StickyNo.0042F53B
0040BF0B    57        push edi
0040BF0C    55        push ebp
0040BF0D    B9 486A45>mov ecx,StickyNo.00456A48
0040BF12    E8 E9F1FF>call StickyNo.0040B100
0040BF17    EB 45     jmp short StickyNo.0040BF5E
0040BF19    83CF FF   or edi,FFFFFFFF
0040BF1C    8D4C24 10 lea ecx,dword ptr ss:[esp+10]
0040BF20    897C24 2C mov dword ptr ss:[esp+2C],edi
0040BF24    E8 123602>call StickyNo.0042F53B
0040BF29    8D5424 20 lea edx,dword ptr ss:[esp+20]
0040BF2D    B9 486A45>mov ecx,StickyNo.00456A48
0040BF32    52        push edx
0040BF33    E8 B8F4FF>call StickyNo.0040B3F0
0040BF38    8B00      mov eax,dword ptr ds:[eax]
0040BF3A    6A 10     push 10
0040BF3C    50        push eax
0040BF3D    68 581E45>push StickyNo.00451E58      ; ASCII "Registration failed, please check the

code and try again!"
0040BF42    8BCE      mov ecx,esi
0040BF44    C74424 38>mov dword ptr ss:[esp+38],8
0040BF4C    E8 7C1702>call StickyNo.0042D6CD

----------------------------------------------------------------------
跟进1
00406099    8B7424 7C mov esi,dword ptr ss:[esp+7C]
0040609D    57        push edi
0040609E    8B7C24 7C mov edi,dword ptr ss:[esp+7C]
004060A2    6A 00     push 0
004060A4    56        push esi
004060A5    57        push edi
004060A6    C74424 14>mov dword ptr ss:[esp+14],0
004060AE    E8 B63602>call StickyNo.00429769
004060B3    8D4C24 0C lea ecx,dword ptr ss:[esp+C]      ; 假码
004060B7    E8 A40A00>call StickyNo.00406B60            ; 取MD5常数
004060BC    56        push esi
004060BD    57        push edi
004060BE    8D4C24 14 lea ecx,dword ptr ss:[esp+14]
004060C2    C74424 78>mov dword ptr ss:[esp+78],0
004060CA    E8 810C00>call StickyNo.00406D50
004060CF    8B7424 78 mov esi,dword ptr ss:[esp+78]
004060D3    8D4C24 0C lea ecx,dword ptr ss:[esp+C]
004060D7    56        push esi
004060D8    E8 130B00>call StickyNo.00406BF0            ; 取得真码,跟进2
004060DD    8B4C24 68 mov ecx,dword ptr ss:[esp+68]
004060E1    8BC6      mov eax,esi
004060E3    5F        pop edi
004060E4    5E        pop esi
004060E5    64:890D 0>mov dword ptr fs:[0],ecx
004060EC    83C4 6C   add esp,6C
004060EF    C3        retn

------------------------------------------------------------------------------
跟进2
00406C7C    897C24 3C       mov dword ptr ss:[esp+3C],edi
00406C80    B3 02           mov bl,2
00406C82    8B15 682A4500   mov edx,dword ptr ds:[452A68]     ; StickyNo.00452A7C
00406C88    895424 0C       mov dword ptr ss:[esp+C],edx
00406C8C    8A4434 24       mov al,byte ptr ss:[esp+esi+24]   ; 依次取真码中的值相连,至到16为止
00406C90    885C24 3C       mov byte ptr ss:[esp+3C],bl
00406C94    84C0            test al,al
00406C96    75 2C           jnz short StickyNo.00406CC4
00406C98    68 E0114500     push StickyNo.004511E0            ; ASCII "00"
00406C9D    8D4C24 18       lea ecx,dword ptr ss:[esp+18]
00406CA1    E8 03890200     call StickyNo.0042F5A9
00406CA6    50              push eax
00406CA7    8D4C24 10       lea ecx,dword ptr ss:[esp+10]
00406CAB    C64424 40 03    mov byte ptr ss:[esp+40],3
00406CB0    E8 BF890200     call StickyNo.0042F674
00406CB5    8D4C24 14       lea ecx,dword ptr ss:[esp+14]
00406CB9    885C24 3C       mov byte ptr ss:[esp+3C],bl
00406CBD    E8 79880200     call StickyNo.0042F53B
00406CC2    EB 2E           jmp short StickyNo.00406CF2
00406CC4    3C 0F           cmp al,0F
00406CC6    77 12           ja short StickyNo.00406CDA
00406CC8    25 FF000000     and eax,0FF
00406CCD    50              push eax
00406CCE    8D4424 10       lea eax,dword ptr ss:[esp+10]
00406CD2    68 DC114500     push StickyNo.004511DC            ; ASCII "0%x"
00406CD7    50              push eax
00406CD8    EB 10           jmp short StickyNo.00406CEA
00406CDA    25 FF000000     and eax,0FF
00406CDF    8D4C24 0C       lea ecx,dword ptr ss:[esp+C]
00406CE3    50              push eax
00406CE4    68 D8114500     push StickyNo.004511D8            ; ASCII "%x"
00406CE9    51              push ecx
00406CEA    E8 2C280200     call StickyNo.0042951B            
00406CEF    83C4 0C         add esp,0C
00406CF2    8D5424 0C       lea edx,dword ptr ss:[esp+C]
00406CF6    8D4C24 10       lea ecx,dword ptr ss:[esp+10]
00406CFA    52              push edx
00406CFB    E8 3E8C0200     call StickyNo.0042F93E
00406D00    8D4C24 0C       lea ecx,dword ptr ss:[esp+C]
00406D04    C64424 3C 01    mov byte ptr ss:[esp+3C],1
00406D09    E8 2D880200     call StickyNo.0042F53B
00406D0E    46              inc esi                           //循环次数
00406D0F    83FE 10         cmp esi,10                        //是否为第16次
00406D12  ^ 0F8C 6AFFFFFF   jl StickyNo.00406C82
00406D18    8B7424 44       mov esi,dword ptr ss:[esp+44]

-------------------------------------------------------
真假比较:
0041B549    6A 19     push 19
0041B54B    E8 AA3200>call StickyNo.0041E7FA
0041B550    8B75 0C   mov esi,dword ptr ss:[ebp+C]      ; 假码
0041B553    8B7D 08   mov edi,dword ptr ss:[ebp+8]      ; 假码
0041B556    59        pop ecx
0041B557    66:0FB60F movzx cx,byte ptr ds:[edi]        ; 依次取真码
0041B55B    0FB6C1    movzx eax,cl                      ;给eax
0041B55E    47        inc edi                           ;加1
0041B55F    894D 0C   mov dword ptr ss:[ebp+C],ecx
0041B562    F680 A1A1>test byte ptr ds:[eax+45A1A1],4
0041B569    74 16     je short StickyNo.0041B581
0041B56B    8A07      mov al,byte ptr ds:[edi]
0041B56D    84C0      test al,al
0041B56F    75 06     jnz short StickyNo.0041B577
0041B571    8365 0C 0>and dword ptr ss:[ebp+C],0
0041B575    EB 0A     jmp short StickyNo.0041B581
0041B577    33D2      xor edx,edx
0041B579    47        inc edi
0041B57A    8AF1      mov dh,cl
0041B57C    8AD0      mov dl,al
0041B57E    8955 0C   mov dword ptr ss:[ebp+C],edx
0041B581    66:0FB61E movzx bx,byte ptr ds:[esi]        ; 依次取假码
0041B585    0FB6C3    movzx eax,bl
0041B588    46        inc esi
0041B589    F680 A1A1>test byte ptr ds:[eax+45A1A1],4
0041B590    74 13     je short StickyNo.0041B5A5
0041B592    8A06      mov al,byte ptr ds:[esi]
0041B594    84C0      test al,al
0041B596    75 04     jnz short StickyNo.0041B59C
0041B598    33DB      xor ebx,ebx
0041B59A    EB 09     jmp short StickyNo.0041B5A5
0041B59C    33C9      xor ecx,ecx
0041B59E    46        inc esi
0041B59F    8AEB      mov ch,bl
0041B5A1    8AC8      mov cl,al
0041B5A3    8BD9      mov ebx,ecx
0041B5A5    66:395D 0>cmp word ptr ss:[ebp+C],bx        ; 比较二者是否相等
0041B5A9    75 09     jnz short StickyNo.0041B5B4
0041B5AB    66:837D 0>cmp word ptr ss:[ebp+C],0
0041B5B0    74 16     je short StickyNo.0041B5C8
0041B5B2  ^ EB A3     jmp short StickyNo.0041B557
0041B5B4    6A 19     push 19

小结:
  1、取注册名的前二位(若是字母则变成大写)与wefwfrw3rf32wasfaf相连作为字符串进行MD5运算得串A
  2、从串A中取出16位得到真的注册码
  3、真注册码与输入的假比较。

注册名:xsy3660
注册码:fbf1fa4595c03ada

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

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 61
活跃值: (160)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
2
先来坐沙发
2005-10-7 14:43
0
雪    币: 254
活跃值: (96)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
3
学习中........
2005-10-7 15:07
0
雪    币: 234
活跃值: (370)
能力值: ( LV9,RANK:530 )
在线值:
发帖
回帖
粉丝
4
2005-10-7 18:51
0
雪    币: 269
活跃值: (51)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
先收藏,然后再学习.
2005-10-7 20:08
0
游客
登录 | 注册 方可回帖
返回
//