冰楓論壇

標題: 技能注入call求助 [打印本頁]

作者: ningmeng    時間: 2021-11-8 01:22
標題: 技能注入call求助
上個版本有位大大新發布了一個新的技能注入的方法,但注入之後是普攻,所以我嘗試去分析他
其中有一段
call 0311ECC0
mov ebx,[eax+04]
mov ecx,[04386E60]
lea eax,[esp-0C]
push 01
push 00
push 00
push 00
push eax
push [skillid]
mov [esp-0C],00000000
push ebx
call 00A11BC0
.....省略
我認為是從這段遊戲的源碼改寫的
call 0311ECC0
cmp dword ptr [ebp-0C],00
mov eax,[eax+04]
mov [ebp-08],eax
........省略
mov ecx,[04386E60]
lea eax,[ebp-04]
push 01
push 00
push 00
push 00
push eax
mov eax,[ebp+08]
mov [ebp-04],00000000
push [eax]
push [ebp-08]
call 00A11BC0
......省略
我在想是否是技能id沒寫進去
TWMS 222.2
結合以前版上的歷史數據,我嘗試修改
mov eax,[skillid]
mov dword ptr [edi+000130E4],eax
push [edi+000130E4]
發現還是普攻,那麼就不是id沒push進去的問題。
我試著將原有的寫法,改為我認為應該是遊戲調用的寫法,但遊戲一下閃退了。
花了一段時間,我嘗試去辨認,push進去的其它值
lea eax,[esp-0C]
push 01
push 00
push 00
push 00
push eax
push [skillid]
mov [esp-0C],00000000
push ebx   // 我认为是正确的
call 00A11BC0
那麼問題應該是在[esp-0C]這裡
我想求助的是,我是否是往正確的方向上走,注入之後普攻的問題是否是[esp-0C],注入之後是普攻的問題是什麼導致的?




作者: 麗麗    時間: 2021-11-8 09:00
本帖最後由 麗麗 於 2021-11-8 09:02 編輯

