锐速ServerCheck序列号生成原理
来源:互联网 发布:c语音判断质数的算法 编辑:程序博客网 时间:2024/06/01 08:42
<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]*10for i in range(16): arr[i] = arr[i%6] + ifor i in range(8): print hex((arr[i]+arr[i+8])%256),
整体上来说没什么难度,但是也看了我很久,还动用了remote linux debugger。果然有时候动态调试比静态逆向更能突破问题。
之后就是提交序列号,下了一个安装包。
接下来的研究就锐速是如何验证收费版和免费版。
0 0
- 锐速ServerCheck序列号生成原理
- 生成序列号
- 生成序列号
- 微软序列号生成和验证的技术原理!
- 数据库序列号自动生成。
- MyEclipse序列号自动生成
- 软件序列号生成
- MyEclipse序列号生成
- 生成数据库随机序列号
- 序列号生成存储过程
- MyEclipse自动生成序列号
- 重新生成序列号
- 生成myEclipse序列号代码
- My Eclipse 生成序列号
- 常见SQL(生成序列号)
- myeclipse生成序列号类
- java生成申请单序列号
- MyEclipse序列号生成源码
- 第六届蓝桥杯java组 叠骰子
- 在ubuntu下出现declare:not found的问题
- poj2796
- wehjhsjsdjk
- Android开发环境搭建
- 锐速ServerCheck序列号生成原理
- 统计问题
- HDU 4606 Occupy Cities (计算几何+Floyd+二分+最小路径覆盖)
- sjkghskgdfsgdf
- 安卓实习期间整理知识点(八)
- sjgsghdsghdfs
- 关于longlong与位运算
- 一个C++的内存池和内存管理的实现(三)
- 构建自己的搜索引擎之Lucene详解