首页
社区
课程
招聘
对一个右脑开发软件的不完全的初步分析
发表于: 2011-7-11 23:15 5783

对一个右脑开发软件的不完全的初步分析

2011-7-11 23:15
5783
一个专门用于开发和锻炼右脑的软件(名字就不说了)下载地址 http://www.fksd3.com/fksd2.rar。我最近因为待业家中闲的无事,便拿起工具开始玩已经停了几年的加密分析。本来想自己好几年没弄了再说又是菜鸟所以想找个软柿子捏一下鼓舞自己的信心所以找了一个不太有人用并且坐着好几年没有更新的软件。哈哈,哪知道我有眼不识泰山且不说软件本身功能怎么怎么地,但他的加密技术可不是一般地。断断续续搞了快一个礼拜虽然最终结果是失败但是在解密分析的过程中我还是得到很多乐趣的。下面写一下我这个菜鸟折腾的经过。
        软件是绿色包装,目录里有2个执行文件一个是主程序vb写的用了一个不太常用的壳不过很好脱,另一个是注册校验的程序是用upx压缩的delphi程序。脱壳之后用od载入主程序发觉运行不正常而且也不能正常弹出要求注册的窗口,然后又试了通过附加的方式载入程序,od出现异常 C000001E (INVALID LOCK SEQUENCE)忽略之后出现“不知如何回避位于地址01E7B693的命令请尝试更新eip或忽略程序异常”报错估计是主程序用了反调试的技术。我不甘心就这样放弃下载安装了syser但是实在太菜很快放弃,然后又安装了smartcheck也不能运行接着是VBExplorer和 vb_decompiler_pro这两个反编译软件,可能是对中午支持不好也放都弃了。到此看来爆破是不行了,只有去研究那个delphi写的注册校验程序了结果那些犹如天书般得汇编代码让我差点晕倒在电脑前最终也无功而返,不过我对这个程序倒也分析出了点头绪。
