ce吧 关注:195,824贴子:3,798,922

vb课程第二课,基础的写法,实现调用call

取消只看楼主收藏回复

在开课前给大家看个东西


1楼2019-06-24 20:05回复

    如果这样写,我们把生成的dll丢od看看会怎样

    很明显,有字符串特征,别人还容易破解,那么怎么影藏呢?请听我慢慢道来


    2楼2019-06-24 20:14
    回复

      假如我们把字符写成一个个unicode码组成呢?效果如下

      字符串就影藏了,这样,就不怕被特征了,不怕被别人破解了 !
      转换源码等我打包分享,上传


      4楼2019-06-24 20:21
      回复

        在dllmain函数哪里加上CreateIExprSrvObj 0, 4, 0
        为了vb的组件运行更稳定更快


        6楼2019-06-24 20:36
        回复

          添加一个模块

          新建一个吧

          在这里改模块名


          7楼2019-06-24 20:40
          回复
            Option Explicit
            Public Declare Function VirtualAllocEx Lib "kernel32" (ByVal hProcess As Long, ByVal lpAddress As Long, ByVal dwSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As Long
            Public Declare Function CreateThread Lib "kernel32" (ByVal lpSecurityAttributes As Long, ByVal dwStackSize As Long, ByVal lpStartAddress As Long, ByVal lpParameter As Any, ByVal dwCreationFlags As Long, lpThreadId As Long) As Long
            Public Type 参数
            address As Long 'addressof sub or fun
            ThreadInf As Long '线程信息
            CriticalAI As Long '临界区标识
            'reserved As Long
            Arguments As Long '参数数量
            End Type
            Public Const CREATE_DEFAULT = &H0& '默认值,创建一个立即运行的线程
            Public Function VBCreatThread(ByVal address As Long, ByVal CriticalAI As Long, ByRef ThreadID As Long) As Boolean
            Dim a As Long, HandleOfThread As Long, PassParameters As 参数, Arguments As Long
            Arguments = 1
            a = VirtualAllocEx(-1, 0, 20 + (Arguments * 4), MEM_COMMIT, PAGE_EXECUTE_READWRITE)
            If a = 0 Then: Exit Function
            With PassParameters
            .address = address '0
            .ThreadInf = 0 '4 线程返回信息
            .CriticalAI = CriticalAI '8
            .Arguments = Arguments * 4 '10
            End With
            RtlMoveMemory a, ByVal VarPtr(PassParameters), 20
            'WriteProcessMemory -1, a, ByVal VarPtr(PassParameters), 20, 0
            '-----------------------常规信息
            PutMem4 a + 20, 0&
            'WriteProcessMemory -1, a + 20, 0, Arguments * 4, 0
            '-----------------------参数信息
            HandleOfThread = CreateThread(ByVal 0&, ByVal 0&, address, a, ByVal CREATE_DEFAULT, ThreadID) '创建立即执行
            ' WaitForSingleObject 线程句柄, &HFFFF
            ' CloseHandle 线程句柄
            End Function
            '这里是线程循环结构
            Public Sub MainThread()
            Do While (True)
            PutMem4 &H400500, 1&
            Loop
            End Sub
            新建的模块添加上列代码,创建属于我们自己的线程执行我们自己的功能


            8楼2019-06-24 21:15
            回复

              dll入后添加如下代码!


              9楼2019-06-24 21:17
              回复
                '这里是线程循环结构
                Public Sub MainThread()
                Do While (True)
                PutMem4 &H400500, 1&
                Loop
                End Sub
                这段是线程不断循环的函数, 不断往400500里面写1,编译一个dll,上游戏看看效果,发现你把400500的数值改了,它又会马上写入1.那么你就创建线程成功了。


                10楼2019-06-24 21:19
                回复
                  创建线程成功,接下来就是要取,有用的模块


                  11楼2019-06-24 21:20
                  回复
                    新建一个模块,并命名为:GetMoudleHandle。


                    12楼2019-06-24 21:21
                    回复
                      '模块地址
                      Public MSVBVM60 As Long
                      Public Ntdll As Long
                      Public kernel32 As Long
                      Public KERNELBASE As Long
                      Public TerSafe As Long
                      Public TenRPCS As Long
                      Public GameRpcs As Long
                      Public DNFBase As Long
                      Public fmodex As Long
                      Public user32 As Long
                      Public Tcj As Long
                      Public MyDllHandle As Long
                      Public Ierd_Tgp_Lsp As Long
                      Public Gcloudvoice As Long
                      Public GameDataPlatformServer As Long
                      '函数地址
                      Public KERNELBASE_LoadLibraryExW As Long
                      Public MSVBVM60_vbaSetSystemError As Long
                      Public USER32_PeekMessageW As Long
                      Public MSVBVM60_Zombie_AddRef As Long
                      Public MSVBVM60_vbaCopyBytes As Long
                      Public Ntdll_NtAllocateVirtualMemory As Long
                      Public MSVBVM60_GetMem1 As Long
                      Public KERNELBASE_VirtualProtectEx As Long
                      Public Ntdll_RtlFlushSecureMemoryCache As Long
                      Public Ntdll_ZwProtectVirtualMemory As Long
                      '取函数地址
                      Public Function GetProAdd() As Long
                      Dim Name As String
                      Dim i As Long
                      'KERNELBASE.LoadLibraryExW
                      If KERNELBASE_LoadLibraryExW = 0 Then
                      Name = ChrW(&H4C) + ChrW(&H6F) + ChrW(&H61) + ChrW(&H64) + ChrW(&H4C) + ChrW(&H69) + ChrW(&H62) + ChrW(&H72) + ChrW(&H61) + ChrW(&H72) + ChrW(&H79) + ChrW(&H45) + ChrW(&H78) + ChrW(&H57)
                      KERNELBASE_LoadLibraryExW = GetProcAddress(KERNELBASE, Name)
                      If KERNELBASE_LoadLibraryExW <> 0 Then
                      i = i + 1
                      End If
                      Else
                      i = i + 1
                      End If
                      'MSVBVM60._vbaSetSystemError
                      If MSVBVM60_vbaSetSystemError = 0 Then
                      Name = ChrW(&H5F) + ChrW(&H5F) + ChrW(&H76) + ChrW(&H62) + ChrW(&H61) + ChrW(&H53) + ChrW(&H65) + ChrW(&H74) + ChrW(&H53) + ChrW(&H79) + ChrW(&H73) + ChrW(&H74) + ChrW(&H65) + ChrW(&H6D) + ChrW(&H45) + ChrW(&H72) + ChrW(&H72) + ChrW(&H6F) + ChrW(&H72)
                      MSVBVM60_vbaSetSystemError = GetProcAddress(MSVBVM60, Name)
                      If MSVBVM60_vbaSetSystemError <> 0 Then
                      i = i + 1
                      End If
                      Else
                      i = i + 1
                      End If
                      'USER32.PeekMessageW
                      If USER32_PeekMessageW = 0 Then
                      Name = ChrW(&H50) + ChrW(&H65) + ChrW(&H65) + ChrW(&H6B) + ChrW(&H4D) + ChrW(&H65) + ChrW(&H73) + ChrW(&H73) + ChrW(&H61) + ChrW(&H67) + ChrW(&H65) + ChrW(&H57)
                      USER32_PeekMessageW = GetProcAddress(user32, Name)
                      If USER32_PeekMessageW <> 0 Then
                      i = i + 1
                      End If
                      Else
                      i = i + 1
                      End If
                      'MSVBVM60.Zombie_AddRef
                      If MSVBVM60_Zombie_AddRef = 0 Then
                      Name = ChrW(&H5A) + ChrW(&H6F) + ChrW(&H6D) + ChrW(&H62) + ChrW(&H69) + ChrW(&H65) + ChrW(&H5F) + ChrW(&H41) + ChrW(&H64) + ChrW(&H64) + ChrW(&H52) + ChrW(&H65) + ChrW(&H66)
                      MSVBVM60_Zombie_AddRef = GetProcAddress(MSVBVM60, Name)
                      If MSVBVM60_Zombie_AddRef <> 0 Then
                      i = i + 1
                      End If
                      Else
                      i = i + 1
                      End If
                      'Ntdll.NtAllocateVirtualMemory
                      If Ntdll_NtAllocateVirtualMemory = 0 Then
                      Name = ChrW(&H4E) + ChrW(&H74) + ChrW(&H41) + ChrW(&H6C) + ChrW(&H6C) + ChrW(&H6F) + ChrW(&H63) + ChrW(&H61) + ChrW(&H74) + ChrW(&H65) + ChrW(&H56) + ChrW(&H69) + ChrW(&H72) + ChrW(&H74) + ChrW(&H75) + ChrW(&H61) + ChrW(&H6C) + ChrW(&H4D) + ChrW(&H65) + ChrW(&H6D) + ChrW(&H6F) + ChrW(&H72) + ChrW(&H79)
                      Ntdll_NtAllocateVirtualMemory = GetProcAddress(Ntdll, Name)
                      If Ntdll_NtAllocateVirtualMemory <> 0 Then
                      i = i + 1
                      End If
                      Else
                      i = i + 1
                      End If
                      'MSVBVM60.vbaCopyBytes
                      If MSVBVM60_vbaCopyBytes = 0 Then
                      Name = ChrW(&H5F) + ChrW(&H5F) + ChrW(&H76) + ChrW(&H62) + ChrW(&H61) + ChrW(&H43) + ChrW(&H6F) + ChrW(&H70) + ChrW(&H79) + ChrW(&H42) + ChrW(&H79) + ChrW(&H74) + ChrW(&H65) + ChrW(&H73)
                      MSVBVM60_vbaCopyBytes = GetProcAddress(MSVBVM60, Name)
                      If MSVBVM60_vbaCopyBytes <> 0 Then
                      i = i + 1
                      End If
                      Else
                      i = i + 1
                      End If
                      'MSVBVM60.GetMem1
                      If MSVBVM60_GetMem1 = 0 Then
                      Name = ChrW(&H47) + ChrW(&H65) + ChrW(&H74) + ChrW(&H4D) + ChrW(&H65) + ChrW(&H6D) + ChrW(&H31)
                      MSVBVM60_GetMem1 = GetProcAddress(MSVBVM60, Name)
                      If MSVBVM60_GetMem1 <> 0 Then
                      i = i + 1
                      End If
                      Else
                      i = i + 1
                      End If
                      'KERNELBASE.VirtualProtectEx
                      If KERNELBASE_VirtualProtectEx = 0 Then
                      Name = ChrW(&H56) + ChrW(&H69) + ChrW(&H72) + ChrW(&H74) + ChrW(&H75) + ChrW(&H61) + ChrW(&H6C) + ChrW(&H50) + ChrW(&H72) + ChrW(&H6F) + ChrW(&H74) + ChrW(&H65) + ChrW(&H63) + ChrW(&H74) + ChrW(&H45) + ChrW(&H78)
                      KERNELBASE_VirtualProtectEx = GetProcAddress(KERNELBASE, Name)
                      If KERNELBASE_VirtualProtectEx <> 0 Then
                      i = i + 1
                      End If
                      Else
                      i = i + 1
                      End If
                      'ntdll.RtlFlushSecureMemoryCache
                      If Ntdll_RtlFlushSecureMemoryCache = 0 Then
                      Name = ChrW(&H52) + ChrW(&H74) + ChrW(&H6C) + ChrW(&H46) + ChrW(&H6C) + ChrW(&H75) + ChrW(&H73) + ChrW(&H68) + ChrW(&H53) + ChrW(&H65) + ChrW(&H63) + ChrW(&H75) + ChrW(&H72) + ChrW(&H65) + ChrW(&H4D) + ChrW(&H65) + ChrW(&H6D) + ChrW(&H6F) + ChrW(&H72) + ChrW(&H79) + ChrW(&H43) + ChrW(&H61) + ChrW(&H63) + ChrW(&H68) + ChrW(&H65)
                      Ntdll_RtlFlushSecureMemoryCache = GetProcAddress(Ntdll, Name)
                      If Ntdll_RtlFlushSecureMemoryCache <> 0 Then
                      i = i + 1
                      End If
                      Else
                      i = i + 1
                      End If
                      'ntdll.ZwProtectVirtualMemory
                      If Ntdll_ZwProtectVirtualMemory = 0 Then
                      Name = ChrW(&H5A) + ChrW(&H77) + ChrW(&H50) + ChrW(&H72) + ChrW(&H6F) + ChrW(&H74) + ChrW(&H65) + ChrW(&H63) + ChrW(&H74) + ChrW(&H56) + ChrW(&H69) + ChrW(&H72) + ChrW(&H74) + ChrW(&H75) + ChrW(&H61) + ChrW(&H6C) + ChrW(&H4D) + ChrW(&H65) + ChrW(&H6D) + ChrW(&H6F) + ChrW(&H72) + ChrW(&H79)
                      Ntdll_ZwProtectVirtualMemory = GetProcAddress(Ntdll, Name)
                      If Ntdll_ZwProtectVirtualMemory <> 0 Then
                      i = i + 1
                      End If
                      Else
                      i = i + 1
                      End If
                      End Function


                      13楼2019-06-24 21:24
                      回复
                        好像被限制回帖了 被度娘怀疑灌水了


                        14楼2019-06-24 21:27
                        回复
                          '取模块句柄
                          Public Function GetMoudleHandle() As Long
                          Dim S As String
                          Dim i As Long
                          'ntdll
                          If Ntdll = 0 Then
                          S = ChrW(&H6E) + ChrW(&H74) + ChrW(&H64) + ChrW(&H6C) + ChrW(&H6C) + ChrW(&H2E) + ChrW(&H64) + ChrW(&H6C) + ChrW(&H6C)
                          Ntdll = GetModuleHandleW(StrPtr(S))
                          If Ntdll <> 0 Then
                          i = i + 1
                          End If
                          Else
                          i = i + 1
                          End If
                          'kernel32
                          If kernel32 = 0 Then
                          S = ChrW(&H6B) + ChrW(&H65) + ChrW(&H72) + ChrW(&H6E) + ChrW(&H65) + ChrW(&H6C) + ChrW(&H33) + ChrW(&H32) + ChrW(&H2E) + ChrW(&H64) + ChrW(&H6C) + ChrW(&H6C)
                          kernel32 = GetModuleHandleW(StrPtr(S))
                          If kernel32 <> 0 Then
                          i = i + 1
                          End If
                          Else
                          i = i + 1
                          End If
                          'KERNELBASE
                          If KERNELBASE = 0 Then
                          S = ChrW(&H4B) + ChrW(&H45) + ChrW(&H52) + ChrW(&H4E) + ChrW(&H45) + ChrW(&H4C) + ChrW(&H42) + ChrW(&H41) + ChrW(&H53) + ChrW(&H45) + ChrW(&H2E) + ChrW(&H64) + ChrW(&H6C) + ChrW(&H6C)
                          KERNELBASE = GetModuleHandleW(StrPtr(S))
                          If KERNELBASE <> 0 Then
                          i = i + 1
                          End If
                          Else
                          i = i + 1
                          End If
                          'TerSafe
                          If TerSafe = 0 Then
                          S = ChrW(&H54) + ChrW(&H65) + ChrW(&H72) + ChrW(&H53) + ChrW(&H61) + ChrW(&H66) + ChrW(&H65) + ChrW(&H2E) + ChrW(&H64) + ChrW(&H6C) + ChrW(&H6C)
                          TerSafe = GetModuleHandleW(StrPtr(S))
                          If TerSafe <> 0 Then
                          i = i + 1
                          End If
                          Else
                          i = i + 1
                          End If
                          'TenRPCS
                          If TenRPCS = 0 Then
                          S = ChrW(&H54) + ChrW(&H65) + ChrW(&H6E) + ChrW(&H52) + ChrW(&H50) + ChrW(&H43) + ChrW(&H53) + ChrW(&H2E) + ChrW(&H64) + ChrW(&H6C) + ChrW(&H6C)
                          TenRPCS = GetModuleHandleW(StrPtr(S))
                          If TenRPCS <> 0 Then
                          i = i + 1
                          End If
                          Else
                          i = i + 1
                          End If
                          'GameRpcs
                          If GameRpcs = 0 Then
                          S = ChrW(&H47) + ChrW(&H61) + ChrW(&H6D) + ChrW(&H65) + ChrW(&H52) + ChrW(&H70) + ChrW(&H63) + ChrW(&H73) + ChrW(&H2E) + ChrW(&H64) + ChrW(&H6C) + ChrW(&H6C)
                          GameRpcs = GetModuleHandleW(StrPtr(S))
                          If GameRpcs <> 0 Then
                          i = i + 1
                          End If
                          Else
                          i = i + 1
                          End If
                          'DNFBase
                          If DNFBase = 0 Then
                          S = ChrW(&H44) + ChrW(&H4E) + ChrW(&H46) + ChrW(&H42) + ChrW(&H61) + ChrW(&H73) + ChrW(&H65) + ChrW(&H2E) + ChrW(&H64) + ChrW(&H6C) + ChrW(&H6C)
                          DNFBase = GetModuleHandleW(StrPtr(S))
                          If DNFBase <> 0 Then
                          i = i + 1
                          End If
                          Else
                          i = i + 1
                          End If
                          'fmodex
                          If fmodex = 0 Then
                          S = ChrW(&H66) + ChrW(&H6D) + ChrW(&H6F) + ChrW(&H64) + ChrW(&H65) + ChrW(&H78) + ChrW(&H2E) + ChrW(&H64) + ChrW(&H6C) + ChrW(&H6C)
                          fmodex = GetModuleHandleW(StrPtr(S))
                          If fmodex <> 0 Then
                          i = i + 1
                          End If
                          Else
                          i = i + 1
                          End If
                          'MSVBVM60
                          If MSVBVM60 = 0 Then
                          S = ChrW(&H4D) + ChrW(&H53) + ChrW(&H56) + ChrW(&H42) + ChrW(&H56) + ChrW(&H4D) + ChrW(&H36) + ChrW(&H30) + ChrW(&H2E) + ChrW(&H64) + ChrW(&H6C) + ChrW(&H6C)
                          MSVBVM60 = GetModuleHandleW(StrPtr(S))
                          If MSVBVM60 <> 0 Then
                          i = i + 1
                          End If
                          Else
                          i = i + 1
                          End If
                          'USER32
                          If user32 = 0 Then
                          S = ChrW(&H55) + ChrW(&H53) + ChrW(&H45) + ChrW(&H52) + ChrW(&H33) + ChrW(&H32) + ChrW(&H2E) + ChrW(&H64) + ChrW(&H6C) + ChrW(&H6C)
                          user32 = GetModuleHandleW(StrPtr(S))
                          If user32 <> 0 Then
                          i = i + 1
                          End If
                          Else
                          i = i + 1
                          End If
                          'tcj
                          If Tcj = 0 Then
                          S = ChrW(&H74) + ChrW(&H63) + ChrW(&H6A) + ChrW(&H2E) + ChrW(&H64) + ChrW(&H6C) + ChrW(&H6C)
                          Tcj = GetModuleHandleW(StrPtr(S))
                          If Tcj <> 0 Then
                          i = i + 1
                          End If
                          Else
                          i = i + 1
                          End If
                          'Ierd_Tgp_Lsp
                          If Ierd_Tgp_Lsp = 0 Then
                          S = ChrW(&H49) + ChrW(&H65) + ChrW(&H72) + ChrW(&H64) + ChrW(&H5F) + ChrW(&H54) + ChrW(&H67) + ChrW(&H70) + ChrW(&H5F) + ChrW(&H4C) + ChrW(&H73) + ChrW(&H70) + ChrW(&H2E) + ChrW(&H64) + ChrW(&H6C) + ChrW(&H6C)
                          Ierd_Tgp_Lsp = GetModuleHandleW(StrPtr(S))
                          If Ierd_Tgp_Lsp <> 0 Then
                          i = i + 1
                          End If
                          Else
                          i = i + 1
                          End If
                          'Gcloudvoice
                          If Gcloudvoice = 0 Then
                          S = ChrW(&H47) + ChrW(&H63) + ChrW(&H6C) + ChrW(&H6F) + ChrW(&H75) + ChrW(&H64) + ChrW(&H76) + ChrW(&H6F) + ChrW(&H69) + ChrW(&H63) + ChrW(&H65) + ChrW(&H2E) + ChrW(&H64) + ChrW(&H6C) + ChrW(&H6C)
                          Gcloudvoice = GetModuleHandleW(StrPtr(S))
                          If Gcloudvoice <> 0 Then
                          i = i + 1
                          End If
                          Else
                          i = i + 1
                          End If
                          If i = 10 Then
                          IsGetMoudle = &HFFFFFFFF
                          End If
                          'GameDataPlatformServer
                          If GameDataPlatformServer = 0 Then
                          S = ChrW(&H47) + ChrW(&H61) + ChrW(&H6D) + ChrW(&H65) + ChrW(&H44) + ChrW(&H61) + ChrW(&H74) + ChrW(&H61) + ChrW(&H50) + ChrW(&H6C) + ChrW(&H61) + ChrW(&H74) + ChrW(&H66) + ChrW(&H6F) + ChrW(&H72) + ChrW(&H6D) + ChrW(&H53) + ChrW(&H65) + ChrW(&H72) + ChrW(&H76) + ChrW(&H65) + ChrW(&H72) + ChrW(&H2E) + ChrW(&H64) + ChrW(&H6C) + ChrW(&H6C)
                          GameDataPlatformServer = GetModuleHandleW(StrPtr(S))
                          If GameDataPlatformServer <> 0 Then
                          i = i + 1
                          End If
                          Else
                          i = i + 1
                          End If
                          If i = 10 Then
                          IsGetMoudle = &HFFFFFFFF
                          End If
                          End Function


                          15楼2019-06-24 21:27
                          回复
                            上面这段是取模块,上上面的是取函数地址,几乎用到的都在这里了。


                            16楼2019-06-24 21:27
                            回复


                              17楼2019-06-24 21:30
                              回复