• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            S.l.e!ep.¢%

            像打了激速一樣,以四倍的速度運(yùn)轉(zhuǎn),開心的工作
            簡單、開放、平等的公司文化;尊重個(gè)性、自由與個(gè)人價(jià)值;
            posts - 1098, comments - 335, trackbacks - 0, articles - 1
              C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

            OllyDBG 之旅 (五)

            Posted on 2009-09-22 23:38 S.l.e!ep.¢% 閱讀(214) 評(píng)論(0)  編輯 收藏 引用 所屬分類: Crack

            00401431? |.? 8D35 9C334000 lea???? esi, dword ptr [40339C]
            00401437? |.? 0FB60D EC3340>movzx?? ecx, byte ptr [4033EC]
            0040143E? |.? 33FF????????? xor???? edi, edi
            00401440? |>? 8BC1????????? mov???? eax, ecx
            00401442? |.? 8B1E????????? mov???? ebx, dword ptr [esi]
            00401444? |.? F7E3????????? mul???? ebx
            00401446? |.? 03F8????????? add???? edi, eax
            00401448? |.? 49??????????? dec???? ecx????????????????????????????????????????????????????????????? 讓ECX寄存器自減一,
            00401449? |.? 83F9 00?????? cmp???? ecx, 0
            0040144C? |.^ 75 F2???????? jnz???? short 00401440
            0040144E? |.? 893D 9C334000 mov???? dword ptr [40339C], edi
            00401454? |.? 61??????????? popad

            lea???? esi, dword ptr [40339C]
            ?? lea 目的地址傳送指令. 將? 40339C 這個(gè)值放到 esi 寄存器

            movzx?? ecx, byte ptr [4033EC]??
            MOVZX指令將他的源操作數(shù)0擴(kuò)展為他的目標(biāo)操作數(shù)的長度(即不保留最高位的符號(hào)屬性),然后將結(jié)果復(fù)制到目標(biāo)操作數(shù)中。?
            ??????????? movzx ? eax, ? bx ? ? ?
            ? ? 等價(jià)于 ?
            ? ? ? ? ? ? xor ? eax,eax ?
            ? ? ? ? ? ? mov ? ax,bx???
            ? 前者目標(biāo)碼代碼較小,后者 ? 速度更快(在主流CPU)????


            0040143E? |.? 33FF????????? xor???? edi, edi?????????????????????????????????????????? 將 edi 清零
            00401440? |>? 8BC1????????? mov???? eax, ecx????????????????????????????????????? 將 ecx 的值賦值到 eax? (ecx 現(xiàn)在等于 3) <======???? 0040144C? |.^ 75 F2???????? jnz???? short 00401440
            00401442? |.? 8B1E????????? mov???? ebx, dword ptr [esi]????????????????????? 將 esi 所指向的地址的值賦給 ebx ,? 這里是dword,即四個(gè)字節(jié),將?卷標(biāo)的前四個(gè)字節(jié)的值賦給 ebx?
            00401444? |.? F7E3????????? mul???? ebx
            00401446? |.? 03F8????????? add???? edi, eax
            00401448? |.? 49??????????? dec???? ecx????????????????????????????????????????????????????????????? 讓ECX寄存器自減一,
            00401449? |.? 83F9 00?????? cmp???? ecx, 0
            0040144C? |.^ 75 F2???????? jnz???? short 00401440??????????????????????????????? <==== 這里做了一個(gè)循環(huán)
            0040144E? |.? 893D 9C334000 mov???? dword ptr [40339C], edi
            00401454? |.? 61??????????? popad

            mul
            MUL,將AL,AX或EAX與源操作數(shù)相乘。
            如果源操作數(shù)是8位的,則與AL相乘,積存儲(chǔ)在AX中
            如果源操作數(shù)是16位的,則與AX相乘,積存儲(chǔ)在DX:AX中
            如果源操作數(shù)是32位的,則與EAX相乘,積存儲(chǔ)在EDX:EAX中?? EDX 為高位
            ? ? 你例句的操作數(shù)為10000h,已經(jīng)不是16位了,故它因該是存儲(chǔ)在一個(gè)32位寄存器中。
            ? ? 依照以上第三條,與EAX相乘,最大情況為2的15次方乘以2的15次方=2的16次方,EDX:EAX滿足條件存儲(chǔ),而10000h就更不用說了

            POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次彈出堆棧.


            esi = 40339c
            ecx = 3
            edi = 0

            第一次循環(huán)
            :again
            eax = ecx (3)
            ebx = 'ABCD'
            eax = eax * ebx?? (3 * 0x44434241) = CCC9C6C3?? (32位相乘高位在 EDX, 低位在 EAX)
            edi = edi + eax?? (0 + CCC9C6C3) = CCC9C6C3
            ecx--
            if ecx != 0? then goto again

            第二次循環(huán)
            :again
            eax = ecx (2)
            ebx = 'ABCD'
            eax = eax * ebx?? (2 * 0x44434241) = 88868482 (32位相乘高位在 EDX, 低位在EAX)
            edi = edi + eax?? (CCC9C6C3 + 88868482) = 155504B45 (此處溢出,edi只取得 55504B45)
            ecx--
            if ecx != 0 then goto again

            第三次循環(huán)
            :again
            eax = ecx (1)
            ebx = 'ABCD'
            eax = eax * ebx (1* 0x44434241) = 0x44434241? (32位相乘高位在 EDX, 低位在EAX)
            edi = edi + eax (0x55504B45 + 0x44434241) = 99938D86
            ecx--

            經(jīng)過三次循環(huán)
            經(jīng)過計(jì)算的值放在 edi

            經(jīng)過
            0040144E? |.? 893D 9C334000 mov???? dword ptr [40339C], edi

            edi 的值放在 40339C 這個(gè)內(nèi)存地址

            0040339C? 86 8D 93 99 45 46 47 48 49 4A 00 00 00 00 00 00? 啀摍EFGHIJ......
            004033AC? 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00???? ...............

            經(jīng)過推算,不難將它轉(zhuǎn)成C++代碼

            #include <iostream>
            #include <windows.h>
            #include <memory.h>
            using namespace std;

            int main()
            {
            ?int nDriveType = ::GetDriveType(NULL);

            ?char szBuf[11] = {0};
            ??? ::GetVolumeInformation(NULL, szBuf, 11, NULL, NULL, NULL, NULL, NULL);

            ?UINT nResult = 0;
            ?for( int i=3; i>0; i-- )
            ?{
            ??UINT nValue = 0;
            ??memcpy(&nValue, szBuf, 4);

            ??nValue *= i;
            ??nResult += nValue;
            ?}

            ?nResult ^= 0x797A7553;

            ?std::cout << nResult << std::endl;

            ?return 0;
            }
            ?

            国产精品99久久精品爆乳| 久久综合久久伊人| 99久久er这里只有精品18| 久久精品国产亚洲AV嫖农村妇女| 国产精品久久久久久福利漫画| 久久亚洲精品中文字幕三区| 亚洲国产精品无码久久久久久曰 | 久久线看观看精品香蕉国产| 亚洲国产成人久久精品99| 亚洲中文久久精品无码| 99久久国产亚洲高清观看2024 | 久久精品国产精品亚洲精品| 欧美久久久久久精选9999| 久久天天躁夜夜躁狠狠| 色综合久久久久网| 伊人久久大香线蕉综合影院首页| 99久久精品国产一区二区蜜芽| 久久天天躁狠狠躁夜夜不卡| 国产精品久久久久一区二区三区| 亚洲AV无码久久精品蜜桃| 亚洲欧美国产精品专区久久| 久久国产精品久久久| 久久综合给久久狠狠97色| 伊人久久精品影院| 欧美午夜精品久久久久久浪潮| 99久久精品国产毛片| 久久久久国产一级毛片高清版| 少妇久久久久久久久久| 久久久久亚洲av综合波多野结衣| 久久午夜福利电影| 国产精品热久久毛片| 国产精品一区二区久久精品无码| 国产精品久久久久久久久鸭| 久久66热人妻偷产精品9| 色婷婷综合久久久中文字幕| 日产精品久久久久久久| 伊色综合久久之综合久久| 无码乱码观看精品久久| 日批日出水久久亚洲精品tv| 久久久久综合中文字幕| 久久综合久久性久99毛片|