Xshell_6_plus

Xshell 6 plus

下载

官网下载

左边是需要输入注册码的,右边是30天的评估版,随意填写,使用临时邮箱就可以接收下载链接了,产品的下载链接路径是一样的,不同版本的xshell在于最后面附加标号(r、p):

https://cdn.netsarang.net/30486508/Xshell-6.0.0193r.exe    plus版本
https://cdn.netsarang.net/30486508/Xshell-6.0.0193.exe    评估版本
https://cdn.netsarang.net/30486508/Xshell-6.0.0193p.exe    教育版

这次针对的是plus版本的分析。

分析

安装xshell,plus版本需要输入注册码才会安装,这里并没有计算注册码是否过期,主要是提取注册码的时间和一些其他标识信息。注册码只要是真是注册码即可,所以可以随意百度一个来使用,区别就是标识会有所不同,不影响功能正常使用。我就偷懒用了百度的第一个 180807-116568-999990 。 输入序列号,进入下一步

如果不输入序列号是不让你进行下一步的,也就无法安装了,这里我就用默认安装路径了,也可以自行修改一下。

安装完成后,应该是这样的,如果你以前安装过的话。如果是第一次安装,运行一次后,关闭再运行即可,主要是触发本地校验程序,校验你的序列号为过期并提示你未激活

这里的 License TypeNumber of LicenseIssue Date 是根据序列号来的标识,所以使用不同的序列号,会呈现不一样的数据,目前没发现有啥影响的。

License Type后边的 (Not Activated)入手,用x32dbg调试(这是一个32位程序)xshell.exe

在反汇编窗口查看上下文代码,得知是从上面的je跳转过来的,我们往上找到函数入口,下个断点,方便一会儿观察上下文。

点击关于触发断点,往下执行会发现 (Registered) 字样,这个时候还没有变成 (Not Activated)。继续往下单步步过。

这里就发现了一个长跳转,这个长跳转跳过了 (Not Activated) ,跳转上部是 (Registered) ,但这个跳转并未执行,那么就会到 (Not Activated) 赋值去。

