简单分析了下某密针对手游推出的保护功能,看看强度如何。
简单测试了下,这款游戏是U3D的,对DLL做了静态加密,对常见的修改器、加速器做了检测,有多进程保护阻止了暂停、调试等功能。
DLL加密
关键DLL做了整体加密,在动态运行时进行解密,但是加密的强度真的需要吐槽下,并且没有对mono动态库做任何处理,导致很容易找到解密代码,而且加密的算法一眼看出来就是差不多字节映射查表就能解决了,果然找到了解密表,解密算法:
解密表
0xD0, 0xB6, 0xC5, 0x56, 0x7F, 0xD6, 0x51, 0x7D, 0x91, 0xAD, 0xFA, 0x3F, 0x6A, 0x4C, 0x9B, 0x0B,
0xEF, 0x16, 0x24, 0x20, 0x4E, 0x71, 0x36, 0x79, 0x84, 0xA1, 0x3E, 0x8B, 0xE2, 0xBC, 0x35, 0x92,
0xE8, 0x6F, 0xC0, 0x1C, 0xF2, 0x62, 0x21, 0xF0, 0xBA, 0xD2, 0xA0, 0xE3, 0x8F, 0x89, 0xEC, 0x6D,
0xD8, 0x33, 0x40, 0x64, 0x04, 0x1F, 0x0A, 0x4D, 0x38, 0x78, 0x14, 0x4B, 0xF6, 0xC6, 0x2A, 0x5D,
0xC3, 0xE0, 0x54, 0xBE, 0x29, 0xFC, 0xCE, 0xFE, 0x05, 0xC7, 0xEE, 0x6B, 0x63, 0xD1, 0x70, 0x7B,
0xDE, 0x31, 0xD7, 0x01, 0x2F, 0x3D, 0x45, 0x76, 0xB8, 0x0F, 0xDB, 0x5F, 0xE6, 0xCA, 0x06, 0x8A,
0x26, 0x55, 0x73, 0x22, 0xAF, 0x1D, 0x37, 0x0C, 0xC9, 0x83, 0x9E, 0x8C, 0x41, 0x5E, 0x69, 0x95,
0xDC, 0xD5, 0x58, 0x5C, 0x32, 0x50, 0xE1, 0x98, 0x15, 0x0E, 0x65, 0x46, 0x5A, 0x07, 0x57, 0x9F,
0xA6, 0x99, 0xA9, 0x19, 0xBF, 0x1A, 0xFB, 0xEA, 0x34, 0x08, 0x13, 0xFF, 0x12, 0xBB, 0x0D, 0x2E,
0x86, 0xF8, 0x49, 0x74, 0x4A, 0xA7, 0x48, 0x81, 0x2D, 0x25, 0xDA, 0x88, 0x9A, 0x60, 0xE9, 0xC8,
0xD9, 0x00, 0xB3, 0xCF, 0xB0, 0x42, 0x18, 0x77, 0x66, 0xEB, 0x8E, 0x94, 0xAA, 0xB7, 0xA2, 0x97,
0xA4, 0xDD, 0x9C, 0x7C, 0x6C, 0x39, 0xF5, 0x90, 0x7E, 0x7A, 0x47, 0xAE, 0x2C, 0xE7, 0xFD, 0x75,
0xF9, 0x3B, 0xF4, 0xF7, 0x85, 0x59, 0x11, 0xA8, 0xA5, 0xB1, 0xDF, 0x61, 0xC4, 0x1B, 0xED, 0x23,
0x68, 0x52, 0xAB, 0x9D, 0xAC, 0x87, 0x72, 0x09, 0x3A, 0x5B, 0xCB, 0x6E, 0x03, 0xBD, 0x10, 0xB9,
0x53, 0x3C, 0xB5, 0x17, 0x44, 0xE5, 0xF3, 0x30, 0xC1, 0x27, 0x43, 0x4F, 0xF1, 0x8D, 0xD3, 0x93,
0x28, 0xB2, 0x1E, 0x2B, 0xCD, 0xB4, 0xD4, 0xC2, 0x96, 0xA3, 0xCC, 0xE4, 0x67, 0x80, 0x02, 0x82,
0x2E, 0x64, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x6C, 0x69, 0x62, 0x6D, 0x6F, 0x6E, 0x6F, 0x2E,
0x73, 0x6F, 0x00, 0x00
多进程保护
多进程的思路感觉和某讯的差不多(估计copy的),主要执行了一个可执行文件,读取相关字段做反调试检测以及针对暂停进程进行反暂停,这部分其实可以用信号解决。
总的来说对于某些操作未必能防得住,功能涵盖面还行,自身保护的太少太差。