首页
社区
课程
招聘
求助破解连接数思路(已搞定)
发表于: 2011-1-22 15:36 7177

求助破解连接数思路(已搞定)

2011-1-22 15:36
7177
这个软件采用MYSQL数据库,客户端有三个文件,当连到数据库超过3个用户,软件就不能登陆到数据库了。
请大大指点一下破解思路

0047C46C  /$  55            push    ebp
0047C46D  |.  8BEC          mov     ebp, esp
0047C46F  |.  83C4 E8       add     esp, -18
0047C472  |.  53            push    ebx
0047C473  |.  56            push    esi
0047C474  |.  57            push    edi
0047C475  |.  66:8B45 08    mov     ax, word ptr [ebp+8]
0047C479  |.  50            push    eax
0047C47A  |.  8D55 E8       lea     edx, dword ptr [ebp-18]
0047C47D  |.  52            push    edx
0047C47E  |.  E8 6947FFFF   call    00470BEC
0047C483  |.  8B58 08       mov     ebx, dword ptr [eax+8]
0047C486  |.  A1 E8928800   mov     eax, dword ptr [8892E8]
0047C48B  |.  33D2          xor     edx, edx
0047C48D  |.  83C4 08       add     esp, 8
0047C490  |.  8B78 04       mov     edi, dword ptr [eax+4]
0047C493  |.  A1 50938800   mov     eax, dword ptr [889350]
0047C498  |.  8945 FC       mov     dword ptr [ebp-4], eax
0047C49B  |.  8915 50938800 mov     dword ptr [889350], edx
0047C4A1  |.  F707 FFFFFBFF test    dword ptr [edi], FFFBFFFF
0047C4A7  |.  0F84 D6000000 je      0047C583
0047C4AD  |.  8D4D E8       lea     ecx, dword ptr [ebp-18]
0047C4B0  |.  51            push    ecx
0047C4B1  |.  53            push    ebx
0047C4B2  |.  57            push    edi
0047C4B3  |.  E8 10F4FEFF   call    0046B8C8
0047C4B8  |.  83C4 0C       add     esp, 0C
0047C4BB  |.  8BF0          mov     esi, eax
0047C4BD  |.  85F6          test    esi, esi
0047C4BF  |.  74 11         je      short 0047C4D2
0047C4C1  |.  F646 05 08    test    byte ptr [esi+5], 8
0047C4C5  |.  74 0B         je      short 0047C4D2
0047C4C7  |.  837E 0C 00    cmp     dword ptr [esi+C], 0
0047C4CB  |.  74 05         je      short 0047C4D2
0047C4CD  |.  8B46 0C       mov     eax, dword ptr [esi+C]
0047C4D0  |.  8B30          mov     esi, dword ptr [eax]
0047C4D2  |>  85F6          test    esi, esi
0047C4D4  |.  74 71         je      short 0047C547
0047C4D6  |.  837E 08 00    cmp     dword ptr [esi+8], 0
0047C4DA  |.  74 6B         je      short 0047C547
0047C4DC  |.  833D 683F8800>cmp     dword ptr [883F68], 0
0047C4E3  |.  74 3D         je      short 0047C522
0047C4E5  |.  E8 CEA9FBFF   call    00436EB8
0047C4EA  |.  85C0          test    eax, eax
0047C4EC  |.  7C 34         jl      short 0047C522
0047C4EE  |.  C705 746C8700>mov     dword ptr [876C74], 0088407C     ;  ASCII "source\vm\hvm.c"
0047C4F8  |.  33D2          xor     edx, edx
0047C4FA  |.  C705 786C8700>mov     dword ptr [876C78], 12C9
0047C504  |.  8915 7C6C8700 mov     dword ptr [876C7C], edx
0047C50A  |.  8B0B          mov     ecx, dword ptr [ebx]
0047C50C  |.  51            push    ecx
0047C50D  |.  57            push    edi
0047C50E  |.  E8 B9EDFEFF   call    0046B2CC
0047C513  |.  59            pop     ecx
0047C514  |.  50            push    eax
0047C515  |.  68 8C408800   push    0088408C                         ;  ASCII "Calling: %s:%s"
0047C51A  |.  E8 8DAAFBFF   call    00436FAC
0047C51F  |.  83C4 0C       add     esp, 0C
0047C522  |>  F646 05 01    test    byte ptr [esi+5], 1
0047C526  |.  74 17         je      short 0047C53F
0047C528  |.  8B46 08       mov     eax, dword ptr [esi+8]
0047C52B  |.  8B50 04       mov     edx, dword ptr [eax+4]
0047C52E  |.  52            push    edx
0047C52F  |.  8B08          mov     ecx, dword ptr [eax]
0047C531  |.  51            push    ecx
0047C532  |.  E8 D994FFFF   call    00475A10
0047C537  |.  83C4 08       add     esp, 8
0047C53A  |.  E9 CD000000   jmp     0047C60C
0047C53F  |>  FF56 08       call    dword ptr [esi+8]
0047C542  |.  E9 C5000000   jmp     0047C60C
0047C547  |>  8B03          mov     eax, dword ptr [ebx]
0047C549  |.  8038 5F       cmp     byte ptr [eax], 5F
0047C54C  |.  75 1A         jnz     short 0047C568
0047C54E  |.  6A FE         push    -2
0047C550  |.  40            inc     eax
0047C551  |.  50            push    eax
0047C552  |.  6A 00         push    0
0047C554  |.  68 ED030000   push    3ED
0047C559  |.  6A 10         push    10
0047C55B  |.  E8 F4A7FDFF   call    00456D54
0047C560  |.  83C4 14       add     esp, 14
0047C563  |.  E9 A4000000   jmp     0047C60C
0047C568  |>  6A FE         push    -2
0047C56A  |.  8B13          mov     edx, dword ptr [ebx]
0047C56C  |.  52            push    edx
0047C56D  |.  6A 00         push    0
0047C56F  |.  68 EC030000   push    3EC
0047C574  |.  6A 0D         push    0D
0047C576  |.  E8 D9A7FDFF   call    00456D54
0047C57B  |.  83C4 14       add     esp, 14
0047C57E  |.  E9 89000000   jmp     0047C60C
0047C583  |>  F643 05 08    test    byte ptr [ebx+5], 8
0047C587  |.  74 0B         je      short 0047C594
0047C589  |.  837B 0C 00    cmp     dword ptr [ebx+C], 0
0047C58D  |.  74 05         je      short 0047C594
0047C58F  |.  8B4B 0C       mov     ecx, dword ptr [ebx+C]
0047C592  |.  8B19          mov     ebx, dword ptr [ecx]
0047C594  |>  837B 08 00    cmp     dword ptr [ebx+8], 0
0047C598  |.  74 5C         je      short 0047C5F6
0047C59A  |.  833D 683F8800>cmp     dword ptr [883F68], 0
0047C5A1  |.  74 34         je      short 0047C5D7
0047C5A3  |.  E8 10A9FBFF   call    00436EB8
0047C5A8  |.  85C0          test    eax, eax
0047C5AA  |.  7C 2B         jl      short 0047C5D7
0047C5AC  |.  C705 746C8700>mov     dword ptr [876C74], 0088407C     ;  ASCII "source\vm\hvm.c"
0047C5B6  |.  33C0          xor     eax, eax
0047C5B8  |.  C705 786C8700>mov     dword ptr [876C78], 12E1
0047C5C2  |.  A3 7C6C8700   mov     dword ptr [876C7C], eax
0047C5C7  |.  8B13          mov     edx, dword ptr [ebx]
0047C5C9  |.  52            push    edx
0047C5CA  |.  68 9B408800   push    0088409B                         ;  ASCII "Calling: %s"
0047C5CF  |.  E8 D8A9FBFF   call    00436FAC
0047C5D4  |.  83C4 08       add     esp, 8
0047C5D7  |>  F643 05 01    test    byte ptr [ebx+5], 1
0047C5DB  |.  74 14         je      short 0047C5F1
0047C5DD  |.  8B43 08       mov     eax, dword ptr [ebx+8]
0047C5E0  |.  8B50 04       mov     edx, dword ptr [eax+4]
0047C5E3  |.  52            push    edx
0047C5E4  |.  8B08          mov     ecx, dword ptr [eax]
0047C5E6  |.  51            push    ecx
0047C5E7  |.  E8 2494FFFF   call    00475A10
0047C5EC  |.  83C4 08       add     esp, 8
0047C5EF  |.  EB 1B         jmp     short 0047C60C
0047C5F1  |>  FF53 08       call    dword ptr [ebx+8]   \\软件这里出现提示“超过用户数”要求退出一个用户再重新登陆。如果没有超出用户数也是从这里跳进软件主界面。0047C5F4  |.  EB 16         jmp     short 0047C60C
0047C5F6  |>  6A FF         push    -1
0047C5F8  |.  8B03          mov     eax, dword ptr [ebx]
0047C5FA  |.  50            push    eax
0047C5FB  |.  6A 00         push    0
0047C5FD  |.  68 E9030000   push    3E9
0047C602  |.  6A 0C         push    0C
0047C604  |.  E8 4BA7FDFF   call    00456D54
0047C609  |.  83C4 14       add     esp, 14
0047C60C  |>  833D 50938800>cmp     dword ptr [889350], 0
0047C613  |.  74 05         je      short 0047C61A
0047C615  |.  E8 B2060000   call    0047CCCC
0047C61A  |>  8B55 FC       mov     edx, dword ptr [ebp-4]
0047C61D  |.  8915 50938800 mov     dword ptr [889350], edx
0047C623  |.  8D4D E8       lea     ecx, dword ptr [ebp-18]
0047C626  |.  51            push    ecx
0047C627  |.  E8 5846FFFF   call    00470C84
0047C62C  |.  59            pop     ecx
0047C62D  |.  5F            pop     edi
0047C62E  |.  5E            pop     esi
0047C62F  |.  5B            pop     ebx
0047C630  |.  8BE5          mov     esp, ebp
0047C632  |.  5D            pop     ebp
0047C633  \.  C3            retn

