作者BingJing (京醬)
看板CSIE_ASM
標題[問題] 病毒複製長度與資料位移
時間Wed Dec 31 16:23:22 2008
1.要怎麼計算要複製的病毒大小?
我看過B8X的學長是用EQU做的
...
mov cx,ssize
...
...
ssize EQU $ - offset virus_begin
不過是錯的,根據仔細的觀察機械碼後,並沒有複製全部,少了約2/5
我想了很久改成
...
enddd BYTE ?
ssize EQU offset enddd + 1 - offset virus_begin
就好像對了,可是幾乎全部的.com病毒都有用到$號來算長度,
可以請問有人知道怎麼做比較好? 跟不會要用手數吧@@
2.讀資料的位移(solved)
因為病毒是貼在後面,所以包含變數的資料也會後移
我現在是在真正病毒開始的地方加標記,然後呼叫這個標記
在將呼叫點的IP推出來減掉原本的標記座標
call virus_begin
virus_begin:
pop SI
sub SI,OFFSET virus_begin
可是現在一直錯誤.... 有些.com會成功執行原程式
大部分的.com會cored-dumped
所有的.com已喪失再感染其他程式的能力
想請問應該要怎麼弄? JMP要注意要扣掉3bits或2bits的IS
才是相對位置
謝謝
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.30.38
※ 編輯: BingJing 來自: 140.112.30.38 (12/31 17:16)
推 imprazaguy:1.我是在病毒尾巴設label virus_end,然後病毒長度就可 01/01 15:36
→ imprazaguy:以經由virus_end-virus_start求出 01/01 15:37
→ imprazaguy:2.跟你方式一樣,不過沒問題 01/01 15:38
→ BingJing:嗯嗯 謝謝^^ 01/01 15:54
推 Johnny31525:請問EQU那個值不是assembler在編譯時就決定了嗎? 01/03 22:47
→ Johnny31525:這樣會跟著位置變動而跑嘛? 01/03 22:48
→ Johnny31525:還有JMP 實際編出來可能是3BYTE也可能是2BYTE的樣子 01/03 22:49
→ Johnny31525:啊抱歉 前面EQU $那部份我誤解你意思 當我沒說 01/03 22:50