首页
社区
课程
招聘
[分享]联创上网助手的简单分析
2005-11-3 23:47 12000

[分享]联创上网助手的简单分析

2005-11-3 23:47
12000
联创上网助手的简单分析

苏州大学独塾湖校区上网方式用的是802.1x拨号协议,不能用普通路由器实现共享上网,拨号软件是联创通信的宽带上网助手,其中加了反代理检测,不许系统有双网卡,不许有多个ip,也不许开代理服务器等违规产品,为了省上网费(1.2元/小时,强钱啊。。!但是网速很快,是10M的),我决定对它的程序开一开刀!

PEID查壳,无壳!!VC++7.0写的。看来联创通信比较小看我们学生,这么大胆,居然不加壳!(其实最不能让我忍受的是它的密码加密算法实在太简单,这么简单的算法还不加壳。。。。)

(一)破解反代理检测

废话不多说了,用OllyDBG载入,bp MessageBoxA下断点,运行,点连接,这是拨号成功,然后大概过了1秒,程序断在
00406EDD   |.  E8 5E1C0000          call Dot1xCli.00408B40                 ;  这个call是下线
00406EE2   |.  8B0D 2C9D4100        mov ecx,dword ptr ds:[419D2C]
00406EE8   |.  6A 00                push 0                                 ; /Style = MB_OK|MB_APPLMODAL
00406EEA   |.  68 684D4100          push Dot1xCli.00414D68                 ; |Title = "反代理激活!"
00406EEF   |.  8D4424 0C            lea eax,dword ptr ss:[esp+C]           ; |
00406EF3   |.  50                   push eax                               ; |Text
00406EF4   |.  51                   push ecx                               ; |hOwner => NULL
00406EF5   |.  FF15 20424100        call near dword ptr ds:[<&USER32.Messa>; \MessageBoxA ★断在这里!!
00406EFB   |.  81C4 84030000        add esp,384
00406F01   |.  C3                   retn


这里出现反代理检测的对话框,我们向下运行,alt+F9,来到
00407922    > \8B8424 74030000      mov eax,dword ptr ss:[esp+374]    ;  Case 475 of switch 00406F8A
 ★这个分支是反代理激活消息号是475
00407929    .  8B8C24 70030000      mov ecx,dword ptr ss:[esp+370]
00407930    .  8B9424 68030000      mov edx,dword ptr ss:[esp+368]
00407937    .  50                   push eax
00407938    .  51                   push ecx
00407939    .  68 75040000          push 475
0040793E    .  52                   push edx
0040793F    .  E8 4CF4FFFF          call Dot1xCli.00406D90            ;  这个call就是处理代码
00407944    .  83C4 10              add esp,10                        ;  返回这里★
00407947    .  5F                   pop edi
00407948    .  5E                   pop esi
00407949    .  8BC5                 mov eax,ebp
0040794B    .  5D                   pop ebp
0040794C    .  81C4 58030000        add esp,358
00407952    .  C2 1000              retn 10                           ;  这个分支就是处理的过程,我们直接跳过就行了

去掉这个分支,就可以破解了,但我们这里去找找它怎么发现我们有违规产品的。记下消息号为475,显然,程序用消息的方式来调用反代理激活。然后,点右键,选搜索,当前模块中的名称,然后选SendMessageA,选出消息号为475的
只有一个SendMessageA满足要求
00405FCA   |> \33FF                 xor edi,edi                       ;  这里判断是否有违规产品; Case 7C of switch 00405CDA
00405FCC   |.  E8 8FBCFFFF          call Dot1xCli.00401C60            ;  检测多网卡
00405FD1   |.  85C0                 test eax,eax
00405FD3   |.  75 05                jnz short Dot1xCli.00405FDA
00405FD5   |.  BF 01000000          mov edi,1                         ;  有多网卡edi+1
00405FDA   |>  E8 51B7FFFF          call Dot1xCli.00401730            ;  检测多ip地址
00405FDF   |.  85C0                 test eax,eax
00405FE1   |.  75 03                jnz short Dot1xCli.00405FE6
00405FE3   |.  83CF 02              or edi,2                          ;  多个ip地址edi+2
00405FE6   |>  833D C89D4100 14     cmp dword ptr ds:[419DC8],14      ;  检测proxy代理
00405FED   |.  7C 03                jl short Dot1xCli.00405FF2
00405FEF   |.  83CF 04              or edi,4                          ;  proxy代理edi+4
00405FF2   |>  833D CC9D4100 02     cmp dword ptr ds:[419DCC],2
00405FF9   |.  7C 03                jl short Dot1xCli.00405FFE
00405FFB   |.  83CF 05              or edi,5
00405FFE   |>  85FF                 test edi,edi                      ;  判断是否有违规产品
00406000   |.  C705 C89D4100 000000>mov dword ptr ds:[419DC8],0
0040600A   |.  C705 CC9D4100 000000>mov dword ptr ds:[419DCC],0
00406014   |.  0F84 CB010000        je Dot1xCli.004061E5              ;  没有,则不发消息,爆破点★改为jmp,爆破
0040601A   |.  8BB424 1C010000      mov esi,dword ptr ss:[esp+11C]
00406021   |.  55                   push ebp
00406022   |.  8B2D EC414100        mov ebp,dword ptr ds:[<&USER32.Ki>;  USER32.KillTimer
00406028   |.  68 F5010000          push 1F5                          ; /TimerID = 1F5 (501.)
0040602D   |.  56                   push esi                          ; |hWnd
0040602E   |.  FFD5                 call near ebp                     ; \KillTimer
00406030   |.  6A 7C                push 7C                           ; /TimerID = 7C (124.)
00406032   |.  56                   push esi                          ; |hWnd
00406033   |.  FFD5                 call near ebp                     ; \KillTimer
00406035   |.  57                   push edi                          ; /这里是哪种违规产品
00406036   |.  6A 00                push 0                            ; |wParam = 0
00406038   |.  68 75040000          push 475                          ; |检测到违规产品!!消息号为475
0040603D   |.  56                   push esi                          ; |发给自己
0040603E   |.  FF15 E4414100        call near dword ptr ds:[<&USER32.>; \SendMessageA ★就这一处消息号为475的


其中检测多网卡的方法是遍历系统中可用的网卡树目,超过一个就eax=1,这样,edi=edi+1,这样edi不为0,即有违规品,然后发送475消息,出现反代理激活。检测多个ip也是一样,遍历系统中的所以ip,超过一个edi=edi+2,然后就发送475消息。检测proxy代理就有点不太看得懂了,不太懂网络编程,可能按数据包来算的吧。反正我的系统开了proxy代理也不出现反代理激活,还有多个ip也是,我不太懂一块网卡能有多个ip??有网络方面的高手请指点一下,我的机器只出现过第一个分支。不管了,爆破点太多了。

这样,宽带上网助手就能容忍我们系统有双网卡了,有双网卡也就能共享上网了,方法不难,不是本文重点,就不提了。

(二)保存密码的算法
无意中看到linkageclientconfig.ini文件里有这么两行:
LastUserName=F02143879
Identify=2b1b4f3eb539abc0

所以可以肯定是可逆的算法保存密码的,而且文件这么暴露。。。。
od中下断点 bp GetPrivateProfileStringA
代码如下

00402C56   |.  50                  push eax                             ; /IniFileName
00402C57   |.  68 96000000         push 96                              ; |BufSize = 96 (150.)
00402C5C   |.  83C1 18             add ecx,18                           ; |
00402C5F   |.  51                  push ecx                             ; |用户名存放处
00402C60   |.  68 A2474100         push Dot1xCli.004147A2               ; |Default = ""
00402C65   |.  68 8C474100         push Dot1xCli.0041478C               ; |Key = "LastUserName"
00402C6A   |.  68 34484100         push Dot1xCli.00414834               ; |Section = "General"
00402C6F   |.  FFD6                call near esi                        ; \GetPrivateProfileStringA;读出用户名
00402C71   |.  33C0                xor eax,eax
00402C73   |.  8D5424 08           lea edx,dword ptr ss:[esp+8]
00402C77   |.  52                  push edx                             ; /IniFileName
00402C78   |.  68 2C010000         push 12C                             ; |BufSize = 12C (300.)
00402C7D   |.  B9 4B000000         mov ecx,4B                           ; |
00402C82   |.  8DBC24 D8000000     lea edi,dword ptr ss:[esp+D8]        ; |
00402C89   |.  F3:AB               rep stos dword ptr es:[edi]          ; |
00402C8B   |.  8D8424 D8000000     lea eax,dword ptr ss:[esp+D8]        ; |
00402C92   |.  50                  push eax                             ; |加密后的密码存放处
00402C93   |.  68 A2474100         push Dot1xCli.004147A2               ; |Default = ""
00402C98   |.  68 80474100         push Dot1xCli.00414780               ; |Key = "Identify"
00402C9D   |.  68 34484100         push Dot1xCli.00414834               ; |Section = "General"
00402CA2   |.  FFD6                call near esi                        ; \GetPrivateProfileStringA
00402CA4   |.  A1 3C9D4100         mov eax,dword ptr ds:[419D3C]
00402CA9   |.  8B48 04             mov ecx,dword ptr ds:[eax+4]
00402CAC   |.  85C9                test ecx,ecx
00402CAE   |.  74 40               je short Dot1xCli.00402CF0
00402CB0   |.  8D50 18             lea edx,dword ptr ds:[eax+18]
00402CB3   |.  8BC2                mov eax,edx
00402CB5   |.  8D70 01             lea esi,dword ptr ds:[eax+1]
00402CB8   |>  8A08                /mov cl,byte ptr ds:[eax]
00402CBA   |.  40                  |inc eax
00402CBB   |.  84C9                |test cl,cl
00402CBD   |.^ 75 F9               \jnz short Dot1xCli.00402CB8
00402CBF   |.  8D8C24 D0000000     lea ecx,dword ptr ss:[esp+D0]
00402CC6   |.  51                  push ecx
00402CC7   |.  2BC6                sub eax,esi
00402CC9   |.  50                  push eax
00402CCA   |.  52                  push edx
00402CCB   |.  E8 70F7FFFF         call Dot1xCli.00402440               ;  还原加密的密码★跟进

跟进后:解密代码
00402440   /$  81EC A8000000       sub esp,0A8
00402446   |.  56                  push esi
00402447   |.  8BB424 B8000000     mov esi,dword ptr ss:[esp+B8]
0040244E   |.  8BC6                mov eax,esi
00402450   |.  57                  push edi
00402451   |.  8D50 01             lea edx,dword ptr ds:[eax+1]
00402454   |>  8A08                /mov cl,byte ptr ds:[eax]
00402456   |.  40                  |inc eax
00402457   |.  84C9                |test cl,cl
00402459   |.^ 75 F9               \jnz short Dot1xCli.00402454
0040245B   |.  8B8C24 B4000000     mov ecx,dword ptr ss:[esp+B4]
00402462   |.  2BC2                sub eax,edx
00402464   |.  D1E8                shr eax,1
00402466   |.  8BF8                mov edi,eax
00402468   |.  8B8424 B8000000     mov eax,dword ptr ss:[esp+B8]
0040246F   |.  50                  push eax
00402470   |.  51                  push ecx
00402471   |.  8D5424 10           lea edx,dword ptr ss:[esp+10]
00402475   |.  52                  push edx
00402476   |.  E8 657D0000         call Dot1xCli.0040A1E0               ;  卡号md5存到12fa70
0040247B   |.  83C4 0C             add esp,0C
0040247E   |.  33C9                xor ecx,ecx
00402480   |.  85FF                test edi,edi
00402482   |.  7E 43               jle short Dot1xCli.004024C7
00402484   |.  53                  push ebx
00402485   |>  8A044E              /mov al,byte ptr ds:[esi+ecx*2]      ;  取第一个
00402488   |.  3C 39               |cmp al,39                           ;  比较是不是数字
0040248A   |.  0FBEC0              |movsx eax,al
0040248D   |.  7F 05               |jg short Dot1xCli.00402494
0040248F   |.  83E8 30             |sub eax,30                          ;  是则-30
00402492   |.  EB 03               |jmp short Dot1xCli.00402497
00402494   |>  83E8 57             |sub eax,57                          ;  不是-57
00402497   |>  8A544E 01           |mov dl,byte ptr ds:[esi+ecx*2+1]    ;  取第二个
0040249B   |.  C0E0 04             |shl al,4                            ;  第一个移4位
0040249E   |.  80FA 39             |cmp dl,39                           ;  和上面一样处理,只是不移位
004024A1   |.  88440C 1C           |mov byte ptr ss:[esp+ecx+1C],al
004024A5   |.  0FBED2              |movsx edx,dl
004024A8   |.  7F 05               |jg short Dot1xCli.004024AF
004024AA   |.  83EA 30             |sub edx,30
004024AD   |.  EB 03               |jmp short Dot1xCli.004024B2
004024AF   |>  83EA 57             |sub edx,57
004024B2   |>  8BD9                |mov ebx,ecx
004024B4   |.  83E3 0F             |and ebx,0F
004024B7   |.  0AC2                |or al,dl                            ;  前面两个加起来
004024B9   |.  32441C 0C           |xor al,byte ptr ss:[esp+ebx+C]      ;  与卡号的md5值xor(异或)
004024BD   |.  88440C 1C           |mov byte ptr ss:[esp+ecx+1C],al     ;  保存
004024C1   |.  41                  |inc ecx                             ;  指针后移
004024C2   |.  3BCF                |cmp ecx,edi                         ;  是否结束
004024C4   |.^ 7C BF               \jl short Dot1xCli.00402485          ;  没结束继续
004024C6   |.  5B                  pop ebx
004024C7   |>  8D4424 18           lea eax,dword ptr ss:[esp+18]
004024CB   |.  C6440C 18 00        mov byte ptr ss:[esp+ecx+18],0       ;  结尾加'\0'★这里就是密码
004024D0   |.  8BD6                mov edx,esi
004024D2   |.  8BC8                mov ecx,eax
004024D4   |.  5F                  pop edi
004024D5   |.  2BD1                sub edx,ecx
004024D7   |.  5E                  pop esi
004024D8   |>  8A08                /mov cl,byte ptr ds:[eax]
004024DA   |.  880C02              |mov byte ptr ds:[edx+eax],cl
004024DD   |.  40                  |inc eax
004024DE   |.  84C9                |test cl,cl
004024E0   |.^ 75 F6               \jnz short Dot1xCli.004024D8
004024E2   |.  B8 01000000         mov eax,1
004024E7   |.  81C4 A8000000       add esp,0A8
004024ED   \.  C3                  retn

密码每2位为一组,如果>39就-57,否则-30.转换成数字,或字母。然后与卡号的MD5值异或,得到密码。安全起见,程序就不写了。
如此简单的加密,而且不加壳,可见联创公司对我们上网用户的态度!

BY 海风月影
Greets to you all!

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

收藏
点赞7
打赏
分享
最新回复 (9)
雪    币: 337
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
nbw 24 2005-11-3 23:54
2
0
好久没见到你来了。顶一下。
雪    币: 61
活跃值: (160)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
pendan2001 4 2005-11-4 03:27
3
0
Good!
雪    币: 671
活跃值: (723)
能力值: ( LV9,RANK:1060 )
在线值:
发帖
回帖
粉丝
wenglingok 26 2005-11-4 07:50
4
0
学习了!
雪    币: 313
活跃值: (250)
能力值: ( LV9,RANK:650 )
在线值:
发帖
回帖
粉丝
hbqjxhw 16 2005-11-4 08:24
5
0
我也去试试,共享不错,节约好多硬币。
雪    币: 300
活跃值: (387)
能力值: ( LV9,RANK:410 )
在线值:
发帖
回帖
粉丝
killl 10 2005-11-4 11:13
6
0
学习,要是能用上就爽了
雪    币: 117
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
无奈无赖 2005-11-4 13:27
7
0
呵呵,他哪知道学生中是高手辈出啊!~
雪    币: 267
活跃值: (235)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
ngaut 6 2005-11-4 16:14
8
0
顶就一个字!!!
雪    币: 443
活跃值: (200)
能力值: ( LV9,RANK:1140 )
在线值:
发帖
回帖
粉丝
冷血书生 28 2005-11-4 20:07
9
0
看来是太小看学生了

哈哈!

这就是小看学生的下场!!

被破解了,连注册流程也没放过!

支持楼主!
雪    币: 61
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
sdtw 2005-12-7 12:49
10
0
好啊...支持................
游客
登录 | 注册 方可回帖
返回