智慧型ABC輸入法溢位分析

2021-03-31 18:39:22 字數 3836 閱讀 1154

下面在來看一段關於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中輸入大寫的數字,如 一 二 三 或 壹 貳 叄 需要使用的...