Visual Basic 6开发的一个实验室管理程序。避免麻烦,文中部分字符用XXX或其他代替。
跟踪分析可知注册码的计算是由一个VC6写的XXX.dll文件来控制授权的。我们的目的就是分析这个dll的关键导出函数,自己编程来调用它,算出想要的注册码^_
一个是要看有几个参数传进去,各个参数的含义和类型,以及函数的返回值。参数的个数可以看函数代码返回时的一个值(红色部分),由这个堆栈平衡,初步知道参数个数为5个。
09B42EB9 5F pop edi
09B42EBA 5E pop esi
09B42EBB 5D pop ebp
09B42EBC 5B pop ebx
09B42EBD 64:890D 0000000>mov dword ptr fs:[0],ecx
09B42EC4 81C4 70020000 add esp,0x270
09B42ECA C2 1400 retn 0x14
继续看堆栈,看压入堆栈中的各个参数有何意义,有的比较明显,有的需要你动态跟踪过程中发现。调试可知注册码在0012F64C这个地址返回。
0012F488 09B4300D 返回到 A 来自 B
0012F48C 0012F584
0012F490 0012F520 ASCII "ZZZ"
0012F494 0012F5E8 ASCII "YYY"
0012F498 00000001
0012F49C 0012F64C
具体算法有点繁琐,耐力好的可以直接分析,这里就不说了,贴点代码:
09B429AF 89AC24 7C020000 mov dword ptr ss:[esp+0x27C],ebp
09B429B6 3BCD cmp ecx,ebp
09B429B8 7E 19 jle short tjregkl.09B429D3
09B429BA 8A06 mov al,byte ptr ds:[esi]
09B429BC 3C 61 cmp al,0x61
09B429BE 7C 06 jl short tjregkl.09B429C6
09B429C0 3C 7A cmp al,0x7A
09B429C2 7F 02 jg short tjregkl.09B429C6
09B429C4 2C 20 sub al,0x20
09B429C6 888414 E4000000 mov byte ptr ss:[esp+edx+0xE4],al
09B429CD 46 inc esi
09B429CE 42 inc edx
09B429CF 3BD1 cmp edx,ecx
09B429D1 ^ 7C E7 jl short tjregkl.09B429BA
09B429D3 8BBC24 88020000 mov edi,dword ptr ss:[esp+0x288]09B42AB4 /7E 29 jle short tjregkl.09B42ADF
09B42AB6 |43 inc ebx
09B42AB7 |0FBE8434 E40000>movsx eax,byte ptr ss:[esp+esi+0xE4] ; 一段循环算法
09B42ABF |99 cdq
09B42AC0 |8BC8 mov ecx,eax
09B42AC2 |8BC6 mov eax,esi
09B42AC4 |33CA xor ecx,edx
09B42AC6 |2BCA sub ecx,edx
09B42AC8 |99 cdq
09B42AC9 |F7FB idiv ebx
09B42ACB |8BC1 mov eax,ecx
09B42ACD |8BCA mov ecx,edx
09B42ACF |D3E0 shl eax,cl
09B42AD1 |03E8 add ebp,eax
09B42AD3 |46 inc esi
09B42AD4 |3BF7 cmp esi,edi
09B42AD6 ^|7C DF jl short tjregkl.09B42AB7
09B42AD8 |8B9C24 90020000 mov ebx,dword ptr ss:[esp+0x290]
09B42ADF \8BC5 mov eax,ebp
弄清楚各个参数含义后,就可以直接编程调用了,无需分析这些算法。
Private Declare Function zcYYY Lib "XXX.dll" (ByVal HName As String, _
ByVal SName As String, ByVal yiqi As String, _
ByVal num As Long, ByVal regcode As String) As Long '调用函数声明Private Sub Command1_Click()
On Error Resume Next
Dim HName As String, SName As String, yiqi As String, num As Long, regcode As String
HName = Trim(Text1)
SName = "LocalHost"
yiqi = Trim(Text2)
num = Val(Trim(Text3))
regcode = Space(255)
zcYYY HName, SName, yiqi, num, regcode
Text4 = Trim(regcode)
End Sub
Over!贴个美女^_
已经有(0)位网友发表了评论,你也评一评吧!
原创文章如转载,请注明:转载自Eddy Blog
原文地址:http://www.rrgod.com/technique/680.html 欢迎订阅Eddy Blog。