好友
阅读权限25
听众
最后登录1970-1-1
|
Ruin
发表于 2012-6-19 17:45
【文章来自orztxt】
没有通用性,因为版本众多。
简单讲一下机器码的构成:
例如:8617874345161312345643335350303238205016
大致可以分为5个部分:
8617874345(1613)123456 硬盘序列号相关
4333535030 mac地址相关
3238 cpuid相关
2 前面所有位的一个校验值
050(16) 050即十进制50,本例中是前面一位'2'的ascii码值,也就是0x32, 16是50整除3后的商
4333535030, mac地址的计算是将mac地址的移位后分成两部分相乘得到,然后将第11、12位附加到第1、2位再整除2,最后取出前10位。主要是浮点运算。
8617874345(1613)123456 硬盘序列号相关本来是86178743456780123456,每一位数不超过8,是因为mod 9的原因,由于我的硬盘序列号只有8个字符后面全是空格按照它的算法后面就是456780123456,非常有规律,所以这里利用了由cpuid得到的4个字节与括号中的xor了一下,
45(6780)123456,最后变成了45(1613)123456,起到迷惑大家的作用。
008F3F20 54 05 00 00 4F 2E 00 00 45
008F3F30 B4 00 00 E9 C1 00 00 8B DB 00 00 65 2D 00 00 23
008F3F40 42 00 00 18 99 00 00 06 48 00 00 F7 0C 00 00 1D
008F3F50 EC 00 00 7C A8 00 00 12 81 00 00 19 64 00 00 00
008F3F60 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
008F3F70 00 00 00 00 00 00 00 00 00 00 00 08 00 00 00 08
008F3F80 00 00 00 23 D7 0E 00 70 6D 6C 78 7A 6A 6D 6C 78
008F3F90 00 00 00
对于有些老版本,在加密视频尾部可以看到类似上面的数据,从尾部偏移0x34开始连续取出0x38字节数据:
008F3F20 54 05 00 00 4F 2E 00 00 45 008F3F30 B4 00 00 E9 C1 00 00 8B DB 00 00 65 2D 00 00 23
008F3F40 42 00 00 18 99 00 00 06 48 00 00 F7 0C 00 00 1D 008F3F50 EC 00 00 7C A8 00 00 12 81 00 00 19 64 00 00
这些数据都是预先计算好的,当视频播放时会有一段代码重新计算出这些值,并与之比较。
以下数据是用OD脚本拦截得到,格式是:
起始地址:字节长度 ax=该段内存数据的校验值
00401001:0000C800 ax: 00000554 //c800=50k
0040D801:0000C800 ax: 00002E4F
0041A001:0000C800 ax: 0000B445
00426801:0000C800 ax: 0000C1E9
00433001:0000C800 ax: 0000DB8B
0043F801:0000C800 ax: 00002D65
0044C001:0000C800 ax: 00004223
00458801:0000C800 ax: 00009918
00465001:0000C800 ax: 00004806
00471801:0000C800 ax: 00000CF7
0047E001:0000C800 ax: 0000EC1D
0048A801:0000C800 ax: 0000A87C
00497001:0000C800 ax: 00008112
004A3801:000007FF ax: 00006419
这里显然与视频尾部的数据完全一致,因为我下的硬件断点,也没有修改内存数据。
天狼星内存检测的方法多种多多样,反调试很多,这里权当抛砖引玉,欢迎讨论交流。
|
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|