是的,我这边游戏没更新,只能给你个老版本的 更新下就可以用了
这个是根据yutsaihsieh大佬 222版本发的那个写的,hook点是随便找了个游戏中会运行到的api
  1. // TwMS v237.1 ICS SkillInjection

  2. [ENABLE]
  3. Alloc(SkillInjection_ICS_ForwardTable,1024)
  4. Alloc(temp,128)
  5. RegisterSymbol(SkillInjectionSW)
  6. Alloc(SkillInjectionSW,4)
  7. RegisterSymbol(SkillInjectionDelay)
  8. Alloc(SkillInjectionDelay,4)
  9. RegisterSymbol(Skill_Injection_ID_List)
  10. Alloc(Skill_Injection_ID_List,64)
  11. RegisterSymbol(LastSkillID)
  12. Alloc(LastSkillID,4)
  13. Alloc(Timer,4)
  14. Alloc(Count,4)
  15. RegisterSymbol(Count)
  16. Alloc(Skill_Injection_ID_Counter,4)
  17. RegisterSymbol(Skill_Injection_ID_Counter)
  18. Label(InitSkillInjection)
  19. Label(SkillInjection_ICS)
  20. Label(Chk_Status)
  21. Label(SkillInjection)
  22. Label(L1)
  23. Label(SkillInjectionExit)


  24. //--------------------------------------------------------------------------------//
  25. Skill_Injection_ID_List:
  26. //dd skillid below

  27. dd 01E84BF6        // 32001014 死神
  28. dd 01E9CEAA        // 32100010 死神契約I
  29. dd 01E9F5C1        // 32110017 死神契約II
  30. dd 01EA1CD3        // 32120019 死神契約III

  31. dd 00 //end of list
  32. //--------------------------------------------------------------------------------//

  33. SkillInjectionDelay:
  34. DD 28

  35. SkillInjectionSW:
  36. DD 1

  37. Timer:
  38. DD 0

  39. Skill_Injection_ID_Counter:
  40. DD 0

  41. temp:
  42. DD 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

  43. SkillInjection_ICS_ForwardTable:
  44. cmp [esp],01A8A868
  45. jne USER32.ScreenToClient
  46. cmp [SkillInjectionSW],01
  47. jne USER32.ScreenToClient
  48. mov [esp],SkillInjection_ICS
  49. jmp USER32.ScreenToClient

  50. InitSkillInjection:
  51. cmp dword ptr [eax],0
  52. je SkillInjectionExit
  53. add eax,4
  54. inc [Skill_Injection_ID_Counter]
  55. jmp InitSkillInjection

  56. SkillInjection_ICS:
  57. pushad
  58. mov eax,Skill_Injection_ID_List
  59. cmp [Skill_Injection_ID_Counter],0
  60. je InitSkillInjection


  61. //------------------------------------//
  62. Chk_Status:
  63. mov eax,[041F8D30]
  64. test eax,eax
  65. je SkillInjectionExit
  66. mov eax,[050C3978]
  67. mov [LastSkillID],eax
  68. mov eax,[050BD6A0]
  69. cmp [eax+4],2
  70. jg SkillInjectionExit
  71. mov eax,[050BCAD0]
  72. mov eax,[eax+14]
  73. mov eax,[eax+000191D8+40]
  74. cmp eax,1
  75. jl SkillInjectionExit
  76. call 02E11170
  77. mov edx,eax
  78. sub edx,[Timer]
  79. cmp edx,[SkillInjectionDelay]
  80. jl SkillInjectionExit
  81. mov [Timer],eax
  82. mov ecx,[Skill_Injection_ID_Counter]
  83. mov [Count],ecx
  84. jmp SkillInjection
  85. //------------------------------------//


  86. SkillInjection:
  87. mov dword ptr [temp+08],00000000
  88. mov dword ptr [temp+10],00000000
  89. //------------------------------------
  90. mov edi,[041F8D30]
  91. mov ecx,[041F8A3C]
  92. lea eax,[temp]
  93. push eax
  94. call 03044850
  95. cmp dword ptr [temp+04],00
  96. mov eax,[eax+04]
  97. mov [temp+08],eax
  98. je L1
  99. push 00
  100. lea ecx,[temp]
  101. call 00492F70
  102. mov [temp+04],00000000
  103. //------------------------------------
  104. L1:
  105. mov ecx,[Count]
  106. dec ecx
  107. mov ecx,[Skill_Injection_ID_List+ecx*4]
  108. mov dword ptr [edi+00012368],ecx
  109. //------------------------------------
  110. mov ecx,[041F8A38]
  111. lea eax,[temp+10]
  112. push 01
  113. push 00
  114. push 00
  115. push 00
  116. push eax
  117. push [edi+00012368]
  118. mov [temp+10],00000000
  119. push [temp+08]
  120. call 009F1E50
  121. //------------------------------------
  122. push 00
  123. push 00
  124. push 00
  125. push 00
  126. push 00
  127. push 00
  128. push 01
  129. push 00
  130. push 00
  131. push 00
  132. push 00
  133. push 00
  134. push 00
  135. push 00
  136. push 00
  137. push 00
  138. push 00
  139. push 00
  140. push eax
  141. push [temp+10]
  142. mov ecx,edi
  143. call 02C4D840
  144. mov [edi+00012368],00000000
  145. dec [Count]
  146. cmp [Count],0
  147. jne SkillInjection
  148. //------------------------------------

  149. SkillInjectionExit:
  150. popad
  151. jmp 01A8A868

  152. 050BF274:
  153. DD SkillInjection_ICS_ForwardTable

  154. [DISABLE]
  155. 050BF274:
  156. DD USER32.ScreenToClient
複製代碼

作者: ningmeng    時間: 2021-11-9 01:45
讓來我試著回答我之前的問題,之前那位大大發的寫法有一點小問題,所以注入之後才會變成普攻。
既然之前的入參是 [esp - 14] , 那麼後面就不應該寫[esp - 0C],而是[esp - 04],並且沒有往edi中放入技能id,導致最後一個call push進去的edi裡面的技能id為0,所以最後打出來是普攻。
收穫還是很多,技能注入不會有一個標準的寫法,它可以hook任何api調用,或者更極端一點可以寫個線程調用,可以控制它的調用頻率或使用技能次數,並不是固定地一秒33次,而可以是更多次。
push 00
push 00
push 00
push 00
push 00
push 00
push ? ?
push 00
push 00
push 00
push ? ?
push? ?
push 01
push 00
push 00
push 00
push 00
push 00
push ecx
push edx
mov ecx,edi
遊戲裡的源碼,問號的地方都是沒有固定值的,可以填一些別的值,也是很有趣的一個地方。


此貼終結
作者: ningmeng    時間: 2021-11-10 22:35
更新一下我的错误,堆栈里保存的第一个出参,和第二个出参的位置间隔是8,所以,在push进call里的时候,两个数字相差8即可,需要保证保存出参的内存的干净,然后将skill放进edi即可
作者: v168    時間: 2021-11-10 22:56
ningmeng 發表於 2021-11-10 22:35
更新一下我的错误,堆栈里保存的第一个出参,和第二个出参的位置间隔是8,所以,在push进call里的时候,两 ...

分析的很詳細,可惜我還是更新不出來




歡迎光臨 冰楓論壇 (https://bingfong.com/) Powered by 冰楓