首页
社区
课程
招聘
[原创]某商业软件算法分析-属于超级菜鸟级别
发表于: 2013-2-25 18:54 4413

[原创]某商业软件算法分析-属于超级菜鸟级别

2013-2-25 18:54
4413
那些客套话就不复制了、  

大牛飞过、因为这个确实很菜。不过也没办法偶就这水平

来看雪好几年了 从未发一帖。本来打算依然沉默,但无奈想升级这个软件却要收费而且还是二十几美元,为了节约只能冒犯了、

今天证明一下 我还是存在的  

一个PDF剪切的软件

软件本身没有壳

典型的注册码错误有提示框的,过程就省了,直接说算法

比较地方的段首
0040E5CC  /.  55            push    ebp      段首
0040E5CD  |.  8BEC          mov     ebp, esp
0040E5CF  |.  83C4 BC       add     esp, -44
0040E5D2  |.  53            push    ebx
0040E5D3  |.  56            push    esi
0040E5D4  |.  8BD8          mov     ebx, eax
0040E5D6  |.  BE D3CE6600   mov     esi, 0066CED3
0040E5DB  |.  B8 E0D06600   mov     eax, 0066D0E0
0040E5E0  |.  E8 5F3D2300   call    00642344
0040E5E5  |.  66:C745 E0 14>mov     word ptr [ebp-20], 14
0040E5EB  |.  33D2          xor     edx, edx
0040E5ED  |.  8955 FC       mov     dword ptr [ebp-4], edx
0040E5F0  |.  8D55 FC       lea     edx, dword ptr [ebp-4]
0040E5F3  |.  FF45 EC       inc     dword ptr [ebp-14]
0040E5F6  |.  8B83 18030000 mov     eax, dword ptr [ebx+318]
0040E5FC  |.  E8 47B21D00   call    005E9848
0040E601  |.  66:C745 E0 08>mov     word ptr [ebp-20], 8
0040E607  |.  837D FC 00    cmp     dword ptr [ebp-4], 0
0040E60B  |.  74 05         je      short 0040E612
0040E60D  |.  8B55 FC       mov     edx, dword ptr [ebp-4]           ;  edx=假码
0040E610  |.  EB 03         jmp     short 0040E615
0040E612  |>  8D56 1D       lea     edx, dword ptr [esi+1D]
0040E615  |>  8BC3          mov     eax, ebx
0040E617      E8 40040000   call    0040EA5C                         ;  关键call
0040E61C      84C0          test    al, al
0040E61E      75 67         jnz     short 0040E687
0040E620      66:C745 E0 20>mov     word ptr [ebp-20], 20
0040E626      8D56 1E       lea     edx, dword ptr [esi+1E]
0040E629      8D45 F8       lea     eax, dword ptr [ebp-8]
0040E62C      E8 97352400   call    00651BC8
0040E631  |.  FF45 EC       inc     dword ptr [ebp-14]
0040E634  |.  8B10          mov     edx, dword ptr [eax]
0040E636  |.  8B83 20030000 mov     eax, dword ptr [ebx+320]
0040E63C  |.  E8 37B21D00   call    005E9878
0040E641  |.  FF4D EC       dec     dword ptr [ebp-14]
0040E644  |.  8D45 F8       lea     eax, dword ptr [ebp-8]
0040E647  |.  BA 02000000   mov     edx, 2
0040E64C  |.  E8 D7362400   call    00651D28
0040E651  |.  6A 10         push    10
0040E653  |.  8D4E 5F       lea     ecx, dword ptr [esi+5F]
0040E656  |.  51            push    ecx
0040E657  |.  8D46 2C       lea     eax, dword ptr [esi+2C]
0040E65A  |.  50            push    eax
0040E65B  |.  8BC3          mov     eax, ebx
0040E65D  |.  E8 FA181E00   call    005EFF5C
0040E662  |.  50            push    eax                              ; |hOwner
0040E663  |.  E8 08762500   call    <jmp.&USER32.MessageBoxA>        ; \提示错误对话框
0040E668  |.  FF4D EC       dec     dword ptr [ebp-14]
0040E66B  |.  8D45 FC       lea     eax, dword ptr [ebp-4]
0040E66E  |.  BA 02000000   mov     edx, 2
0040E673  |.  E8 B0362400   call    00651D28
0040E678  |.  8B4D D0       mov     ecx, dword ptr [ebp-30]
0040E67B  |.  64:890D 00000>mov     dword ptr fs:[0], ecx
0040E682  |.  E9 9F000000   jmp     0040E726

从上面的关键call跟进
下面的是关键的算法call