00F8F401 | FFB5 ACFBFFFF              | push dword ptr ss:[ebp-454]             |
00F8F407 | 8B9D 9CFBFFFF              | mov ebx,dword ptr ss:[ebp-464]          | [ebp-464]:&L"alee\r\nnature\r\nLicense Type: Xmanager Power Suite  (Registered)\r\nNumber of Licenses: 999\r\n\r\n"
00F8F40D | FFB5 B8FBFFFF              | push dword ptr ss:[ebp-448]             |
00F8F413 | FFB5 A0FBFFFF              | push dword ptr ss:[ebp-460]             | [ebp-460]:L"Number of Licenses: 999\r\n"
00F8F419 | FFB5 B0FBFFFF              | push dword ptr ss:[ebp-450]             | [ebp-450]:L"Xmanager Power Suite  (Registered)"
00F8F41F | FFB5 A8FBFFFF              | push dword ptr ss:[ebp-458]             | [ebp-458]:L"nature\r\n"
00F8F425 | FFB5 A4FBFFFF              | push dword ptr ss:[ebp-45C]             | [ebp-45C]:L"alee\r\n"
00F8F42B | 68 00780501                | push xshell.1057800                     | 1057800:L"%s%sLicense Type: %s\r\n%s%s\r\n%s"
00F8F430 | 53                         | push ebx                                | ebx:&L"alee\r\nnature\r\nLicense Type: Xmanager Power Suite  (Registered)\r\nNumber of Licenses: 999\r\n\r\n"
00F8F431 | FFD7                       | call edi                                |
00F8F433 | 83C4 20                    | add esp,20                              |
00F8F436 | FFD6                       | call esi                                |
00F8F438 | 8B40 04                    | mov eax,dword ptr ds:[eax+4]            |
00F8F43B | 83B8 2C010000 00           | cmp dword ptr ds:[eax+12C],0            |
00F8F442 | 75 12                      | jne xshell.F8F456                       |
00F8F444 | FFD6                       | call esi                                |
00F8F446 | 8B40 04                    | mov eax,dword ptr ds:[eax+4]            |
00F8F449 | 83B8 38010000 00           | cmp dword ptr ds:[eax+138],0            |
00F8F450 | 0F85 C2000000              | jne xshell.F8F518                       | 关键跳转
00F8F456 | 8D8D BCFBFFFF              | lea ecx,dword ptr ss:[ebp-444]          |
00F8F45C | FF15 7C050401              | call dword ptr ds:[<&Ordinal#316>]      |
00F8F462 | 8D8D B4FBFFFF              | lea ecx,dword ptr ss:[ebp-44C]          |
00F8F468 | FF15 7C050401              | call dword ptr ds:[<&Ordinal#316>]      |
00F8F46E | C645 FC 09                 | mov byte ptr ss:[ebp-4],9               | 9:'\t'
00F8F472 | FFD6                       | call esi                                |
00F8F474 | 8B40 04                    | mov eax,dword ptr ds:[eax+4]            |
00F8F477 | 83B8 2C010000 00           | cmp dword ptr ds:[eax+12C],0            |
00F8F47E | 74 38                      | je xshell.F8F4B8                        |
00F8F480 | FFD6                       | call esi                                |
00F8F482 | 8B40 04                    | mov eax,dword ptr ds:[eax+4]            |
00F8F485 | 8D8D BCFBFFFF              | lea ecx,dword ptr ss:[ebp-444]          |
00F8F48B | 83B8 30010000 01           | cmp dword ptr ds:[eax+130],1            |
00F8F492 | 75 12                      | jne xshell.F8F4A6                       |
00F8F494 | 68 40780501                | push xshell.1057840                     | 1057840:L"(Activated Locally)"
00F8F499 | FF15 88050401              | call dword ptr ds:[<&Ordinal#1516>]     |
00F8F49F | 68 80780501                | push xshell.1057880                     | 1057880:L"(Concurrent, Activated)"
00F8F4A4 | EB 28                      | jmp xshell.F8F4CE                       |
00F8F4A6 | 68 68780501                | push xshell.1057868                     | 1057868:L"(Activated)"
00F8F4AB | FF15 88050401              | call dword ptr ds:[<&Ordinal#1516>]     |
00F8F4B1 | 68 80780501                | push xshell.1057880                     | 1057880:L"(Concurrent, Activated)"
00F8F4B6 | EB 16                      | jmp xshell.F8F4CE                       |
00F8F4B8 | 68 B0780501                | push xshell.10578B0                     | 10578B0:L"(Not Activated)"
00F8F4BD | 8D8D BCFBFFFF              | lea ecx,dword ptr ss:[ebp-444]          |
00F8F4C3 | FF15 88050401              | call dword ptr ds:[<&Ordinal#1516>]     |
00F8F4C9 | 68 D0780501                | push xshell.10578D0                     | 10578D0:L"(Concurrent, Not Activated)"
00F8F4CE | 8D8D B4FBFFFF              | lea ecx,dword ptr ss:[ebp-44C]          |
00F8F4D4 | FF15 88050401              | call dword ptr ds:[<&Ordinal#1516>]     |
00F8F4DA | FFB5 BCFBFFFF              | push dword ptr ss:[ebp-444]             |
00F8F4E0 | 8BCB                       | mov ecx,ebx                             | ebx:&L"alee\r\nnature\r\nLicense Type: Xmanager Power Suite  (Registered)\r\nNumber of Licenses: 999\r\n\r\n"
00F8F4E2 | 68 08790501                | push xshell.1057908                     | 1057908:L"(Registered)"
00F8F4E7 | FF15 84060401              | call dword ptr ds:[<&Ordinal#12595>]    |
00F8F4ED | FFB5 B4FBFFFF              | push dword ptr ss:[ebp-44C]             |
00F8F4F3 | 8BCB                       | mov ecx,ebx                             | ebx:&L"alee\r\nnature\r\nLicense Type: Xmanager Power Suite  (Registered)\r\nNumber of Licenses: 999\r\n\r\n"
00F8F4F5 | 68 24790501                | push xshell.1057924                     | 1057924:L"(Concurrent Registered)"
00F8F4FA | FF15 84060401              | call dword ptr ds:[<&Ordinal#12595>]    |
00F8F500 | 8D8D B4FBFFFF              | lea ecx,dword ptr ss:[ebp-44C]          |
00F8F506 | FF15 78050401              | call dword ptr ds:[<&Ordinal#1039>]     |
00F8F50C | 8D8D BCFBFFFF              | lea ecx,dword ptr ss:[ebp-444]          |
00F8F512 | FF15 78050401              | call dword ptr ds:[<&Ordinal#1039>]     |
00F8F518 | 8D8D A8FBFFFF              | lea ecx,dword ptr ss:[ebp-458]          | [ebp-458]:L"nature\r\n"

观察上下文,跳转判断来自 cmp dword ptr ds:[eax+12C],0,这里下断,将数据地址修改为1,再运行得出如下结果:

那么在这里下一个硬件存取断点,重载程序,观察断下的位置: 第一处:这里看到了一大串置空操作,并没有类似判断函数加跳转这类操作,应该不是启动自检,更像是为自检提前准备空间,继续运行。

第二处:这里有一个 NSACTIVATE_CheckOffline 函数。字面意思很明显,离线检查,结果赋值给数据段,然后进行判断跳转。

修改数据值为1,然后运行程序

看来找对地方了。

形成补丁

进入函数,寻找eax的最后赋值点,修改为1,即可。

从图中可以看到eax本来就是1,但是esi为0,这里将eax赋值为0了,最小化修改:

10006DB5 | 8BC6                       | mov eax,esi                                        |
修改为:
10006DB5 | B0 01                      | mov al,1                                           |

直接nop掉也是可以的,看个人习惯。 保存补丁请注意补丁文件名为:nsactivate.dll