本帖最后由 mouse31rat 于 2017-3-21 18:31 编辑
0x01 前言
今天翻硬盘清理文件时发现了去年写的一个百度云管家提速工具,鉴于公开的程序容易被处理当时手头又有大把的文件需要下载所以最终没有发布在坛子里,时至今日程序已经不能使用,但是其中的思路完全可以借鉴并且在新版本重现,所以发来给想要做个使用时间长且自适应版本的比较一劳永逸的提速补丁的童鞋参考。
0x02 正文
当时也是比较随意,想着每次都CE修改300秒这么麻烦,而超过300秒可能又存在暗桩检查导致提速效果不明显,于是想着能否将点击“试用提速”按钮时调用的函数找出来,最简单的当然是直接CE查找修改该地址的指令然后看有无可疑函数了,但是CE附加后发现管家无提示退出,自然是存在调试检测了,于是开始检查云管家目录下的EXE/DLL的导入表,发现basement.dll中有IsDebuggerPresent十分可疑,
于是简单写了一个hook Isdebuggerpresent使其始终返回false的dll(文章最后提供源码下载),注入后实测可正常附加调试了;同时发现目录下有个kernel.dll名字如此的闪亮,让我们来看看有什么吧
SetTrySpeedup,多么闪亮的名字,果断OD跟进去看看这个函数(当时的图片已经找不到了,这里用新版云管家放OD看下,就该函数来说似乎与去年的版本差别不大)
[Asm] 纯文本查看 复制代码 10043EF0 >/$ 83EC 08 sub esp,0x8
10043EF3 |. 56 push esi
10043EF4 |. 8D7424 04 lea esi,dword ptr ss:[esp+0x4]
10043EF8 |. E8 43C1FEFF call kernel.10030040
10043EFD |. 8B30 mov esi,dword ptr ds:[eax]
10043EFF |. 807E 0C 00 cmp byte ptr ds:[esi+0xC],0x0
10043F03 |. 74 24 je short kernel.10043F29
10043F05 |. 8B86 C4000000 mov eax,dword ptr ds:[esi+0xC4]
10043F0B |. 83F8 FF cmp eax,-0x1
10043F0E |. 53 push ebx ; LoadDl_1.<ModuleEntryPoint>
10043F0F |. 8B5C24 14 mov ebx,dword ptr ss:[esp+0x14]
10043F13 |. 74 0D je short kernel.10043F22
10043F15 |. 6BC0 4C imul eax,eax,0x4C ; kernel.10000000
10043F18 |. 8B4430 54 mov eax,dword ptr ds:[eax+esi+0x54]
10043F1C |. 53 push ebx ; LoadDl_1.<ModuleEntryPoint>
10043F1D |. FFD0 call eax ; kernel.10000000
10043F1F |. 83C4 04 add esp,0x4
10043F22 |> 889E 98010000 mov byte ptr ds:[esi+0x198],bl
10043F28 |. 5B pop ebx ; LoadDl_1.60001057
10043F29 |> 8B7424 08 mov esi,dword ptr ss:[esp+0x8]
10043F2D |. 85F6 test esi,esi
10043F2F |. 74 2A je short kernel.10043F5B
10043F31 |. 8D4E 04 lea ecx,dword ptr ds:[esi+0x4]
10043F34 |. 83CA FF or edx,-0x1
10043F37 |. f0:0fc111 lock xadd dword ptr ds:[ecx],edx
10043F3B |. 75 1E jnz short kernel.10043F5B
10043F3D |. 8B06 mov eax,dword ptr ds:[esi]
10043F3F |. 8B50 04 mov edx,dword ptr ds:[eax+0x4]
10043F42 |. 8BCE mov ecx,esi
10043F44 |. FFD2 call edx
10043F46 |. 8D46 08 lea eax,dword ptr ds:[esi+0x8]
10043F49 |. 83C9 FF or ecx,-0x1
10043F4C |. f0:0fc108 lock xadd dword ptr ds:[eax],ecx
10043F50 |. 75 09 jnz short kernel.10043F5B
10043F52 |. 8B16 mov edx,dword ptr ds:[esi]
10043F54 |. 8B42 08 mov eax,dword ptr ds:[edx+0x8]
10043F57 |. 8BCE mov ecx,esi
10043F59 |. FFD0 call eax ; kernel.10000000
10043F5B |> 5E pop esi ; LoadDl_1.60001057
10043F5C |. 83C4 08 add esp,0x8
10043F5F \. C3 retn
看到这里我想大部分童鞋都知道怎么回事了,当时为了简单快速我直接用AA写了一段
[Asm] 纯文本查看 复制代码 [ENABLE]
globalalloc(mt,1024)
mt:
mov ebx,00000001
push ebx
call MMMMAAAA ;这里MMMMAAAA是SetTrySpeedup的VA地址
add esp,0x4 ;cdecl call当然要自己动手
ret
[DISABLE]
createthread(mt)
现在的版本当然不能直接使用这段脚本,思路就是这样,最近比较忙,有需要的童鞋自己动手研究下吧
0x03 文中的源码下载
HOOK isdebuggerpresent (这个东西比较通用把,不只是用在这里)和 获取settryspeedup的 动态衔接库是用VC 6 写的,界面和注入的aa脚本用的易语言。
IsDebuggerPresent hook dll:
hookisdebugpresent.rar
(16.13 KB, 下载次数: 179)
GetbaiduyunSetTrySpeedUp:
baidudll.rar
(1.15 MB, 下载次数: 361)
当时的成品加速器截图:
成品提速器源码打包(已不能直接使用):
baiduyun.rar
(429.56 KB, 下载次数: 1215)
|