首页
社区
课程
招聘
[原创]软件安全中可能出现的问题
发表于: 2008-8-26 00:22 3226

[原创]软件安全中可能出现的问题

2008-8-26 00:22
3226
好久没有在看雪发表文章了 ,假期调试了两个软件,在此分享一下自己对于软件编写中思路得一点心得。
OK,软件有注册界面

输入正确得注册码,注册成功:)  ,不然就会

分析后发现加壳,壳在这不是重点,所以直接说脱壳后得分析
在超级字符串中发现有这样得一行
文本字串=software\microsoft\windows\currentversion\sesoftware\googleqqscan
初步估计会在注册表中写一个键值,而且有可能作为下次启动,判断是否注册得一个依据。再找
发现“请输入软件的序列号”
后面两步 下断点
运行软件,点击注册
,弹出,输入这注册码的对话框,随便输入:123456789
0048F683  |.  3C 01         cmp     al, 1
0048F685  |.  0F85 11010000 jnz     unpacked.0048F79C
0048F68B  |.  8D55 D4       lea     edx, [local.11]
0048F68E  |.  8B45 FC       mov     eax, [local.1]
0048F691  |.  E8 4694F7FF   call    unpacked.00408ADC
0048F696  |.  8B45 D4       mov     eax, [local.11]
0048F699  |.  E8 1297F7FF   call    unpacked.00408DB0
0048F69E  |.  8945 F0       mov     [local.4], eax
0048F6A1  |.  8955 F4       mov     [local.3], edx
0048F6A4  |.  6A 00         push    0
0048F6A6  |.  6A 49         push    49
0048F6A8  |.  8B45 F0       mov     eax, [local.4]
0048F6AB  |.  8B55 F4       mov     edx, [local.3]
0048F6AE  |.  E8 9D60F7FF   call    unpacked.00405750
0048F6B3  |.  8945 F0       mov     [local.4], eax
0048F6B6  |.  8955 F4       mov     [local.3], edx
0048F6B9  |.  8B45 F0       mov     eax, [local.4]
0048F6BC  |.  8B55 F4       mov     edx, [local.3]
0048F6BF  |.  2D E3C30B00   sub     eax, 0BC3E3
0048F6C4  |.  83DA 00       sbb     edx, 0

0048F6C7  |.  8945 F0       mov     [local.4], eax
0048F6CA  |.  8955 F4       mov     [local.3], edx
0048F6CD  |.  8D45 D8       lea     eax, [local.10]
0048F6D0  |.  E8 5FF0FFFF   call    unpacked.0048E734
0048F6D5  |.  8B45 D8       mov     eax, [local.10]
0048F6D8  |.  99            cdq
0048F6D9  |.  8945 E8       mov     [local.6], eax
0048F6DC  |.  8955 EC       mov     [local.5], edx
0048F6DF  |.  8B45 F0       mov     eax, [local.4]
0048F6E2  |.  8B55 F4       mov     edx, [local.3]
0048F6E5  |.  3B55 EC       cmp     edx, [local.5]
0048F6E8  |.  0F85 99000000 jnz     unpacked.0048F787   
0048F6EE  |.  3B45 E8       cmp     eax, [local.6]
0048F6F1  |.  0F85 90000000 jnz     unpacked.0048F787  ;  这个地方跳转到错误信息
{
0048F787  |> \6A 00         push    0
0048F789  |.  66:8B0D 70F84>mov     cx, word ptr ds:[48F870]
0048F790  |.  B2 01         mov     dl, 1
0048F792  |.  B8 ACF84800   mov     eax, unpacked.0048F8AC        ;  软件注册号误!
0048F797  |.  E8 EC4DFAFF   call    unpacked.00434588 ;弹出错误提示
}

这样就很明显了,0048F6F1  是一个判断走向的转折点也就是常说得爆破点。
我们再看
0048F6F7  |.  B2 01         mov     dl, 1
0048F6F9  |.  A1 98FF4500   mov     eax, dword ptr ds:[45FF98]
0048F6FE  |.  E8 9509FDFF   call    unpacked.00460098
0048F703  |.  8BF0          mov     esi, eax
0048F705  |.  BA 02000080   mov     edx, 80000002
0048F70A  |.  8BC6          mov     eax, esi
0048F70C  |.  E8 270AFDFF   call    unpacked.00460138
0048F711  |.  B1 01         mov     cl, 1
0048F713  |.  BA 1CF84800   mov     edx, unpacked.0048F81C           ;  software\microsoft\windows\currentversion\sesoftware\googleqqscan
0048F718  |.  8BC6          mov     eax, esi
0048F71A  |.  E8 7D0AFDFF   call    unpacked.0046019C
0048F71F  |.  84C0          test    al, al
0048F721  |.  74 0E         je      short unpacked.0048F731
0048F723  |.  33C9          xor     ecx, ecx
0048F725  |.  BA 68F84800   mov     edx, unpacked.0048F868           ;  gc_id
0048F72A  |.  8BC6          mov     eax, esi
0048F72C  |.  E8 DF0BFDFF   call    unpacked.00460310
0048F731  |>  8BC6          mov     eax, esi
0048F733  |.  E8 D009FDFF   call    unpacked.00460108
0048F738  |.  8BC6          mov     eax, esi
0048F73A  |.  E8 2942F7FF   call    unpacked.00403968
0048F73F  |.  6A 00         push    0
0048F741  |.  66:8B0D 70F84>mov     cx, word ptr ds:[48F870]
0048F748  |.  B2 02         mov     dl, 2
0048F74A  |.  B8 7CF84800   mov     eax, unpacked.0048F87C ;  软件登记注册成功!
0048F74F  |.  E8 344EFAFF   call    unpacked.00434588
0048F754  |.  33D2          xor     edx, edx
0048F756  |.  8B83 08030000 mov     eax, dword ptr ds:[ebx+308]
0048F75C  |.  8B08          mov     ecx, dword ptr ds:[eax]
0048F75E  |.  FF51 64       call    dword ptr ds:[ecx+64]
0048F761  |.  A1 142D4900   mov     eax, dword ptr ds:[492D14]
0048F766  |.  8B00          mov     eax, dword ptr ds:[eax]
0048F768  |.  8B80 04030000 mov     eax, dword ptr ds:[eax+304]
0048F76E  |.  BA 98F84800   mov     edx, unpacked.0048F898           ;  已注册版本
0048F773  |.  E8 64BAFAFF   call    unpacked.0043B1DC

到此,我们可以分析出软件得思路为
【获得用户注册码】-----> 变换处理函数 得到一个值a
【硬件号】----------->变换处理函数  得到一个值b
if(a == b)
{
    success();
    regwrite();
    .....  
}
else
{
    fail();
}
注册成功后,软件启动时,都会读取一个键值判断是否注册,当然这里就还有一个问题:别人监视注册表,完全可以发现你软件的这个小秘密,也是没有安全性可言的。
整套软件得注册思路就是这样,可以说这种注册方式太容易被破,这种方式即使用再厉害得加密算法,那也是白搭得:)
这是软件安全中弊端之一,后续,我们继续。逐渐完善自己在软件安全中可能遇到的问题的心得。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

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