---------------------------------------------------------------------------------------------------------------
下面是0047C5F1 CALL的情况

0012ED74   77D5082F  /CALL 到 MessageBoxExA 来自 USER32.77D5082A
0012ED78   021003D4  |hOwner = 021003D4 ('登陆ERP系统',class='#32770',parent=002603D8)
0012ED7C   00FA66A4  |Text = "在线用户数已经达到3"
0012ED80   004B68CD  |Title = "请其他用户退出或者增加授权数"
0012ED84   00000010  |Style = MB_OK|MB_ICONHAND|MB_APPLMODAL
0012ED88   00000000  \LanguageID = 0 (LANG_NEUTRAL)
0012ED8C  /0012EDAC
0012ED90  |00419A85  返回到 xerp.00419A85 来自 <jmp.&USER32.MessageBoxA>
0012ED94  |021003D4
0012ED98  |00FA66A4
0012ED9C  |004B68CD  xerp.004B68CD
0012EDA0  |00000010
0012EDA4  |00000000
0012EDA8  |0050A598  xerp.0050A598
0012EDAC  ]0012EDD8
0012EDB0  |0047C5F4  返回到 xerp.0047C5F40012EDB4  |000000F9
0012EDB8  |00000000
0012EDBC  |008892C0  xerp.008892C0
0012EDC0  |0000008A
0012EDC4  |00000000
0012EDC8  |00000009
0012EDCC  |00000000
0012EDD0  |00000000
0012EDD4  |00000000
0012EDD8  ]0012EEDC
0012EDDC  |00476650  返回到 xerp.00476650 来自 xerp.0047C46C
0012EDE0  |00000002
0012EDE4  |00F5C738
0012EDE8  |00000000
0012EDEC  |004A8DF0  xerp.004A8DF0
0012EDF0  |7C93005D  返回到 ntdll.7C93005D 来自 ntdll.7C92E906
0012EDF4  |100760E8  返回到 LIBMYSQL.100760E8 来自 ntdll.RtlFreeHeap
0012EDF8  |00D90000
0012EDFC  |00000000
0012EE00  |100760ED  返回到 LIBMYSQL.100760ED 来自 LIBMYSQL.10078393
0012EE04  |00D9A0F8
0012EE08  |00D9A0C0
0012EE0C  |00D9A0A8
0012EE10  |0000028C
0012EE14  |0012EE04
0012EE18  |101E98E0  LIBMYSQL.101E98E0
0012EE1C  |0107FD8C
0012EE20  |00000071
0012EE24  |0107FD8C
0012EE28  |01081988
0012EE2C  |0012EE4C
0012EE30  |0049D4B6  返回到 xerp.0049D4B6 来自 xerp.0049D28C
0012EE34  |0107FD8C
0012EE38  |00000071
0012EE3C  |0108198C
0012EE40  |0012EE4C
0012EE44  |0049CECC  返回到 xerp.0049CECC 来自 xerp.0049CED0
0012EE48  |0108198C
0012EE4C  |0012EE58
0012EE50  |0049C7E9  返回到 xerp.0049C7E9 来自 xerp.0049CEA4
0012EE54  |0108198C
0012EE58  |01081A64
0012EE5C  |0012EE68
0012EE60  |0049CECC  返回到 xerp.0049CECC 来自 xerp.0049CED0
0012EE64  |01081A64
0012EE68  |00000014
0012EE6C  |00FA6654
0012EE70  |0012EE88
0012EE74  |00470F54  返回到 xerp.00470F54 来自 xerp.00436A8C
0012EE78  |00FA6656  ASCII "LCONNECTION"
0012EE7C  |004C26AF  ASCII "LCONNECTION"
0012EE80  |0000003F
0012EE84  |00FA664C
0012EE88  |0012EEA0
0012EE8C  |004735DF  返回到 xerp.004735DF 来自 xerp.00470F2C
0012EE90  |00FA66A4
0012EE94  |00000013
0012EE98  |0012EEB8
0012EE9C  |00484188  返回到 xerp.00484188 来自 xerp.0049D548
0012EEA0  |00FA66A4
0012EEA4  |004B68B0  xerp.004B68B0
0012EEA8  |00000012
0012EEAC  |00F5C7B0
0012EEB0  |00F5C828
0012EEB4  |0012EF0C
0012EEB8  |00478713  返回到 xerp.00478713 来自 xerp.0049D548
0012EEBC  |00FA66B6
0012EEC0  |00876ADA  UNICODE "3456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~"
0012EEC4  |00000001
0012EEC8  |000018F3
0012EECC  |00470C58  返回到 xerp.00470C58 来自 xerp.00486A88
0012EED0  |00001913
0012EED4  |00000000
0012EED8  |00000000
0012EEDC  ]0012EF14

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (15)
雪    币: 38
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
你F7进去看一下啦....
2011-1-22 21:02
0
雪    币: 87
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
程序一运行起来就会不断的跳到0047C5F1,没法用F7跟进去。目前只知道NAG窗口是0047C5F1调用。还请各位大大继续指点一下
2011-1-23 00:21
0
雪    币: 38
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
不是很清楚, 我想Mysql的话, 定位函数mysql_real_connect()试一下咯. 当然需要lib了. 你可以查下有没Mysql的lib.
因为你并不清楚他是怎么限制的, 如果希望单单依靠Mysql客户端的话, 肯定是依据服务器返回连接数的.
但是如果服务器直接根据连接数拒绝的话, 你就要考虑处理服务器端了.
看看是不是方向处理的不对.
2011-1-23 11:56
0
雪    币: 87
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
感谢Richard王的分析!
客户端一共有由三个文件组成:libmySQL.dll,xerp.exe,xerp.dll。我认为libmySQL.dll这个文件应该就是Mysql的lib。服务器是直接用MYSQL,好像没有用专门的服务端程序,由此我觉得应该是客户端先访问数据库获得用户在线数,然后再根据用户数判断是否超出用户数限制。
请问在OD下该如何下断点呢?
2011-1-23 21:37
0
雪    币: 38
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
要是这三个的话, 我估计他的软件结构就是,
xerp.exe 依赖xerp.dll 依赖libMySql.dll的关系.
因为libMySQL.dll是公共dll. 我刚刚从网上load一个, 估计问题不在这里, 你可以看看那个调用mysql_real_connect函数的地方, 导出一下xerp.dll, 看看里面是什么, 然后通过偏移设置软件, 或者用OD直接设置那个硬件断点呗. 我认为主要还是从connect函数这里入手, 如果执行到这里就挂掉, 说明是服务器判定, 如果还没, 就说明是本地判定, 当然, 我觉着还是服务端的概率大些, 哈~!.

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// 导出函数
ALCDECL AheadLib_mysql_real_connect(void)
{
        // 保存返回地址到 TLS
        __asm PUSH m_dwReturn[63 * TYPE long];
        __asm CALL DWORD PTR [TlsSetValue];

        // 调用原始函数
        GetAddress("mysql_real_connect")();

        // 获取返回地址并返回
        __asm PUSH EAX;
        __asm PUSH m_dwReturn[63 * TYPE long];
        __asm CALL DWORD PTR [TlsGetValue];
        __asm XCHG EAX, [ESP];
        __asm RET;
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2011-1-23 22:59
0
雪    币: 87
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我已经把文件上传到网盘,麻烦Richard王帮忙看一下。再次感谢ing。。。
http://u.115.com/file/t39d2d43ba#

libmySQL.dll这个文件有差不多2M大,感觉不像公共LIB。
2011-1-24 15:07
0
雪    币: 63
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
使用线程断点端那个来回跳的接口
2011-1-25 08:51
0
雪    币: 87
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
感谢回帖,能否再详细提示一下
2011-1-25 12:25
0
雪    币: 324
活跃值: (56)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
这个我也不会,楼主知道了,说一下详细的方法
2011-1-25 12:44
0
雪    币: 87
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
xerp.dll 这个文件好像有VM保护,peid查不出壳,用dede也反编译不了。
2011-1-25 13:31
0
雪    币: 87
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
终于发现软件在服务端没有任何限制,连接数的限制主要是依靠客户端访问数据库的session会话表获取在线用户数再判断有没有超出连接数。
虽然已经知道数据库的session会话表是关键,但是还不知道该如何断下查询session表后返回的用户数。
哪位大大能继续指点一下,在此感谢了!
2011-1-26 15:38
0
雪    币: 87
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
终于搞定用户数限制,再次感谢Richard王,yoyoLi,SGLTLJ的回帖。

在Richard王的提示下我仔细看了一下libmySQL.dll的输入表发现有个一个函数mysql_query,这个函数的作用就是查询数据库,当时心想这类数据库软件一般都是先查询得到结果然后再根据结果进行判断。接着用OD载入xerp.exe跟进到libmySQL.dll里在mysql_query处下断点在发现了数据库查询语句 "select count(*) from session  limit 1"。这条语句的作用就是查询数据库的在线用户数。由于本人是菜鸟,无法再继续跟下去找到软件判断用户数的地方。但是天无绝人之路,我来了一招"偷梁换柱"终于将其破解了。

破解方法比较另类,用Navicat工具在数据库里先复制一个session表并改名sessio2表。然后在winhex打开xerp.exe搜索查询语句 "select count(*) from session  limit 1"将其改成"select count(*) from sessio2  limit 1",保存即可。
2011-1-27 00:38
0
雪    币: 42
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
14
小白路过.
2011-1-27 01:34
0
雪    币: 3265
活跃值: (3814)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
LZ能整个操作视频么,对数据库不熟悉
2011-1-27 10:09
0
雪    币: 38
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
16
不好意思, 过年回家,没有电脑耍,有心无力。。
2011-1-28 18:52
0
游客
登录 | 注册 方可回帖
返回
//