0040EA5C  /$  53            push    ebx
0040EA5D  |.  56            push    esi
0040EA5E  |.  57            push    edi
0040EA5F  |.  8BDA          mov     ebx, edx
0040EA61  |.  85DB          test    ebx, ebx                         ;  edx=假码  ebx=假码
0040EA63  |.  74 0C         je      short 0040EA71
0040EA65  |.  53            push    ebx
0040EA66  |.  E8 01342300   call    00641E6C                         ;  应该是获取输入字符串长度call
0040EA6B  |.  59            pop     ecx
0040EA6C  |.  83F8 10       cmp     eax, 10                          ;  eax=字符串长度
0040EA6F  |.  74 04         je      short 0040EA75                   ;  字符长度为16时才跳转
0040EA71  |>  33C0          xor     eax, eax
0040EA73  |.  EB 2F         jmp     short 0040EAA4
0040EA75  |>  0FBE73 02     movsx   esi, byte ptr [ebx+2]            ;  取输入假码第三位ascii 有符号数扩展 esi=00000033
0040EA79  |.  8BC6          mov     eax, esi                         ;  eax=00000033  esi=00000033
0040EA7B  |.  0FBE7B 08     movsx   edi, byte ptr [ebx+8]            ;  取假码第九位 edi=00000039
0040EA7F  |.  03C7          add     eax, edi                         ;  eax等于第三位ascii 加 第九位ascii
0040EA81  |.  3D 9B000000   cmp     eax, 9B                          ;  第三位ascii、第九位ascii和要等于9b
0040EA86  |.  75 1A         jnz     short 0040EAA2                   ;  不等就会提示错误
0040EA88  |.  8BCE          mov     ecx, esi                         ;  esi=00000033 ecx=假码 执行语句后ecx=00000033
0040EA8A  |.  2BCF          sub     ecx, edi                         ;  ecx=00000033 edi=00000039 执行后ecx=FFFFFFFA
0040EA8C  |.  8BC1          mov     eax, ecx                         ;  eax=0000006c 执行后eax=FFFFFFFA
0040EA8E  |.  99            cdq                                      ;  执行后EDX=FFFFFFFF
0040EA8F  |.  33C2          xor     eax, edx                         ;  执行后eax=00000005
0040EA91  |.  2BC2          sub     eax, edx                         ;  eax=00000005 edx=FFFFFFFF 执行后eax=00000006
0040EA93  |.  83C0 41       add     eax, 41                          ;  eax=00000006 相加 执行后eax=00000047
0040EA96  |.  0FBE53 05     movsx   edx, byte ptr [ebx+5]            ;  取第六位 edx=00000036
0040EA9A  |.  3BC2          cmp     eax, edx                         ;  eax和edx相比
0040EA9C  |.  75 04         jnz     short 0040EAA2                   ;  不等则跳转到错误
0040EA9E  |.  B0 01         mov     al, 1                            ;  执行后eax=00000001
0040EAA0  |.  EB 02         jmp     short 0040EAA4
0040EAA2  |>  33C0          xor     eax, eax
0040EAA4  |>  5F            pop     edi
0040EAA5  |.  5E            pop     esi
0040EAA6  |.  5B            pop     ebx
0040EAA7  \.  C3            retn

注释的很清楚了 我感觉。上面关键算法里 这种颜色的全部改成相反的,就可以爆破了!
有人可能觉得改
0040E61C      84C0          test    al, al
0040E61E      75 67         jnz     short 0040E687
也可以
不过要是这个call其他验证的地方也校验了,就不行了

大概算法分析了一下

要求注册码必须为十六位
第三位ascii 加 第九位ascii =0x9B
第三位 减 第九位 =X
X  异或 0xFFFF =Y
Y  减   0xFFFF =Z
Z  加   0x41  =P
取第六位的ascii
要求 第六位的ascii=P 则为正确的注册码。

本来想用VB写个注册机来着,但是无奈水平不是一般的差,搞了大半天也没搞好就忍了了
有不当之处还请见谅。

                                                                          bingo      2013.02.25

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

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 166
活跃值: (42)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
请楼主放出此软件的地址,方便大家学习。。顶
2013-2-25 19:35
0
雪    币: 8
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
这个是什么商业软件来的?
2013-3-10 17:06
0
雪    币: 517
活跃值: (35)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
4
按照你的描述,似乎只需要满足两个条件即可:
1、s3+s9=0x9B
2、s3-s9的绝对值+0x41=s6.

那么,VB写注册机就那么的难么?
2013-3-10 20:27
0
游客
登录 | 注册 方可回帖
返回
//