「娃娃分享」-常見自校檢分析實例.

自校檢是許多軟件的保護手段之一,對軟件加個簡單的殼再增加自校檢在一定程序上可以抵擋住一大部分新手,不過,對許多人來說,這個保護已經很弱了。。下面講幾種常見的解決自校檢方法,寫的粗略,希望大家補充。

1、通用對比法。就是將已經觸發自校檢的程序與原來正常的程序進行關鍵跳轉對比,這種方法比較通用,大部分的自校檢可以通過此方法解決(如果軟件有防多開窗口的限制,需
要先解決這個問題。)附件中的sample1.EXE是一個加了ASPACK的自校檢程序,修改任何代碼或大小等都會觸發校檢提示軟件被修改。dumped.EXE是脫殼后的文件,由于觸發校檢運行后出現“文件被非法修改”的提示,現在我們來解決脫殼后文件的自校檢問題。打開脫殼后的程序dumped.EXE,下斷BP?CreateFileA,F9兩次后出現出錯提示。CTRL+F2重新載入dumped.EXE,下斷BP?reateFileA,F9一次。這時另開一個OD打開原來的程序sample1.EXE,用腳本到達OEP,命令中也下斷BP?CreateFileA,F9一次,這時兩個OD停在同一個地方,然后在兩個OD中逐步單步跟蹤,碰到JE、JNE、JBE...之類的關鍵跳轉要對比一下兩者的區別。
7C801A24?>??8BFF????????????MOV?EDI,EDI??????????????????????????????;?BP?CreateFileA斷在這里,ALT+F9返回
7C801A26????55??????????????PUSH?EBP
=================
0040111C??|.??3BF4??????????CMP?ESI,ESP??????????????????????????????;??都停在這里,逐步F8,進行關鍵跳轉的對比
0040111E??|.??E8?0D030000???CALL?crcdumpe.00401430
00401123??|.??8985?E0FEFFFF?MOV?DWORD?PTR?SS:[EBP-120],EAX
00401129??|.??83BD?E0FEFFFF>CMP?DWORD?PTR?SS:[EBP-120],-1
00401130??|.??75?07?????????JNZ?SHORT?crcdumpe.00401139

逐步F8,跟到下面的代碼時,發現兩個跳轉不一樣:
0040120C???/75?07???????????JNZ?SHORT?crc.00401215???????????????????;?原版這個地方信息窗口提示:跳轉沒有實現
0040120E???|B8?01000000?????MOV?EAX,1
00401213???|EB?02???????????JMP?SHORT?crc.00401217
00401215???\33C0????????????XOR?EAX,EAX
=======================
0040120C??|.?/75?07?????????JNZ?SHORT?crcdumpe.00401215??????????????;??脫殼版這個地方信息窗口提示:跳轉已經實現,NOP掉
0040120E??|.?|B8?01000000???MOV?EAX,1
00401213??|.?|EB?02?????????JMP?SHORT?crcdumpe.00401217
00401215??|>?\33C0??????????XOR?EAX,EAX

這時將脫殼版0040120C處代碼NOP掉后另存為dumpedFIX.EXE。試著運行一下,如果正常完事,還不行的話繼續跟蹤下去。該例只改這一處。

