ce吧 关注:195,751贴子:3,798,599

vb第六课,如何快速调用call(非内联汇编,非置入代码)

只看楼主收藏回复

学vb好处:
1.不用求人要CE,更不用出钱买CE买辅助。
2.我教的东西读写效率,我打包票仅次于C++,与个别高端E语言开发不分伯仲
3.VB还是一门正经语言。
4.可以分析数据直接翻译成源码,编译器来帮你编译,岂不美哉!
第一课:知识点(VB的安装以及如何编译标准dll)
https://tieba.baidu.com/p/6170634537
第二课:知识点(劫持框架建立,以及调用call例子)
https://tieba.baidu.com/p/6173441612
第三课: 知识点(如何分析内存并把他们翻译成VB源码)
https://tieba.baidu.com/p/6182799706
第四课:知识点(简单分析call并翻译成源代码)
https://tieba.baidu.com/p/6189545237
第五课:知识点(如何去hook)
https://tieba.baidu.com/p/6192800162
第六课:知识点(如何使用指针函数,获取游戏数据)
https://tieba.baidu.com/p/6199306568
以上课程内容90%需要我的集成读写模块,请下载我的读写模块后在参考学习!正常VB做不到十分效率的东西,而我是对vb进行了比较底层的优化,才达到如此高的读写效率。


