下面在來看一段關於0x7380ac95的**
7380adb4 |> 56 push esi
7380adb5 |. e8 58140000 call winabc.7380c212
7380adba |. 85c0 test eax,eax
7380adbc |. 74 20 je short winabc.7380adde
7380adbe |. 66:83fe 76 cmp si,76 ; 與'v'比較
7380adc2 |. c605 b0298173 >mov byte ptr ds:[738129b0],3
7380adc9 |. 0f94c0 sete al ; 不是的話al=0
7380adcc |. a2 6c488173 mov byte ptr ds:[7381486c],al ; 是v的話進入v輸入狀態
7380add1 |. e8 f6110000 call winabc.7380bfcc
7380add6 |. 391d cc558173 cmp dword ptr ds:[738155cc],ebx
7380addc |. eb 23 jmp short winabc.7380ae01
v的輸入狀態不同,比如vabc 會輸入abc英文,v1什麼的為特殊字元和符號。
下面去找出問題的地方
7380ac81 |. 33db xor ebx,ebx
.......
7380ae08 |> 0fb7c6 movzx eax,si ; case 3 of switch 7380ace2
7380ae0b |. 50 push eax
7380ae0c |. e8 340a0000 call winabc.7380b845
7380ae11 |. 2bc3 sub eax,ebx
7380ae13 |. 74 26 je short winabc.7380ae3b
.......
7380ae3b |> 381d 6c488173 cmp byte ptr ds:[7381486c],bl ;ds:[7381486c]=2
7380ae41 |. 74 22 je short winabc.7380ae65 ;沒有發生跳轉,正常情況下0x73811f52肯定大於0
7380ae43 |. 0fb705 521f817>movzx eax,word ptr ds:[73811f52] ;ds:[73811f52]為0
7380ae4a |. 48 dec eax ;ffffffff
7380ae4b |. c605 cc758173 >mov byte ptr ds:[738175cc],2
7380ae52 |. 50 push eax
7380ae53 |. 68 561f8173 push winabc.73811f56
7380ae58 |. e8 fa140000 call winabc.7380c357
7380ae5d |. 881d 6c488173 mov byte ptr ds:[7381486c],bl ;函式將發生錯誤
7380ae63 |. eb 31 jmp short winabc.7380ae96
如果del刪去v,ds:[73811f52]變數為0,但是ds:[7381486c]=2沒有變為0,仍然在輸入中途狀態,dec eax是為了取得除了v之外的字母串的長度,結果這裡變為 0xffffffff,7380ae5d |. 881d 6c488173 mov byte ptr ds:[7381486c],bl 中 函式沒有做檢查。
7380c4c8 0fb745 10 movzx eax,word ptr ss:[ebp+10] ; eax = 0xffff
7380c4cc 8bc8 mov ecx,eax
7380c4ce 8bfb mov edi,ebx
7380c4d0 037b 58 add edi,dword ptr ds:[ebx+58]
7380c4d3 03f3 add esi,ebx
7380c4d5 8b75 0c mov esi,dword ptr ss:[ebp+c]
7380c4d8 8bd1 mov edx,ecx
7380c4da c1e9 02 shr ecx,2 ; ecx = 0x3fff
7380c4dd 8943 54 mov dword ptr ds:[ebx+54],eax
7380c4e0 03c3 add eax,ebx
7380c4e2 f3:a5 rep movs dword ptr es:[edi],dword ptr ds> ; 拷貝0x3fff個int
看到了嗎,出錯的地方。在這裡溢位了。
還有這個問題
7380b416 /$ 803d c0558173 >cmp byte ptr ds:[738155c0],0aa
7380b41d |. 56 push esi
7380b41e |. 74 2d je short winabc.7380b44d
7380b420 |. 66:8b0d 545e81>mov cx,word ptr ds:[73815e54] ; cx = 0
7380b427 |. 66:49 dec cx ; cx = 0xffff
7380b429 |. 0fb7c1 movzx eax,cx
7380b42c |. 66:890d 545e81>mov word ptr ds:[73815e54],cx
7380b433 |. 0fb690 405e817>movzx edx,byte ptr ds:[eax+73815e40]
7380b43a |. 0fb680 415e817>movzx eax,byte ptr ds:[eax+73815e41]
ds:0x73815e54表示當前輸入欄中有多少字/詞 ds:[738129b0]=0時上面的**會被用到。當用退格消去輸入欄中最後乙個漢字時ds:[73815e54]=0,ds:[738129b0]應該變成3,表示進入輸入狀態.但是我們隨便輸入乙個詞,然後輸入任意字元,按"←",退格,回車,在輸入框中得到前一詞的預設字,然後連按兩次退格。輸入第乙個退格鍵,ds:[73815e54]=1,可是ds:[738129b0]並沒有變成3,再次按下退格鍵,函式又執行到這裡,cx變為0xffff,就出錯了。
因為程式可以導致ime所hook的程序退出。所以像永珍那樣的網咖管理軟體會立刻出錯而退出程序.而3389登陸也會出錯。不過對遠端主機似乎沒有影響。。。曾經還有人說這個可以造成遠端主機重起。所以只是謠言。仔細想想就知道為什麼不會對遠端主機造成影響咯。
智慧型ABC輸入法超酷技巧
v 的妙用 用智慧型abc輸入含有英文的中文語句時,使用ctrl space切換中英文輸入狀態十分麻煩。其實智慧型abc在輸入拼音的過程中,如果需要輸入英文,可以不必切換到英文方式。鍵入 v 再輸入想輸入的英文,按空格鍵,英文本母就會出現,而 v 不會顯現出來。比如輸入 venglish 按空格,就...
在智慧型ABC輸入法的中文輸入狀態下輸入英文
在智慧型abc輸入法的中文輸入狀態下輸入英文 很多時候需要在中文輸入狀態下輸入很少的英文,使用ctrl space切換中英文輸入狀態就顯得有點麻煩了。在智慧型abc輸入法的中文輸入狀態下輸入英文只需要在輸入英文前加乙個 v 即可。如 要輸入windows,只需要在中文狀態輸入框中鍵入 vwindow...
智慧型ABC拼音輸入法你真的會用嗎
下面介紹智慧型abc拼音輸入法的技巧,讓你大大提高輸入速度 1.直接輸入英文 如果在智慧型輸入法中輸入英文,只要在輸入的英文本母前先輸入 v 即可,如輸入 teacher 只需鍵入 vteacher 即可。2.輸入大寫數字 要在智慧型abc中輸入大寫的數字,如 一 二 三 或 壹 貳 叄 需要使用的...