• <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>

            玩心未泯

            卡爾斯希普拉斯

            C++博客 首頁(yè) 新隨筆 聯(lián)系 聚合 管理
              19 Posts :: 0 Stories :: 98 Comments :: 0 Trackbacks
                   近日接到一個(gè)wince外包項(xiàng)目,要求我給他的軟件提供License控制,本來(lái)這個(gè)問(wèn)題很容易解決,如果有源碼的話,只需要在進(jìn)入主程序之前進(jìn)行l(wèi)icense校驗(yàn)就可以搞定了,然而要命的就是他沒(méi)有源代碼,要求我直接對(duì)其exe進(jìn)行加密。
                  
                   這可是有點(diǎn)難度的,之前我也沒(méi)接觸過(guò)匯編,更沒(méi)有仔細(xì)去研究過(guò)PE文件格式,想起來(lái)還是覺(jué)得很有挑戰(zhàn)的,不過(guò)我這人就喜歡挑戰(zhàn),沒(méi)有挑戰(zhàn),怎么能促進(jìn)自己學(xué)習(xí)呢?首先從原理上對(duì)這個(gè)實(shí)現(xiàn)進(jìn)行一下分析:
                   1)Wince上的可執(zhí)行exe文件,也是遵從PE文件格式的,這個(gè)以前我略有了解,加密解密不知道這個(gè)文件格式肯定是不行的。要實(shí)現(xiàn)對(duì)現(xiàn)有的EXE文件進(jìn)行加密,先進(jìn)行License校驗(yàn),再根據(jù)校驗(yàn)結(jié)果判斷是否轉(zhuǎn)到主程序代碼,從匯編的角度來(lái)說(shuō),就是我自己要寫一段代碼來(lái)完成License校驗(yàn),然后判斷結(jié)果,使用條件跳轉(zhuǎn)指令來(lái)控制是否跳轉(zhuǎn)到原來(lái)的主程序入口點(diǎn)繼續(xù)執(zhí)行,而我自己寫的這段代碼也就是ShellCode了,病毒、黑客技術(shù)中這個(gè)詞出現(xiàn)的就多了。對(duì)于PE文件而言,就是要把我的ShellCode(包括根據(jù)結(jié)果判斷跳轉(zhuǎn)的部分)加到原來(lái)的EXE文件中,并且更改原EXE文件的入口點(diǎn)地址到我的shellcode處。
                   2)我自己以前沒(méi)接觸過(guò)匯編,這下段時(shí)間內(nèi)全部用匯編完成License的校驗(yàn)代碼,顯然是不那么容易的,我選擇了折中的辦法,準(zhǔn)備在我的ShellCode中去加載一個(gè)DLL,而License校驗(yàn)就在DLL中實(shí)現(xiàn)。雖然這種方法很容易被破解,暫時(shí)也只能是采取這個(gè)權(quán)益之計(jì)了。
                   3)ShellCode中要使用到一些API函數(shù),因此必須找到一個(gè)辦法,在系統(tǒng)內(nèi)核的地址空間內(nèi)定位到這些API函數(shù)。

                   根據(jù)上面的分析,就把主要的任務(wù)分成了三個(gè)部分,第二個(gè)部分對(duì)我來(lái)說(shuō)是最簡(jiǎn)單的了,隨時(shí)都可以完成,因此我把它放在最低優(yōu)先等級(jí),我只寫了一個(gè)空殼dll可以用來(lái)加載作測(cè)試。那么接下來(lái)我們要做的就是1、3,pe文件格式的資料還是很多的,我想這個(gè)也不困難,而關(guān)于如何在系統(tǒng)地址空間內(nèi)定位API函數(shù)地址的資料,就不那么好找啦,Windows下面的可能還好點(diǎn),WindowsCE下面的我還沒(méi)看到過(guò)。于是我決定從這里入手,如果這關(guān)過(guò)不去,我就不用再做別的事情了。

                    經(jīng)過(guò)搜索,關(guān)于定位WinCEAPI函數(shù)地址的資料,幾乎都出自一篇Hacking Wince的文章,雖然還有《WinCEAPI機(jī)制初探》等中文文章,其實(shí)都是從Hacking Wince中間轉(zhuǎn)出來(lái)的。Hacking WinCE是篇英文的,大家可以在網(wǎng)上搜索了看看,文章寫的還是比較詳細(xì)的,根據(jù)文中的方法,先定位到KDataStruct結(jié)構(gòu),然后再順藤摸瓜往下找,雖然很復(fù)雜,但確實(shí)可以定位到API函數(shù)地址,但是這時(shí)我犯了個(gè)錯(cuò)誤,就是我在這篇文章中只看了一下它的實(shí)現(xiàn)原理,和它的C++語(yǔ)言的實(shí)現(xiàn),沒(méi)有去讀它的匯編實(shí)現(xiàn),因?yàn)槲也欢我也照著他的C++語(yǔ)言實(shí)現(xiàn)自己寫了一遍,調(diào)試了一下,基本上了解了是怎么一個(gè)過(guò)程,然后我就開始學(xué)習(xí)匯編了,而我犯的錯(cuò)誤就是從這里開始,我到處找來(lái)的匯編資料,然后先了解匯編有哪些指令什么什么的~最后照葫蘆畫瓢,寫了一段匯編代碼實(shí)現(xiàn)上面的過(guò)程,到頭來(lái)要編譯了,才想起來(lái),貌似我用的是8086的匯編,而在WinCE上似乎不是用這個(gè),因?yàn)榇蟛糠值那度胧皆O(shè)備采用ARM處理器,所以一般寫wince上的匯編代碼是用arm匯編的,這個(gè)時(shí)候我才發(fā)現(xiàn)我走錯(cuò)了路,趕緊回頭找了arm匯編的資料,arm匯編的資料也不甚多,一個(gè)chm的文檔而已,看了一下,從寄存器開始都和8086的匯編不一樣了,然后仔細(xì)學(xué)習(xí)了一下。最后好歹還是讓我給寫出了arm匯編的代碼,在我的HP2790(windows Mobile 2003)上運(yùn)行正常,這時(shí)候真的是興奮的不得了了。急忙聯(lián)系給我外包的老大,讓他試試看這段代碼在他設(shè)備上能否成功加載dll,結(jié)果卻是令人遺憾的不可以。

                    為何不可以呢,我又回到Hacking Wince上去,我記得當(dāng)時(shí)看到這么一段,但是當(dāng)時(shí)沒(méi)有認(rèn)真去研究,KDataStruct的定位方法是不能在User Mode下使用的,因?yàn)橐L問(wèn)的是系統(tǒng)內(nèi)核的地址空間,在User Mode方式下是禁止訪問(wèn)的。而作者之所以這么用是因?yàn)镻PC上應(yīng)用程序都是以內(nèi)核模式運(yùn)行的,所以可行。但是老大說(shuō)他的PPC上也運(yùn)行不了,后來(lái)問(wèn)到他的PPC操作系統(tǒng)是Mobile5的,看來(lái)Mobile5的應(yīng)用程序也不再是以內(nèi)核模式運(yùn)行了,我用VS2005打開Mobile5的模擬器試驗(yàn)了一下,從寄存器上看到的果然是用戶模式,而在PPC2003的模擬器上,同樣是用戶模式,看來(lái)這方法行不通了。

                    好在Hacking Wince上介紹了另外一種方法,就是SystemCall的方法,這個(gè)方法呢原來(lái)就是wince系統(tǒng)會(huì)開辟一片地址空間0xf0000000~0xf0010000保留不使用,而當(dāng)執(zhí)行到這個(gè)地址空間的時(shí)候,會(huì)引發(fā)一個(gè)異常,然后系統(tǒng)再根據(jù)這個(gè)異常處理判斷是否引發(fā)一個(gè)API函數(shù)調(diào)用,每一個(gè)API函數(shù)都根據(jù)一定的算法映射到這片地址區(qū)域(詳細(xì)算法請(qǐng)自己閱讀Hacking Wince,我可不想剝奪你學(xué)習(xí)的樂(lè)趣,也不想因?yàn)槲业腻e(cuò)誤理解誤導(dǎo)你:P)。這個(gè)方法的好處是比前面所講的搜索的方法更高效,而且用戶模式下也是可用的。于是乎我又用這個(gè)方法實(shí)現(xiàn)了我的ShellCode,然后費(fèi)解的是,我使用的arm匯編指令stmdb,只要后面跟的寄存器寫成{r0-r4}這種形式,在mobile5上運(yùn)行的時(shí)候到這一步就沒(méi)反應(yīng)了,實(shí)在是非常的費(fèi)解。不過(guò)我想那位老大跟我說(shuō)的他的設(shè)備是基于Wince.net 4.2 Core的,也就沒(méi)在這個(gè)問(wèn)題上花功夫(實(shí)際上我后來(lái)繞過(guò)這一步,到了后面的SystemCall調(diào)用的部分,在Mobile5上也出現(xiàn)問(wèn)題,貌似這個(gè)SystemCall的方法只能在WinCE4.2中使用)。完成了shellcode,但一時(shí)沒(méi)能聯(lián)系上給我外包的老大,所以就動(dòng)手做下一步了。

                   最后一部就是研究PE文件格式,把我自己的ShellCode“感染”到EXE中間去,這個(gè)涉及到一些病毒技術(shù),我就不多說(shuō)了,網(wǎng)上這方面的資料也不少。我也輕松實(shí)現(xiàn)了這一步驟。

                   而所有的一切在我的PPC2003上運(yùn)行正常之后,終于聯(lián)系上那個(gè)老大,程序發(fā)過(guò)去被認(rèn)為是病毒隔離了,預(yù)料之中,可是放到他設(shè)備上還是運(yùn)行不起來(lái),那就是預(yù)料之外了。終于這老大要求的時(shí)間也到了,咱做的東西又沒(méi)實(shí)現(xiàn)功能,估計(jì)這老大對(duì)我失望了,不理咱了~唉~~~~

                   這次的學(xué)習(xí)過(guò)程還是讓我了解了不少東西,雖然這外包最終還是失敗了,但還是不覺(jué)得虧,畢竟一周的時(shí)間里,因?yàn)檫@個(gè)外包的壓力,以及求知的興趣,讓我看到了很多之前有時(shí)間卻沒(méi)看到的東西。不過(guò)整整一周都沒(méi)好好陪老婆,老婆大人還是蠻有意見(jiàn)的~~:P
            posted on 2007-06-26 11:04 SuperPlayeR 閱讀(2072) 評(píng)論(4)  編輯 收藏 引用 所屬分類: WinCE/Mobile應(yīng)用開發(fā)

            評(píng)論

            # re: 學(xué)習(xí)Hacking Wince 2007-07-06 14:01 SuperPlayeR
            這次的最大收獲是入門了匯編,感覺(jué)又增加了不少新的見(jiàn)識(shí)。  回復(fù)  更多評(píng)論
              

            # re: 學(xué)習(xí)Hacking Wince 2012-06-03 20:08 cjh
            佩服,學(xué)習(xí)能力這么強(qiáng)。看你真是領(lǐng)會(huì)了學(xué)習(xí)的樂(lè)趣了  回復(fù)  更多評(píng)論
              

            # re: 學(xué)習(xí)Hacking Wince 2012-06-18 11:34 kerlw
            自己都忘記自己還曾經(jīng)做過(guò)這事了,哈哈哈,老了。  回復(fù)  更多評(píng)論
              

            # re: 學(xué)習(xí)Hacking Wince 2013-08-28 21:39 liuhui
            嗨,我們有wince系統(tǒng)搭建,有興趣嗎。  回復(fù)  更多評(píng)論
              

            青春久久| 四虎亚洲国产成人久久精品| 亚洲国产成人久久综合一| 91精品国产91久久久久福利| 7777久久久国产精品消防器材| 精品国产乱码久久久久久郑州公司| 久久久久免费精品国产| 亚洲天堂久久久| 99精品国产在热久久| 无码8090精品久久一区| 亚洲AV日韩精品久久久久| 久久这里只有精品首页| 久久精品国产色蜜蜜麻豆| 亚洲国产精品一区二区久久| 久久综合亚洲色HEZYO社区| 久久精品免费观看| 久久久久久久精品成人热色戒| 久久久久一区二区三区| 国产69精品久久久久APP下载| 久久综合中文字幕| 亚洲午夜久久久久久久久电影网 | 天天综合久久久网| 97久久国产露脸精品国产| 国产精品日韩深夜福利久久| 亚洲国产精品成人久久| 蜜臀久久99精品久久久久久| 9久久9久久精品| 一本色道久久综合亚洲精品| 久久久久亚洲AV无码去区首| 成人资源影音先锋久久资源网| 久久久久亚洲AV无码专区首JN| 国产精品免费看久久久香蕉| 久久精品国产亚洲av影院| 一极黄色视频久久网站| 国产精品成人99久久久久| a级成人毛片久久| 日产精品99久久久久久| 久久午夜无码鲁丝片秋霞| 久久强奷乱码老熟女| 国内精品久久久久久中文字幕| 狠狠干狠狠久久|