本文仅用于学习用途,支持正版
前言:
在学习Flexlm ECC patch过程中,需要对比下别人patch的exe和原本exe的差异,使用到这款Hex Comparison这款二进制比较工具.那么就先来学习一下这款软件的注册机制.
使用的软件版本: 4.0
第一步: 查壳发现无壳
第二步: 瞎注册一下,看有什么提示字符
看来我们需要输入正确格式的邮箱地址
到这里看到邮箱地址是没问题了,下一步搞定注册码
第三步:既然它给我们这么多提示信息,那么我们使用OD查找一下
很快就定位到了0040DEB0这个地址引用了
第四步:拖到IDA里面分析一下这个地址附近的流程
a:分析0040DEB0这个地址附近的代码[_TForm3_BitBtn2Click函数内]
b:继续分析
c:预备工作
先来看一下第127-130行:
1
2
3
4
|
unknown_libname_46(v36);
TControl::GetText(a1[
191
]);
*
(_BYTE
*
)(dword_4DB510
+
1236
)
=
sub_40BE50(v36[
0
]);
sub_4CDA5C(v36,
2
);
|
通过浏览周边发现这么个模式即
1
2
3
|
unknown_libname_46(变量)
TControl::GetText(a1[xxx]);
sub_4CDA5C(变量,
2
);
|
猜测并结合OD调试可以把unknown_libname_46改名BInitStr,sub_4CDA5C改名为BReleaseStr.
其次,从形式上看sub_40BE50(v36[0]),像是要把字符串的第一个字符传递进函数去做运算,但是结合调试发现其实传递进去的就是第一个字符的引用,函数里面还是要通过这个字符来使用这个字符串中的其他字符
d: 分析函数sub_40BE50
e: 完事大吉
运行发现注册失败,接着在IDA中分析,发现在_TForm3_BitBtn2Click函数内还有一个判断的地方
第五步:总结注册码
1
2
3
4
5
6
7
8
9
10
|
第
0
位:随意设定
第
1
位:
1
第
2
-
9
位:随意设定
第
10
位: Y
第
11
-
18
位:根据第
2
-
9
位计算得到
第
19
-
22
位: 随意设定
第
23
位: 必须是数字
第
24
-
39
位: 根据第
1
-
18
位计算得到
第
40
-
43
位:
'HFC2'
又注册码中必须含有邮箱地址,故第
44
位开始加上邮箱地址[其中有个地方是将邮箱的.替换成at符号,忘记是在哪块了]
|
第六步:总结
a. IDA有些变量识别的不准确需要配合调试使用,也可能是自己使用IDA不熟练,没有掌握到窍门.碰到有赋值使用的变量和没赋值就使用的变量要特别关注.
b. 注册成功后发现这个软件不能正确的比较前言提到的两个exe差异的地方,以前这个软件工作的好好的.
c. 附件文件仅供参考,不能正确运行.
d. 如果错误,请大家指正,我会及时修正.
更多【Hex Comparison注册分析】相关视频教程:www.yxfzedu.com