[簡易篇]ICS解析(利用Call達到無須Bypass就可以使用的數據)

好擔心講錯> < ...歡迎高手指正,只是最最簡單的講解(感覺上好像簡寫淫水機大大那篇~)而已...

最簡單(常見)的ICS是利用Call跳轉時儲存的Esp修改來達成...甚麼意思呢?



Call 與其他 Jmp Jne ...(J開頭的) 差別在於它執行完會返回原來位置
所以為了知道要跳回的地址因此要儲存於Esp當中~
  1. 005C9F67 - ff 15 dc 67 c9 00     - call dword ptr [00c967dc] : 76DA561E //IsRectEmpty
  2. 005C9F6D - 85 c0                      - test eax,eax
  3. 005C9F6F - 74 0e                      - je 005c9f7f
這邊用 TwMS 138 完全無敵 ICS 來示範

重點:
  1. 00c967dc: //此為Call所存放位置的地址...
  2. DD AwesomeMan

  3. AwesomeMan: //這邊是要檢查是否進行Hook動作
  4. cmp [esp],005C9F6D //不進行-跳回原本Call位置的下一行~
  5. jne IsRectEmpty
  6. mov [esp],Invincible //Hook,跳至我們的數據
  7. jmp IsRectEmpty

  8. Invincible: //這邊就是進行Hook的數據啦!(Call的下一行)
  9. test eax,eax
  10. jmp 005C9F71
IsRectEmpty這東西是甚麼 ? 00c967dc原先存放的地址是IsRectEmpty這個地址

我們判斷不是我們要修改的之後 , 跳過去IsRectEmpty , 因為我們沒有修改到ESP , 當返回時還是返回到005C9F6D

所以程式可以正常的繼續執行而不會崩潰 ~ 那如果當判斷到是我們要搞的人要如何動作呢 ??

mov [esp],Invincible (我們將ESP寫入我們的地址 , 並讓程式繼續執行原先動作 , 當執行完返回到我們的地址 )

所以程式是返回到我們這邊 , 我們這邊就可以加入HOOK的數據 , 來實現無敵功能囉 ~
-引用 淫水機 ICS解析

簡單來說...要找ICS數據
在你想的數據上面找像call dword ptr [00c967dc]這種樣子的Call (小提示:請UCE 檢視->顯示符號(Show Symbol)別勾)

就這樣啦~這是看起來最簡單的利用Call達成的ICS數據寫法...

留言

  1. 你好
    我對此也小有研究
    但苦無入門之道
    寫了幾年的C/C++ java C# VB
    也對OS 組語 計算機組織有了解
    格主您如不吝賜教
    可否給我連絡方式

    回覆刪除
    回覆
    1. 賜教不敢,可相互討論
      小弟才疏學淺也正在學習
      不知是否有即時通

      刪除
  2. 你好 請問可以做一段輸入TWMS數據的影片嗎?

    回覆刪除
  3. 我想問問一些問題
    我對ICS不太了解,我沒玩過楓之谷,希望解答一下
    找00C967DC 是找CRC數據向上看最接近的那一個call dword ptr嗎?
    我發現很多值也是傳入00C967DC
    把它寫成自己的數據遊戲就整個斷了

    回覆刪除
    回覆
    1. 在本篇教學中,的確就是找最近的Call點
      至於很多地址會經過所以才需要用cmp [esp],005C9F6D
      來確定是否是我們要修改的那個地址...

      刪除
    2. 大大所以cmp [esp],005C9F6D 是把
      call dword ptr [00c967dc]裡的00c967dc
      跳到005C9F6D嗎?

      刪除
  4. " 00c967dc原先存放的地址是IsRectEmpty這個地址"

    IsRectEmpty 是從哪看出來的?..怎麼還原?...

    回覆刪除
    回覆
    1. 1.那是API
      2.在CE(LE)後面有附註欄

      刪除
    2. ㄜ..原來讀138版CEM之後到005C9F67 後面沒有 IsRectEmpty
      但直接讀取遊戲再到005EA1C3(146.3的無敵)就可以看到
      摁....難怪我看好久 啥都沒看到-.-

      刪除
  5. 那請問如果是 Call XXXXXXXX 這種的呢
    就沒辦法寫成ICS那樣了嗎

    回覆刪除
    回覆
    1. 不一定,通常會牽扯到Esp的運算,不再本篇的教學範圍內

      刪除
    2. 我都和你同一個問題
      Albert大,如果想修改的基址上面只有Call XXX
      沒有call dword ptr [XXX]
      那應該如何做,請教大大
      另外,如果能與你直接交流,能加我即時通:alanlei22@yahoo.com.hk?

      刪除
  6. Albert大,如果想修改的基址上面只有Call XXX
    沒有call dword ptr [XXX]
    那應該如何做,請教大大
    另外,如果能與你直接交流,能加我即時通:alanlei22@yahoo.com.hk?

    回覆刪除
  7. 請教像call dword ptr [eax+58]這種的該如何寫ICS呢

    回覆刪除
  8. 請問
    005C9F6F - 74 0e - je 005c9f7f
    和這個
    jmp 005C9F71
    應該是有一個打錯!?
    還是005C9F71是從別的地方找到的?

    回覆刪除
    回覆
    1. Jmp 005C9F71
      是je 005c9f7f的下一行,005C9F7有兩Byte所以下一行的Adr就是005C9F71...
      跳過那個Je即是無敵

      刪除
    2. 感謝大大^^
      原來如此@@

      刪除
  9. 小弟之前 也有學過基礎的C語言~

    小弟想問 大大以上所談 都是用組合語言 去寫的程式嗎?

    想徹底了解一下 感恩!

    回覆刪除
    回覆
    1. 以上所談是單純的組合語言,並不包含程式部分
      本人C++也還在學習階段...

      刪除
  10. 可是大大這篇(疾風合併法則,學會.. ICS不是問題)
    和現在這篇(利用Call達到無須Bypass就可以使用的數據)疾風合併法則他是用CMP?
    則這篇是用CALL嗎?
    請大大賜教~~

    回覆刪除

張貼留言

本月最夯