- UID
- 10093
- 帖子
- 234
- 主題
- 77
- 精華
- 0
- 積分
- 83
- 楓幣
- 15776
- 威望
- 77
- 存款
- 0
- 贊助金額
- 0
- 推廣
- 6
- GP
- 4
- 閱讀權限
- 10
- 性別
- 保密
- 在線時間
- 117 小時
- 註冊時間
- 2012-7-12
- 最後登入
- 2019-6-3
|
作者:Aaaddress1
假設:
address - opcode
A - call B
C - nop
D - .....(之後不管它了)
============================
B - .....(前面也不理它)
...
..(中間一直都有程序再跑哦)
E - mov ecx,edx <---則我們可以從這裡開始修改.
F - mov eax,ebx
G - ret
============================
myset:
mov ecx,edx
mov eax,ebx
cmp [esp],C //這個位置等於G那個地址的RET的返回值,在A位置CALL的同時就會設定ESP值了
je Setting
ret //假如要改寫的位置不是我們要修改的位置,則跳回正確位置
Setting:
add esp,4 //復原消耗 假如你看不懂意思,就記下來吧,總之沒這行=斷線
[這裡就可以開始寫壞壞的東西]
jmp C //假若你確定ESP=C,則可以直接寫Ret
E:
jmp myset
========================================
補充:
cmp [esp]跟cmp esp ???
cmp esp是比較esp暫存器的value,但是cmp [esp]則是比較esp暫存器存放的數值的value值(這時請把它當作地址來看)
另外cmp [esp]也可以寫為cmp dword ptr [esp] 這兩個意思是一樣的,不過前者寫入記憶體會自動轉換為後者
ICS寫法呢?
|
|