锐速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。果然有时候动态调试比静态逆向更能突破问题。
之后就是提交序列号,下了一个安装包。
接下来的研究就锐速是如何验证收费版和免费版。
相关文章推荐
- 微软序列号生成和验证的技术原理!
- PHP生成HTML前提条件及原理介绍
- 汉明码的原理、生成和检验
- .NET平台开源项目速览(9)软件序列号生成组件SoftwareProtector介绍与使用
- 方维团购系统,代金券序列号的生成规则
- Java生成验证码原理(jsp)
- MyEclipse6.5-8.5的序列号生成代码(Java)
- 比特币系统的脚本(Script)——交易生成和验证的原理(第一部分)(初稿)*****
- 二维码(QR code)基本结构及生成原理
- 计算机二级干货+最新版Microsoft Office 2010免序列号(VOL版)专业正式加强版原版镜像+破解激活原理和教程+安装教程
- 生成唯一编号(序列号)--sql存储过程
- GUID的简介及生成原理
- 生成序列号
- 二维码的生成细节和原理(一 简)
- SPGridView的使用--增加自动生成的序列号
- 3、thrift原理重点分析之自动生成的代码详解
- 二维码的生成细节和原理
- 二维码生成以及扫一扫解析二维码原理
- Android唯一识别号(设备指纹)的生成及原理
- VB根据硬盘序列号生成唯一注册码