zoukankan      html  css  js  c++  java
  • 某游戏浏览器Flash加速dll调用,打造我们自己的Flash加速器

        前几天有个朋友让我帮忙看看一个叫"HookDll.dll"的dll里面的函数该怎么调用.

        他把dll的导出表截图我看了一下:

       

       后来才知道,原来这个hookdll.dll是某游戏浏览器里面的一个文件,而他的主要作用就是用作Flash加速...

       

       看上去貌似挺不错的,如果自己写一个小程序,也可以加速Flash那就好玩了.现在我们就来看看这几个dll怎么调用.需要传什么参数?

       直接IDA

      

       IDA载入进来Imagebase是 0x400000

       StartHook,EndHook,SetSpeed,SoundHook的RVA加上0x400000即他们对应代码的位置了.

       StartHook:

    CODE:004124E4                 public StartHook
    CODE:004124E4 StartHook       proc near
    CODE:004124E4                 push    ebp
    CODE:004124E5                 mov     ebp, esp
    CODE:004124E7                 call    sub_412434
    CODE:004124EC                 call    sub_4121EC
    CODE:004124F1                 mov     ds:dword_41488C, eax
    CODE:004124F7                 mov     ds:dword_414890, edx
    CODE:004124FD                 mov     eax, ds:dword_41488C
    CODE:00412503                 mov     ds:dword_414884, eax
    CODE:00412509                 mov     eax, ds:dword_414890
    CODE:0041250F                 mov     ds:dword_414888, eax
    CODE:00412515                 call    sub_412374
    CODE:0041251A                 pop     ebp
    CODE:0041251B                 retn    4
    CODE:0041251B StartHook       endp

    通过上面的代码我们可以看出 StartHook的函数定义应该是 void StartHook(void);

    继续看EndHook和StartHook类似,定义 void EndHook(void);

    SoundHook定义 void SoundHook(void);

    SetSpeed:

    CODE:00412538                 public SetSpeed
    CODE:00412538 SetSpeed        proc near
    CODE:00412538
    CODE:00412538 arg_0           = dword ptr  8
    CODE:00412538 arg_4           = dword ptr  0Ch
    CODE:00412538
    CODE:00412538                 push    ebp
    CODE:00412539                 mov     ebp, esp
    CODE:0041253B                 mov     eax, [ebp+arg_0]
    CODE:0041253E                 mov     dword ptr ds:dbl_414898, eax
    CODE:00412544                 mov     eax, [ebp+arg_4]
    CODE:00412547                 mov     dword ptr ds:dbl_414898+4, eax
    CODE:0041254D                 pop     ebp
    CODE:0041254E                 retn    8
    CODE:0041254E SetSpeed        endp

    通过上面的代码我们可以看出SetSpeed需要传入两个dword类型的参数,函数定义为 void SetSpeed(dword dw1,dword dw2);

    好了,现在我们相当于有了这个Hookdll的基本sdk了,可是SetSpeed这两个dword参数该传什么值呢?

    直接OllyDbg附加上了某游戏浏览器,查看一上HookDll被加载的基址,同理加上RVA得到代码的地址,然后F2下个断点,拖动一下加速条,SetSpeed则被断下来了.

    这里是加速接近2000%时传入的数值,0xCCCCCCCD,0x4033CCCC.

    具体这个数值我们就不研究了,我们来调用看看是否有效果.

    C++ code:[仅调用SetSpeed]

    typedef void (CALLBACK *lpFnSetSpeed)(DWORD,DWORD);

    int _tmain(int argc, _TCHAR* argv[])
    {
     HMODULE hMd=::LoadLibraryA("hookdll.dll");
     if(hMd==NULL)
     {
      printf("未找到 hookdll.dll");
      getchar();
      return 0;
     }
     lpFnSetSpeed fnSetSpeed=(lpFnSetSpeed)GetProcAddress(hMd,"SetSpeed");
     (*fnSetSpeed)(100,100);

     printf("调用成功!");

     getchar();
     return 0;
    }

    上面我们看不到效果,mfc里的网页控件也有用过,但是不熟悉了,还是直接上.net的代码吧

        public class FlashSpeed
        {
            [DllImport("hookdll.dll", EntryPoint = "StartHook", CharSet = CharSet.Ansi)]
            public static extern void StartHook();

            [DllImport("hookdll.dll", EntryPoint = "EndHook", CharSet = CharSet.Ansi)]
            public static extern void EndHook();

            [DllImport("hookdll.dll", EntryPoint = "SoundHook", CharSet = CharSet.Ansi)]
            public static extern void SoundHook();

            [DllImport("hookdll.dll", EntryPoint = "SetSpeed", CharSet = CharSet.Ansi)]
            public static extern void SetSpeed(int arg1, int arg2);
        }
        public partial class Form1 : Form
        {
            public Form1()
            {
                InitializeComponent();
            }
            private void Form1_Load(object sender, EventArgs e)
            {
               //某Flash游戏地址
               this.webBrowser1.Navigate("http://wpnm.91mangrandi.com/flash/mcdt/index.html?agent_id=54286&placeid=26752&type=4&game_id=102&aid=mcdt&rand=1&ref=26752.html&t=0.9260381994779965");
            }
            private void BtnSpeed_Click(object sender, EventArgs e)
            {
                FlashSpeed.StartHook();
                FlashSpeed.SetSpeed(0x43333333, 0x40333333);
                FlashSpeed.EndHook();
            }
        }

    Now,现在我们就实现自己的Flash加速器了:)

    以上只是娱乐,有兴趣的可以自己尝试一下~ hookdll是别人的东西,请忽商用,后果自负:)

  • 相关阅读:
    SpringCloud系列——TX-LCN分布式事务管理
    SpringCloud系列——限流、熔断、降级
    SpringBoot系列——Logback日志,输出到文件以及实时输出到web页面
    常用的js、java编码解码方法
    WebSocket数据加密——AES与RSA混合加密
    使用Fiddler重定向App的网络请求
    C# 调用 taskkill命令结束服务进程
    Install .Net Core For CentOS
    cron表达式详解[转]
    WinServer远程部署系统打包批处理文件
  • 原文地址:https://www.cnblogs.com/dreamzgj/p/2788635.html
Copyright © 2011-2022 走看看