2、跟蹤退出函數。附件中sample2也是個自校檢程序,修改任何一處軟件會自動退出。我們試著用UltraEdit將sample2.EXE的最后一個字節改為01后另存為sample2-change.EXE,這時運行sample2-change就會自動退出,我們就是要從退出函數入手。軟件退出一般都是調用ExitProcess、PostQuitMessage之類的,我們用OD載入sample2-change.EXE,從輸入表中我們可以看出軟件是調用ExitProcess退出的。于是在OD中下斷BP?ExitProcess,F9運行,斷下后看堆棧信息:
0012FEB8???004015B5??/CALL?到?ExitProcess?來自?sample2-.004015AF?????//從這里我們可以看出ExitProcess的調用地方是在004015AF
0012FEBC???00000000??\ExitCode?=?0
0012FEC0???20DFA6E6
在OD中CTRL+G,輸入004015AF:
004015AF??|.??FF15?AC514200?CALL?DWORD?PTR?DS:[<&KERNEL32.ExitProces>;?\就在這里,向上找這個子CALL的首部
004015B5??|>??8BE5??????????MOV?ESP,EBP
004015B7??|.??5D????????????POP?EBP
004015B8??\.??C3????????????RETN
=======================================
004014E0??/$??55????????????PUSH?EBP?????????????????????????????????;??找到這里,注意信息欄的內容
004014E1??|.??8BEC??????????MOV?EBP,ESP
004014E3??|.??51????????????PUSH?ECX
004014E4??|.??833D?F8354200>CMP?DWORD?PTR?DS:[4235F8],1
004014EB??|.??75?11?????????JNZ?SHORT?sample2-.004014FE
信息欄的內容:
Local?Calls?from?0040146B,?0040148B,?004014A9,?004014C9
也就是說有四個地方調用ExitProcess退出,因為程序的退出按鈕和關閉的叉號也是調用ExitProcess函數的,一般都會在前面幾個,我們在內容上右擊,“前往CALL來自0040146B”
0040146B??|.??E8?70000000???CALL?sample2-.004014E0???????????????????;?\到這里,同樣查找首部
00401470??|.??83C4?0C???????ADD?ESP,0C
00401473??|.??5D????????????POP?EBP
00401474??\.??C3????????????RETN
============
00401460??/$??55????????????PUSH?EBP?????????????????????????????????;??在這里,信息欄提示:Local?Calls?from?00401072,?<ModuleEntryPoint>+11A
00401461??|.??8BEC??????????MOV?EBP,ESP
00401463??|.??6A?00?????????PUSH?0???????????????????????????????????;?/Arg3?=?00000000
00401465??|.??6A?00?????????PUSH?0???????????????????????????????????;?|Arg2?=?00000000
在Local?Calls?from?00401072上右擊,前往CALL來自00401072:
00401048??|.??E8?BDFFFFFF???CALL?sample2-.0040100A
0040104D??|.??85C0??????????TEST?EAX,EAX
0040104F??|.??74?1F?????????JE?SHORT?sample2-.00401070???????????????;??是從這里跳過去的,NOP掉
00401051??|.??8BF4??????????MOV?ESI,ESP
00401053??|.??6A?30?????????PUSH?30??????????????????????????????????;?/Style?=?MB_OK|MB_ICONEXCLAMATION|MB_APPLMODAL
00401055??|.??68?28004200???PUSH?sample2-.00420028???????????????????;?|Title?=?"提示"
0040105A??|.??68?1C004200???PUSH?sample2-.0042001C???????????????????;?|Text?=?"正常運行!"
0040105F??|.??6A?00?????????PUSH?0???????????????????????????????????;?|hOwner?=?NULL
00401061??|.??FF15?B4524200?CALL?DWORD?PTR?DS:[<&USER32.MessageBoxA>>;?\MessageBoxA
00401067??|.??3BF4??????????CMP?ESI,ESP
00401069??|.??E8?82050000???CALL?sample2-.004015F0
0040106E??|.??EB?07?????????JMP?SHORT?sample2-.00401077
00401070??|>??6A?00?????????PUSH?0
00401072??|.??E8?E9030000???CALL?sample2-.00401460???????????????????;??就是這里了,最終會調用ExitProcess,向上看是從哪里跳過來
00401077??|>??33C0??????????XOR?EAX,EAX

可以看出,00401072處的CALL最終呼叫ExitProcess退出,所以只要使0040104F處的跳轉失效即可,將0040104F的跳轉NOP掉后保存,測試運行正常。

三、利用第三方軟件輔助查找關鍵的地方。很多軟件利用CRC或者MD5實現磁盤文件校驗或者內存映像校驗等,對此類軟件我們可以利用算法識別工具找到密碼學算法和核心,然后層層向上,找到最初的調用地方更改其流程方向。還是附件中的sample1.EXE,脫殼的文件為dumped.EXE,我們來解決這個軟件的自校檢。先用PEID的插件kanal分析dumped.EXE所采的密碼學算法,如圖,
pic.gif_428.gif
可以看出,軟件采用了CRC算法,算法特征碼出現在0040131C,就從這里入手,OD載入dumped.EXE,CTRL+G搜索0040131C:
0040131C??|???2083?B8ED898D?AND?BYTE?PTR?DS:[EBX+8D89EDB8],AL????????;??找到的地方在這里,上拉找到這個CALL的首部
00401322??|???FC????????????CLD
00401323??|???FB????????????STI
00401324??|???FFFF???????????????????????????????????????????????????;??未知命令
00401326??|.??EB?0E?????????||JMP?SHORT?crcdumpe.00401336
00401328??|>??8B95?FCFBFFFF?||MOV?EDX,DWORD?PTR?SS:[EBP-404]
0040132E??|.??D1EA??????????||SHR?EDX,1
00401330??|.??8995?FCFBFFFF?||MOV?DWORD?PTR?SS:[EBP-404],EDX
00401336??|>^?EB?B5?????????|\JMP?SHORT?crcdumpe.004012ED
00401338??|>??8B85?F8FBFFFF?|MOV?EAX,DWORD?PTR?SS:[EBP-408]
0040133E??|.??8B8D?FCFBFFFF?|MOV?ECX,DWORD?PTR?SS:[EBP-404]
00401344??|.??898C85?00FCFF>|MOV?DWORD?PTR?SS:[EBP+EAX*4-400],ECX
0040134B??|.^?E9?6AFFFFFF???\JMP?crcdumpe.004012BA
============================
00401290??/>?\55????????????PUSH?EBP?????????????????????????????????;??到這里,看OD的提示欄:Jump?from?00401005,從00401005跳轉來的
00401291??|.??8BEC??????????MOV?EBP,ESP
00401293??|.??81EC?50040000?SUB?ESP,450
00401299??|.??53????????????PUSH?EBX
0040129A??|.??56????????????PUSH?ESI

在Jump?from?00401005上右擊,“前往JMP?來自00401005”
00401005???$?/E9?86020000???JMP?crcdumpe.00401290????????????????????;??到這里,看信息欄內容:Local?Call?from?00401201,00401201處的CALL調用這里
0040100A???$?|E9?B1000000???JMP?crcdumpe.004010C0
在Local?Call?from?00401201上右擊,“前往CALL?來自00401201”
00401201??|.??E8?FFFDFFFF???CALL?crcdumpe.00401005???????????????????;??到這里,再向上找到這個CALL的頂部
00401206??|.??83C4?08???????ADD?ESP,8
==================
004010C0??/>?\55????????????PUSH?EBP?????????????????????????????????;??到這里,看任務欄信息:Jump?from?0040100A
004010C1??|.??8BEC??????????MOV?EBP,ESP
004010C3??|.??81EC?64010000?SUB?ESP,164
在Jump?from?0040100A上右擊,“前往JMP?來自0040100A”
0040100A???$?/E9?B1000000???JMP?crcdumpe.004010C0????????????????????;??到這里,繼續根據任務欄信息向上找:Local?Call?from?00401048
0040100F???$?|E9?1C000000???JMP?crcdumpe.00401030
在Local?Call?from?00401048上右擊,“前往CALL?來自00401048”
00401048??|.??E8?BDFFFFFF???CALL?crcdumpe.0040100A???????????????????;??就是這里了,計算CRC并進行對比的CALL
0040104D??|.??85C0??????????TEST?EAX,EAX
0040104F??|.??74?1F?????????JE?SHORT?crcdumpe.00401070???????????????;??這里就是關鍵跳轉了,NOP掉
00401051??|.??8BF4??????????MOV?ESI,ESP
00401053??|.??6A?30?????????PUSH?30??????????????????????????????????;?/Style?=?MB_OK|MB_ICONEXCLAMATION|MB_APPLMODAL
00401055??|.??68?40004200???PUSH?crcdumpe.00420040???????????????????;?|Title?=?"提示"
0040105A??|.??68?34004200???PUSH?crcdumpe.00420034???????????????????;?|Text?=?"正常運行!"
0040105F??|.??6A?00?????????PUSH?0???????????????????????????????????;?|hOwner?=?NULL
00401061??|.??FF15?B4524200?CALL?DWORD?PTR?DS:[<&user32.MessageBoxA>>;?\MessageBoxA
更改0040104F處的跳轉后保存為dumpedFIX,運行正常。

四、對付校檢自身大小的軟件的一般方法。也有許多軟件,利用CHECKSUM、FILELEN等在代碼中對本身的大小做了標記,如果發現大小變了就自動退出。附件中的FILELEN就是這樣的,FILELEN-UNPACK.EXE是脫殼后的軟件,由于脫殼后軟件大小發生了變化,所以FILELEN-UNPACK運行后就自動退出。對付這種校檢,我們有個簡單的方法,就是將脫殼后的軟件中檢測自身大小的部分改為脫殼后文件的大小。我們看一下FILELEN的大小為:10752字節轉16進制為2A00,再看看脫殼后的文件FILELEN-UNPACK.EXE的大小30208字節,即7600,關鍵是如何找到對自身大小進行對比的語句,我們知道一般的形式都是CMP?EAX,2A00,但是到底是哪個寄存器呢?EAX,EBX、ECX....,寄存器種類比較多,我們不可能每個去找,這時W32Dasm派上用場。用W32Dasm載入FILELEN-UNPACK,我們只要搜索00002A00即可,前面的部分不管它,找到在這里:
:00401B8F?81FE002A0000????????????cmp?esi,?00002A00
右擊-“HEX”,更改代碼002A00為脫殼后的大小007600即可,再搜索,發現該例只有一個對比的地方,保存后運行正常。
對于VB檢測自身大小的軟件我們還可以跟蹤FileLen函數,因為VB一般都用FileLen檢測自身的大小,用OD載入FILELEN-UNPACK.EXE,下斷BP?rtcFileLen,F9后斷下,ALT+F9返回:
00401B5E???.??8BF0??????????MOV?ESI,EAX??????????????????????????????;??這里EAX的值就是FILELEN取得的自身的大小,EAX=00007600
00401B60???.??8D55?D4???????LEA?EDX,DWORD?PTR?SS:[EBP-2C]
00401B63???.??8D45?D8???????LEA?EAX,DWORD?PTR?SS:[EBP-28]
00401B66???.??52????????????PUSH?EDX
00401B67???.??8D4D?E0???????LEA?ECX,DWORD?PTR?SS:[EBP-20]
00401B6A???.??50????????????PUSH?EAX
00401B6B???.??8D55?DC???????LEA?EDX,DWORD?PTR?SS:[EBP-24]
00401B6E???.??51????????????PUSH?ECX
00401B6F???.??8D45?E4???????LEA?EAX,DWORD?PTR?SS:[EBP-1C]
00401B72???.??52????????????PUSH?EDX
00401B73???.??50????????????PUSH?EAX
00401B74???.??6A?05?????????PUSH?5
00401B76???.??FF15?70104000?CALL?DWORD?PTR?DS:[<&msvbvm60.__vbaFreeS>;??msvbvm60.__vbaFreeStrList
00401B7C???.??8D4D?CC???????LEA?ECX,DWORD?PTR?SS:[EBP-34]
00401B7F???.??8D55?D0???????LEA?EDX,DWORD?PTR?SS:[EBP-30]
00401B82???.??51????????????PUSH?ECX
00401B83???.??52????????????PUSH?EDX
00401B84???.??6A?02?????????PUSH?2
00401B86???.??FF15?14104000?CALL?DWORD?PTR?DS:[<&msvbvm60.__vbaFreeO>;??msvbvm60.__vbaFreeObjList
00401B8C???.??83C4?24???????ADD?ESP,24
00401B8F???.??81FE?002A0000?CMP?ESI,2A00?????????????????????????????;??這里就是利用FILELEN取得的大小與原來做的標記對比,可以改這里的2A00為7600或者更改下面的跳轉
00401B95???.??75?6E?????????JNZ?SHORT?FILELEN-.00401C05
00401B97???.??B9?04000280???MOV?ECX,80020004


好像常見的自校檢就這些,我不知道還有沒有其它的,如果有希望大家能夠補充完善。

附件:http://bbs.pediy.com/attachment.php?attachmentid=2017&d=1151747683

轉載于:https://www.cnblogs.com/buwawa/articles/2062493.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/275478.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/275478.shtml
英文地址,請注明出處:http://en.pswp.cn/news/275478.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

用VC和MinGW導出dll的def和lib(a)文件

為什么80%的碼農都做不了架構師&#xff1f;>>> 原文地址&#xff1a;http://zhangyafeikimi.iteye.com/blog/404580 有了dll文件需要導出def文件&#xff1a; pexports zlib1.dll > zlib1.def 有了dll和def文件&#xff0c;需要導出MinGW的.a文件&#xff1a;…

51中斷編程c語言,[新人求指教]51C語言編程可否用中斷令循環結束提早結束

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓C51_C語言編程控制流水燈硬件電路 p0 接 led 8 個&#xff0c;P33 接按鍵使用中斷2開機燈按1~8逐位閃爍&#xff0c;并循環按鍵后改為 兩燈亮 的流水燈下面寫了個程序#include #include #define uchar unsigned char#define uint u…

產品設計美學案例分析_美學在產品設計中的重要性

產品設計美學案例分析重點 (Top highlight)In one of my previous jobs, I had really interesting debates with the CEO regarding whether we should spend more time improving the way our app looks and feels. ‘How could he not care that the design is outdated?! …

即將到來的ECMAScript 2022標準

大家好&#xff0c;我是若川。周末分享一篇相對簡單的文章。最近組織了源碼共度活動&#xff1a;1個月&#xff0c;200人&#xff0c;一起讀了4周源碼&#xff0c;參與的小伙伴都表示收獲很大。如果感興趣可以點擊鏈接掃碼加我微信 ruochuan12。另外&#xff1a;昨天的推文入門…

c語言中二叉樹中總結點,C語言二叉樹的三種遍歷方式的實現及原理

二叉樹遍歷分為三種&#xff1a;前序、中序、后序&#xff0c;其中序遍歷最為重要。為啥叫這個名字&#xff1f;是根據根節點的順序命名的。比如上圖正常的一個滿節點&#xff0c;A&#xff1a;根節點、B&#xff1a;左節點、C&#xff1a;右節點&#xff0c;前序順序是ABC(根節…

動態庫的創建與使用

1、動態庫文件的創建 &#xff08;1&#xff09;編寫源文件 &#xff08;2&#xff09;編譯生成動態庫 g -fPIC -shared -o libfile_operation.so file_operation.cpp 此編譯過程分為兩步&#xff0c;等同于下面的兩個命令&#xff1a; g -c -fPIC file_operation.cpp …

ux設計中的各種地圖_UX寫作中的移情

ux設計中的各種地圖Demetri Martin is a master of comedic situations. If you’ve never seen Demetri Martin是喜劇情境的大師。 如果你從未見過 him before, he has a sort of dry brand of observational humor, relying more on anecdotes than full stories, and often…

字符串搜索。HOJ1530 Compound Words。

stl set實現字符串搜索。。效率一般。(附二分搜索。) Compound WordsTime limit:1sec.Submitted:233Memory limit:32MAccepted:81Source: Waterloo ACM Programming Contest Sep 28, 1996 You are to find all the two-word compound words in a dictionary. A two-word compo…

字節3-1前端面試官自學Vue的正確姿勢

大家好&#xff0c;我是若川。前不久和一個字節前端TL朋友聊天&#xff0c;說到大廠前端供需脫節的情況。特別是使用Vue框架的&#xff0c;因為簡單易學好上手&#xff0c;但是能夠深入理解的人并不多&#xff0c;大多都只停留在應用層面&#xff0c;缺乏更深層面的理解。尤其是…

android視圖工具,android studio的HierarchyViewer工具如何知道android屏幕的視圖屬性

讓我們首先看看adb是如何組織的.它有3個主要組件,如here所述 –> client – 在用于開發的機器上運行的客戶端.通過發出adb命令從shell調用客戶端.層次結構查看器還會創建adb客戶端.> server – 在開發計算機上作為后臺進程運行的服務器.它將從adb客戶端發出的命令傳遞給a…

云時代架構讀后感4--IT架構的本質

IT架構的本質 原文地址&#xff1a;http://mp.weixin.qq.com/s?__bizMzAwNTQ4MTQ4NQ&mid2453562304&idx1&snbe86a7bc682c4e76e06b87a10ad45188&chksm8cd136a2bba6bfb430103e50f94b670e799412d0a1cae4eded0eb901847b6d462359ae317635&mpshare1&scene23…

蘋果風格ui_蘋果如何使Soft-UI成為未來

蘋果風格ui重點 (Top highlight)Apple announced some pretty wild updates at WWDC 2020 today.蘋果今天在WWDC 2020上宣布了一些相當瘋狂的更新。 But technology aside, let’s focus on how their UI has changed. It went through the first bitmap representations, thr…

【數據結構】量子危機

問題 宇宙時間公元 5.55 億年&#xff0c;由于某種原因兩大聯盟展開了激戰&#xff08;maxingc 聯盟采用了微子技術&#xff09;&#xff1a; 邪惡的 maxingc 聯盟采集好了微子能&#xff0c;就要運輸。Maxingc 聯盟的領袖 xc 此時才發現&#xff0c;自己的軍事基地中由微子發射…

android 自定義menu背景,Android編程實現自定義系統菜單背景的方法

本文實例講述了Android編程實現自定義系統菜單背景的方法。分享給大家供大家參考&#xff0c;具體如下&#xff1a;不多說&#xff0c;上圖&#xff0c;見代碼。package lab.sodino.menutest;import android.content.Context;import android.app.Activity;import android.os.Bu…

面試官問 async、await 函數原理是在問什么?

大家好&#xff0c;我是若川。這是 源碼共讀活動《1個月&#xff0c;200人&#xff0c;一起讀了4周源碼》 第四期&#xff0c;紀年小姐姐的第四次投稿。紀年小姐姐通過本次學習提早接觸到generator&#xff0c;協程概念&#xff0c;了解了async/await函數的原理等。第四期是 學…

一步步優化JVM六:優化吞吐量[轉]

2019獨角獸企業重金招聘Python工程師標準>>> 原文&#xff1a;http://ganlv.iteye.com/blog/1571315 參考&#xff1a;http://www.myexception.cn/software-architecture-design/1455594.html 現代JVM是一個具有靈活適應各種應用能力的軟件&#xff0c;盡管很多應用…

element-ui 網格_UI備忘單:列表與網格

element-ui 網格重點 (Top highlight)Grids or lists? That is the question we will look at in this cheat sheet. While they can be used anywhere in your site, we are going to look primarily at search results, catalogs and newsfeeds. Making this choice will de…

asp.net mvc使用TagBuilder的應用程序集

在asp.net mvc編寫擴展方法中需要使用到TagBuilder類&#xff0c;根據msdn的說法應該應用System.Web.Mvc.dll 程序集。 TagBuilder 構造函數 .NET Framework 4 初始化 TagBuilder 類的新實例。命名空間&#xff1a; System.Web.Mvc程序集&#xff1a; System.Web.Mvc&#xf…

50行 koa-compose,面試常考的中間件原理原來這么簡單?

大家好&#xff0c;我是若川。源碼共讀《1個月&#xff0c;200人&#xff0c;一起讀了4周源碼》 活動第五期是學習 koa 源碼的整體架構&#xff0c;淺析koa洋蔥模型原理和co原理中的koa-compose源碼原理&#xff0c;閱讀不到50行的koa-compose源碼。這篇是izjing小哥哥的投稿。…

sqlite3源碼編譯到Android,實現SQLite跨全平臺使用

文&#xff0f;何曉杰Dev(高級Android架構師)著作權歸作者所有&#xff0c;轉載請聯系作者獲得授權。初看這個標題你可能會不解&#xff0c;SQLite 本身就是一個跨平臺的數據庫&#xff0c;在這里再說跨平臺有什么意義呢&#xff1f;其實不然&#xff0c;目前我就遇到了一個項目…