XX实验室管理系统注册分析

Eddy 发布于2010-12-16 13:44:0 分类: 技术心得 已浏览loading 网友评论0条 我要评论

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

记住我的信息,下次不用再输入 欢迎给Eddy Blog留言