您的位置:首页 > 其它

锐速ServerCheck序列号生成原理

2015-04-17 22:59 295 查看
<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">下载   http://my.serverspeeder.com/d/ls/serverCheck.tar.gz ,解压后发现只有一个 ServerCheck.sh 脚本</span>


文件末端有乱码,看脚本发现,后部分是个压缩包,通过脚本本身提取出自身的文件执行整个ServerCheck的流程。

这边可以直接 

binwalk -e ServerCheck.sh
提取出apxbins这个压缩包,其中有sysid-32,sysid-64和apxinstall.sh

阅读apxinstall.sh 知道在64位机器上调用sysid-64计算序列号。

file sysid-64

发现是个静态链接libc,并且Strip了符号信息。

把该文件扔进ida,找到start函数最后的call之前的传参就是主函数。 [我是通过笨办法自己写了helloworld,并编译后,对比strip后版本和strip前版本得到的特征]



main的主流程



几个系统调用通过查表(http://blog.rchapman.org/post/36801038863/linux-system-call-table-for-x86-64)知道 



例如 16 -> ioctl 41->socket 系统调用的传参方式查看man syscall 就可知道

以上流程为 

如果传了命令行参数(例如wlan0),就会替换默认参数eth0,然后尝试打开socket,最后获取指定interface的HWADDR即mac地址。

ifreq.ifru_hwaddr.sa_data 共16字节,而mac只占6字节,其余补0。

之后的加密就是对这16字节的数组进行混淆。

用python写如下,先是第i位的值等于 第i%6的值+i , 之后就是第i位和第i+8位值相加,然后取低16位(2字节)。

arr = [MAC_ADDR] +[0x00]*10
for i in range(16):
arr[i] = arr[i%6] + i
for i in range(8):
print hex((arr[i]+arr[i+8])%256),


整体上来说没什么难度,但是也看了我很久,还动用了remote linux debugger。果然有时候动态调试比静态逆向更能突破问题。

之后就是提交序列号,下了一个安装包。

接下来的研究就锐速是如何验证收费版和免费版。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  逆向工程 反编译