编辑: jingluoshutong | 2013-05-06 |
[00E485E8] 取值 CODE:005FF791 mov edx, ds:ppBaseAddress CODE:005FF797 mov edx, [edx] CODE:005FF799 mov [edx+0E25h], al 继续跟踪对[eax+14h]的操作,找到: CODE:005FB085 mov byte ptr [esi+14h],
1 ;
[00E485E8] 赋值为1 前面的分析可知,值为1时是试用版,不是我们想要的,我们要找赋0的时候.在CODE:005FB085上下翻了翻,也没找到赋值为0的代码,估计这是注册标志的初始化,之后肯定会有别的操作,但是我们的注册码的错误的,Syser断不到赋值为0的指令.虽然静态分析的方法找到某个变量的赋值操作是很困难的,但也不是没可能.比如: CODE:005EC534 mov al, [eax+0E25h] CODE:005FF799 mov [edx+0E25h], al 都是[exx+0E25h],this指针加偏移的形式,举一反三,会不会有: mov byte ptr [esi+14h],
0 这种形式的汇编代码呢?在OllyICE中查找命令,果然找到:(IDA里不知道怎么查找命令……) CODE:005FB6B9 mov byte ptr [esi+14h],
0 在这个函数里上下浏览代码,还看到: CODE:005FB779 mov byte ptr [esi+14h],
2 看来找到目标了,在Syser里进行验证,确实是这里.将这个函数sub_5FB5D0命名为KeyCall. 算法分析 CODE:005FB657 lea ecx, [ebp+StrHex] ;
StrHex CODE:005FB65D lea eax, [ebp+Hex] ;
Hex CODE:005FB663 mov edx, 10h ;
strLen CODE:005FB668 call HexToHexString CODE:005FB66D mov edx, [ebp+StrHex] CODE:005FB673 lea eax, [esi+28h] CODE:005FB676 call @System@LStrAsg ;
Borland Visual Component Library &
Packages CODE:005FB67B call sub_493C04 CODE:005FB680 test al, al CODE:005FB682 jz short loc_5FB6CA CODE:005FB684 lea ecx, [ebp+SerialCode] ;
StrHex CODE:005FB687 lea eax, [ebp+var_136] ;
Hex CODE:005FB68D mov edx, 10h ;
strLen CODE:005FB692 call HexToHexString ;
生成机器码 SerialCode CODE:005FB697 lea eax, [ebp+SerialNumber] CODE:005FB69A push eax ;
a4 CODE:005FB69B mov ecx, 20h ;
a3 CODE:005FB6A0 mov edx, [ebp+SerialCode] ;
a2 CODE:005FB6A3 mov eax, esi ;
a1 CODE:005FB6A5 call GenSN ;
由机器码生成注册码 SerialNumber CODE:005FB6AA mov eax, [esi+28h] ;
........