第1次运行会出个对花框,我试了VC的例子能用,可能有问题,没找到+64的dword,乱给的.

眼睛不好使,不想再看了,不好用找shoooo要好用的

  • 标 题:答复
  • 作 者:softworm
  • 时 间:2007-03-09 15:34

winndy在两个论坛给我施压啊。

    前段时间得了角膜炎,视力一直没有恢复,确实没有精神
写文章。正如shoooo所说,要把细节描述清楚并不容易,我只能
大致说一下,希望能有帮助。

    研究WL很重要,重点看UniqueLicenseKey是怎么用的。

    数据如下:

+0 - +C
    这段数据需要穷举,根据3个条件,命名4个dword为a,b,c,d

    条件1: (((((a ^ 14C6CF10h) + b) ^ 0F7A64172h) + c) >> 7) ^ d = 48AB800B(这个值跟出来的)
    条件2: (((((a + 0F7638A5Bh) + b) ^ 37EFFE68h) ^ c) + 10E826C8h) ^ d = 92764A7Bh ^ 0x1BD46FE5
           这里的0x1BD46FE5可以带参数/showinstance运行Virtualizer.exe得到(shadow2)
    条件3: c+d = xxxxxxxx,这个值在有key时可以跟VM得到,无key要根据SMC
           代码明密文来穷举,这个值和下面的10,14之和用于SMC解码,共2处,
           在00DF47BC和00E2ADE3(CV1310)。

           这2段代码的明文代码在WL为:
           ___:00570A06 8B C1         mov     eax, ecx
           ___:00570A08 C1 E0 02      shl     eax, 2
           ___:00570A0B 50            push    eax
           ___:00570A0C 8B D7         mov     edx, edi
           ___:00570A0E 59            pop     ecx

           加壳后插入了很多垃圾代码。
           

+10 - +14
    同c+d,有key可跟VM得到,无key穷举(上面的2处SMC用的2个解码key就是c+d和
    10+14)。穷举结果为二者之和,分解为任意的合法字符即可(大小写字母/数字)

+18
    直接搜索代码得到

+1C - +40
    跟VM代码获取两两之和,无key时对应的代码执行不到,需要修改VM代码执行路径。

+44 - +60
    可直接搜索自己解码,这段数据保存时后面跟了0 ^ imm32,直接搜索这个imm32可以找到
    这是唯一一段与原始key相同的数据

+64
   没有找到,乱给的

+68
   搜索代码可得到


上面所说的搜索,是拦在调用以CreateFile加载的kernel32!CreateFileA
访问keyfile返回时,走几步就到相关的VM代码了。

我后来的时间都花在穷举程序上了,前面的细节有些记不清了,但最重要的
是跟Winlicense,可以自己写个小程序保护试试。key的片段有的是加密后
保存到程序里(+44 - +60),有的被写到代码,如原来为xor eax,12345678,
加壳后用来自key的数据替换掉12345678。还有的被用作解码key,如c+d,
10+14。

WL中对key片断的使用近10处,有些我没有在被保护程序中找到,调试WL时
也不是都能断下,所以我没找到+64。

重点是将WL中的明文数据与被保护程序的VM代码对应起来才能跟。