1楼2019-07-28 05:43回复
    课程源码,课后,帖子尾部贴出!


    2楼2019-07-28 05:44
    回复
      调用call:
      第一种约定stcall:
      push 参数n
      ……
      push 参数3
      push 参数2
      push 参数1
      call 函数
      vb调用:
      stcall(n) 函数地址,参数1,参数2,……,参数n
      n是指参数个数
      第二种Cdecl:
      push 参数n
      ……
      push 参数3
      push 参数2
      push 参数1
      call 函数
      add esp,4*N (N指参数个数)
      vb调用:
      Cdecl(n) 函数地址,参数1,参数2,……,参数n
      n是指参数个数
      第三种 类与对象call,由于调用速度比前面两种快,我vb叫它fastcall
      push 参数n
      ……
      push 参数3
      push 参数2
      push 参数1
      mov ecx,对象指针
      call 函数
      vb调用:
      fastcall(n) 函数地址,对象指针,参数1,参数2,……,参数n
      n是指参数个数


      3楼2019-07-28 05:52
      回复
        上游戏看下组包函数的调用实战一下吧


        4楼2019-07-28 05:52
        收起回复
          .常量 赋值CALL,58058416, 375E6B0 7度_获取 取出发包对象临时指针(实际上就是个rbq指针)
          .常量 缓冲CALL,58060640, 375EF60 7度_获取 写包头的
          .常量 密钥CALL,59594560, 38D5740 7度_获取 加密发包内容的
          .常量 发包CALL,58066848, 37607A0 7度_获取 发送给服务端
          Public Const GetPackCall As Long = &H375E6B0 '取发包指针call 赋值call
          Public Const Send_Buffer_Call As Long = &H375EF60 '发包组包缓冲call
          Public Const Send_Encrypt_Call As Long = &H38D5740 '发包组包加密call
          Public Const Send_Pack_Call As Long = &H37607A0 '发包组包call


          5楼2019-07-28 06:01
          回复
            dnf真强,最新w10系统又蓝屏了


            来自Android客户端6楼2019-07-28 06:11
            回复

              上面是赋值call 由于赋值call的返回是ret 且 下面 没有 add esp,4*n, 缓冲call 返回是 ret 08 且 ecx是对象指针,所以有
              '组包发包缓冲call
              Public Sub SendBufferCall(ByVal ID As Long)
              Fastcall1 Send_Buffer_Call, Stcall(GetPackCall), ID
              End Sub
              可以理解为
              Public Sub SendBufferCall(ByVal ID As Long)
              dim 对象指针 as long = Stcall(GetPackCall)
              Fastcall1 Send_Buffer_Call, 对象指针, ID
              End Sub
              函数直接写在函数里就是取该函数的返回值当参数用


              7楼2019-07-28 06:23
              回复

                P代表参数
                obj pointer 代表对象指针
                write是写 op是obj pointer 的缩写
                很明显这是 有2个参数的fastcall 第一个参数是指针传参 第二个参数是按值传参 且执行前还往 对象指针偏移0x2BCC34写入值
                所以有
                Public Const PackLenthOffest As Long = &H2BCC2C '组包长度偏移
                '组包发包加密call
                Public Sub SendEncryptCall(ByVal SendContent As Long, ByVal Lenth As Long)
                Dim Ecx As Long
                Ecx = Stcall(GetPackCall)
                PutMem4 Ecx + PackLenthOffest, LPoint(Ecx + PackLenthOffest) + 4
                Fastcall2 Send_Encrypt_Call, Ecx, VarPtr(SendContent), Lenth
                End Sub


                8楼2019-07-28 06:31
                收起回复

                  发包call 就简单了
                  无参函数
                  '组包发包call
                  Public Sub SendPackCall()
                  Stcall Send_Pack_Call
                  End Sub


                  9楼2019-07-28 06:33
                  回复

                    这段翻译成VB的代码就是
                    '组包整理
                    Public Sub SendClearUp()
                    SendBufferCall 20
                    SendEncryptCall 6, 4
                    SendEncryptCall 16, 1
                    SendEncryptCall 0, 1
                    SendEncryptCall 24, 1
                    SendEncryptCall 1, 1
                    SendEncryptCall 32, 1
                    SendEncryptCall 0, 1
                    Stcall Send_Pack_Call
                    End Sub
                    如果没变应该是这样,至于为何是参数是反过来的,我的是翻译dnf,这个帖子的主人是自己集成的加密call
                    原帖子:https://tieba.baidu.com/p/5545755841


                    10楼2019-07-28 06:47
                    回复
                      要实现发包还需要内联主线程,这样才能够不冲突,乱发包队列冲突会导致网络连接中断,顺便也教大家VB内联dnf的方法


                      11楼2019-07-28 06:51
                      收起回复

                        内联思路就是这样


                        12楼2019-07-28 06:55
                        回复

                          工具源码在我的github项目里面有,自己取下载
                          hook字节集
                          ASM_H(0)=&H60:ASM_H(1)=&HE8:ASM_H(2)=&HFA:ASM_H(3)=&H00
                          ASM_H(4)=&H00:ASM_H(5)=&H00:ASM_H(6)=&H61:ASM_H(7)=&H83
                          ASM_H(8)=&H04:ASM_H(9)=&H24:ASM_H(10)=&H01:ASM_H(11)=&H64
                          ASM_H(12)=&HA1:ASM_H(13)=&H00:ASM_H(14)=&H00:ASM_H(15)=&H00
                          ASM_H(16)=&H00:ASM_H(17)=&HC3
                          还原字节集
                          re_b(0)=&H64:re_b(1)=&HA1:re_b(2)=&H00:re_b(3)=&H00
                          re_b(4)=&H00:re_b(5)=&H00


                          13楼2019-07-28 06:59
                          回复
                            啥都不说,先顶一下


                            IP属地:安徽来自Android客户端14楼2019-07-28 07:05
                            回复
                              Public IsClearUp As Long
                              Private re_b(5) As Byte
                              '初始化发包函数
                              Public Sub InitInlineSend()
                              Dim ASM_H(17) As Byte
                              '还原字节集 存一份 执行完组包自己还原 可以直接用 这里我就不写自动还原字节集了 大家自己写
                              re_b(0) = &H64: re_b(1) = &HA1: re_b(2) = &H0: re_b(3) = &H0
                              re_b(4) = &H0: re_b(5) = &H0
                              'hook 字节集 内联的
                              ASM_H(0) = &H60: ASM_H(1) = &HE8: ASM_H(2) = &HFA: ASM_H(3) = &H0
                              ASM_H(4) = &H0: ASM_H(5) = &H0: ASM_H(6) = &H61: ASM_H(7) = &H83
                              ASM_H(8) = &H4: ASM_H(9) = &H24: ASM_H(10) = &H1: ASM_H(11) = &H64
                              ASM_H(12) = &HA1: ASM_H(13) = &H0: ASM_H(14) = &H0: ASM_H(15) = &H0
                              ASM_H(16) = &H0: ASM_H(17) = &HC3
                              '这里是hook
                              ASMRW.ArraySet_B AddressOf Send_AsmInline, ASM_H
                              ASMRW.BufferJC 1, AddressOf RunMySend '重组call 矫正call地址
                              ASMRW.ArrayW_L
                              End Sub
                              '执行发包功能的函数
                              Public Sub RunMySend()
                              End Sub
                              'hook内联函数
                              Public Sub Send_AsmInline()
                              Space (100)
                              Sin (1000)
                              Tan (100)
                              End Sub


                              15楼2019-07-28 07:10
                              收起回复