|
网络上有关“打狗”的文章很多,也不乏诸多的“软件模拟狗”。看到一些打狗的注册用户数控制,从2个
用户~9999个用户~21亿个用户,心里感到很是不塌实,于是就专门以“注册用户数控制”为题,下载了几个
不同的“软件模拟狗”,开始跟踪。
几个下载的“软件模拟狗”,脱壳修正后测试,有的仅简单的打了一个补丁,有的甚至修改了一、二个跳转
,就认为是打“狗”了,完全没有按照“狗”的流程运行,又没有恢复“狗”内的数据,所以,就放弃了这
类“软件模拟狗”的测试。
其中有一个“软件模拟狗”的“狗”内的数据恢复的不错,与原版比较,除恢复“狗”内的数据外,基本上
没有发现修改跳转,就以这个进行测试跟踪。
“软件模拟狗”一般都加上一些猛壳来保护,脱壳过程从略。
OD载入脱壳修正的文件,F9运行。
这个软件,除在关于中能看到一些用户数数据外,在字符串、内存中都无法得到需要的敏感字符,所以,就
很难下断。还好通过插件找到ASCII "all",就拿它下断了。
//////////////////////////////////////////////////////////////////////////////////////////////
==检查用户数设置==
00434CA4 |. 50 push eax ; /Arg1 = 0012F780
00434CA5 |. E8 AAE2FFFF call un_SDE3S.00432F54 ; \un_SDE3S.00432F54
00434CAA |. 59 pop ecx
00434CAB |. 83C0 04 add eax,4
00434CAE |. 8945 D4 mov dword ptr ss:[ebp-2C],eax
00434CB1 |. 8D45 08 lea eax,dword ptr ss:[ebp+8]
00434CB4 |. 8B4D D4 mov ecx,dword ptr ss:[ebp-2C]
00434CB7 8B55 0C mov edx,dword ptr ss:[ebp+C] ; 用户数[ebp+C]-->edx
========================================
堆栈 ss:[0012F7C8]=00000002 //用户数
edx=03277960 //写到地址
========================================
00434CBA 8951 0C mov dword ptr ds:[ecx+C],edx ; edx用户数-->[ecx+C]
========================================
edx=00000002 //用户数
ds:[03277980]=00000003 //写到地址
========================================
//////////////////////////////////////////////////////////////////////////////////////////////
==关于中检查用户数==
当我们从帮助--->关于中查看时,软件又从这里检查确认用户数。
00434F8F |. 51 push ecx ; /Arg1
00434F90 |. E8 BFDFFFFF call un_SDE3S.00432F54 ; \un_SDE3S.00432F54
00434F95 |. 59 pop ecx
00434F96 |. 83C0 04 add eax,4
00434F99 |. 8945 D0 mov dword ptr ss:[ebp-30],eax
00434F9C |. 837D 0C 00 cmp dword ptr ss:[ebp+C],0
00434FA0 |. 74 0B je short un_SDE3S.00434FAD
00434FA2 |. 8B45 D0 mov eax,dword ptr ss:[ebp-30]
00434FA5 |. 8B4D 0C mov ecx,dword ptr ss:[ebp+C]
00434FA8 |. 8B50 0C mov edx,dword ptr ds:[eax+C] ; [ebp+C]=用户数
==========================================
ds:[03277980]=00000002 //用户数
edx=03277960 //写到地址
==========================================
00434FAB |. 8911 mov dword ptr ds:[ecx],edx
==========================================
edx=00000002 //用户数
堆栈 ds:[0012F734]=00000000 //内存地址
==========================================
//////////////////////////////////////////////////////////////////////////////////////////////
根据字符串"all",搜索到这里,在0042689C下断。
0042689C E8 23770500 call SDE3Serv.0047DFC4 ; 这里恢复狗数据。
004268A1 50 push eax
004268A2 8D85 60FFFFFF lea eax,dword ptr ss:[ebp-A0]
004268A8 66:C785 0CFFFFFF>mov word ptr ss:[ebp-F4],194
004268B1 BA 35C74800 mov edx,SDE3Serv.0048C735 ; ASCII "all"
......
00656C39 8A4424 04 mov al,byte ptr ss:[esp+4] ; [esp+4]=用户数
00656C3D E8 0C72F9FF call SDE3Serv.005EDE4E ; F7进入
00656C42 5A pop edx
......
005EDE4E /0F83 2E4A0500 jnb SDE3Serv.00642882
005EDE54 |0F82 0FD20200 jb SDE3Serv.0061B069
005EDE5A |9C pushfd
......
0047D8CD E8 4EE0FFFF call SDE3Serv.0047B920 ; F7进入
0047D8D2 83C4 0C add esp,0C
0047D8D5 EB 01 jmp short SDE3Serv.0047D8D8
0047D8D7 24 59 and al,59
0047D8D9 5A pop edx
0047D8DA 5D pop ebp
0047D8DB C3 retn
......
F8步进,大循环过程从略。
这里需要耐心,都是跳来跳去。
----------------------------------------------------------------------------------------------
在00656C39,F9三次,得到:
0047B9C6 F3:A4 rep movs byte ptr es:[edi],byte ptr ds:[esi] ; [esi]=用户数
0047B9C8 33C0 xor eax,eax
0047B9CA 5F pop edi
0047B9CB 5E pop esi
0047B9CC C3 retn
==========================================================================
0012FDBC 00000000
0012FDC0 00481850 SDE3Serv.00481850
0012FDC4 0047D8D2 返回到 SDE3Serv.0047D8D2 来自 SDE3Serv.0047B920
==========================================================================
==========================================================================
ecx=00000001 (十进制 1.)
ds:[esi]=[004A81E8]=02
es:[edi]=stack [0012FDFC]=00
==========================================================================
在数据窗口跟随[edi]
===========================================================================
004A81E8 02 02 02 02 02 02 02 02 00 00 00 00 00 00 00 00 ........
===========================================================================
呵呵,原来藏在这里了。
修改02为16进制的>FF=255任意数为用户数。 |
|