主程序运行之后提示要注册,点击注册按钮启动注册验证程序输入用户名和密码用od跟踪发现程序对输入的序列号进行5次验证前两次是验证用户和密码是否为空,第三次验证序列号的前8位这个数字和机器的硬件码对应。第四次和第三次用的是一样的call但是对应的序列号每次都在变我还没弄懂。第五次可能是序列号长度的验证。我通过改od代码的方式成功运行到弹出”注册成功请重启程序“。但是主程序启动还是提示注册。注册验证程序会在res的目录下 产生一个 lhg.lc文件里面是经过加密的序列号等信息。程序的关键算法我觉得是在这里:
00466C12  |.  E8 4D25FAFF   call    00409164                         ;  产生随机序列号的过程是关键的地方
00466C17  |.  8B55 A4       mov     edx, dword ptr [ebp-5C]
00466C1A  |.  8B45 E0       mov     eax, dword ptr [ebp-20]
00466C1D  |.  E8 72E4F9FF   call    00405094               ;这个是比较序列号的call

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
00409164  /$  55            push    ebp
00409165  |.  8BEC          mov     ebp, esp
00409167  |.  83F8 20       cmp     eax, 20
0040916A  |.  7E 02         jle     short 0040916E
0040916C  |.  31C0          xor     eax, eax
0040916E  |>  56            push    esi
0040916F  |.  89E6          mov     esi, esp
00409171  |.  83EC 20       sub     esp, 20
00409174  |.  B9 10000000   mov     ecx, 10
00409179  |.  52            push    edx
0040917A  |.  89C2          mov     edx, eax
0040917C  |.  8D45 08       lea     eax, dword ptr [ebp+8]
0040917F  |.  E8 C4FEFFFF   call    00409048    ;  进入这里
00409184  |.  89F2          mov     edx, esi
00409186  |.  58            pop     eax
00409187  |.  E8 ECBBFFFF   call    00404D78
0040918C  |.  83C4 20       add     esp, 20
0040918F  |.  5E            pop     esi
00409190  |.  5D            pop     ebp
00409191  \.  C2 0800       retn    8

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
00409048  /$  08C9          or      cl, cl
0040904A  |.  75 30         jnz     short 0040907C
0040904C  |.  B9 0A000000   mov     ecx, 0A
00409051  |.  F740 04 00000>test    dword ptr [eax+4], 80000000
00409058  |.  74 22         je      short 0040907C
0040905A  |.  FF70 04       push    dword ptr [eax+4]
0040905D  |.  FF30          push    dword ptr [eax]
0040905F  |.  89E0          mov     eax, esp
00409061  |.  F71C24        neg     dword ptr [esp]
00409064  |.  835424 04 00  adc     dword ptr [esp+4], 0
00409069  |.  F75C24 04     neg     dword ptr [esp+4]
0040906D  |.  E8 0A000000   call    0040907C             ; 这里
00409072  |.  C646 FF 2D    mov     byte ptr [esi-1], 2D
00409076  |.  4E            dec     esi
00409077  |.  41            inc     ecx
00409078  |.  83C4 08       add     esp, 8
0040907B  |.  C3            retn

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
下面是不是最关键的算法呢?
0040907C  |$  56            push    esi
0040907D  |.  83EC 04       sub     esp, 4
00409080  |.  D97C24 02     fstcw   word ptr [esp+2]
00409084  |.  D93C24        fstcw   word ptr [esp]
00409087  |.  66:810C24 000>or      word ptr [esp], 0F00
0040908D  |.  D92C24        fldcw   word ptr [esp]
00409090  |.  66:890C24     mov     word ptr [esp], cx
00409094  |.  D9E8          fld1
00409096  |.  F740 04 00000>test    dword ptr [eax+4], 80000000
0040909D  |.  74 27         je      short 004090C6
0040909F  |.  FF70 04       push    dword ptr [eax+4]
004090A2  |.  FF30          push    dword ptr [eax]
004090A4  |.  816424 04 FFF>and     dword ptr [esp+4], 7FFFFFFF
004090AC  |.  68 FFFFFF7F   push    7FFFFFFF
004090B1  |.  68 FFFFFFFF   push    -1
004090B6  |.  DF6C24 08     fild    qword ptr [esp+8]
004090BA  |.  DF2C24        fild    qword ptr [esp]
004090BD  |.  D8C2          fadd    st, st(2)
004090BF  |.  DEC1          faddp   st(1), st
004090C1  |.  83C4 10       add     esp, 10
004090C4  |.  EB 02         jmp     short 004090C8
004090C6  |>  DF28          fild    qword ptr [eax]
004090C8  |>  DF0424        fild    word ptr [esp]
004090CB  |.  D9C1          fld     st(1)
004090CD  |>  4E            /dec     esi
004090CE  |.  D9F8          |fprem
004090D0  |.  DF1C24        |fistp   word ptr [esp]
004090D3  |.  DCF9          |fdiv    st(1), st
004090D5  |.  8A0424        |mov     al, byte ptr [esp]
004090D8  |.  04 30         |add     al, 30
004090DA  |.  3C 3A         |cmp     al, 3A
004090DC  |.  72 02         |jb      short 004090E0
004090DE  |.  04 07         |add     al, 7
004090E0  |>  8806          |mov     byte ptr [esi], al
004090E2  |.  D9C1          |fld     st(1)
004090E4  |.  D8D3          |fcom    st(3)
004090E6  |.  9B            |wait
004090E7  |.  DFE0          |fstsw   ax
004090E9  |.  9E            |sahf
004090EA  |.^ 73 E1         \jnb     short 004090CD
004090EC  |.  D96C24 02     fldcw   word ptr [esp+2]
004090F0  |.  83C4 04       add     esp, 4
004090F3  |.  DDC3          ffree   st(3)
004090F5  |.  DDC2          ffree   st(2)
004090F7  |.  DDC1          ffree   st(1)
004090F9  |.  DDC0          ffree   st
004090FB  |.  59            pop     ecx
004090FC  |.  29F1          sub     ecx, esi
004090FE  |.  29CA          sub     edx, ecx
00409100  |.  76 10         jbe     short 00409112
00409102  |.  29D6          sub     esi, edx
00409104  |.  B0 30         mov     al, 30
00409106  |.  01D1          add     ecx, edx
00409108  |.  EB 03         jmp     short 0040910D
0040910A  |>  880432        /mov     byte ptr [edx+esi], al
0040910D  |>  4A             dec     edx
0040910E  |.^ 75 FA         \jnz     short 0040910A
00409110  |.  8806          mov     byte ptr [esi], al
00409112  \>  C3            retn

~~~~~~~~~~~~~~~~~~

呵呵  本人水平也只有这点了。坛里有哪位高人有闲帮忙指点一下给我一点信心吧  谢谢了!

[招生]系统0day安全班,企业级设备固件漏洞挖掘,Linux平台漏洞挖掘!

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 2105
活跃值: (424)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
这个程序被偷掉了一段代码,这段代码由输入的注册码用DES解密得到。 要Keygen得有一组正确的KEY
2011-7-12 09:44
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
请问你是用什么分析的呢?论坛果然高手多
2011-7-12 10:01
0
雪    币: 168
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
如果这样的话,跟出注册码是不可能的了
2011-7-12 10:08
0
雪    币: 2105
活跃值: (424)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
有一组正确的KEY的话,还是有可能keygen的
2011-7-12 10:15
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
难道通过他的序列号生成算法就没法得知序列号了吗?急人啊
2011-7-12 10:31
0
雪    币: 386
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
序列号分组比较,很复杂吧
2011-7-12 11:00
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
keygen没希望了,大牛们给点爆破的思路吧
2011-7-12 11:39
0
雪    币: 202
活跃值: (61)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
没有试用版的么?
2011-7-12 11:59
0
雪    币: 79
活跃值: (40)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
10
功能代码都偷了...如何爆破...楼主想多了
2011-7-12 14:31
0
雪    币: 205
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
请问各位大虾 ,如何得知这个代码被偷了呢?请赐教,先谢谢了
2011-7-12 21:52
0
游客
登录 | 注册 方可回帖
返回
// // 统计代码