none
關於記憶體 陣列搜尋 問題 RRS feed

  • 一般討論

  • 您無法為自己的文章投票
    很不好意思 , 昨天不小心發錯區,到早上才發現到...
    ---

    請教前輩們 ,我 下面有一段程式 是參考網路上的 記憶體搜尋

    我想把他改寫成 多數 數值尋找

    意思 就是

    當我 輸入 16 進位  多個

    EX: "FF FC DA EE CD EE 12"

    我想要把 這段在記憶體中 搜尋他的位置 , 而我只能搜尋到 第二個 BYTES 超過之後 卻只會停留在第二個 位置....

    請教前輩 該怎麼改寫 ?

    下面是我稍微改寫 的 程式碼..

      Dim mysearch1() As String = Split(Trim(TextBox7.Text), " ")
    
      Dim mysearch(mysearch1.Length - 1) As Byte
    
        Dim mbi As MEMORY_BASIC_INFORMATION
    
      Dim BassAddr() As Integer = {0}
    
      Dim PageSize() As Integer, PageNum As Integer
    
      Dim tmpBassAddr As Integer, lBassAddr As Integer
    
      Dim big As Integer = &H400000 '取最小的搜尋位置
    
      Dim testnum, testnum2 As Integer
    
      Dim data() As Byte
    
    
    
      Dim i, j, k, n As Integer
    
    
    
      'MyOpenprocess_PID()
    
      ListBox3.Items.Clear()
    
    
    
      Do While VirtualQueryEx(hProcess, lBassAddr, mbi, Len(mbi))
    
       tmpBassAddr = mbi.BaseAddress
    
    
    
       If tmpBassAddr > big Then
    
        '取得最小位置
    
        'tmpBassAddr = tmpBassAddr + mbi.RegionSize
    
        If tmpBassAddr > &H7FFF0000 - 1 Then      
    
        Exit Do
    
        End If
    
    
    
        If mbi.State = MEM_COMMIT Then     
    
        If mbi.Protect And (PAGE_READWRITE Or PAGE_EXECUTE_READWRITE Or PAGE_EXECUTE_WRITECOPY) Then
    
    
    
          ReDim Preserve BassAddr(PageNum)
    
          ReDim Preserve PageSize(PageNum)
    
          BassAddr(PageNum) = mbi.BaseAddress
    
          PageSize(PageNum) = mbi.RegionSize
    
          PageNum = PageNum + 1
    
         End If
    
        End If
    
       End If
    
       tmpBassAddr = tmpBassAddr + mbi.RegionSize
    
       lBassAddr = tmpBassAddr  
    
       Loop
    
    
    
    
      For i = 0 To mysearch.Length - 1
    
       If mysearch1(i) <> "?" And mysearch1(i) <> "??" And mysearch1(i) <> "**" Then
    
        mysearch(i) = CByte(Convert.ToInt32(mysearch1(i), 16)) 
    
       End If
    
      Next
    
    
    
      
      Dim mysearch_num As Integer = mysearch.Length
    
    
    
      For i = 0 To PageNum - 1
    
       ReDim Data(PageSize(i))
    
       TestRPM(hProcess, BassAddr(i), Data, PageSize(i), 0&)
    
       For j = 0 To PageSize(i)
    
        If data(j) = mysearch(mysearch_num - 1) Then
    
         mysearch_num = +1
    
         For j1 = 1 To mysearch_num
    
          If data(j + j1) = mysearch(mysearch_num) Then
    
    
    
          
    
    
           ListBox3.Items.Add(Hex(BassAddr(i) + j))
    
    
    
           Application.DoEvents()
    
          End If
    
         Next
    
        End If
    
       Next
    
      Next
    
    
    
    
    2010年8月6日 下午 10:52

所有回覆

  • 你這好像是要做遊戲外掛程式...如果是我幫不了你的!
    2010年8月7日 上午 03:25
  • 工具在

    不能 用一個記憶體搜尋程式 就全歸類 作外掛程式吧?

    縱使 95 % 以上 很像作外掛的方面...

    然而使用方式如果不同 就不見得都是 作外掛

    例如 memory dump 他也是記憶體頃印

    那你是否歸類他屬於 hack方面?

     

    2010年8月7日 上午 03:32
  • 你先把版面排好吧,這樣很難看...
    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年8月7日 下午 12:38
  • 不好意思, 版面重新排好.

     

    2010年8月7日 下午 11:42
  • 白楓林:

     

    工具在

    不能 用一個記憶體搜尋程式 就全歸類 作外掛程式吧?

    縱使 95 % 以上 很像作外掛的方面...

    然而使用方式如果不同 就不見得都是 作外掛

    例如 memory dump 他也是記憶體頃印

    那你是否歸類他屬於 hack方面?

     

    你不知道嗎,就是有駭客是先用一個自己先寫好的記憶體搜尋程式來收詢遊戲記憶體的,因為是自己寫的,所以遊戲不容易參測到,我是懷疑你有這個動機才說

    >>你這好像是要做遊戲外掛程式...如果是我幫不了你的!<<

    如果我是說錯,請見諒,但如果跟我所說的如此相同,請 你 發揮公德心,別破壞人家良好的遊戲環境。

     

    2010年8月9日 下午 12:13
  • 討論原始碼時,如果是函數,應該要明確標明 Input / Output 才容易辨識,程式要有一個完整段落,非必要的應刪除,保留必要資訊跟資料內容、預期結果、實際結果,才能進行有效判斷。

    先把本版置頂的公告看看,看看怎樣發文吧。


    論壇是網友平等互助 保證解答請至 微軟技術支援服務
    提問時,錯誤情境描述與錯誤訊息很重要,情境描述包含你做了什麼,預期的結果與實際發生的結果。一個最爛的問法範例:「我的電腦電腦怎麼不能開機?」誰知道你家是不是沒電還是你根本找不到電源鈕。
    2010年8月9日 下午 04:11
  • 你需要針對你的問題進行簡化及必要說明,例如先準備一段精簡後的 Byte() 及欲搜尋 Byte() 及此範圍內的程式碼片段,比較容易了解你的目的及重點,人腦不是編譯器,針對完全沒做說明及切割的程式碼,要讀懂可能要花半小時以上,你認為網友有耐心花半小時以上來看嗎?
    T.L. Cheng
    2010年8月14日 上午 08:46
    版主