最近成功破解了Flexlm v11.5 ECC,是通过更改ECC的2处标志,再通过找出的seed1、seed2生成12位SIGN。
在“【翻译】FLEXlm latest information by CrackZ ”有关于第2处ECC 标志的说明,我没有看明白:标记1
6AF454―在6AF426地址处用静态指令“ADD ECX, 1”设为1,就只用了一个字节的改变将ADD ECX,0打补丁了。但是Imaris有同样的参考所以在代码路径(code path)必须有个变量(variation)。经过比较Imaris与censored的代码流,我们发现了下面的“开关”代码:
:006AF354 mov edx, [ebp+var_5DC]
:006AF35A cmp dword ptr [edx], 0
:006AF35D jz loc_6AF434 ; 0x0 Imaris, 0x10 *censored*
这是我们向后跟踪的真正开关,它位于_l_buf_36()(子程序,在下面有描述)里面,唯一可靠查找方式是去的定位静态值存储在什么地方,如下所示。
i)在_l_buf_36()子程序下断点,下d *(esp+8)命令,在数据窗口查看vendor代码结构的指针,有时候,你可能要用SoftICE叫出该地址。
ii)在[vedor 代码结构+3Ch]设bmp w命令,监视写出的值,任何非零的值都是数据写入的静态位置(注意,你可能得到3或******此处为翻译,实在不知道是什么意思。)。一旦我们确定了正确的位置,我们就可以在这打个静态数据的小补丁。
:00405FB6 mov eax, [edx+3Ch]
:00405FB9 add eax, dword_81C7F8 ; 0x10 静态数据
:00405FBF mov ecx, [ebp+0Ch]
:00405FC2 mov [ecx+3Ch], eax ; 写标记
上面这段我没有看明白。。附相关代码:
.text:10001000 push ebp
.text:10001001 mov ebp, esp
.text:10001003 sub esp, 9Ch
.text:10001009 cmp [ebp+arg_14], 0
.text:1000100D jz short loc_10001018
.text:1000100F mov eax, [ebp+arg_14]
.text:10001012 mov dword ptr [eax], 2 ;第1处ECC Flag : 将2改为0,除去ECC FLAG标志
...
.text:1001034A mov ecx, [ebp+Dst]
.text:1001034D mov edx, [ecx+3Ch]
.text:10010350 add edx, dword_1012BADC ;第2处ECC Flag: 将1012BADC中的数据改为0
.text:10010356 mov eax, [ebp+Dst]
.text:10010359 mov [eax+3Ch], edx
.text:1001035C
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)