脫殼_詳細_使用的方法_01

ZC: 如何確定被調試程序已經來到了 未加殼的程序中?

ZC:  視頻中是使用判斷集中語言的特征

ZC:  我的方法:上面的方式 + ESP平衡

?

1、第1課

  (1)、單步跟蹤(原則:向下的跳轉==>正常F8,向上的跳轉==>F4跳過(或者用F2 達到相同效果))

    【930】【05:10】一般來說,很大跨度的跳轉,就跳到OEP了

  (2)、ESP定律法【1616】【08:58】

    【1733】【09:37】"pushad"之后,設置 硬件訪問WORD斷點

  (3)、2次內存鏡像法【2235】【12:23】

    【2332】【12:55】找程序段的第1個".rsrc"節 --> F2 --> (shift)F9

    【2468】【13:41】在地址"0x00401000"處F2?--> (shift)F9

    【2486】【13:45】再單步執行

  (4)、一步直達法【2553】【14:10】

    該 方法不是上面殼 都可以用的。

    一般適用于 絕大部分的UPX殼 和 aspack殼

    【2653】【1442】反匯編窗口 --> 右鍵 --> 查找 --> 命令 (Ctrl+F),直接查找"PUSHAD"指令對應的"POPAD"指令

      【2750】【15:15】可選框"整個段塊(E)" 我們一般不勾選它

      【2802】【15:33】下斷 (F2 和 F4 的方式 都可以),然后接著單步

?

  脫殼的兩種方法:【1010】【05:35】

    OD插件

      方式1【1065】【05:55】

      方式2【1093】【06:02】  該方式有時會出現假死的現象,稍等一會就好了

    LoadPE【1171】【06:28】:修正鏡像大小-->完整轉存

      【1335】【07:23】ImportREC(輸入表重建程序)

?

ZC: 貌似 “Import REConstructor v1.6 最終版” 在 Win7x64 環境下,按鈕“獲取輸入表”得到的信息不太全... 在XP下 就是OK的...

?

2、第2課

  基礎脫殼教程2:手脫ASPACK殼

  ASPack 2.12 -> Alexey Solodovnikov
  工具:PEID和OD

  6種方法脫
    方法1:單步跟蹤
    方法2:ESP定律
    方法3:一步直達

      【2165】【07:12】這里 直接搜索"popad",搜到的結果不一定是和開頭的"pushad"是配套的,如何判斷哪個"popad"是配套的?看下面有沒有 大跨度的跳轉?(ZC: 貌似不太靠譜啊...作為 備用方法吧...)
    方法4:2次內存鏡像


    方法5:模擬跟蹤
      tc eip<xxxxxx

      【3000】【10:00】".aspack"節 包含"SFX","imports","relocations" (ZC: 這是啥意思?它把 導入表 和 重定位表 都打包了?)

      【3090】【10:18】"tc eip<00430000",此時 OD的左上角 顯示 "跟蹤"兩個字,說明OD已經在自動跟蹤了,等一會 就會跳到OD的OEP去了。這個方法比較慢 (ZC: 視頻中 沒有等待跟蹤結束... 他說?等一會 就會跳到OD的OEP去了,就算沒有跳到OEP也可以繼續單步跟)

    方法6:SFX

      【3543】【11:47】OD --> 選項 --> 調試設置 --> SFX -->【3678】【12:15】選擇"塊方式跟蹤真正入口(不準確)",當然 有的要選"字節方式跟蹤真正入口(很慢)" 視具體情況而定 --> OD重載一下 --> OD自動跳到了程序的入口點,來到了真正的OEP

?

【2795】【09:18】方法5 和?方法6 都可以 歸類為 模擬跟蹤法,共同之處 就是讓OD自動去查找程序的OEP,當然也有不同之處

?

3、第3課

  基礎脫殼教程3:手脫NSPACK(北斗)

  nSPack 1.3 -> North Star/Liu Xing Ping

  NsPacK V3.7 -> LiuXingPing *

  at GetVersion

?

  ESP定律法

  單步跟蹤法

  【1428】【04:45】2次內存鏡像法。找不到"QQ個性網"的".rsrc"節,找不到".rsrc"節就不能用內存鏡像法了嗎?當然不是。

    【1580】【05:15】理解PE知識的都知道,程序運行過程中 是從上向下開始解壓的。我們以前先在".rsrc"節下斷點,然后再在0x00401000處下斷點,它把資源段解壓完畢之后,code段當然也已經解壓完畢。【1700】【05:40】既然沒有找到資源文件,∴我們直接在0x00401000處下斷點 (ZC: 這個有點跳tong啊...不是應該在code段的下面一個節上下斷點,然后第2次再在code段[0x00401000處]上下斷點的嗎?),【1745】【05:48】斷下來的地方是0x003F0273,然后 再來 單步跟。【2020】【06:43】來到殼的出口。【2045】【06:49】來到OEP。

    ZC: 這里不理解的點:在"code"節(也就是0x00401000處)下了斷點,為什么斷下來的地方是0x003F0273?難道是 殼把代碼放置到那邊 然后在運行?

?  【2080】【06:55】用模擬跟蹤法的話,輸入"tc eip<00430000"

?

  【2386】【07:57】這個殼(程序"nspack 1.3.exe"的殼)比較特殊,我們還可以使用一種比較巧妙的方法。北斗使用VC++寫的,于是可以直接下這個斷點"at GetVersion"

    【2590】【08:38】單步一下。(ZC: 來到用戶代碼領空后) 向上拉一下,發現 這就是OEP

    ZC:?"nspack 1.3.exe"就是加殼程序,它用自己把自己加了一下殼

    【2727】【09:05】這種方法,一般情況下適合于 北斗3.0以前的殼

?

  【2915】【09:43】PEiD上面也沒發現的時候,看"EP區段" 這里是"nsp0" 也就是nspack 也就是北斗,它的EP區段顯示為北斗的殼

?

4、第4課

  基礎脫殼教程4:手脫FSG殼
  FSG 2.0 -> bart/xt

  重點為修復
  手動、查找IAT

  00425000 77DA6BF0 ADVAPI32.RegCloseKey
  00425280 7C838DE8 kernel32.LCMapStringA

?

  【210】【01:10】注意這里的連續3個跳轉.【258】【01:25】仔細觀察這個無條件跳轉,脫殼多了 經驗多了 就知道 殼作者為了防止被脫殼 不會直接將OEP的地址以明文顯示 一般都是放在寄存器中,我們運行到這里試一下,【350】【01:56】來到OEP

    ZC: 這里 他鎖定JMP的講解 還是理由不充分,應該只是懷疑然后驗證一下(大膽假設,小心驗證),然后 得到結論 這個JMP確實很關鍵

?

  【550】【03:05】講授“手動、查找IAT”

    【760】【04:13】OD命令"d 425210"

      ZC: 貌似 如果這里鍵入命令"dd 425210"的話 只會顯示數值,而?"d 425210" 會顯示注釋(里面是API名字) 。錯了,兩者效果差不多,不知有何區別?還是說"d"后面不跟"w"/"c"/"d"等(如"dd"/"dc"/"dw"等)的話,默認就是"dd"?

    【870】【04:50】向下拉,拉到什么地方呢,就是下面全是0的位置

      【890】【04:56】拉到這個位置(ZC: 他說要拉到"下面全是0的位置",但是 這里明顯不是 他所說的位置啊...)

      ZC: 這里 OD中的手動查到的 IAT是這樣的,那么 用LoadPE查看 加了殼的exe的IAT 是什么樣子的呢?用LoadPE查看 用LoadPE脫了殼的exe的IAT 是什么樣子的呢?

      【1045】【05:48】importREC1.6中?IAT的大小 的懶惰設置方式:直接填入 16進制的 1000。 當然 輸入 1000 之后,會帶來很多的垃圾指針

        【1133】【06:17】"顯示無效函數"(ZC: 注意此時顯示的 無效指針的ptr為0x7FFFFFFF,這樣的指針估計就是垃圾指針 應該不可能有這樣的指針的 而且還是多個指針都是0x7FFFFFFF),直接“剪切指針”

?

  【1233】【06:50】以后遇到修復完之后 還是無法運行的時候,我們可以用這種方法去嘗試一下。

?

  【1450】【08:05】(ZC: 前面講解了 單步跟蹤法 和 ESP定律法)這里講解另一種方法,暫且稱之為 特殊的ESP定律法(沒有遵循 堆棧平衡。ZC: 這樣也行?)

    【1550】【08:35】開始操作

    【1600】【08:53】重新來(ZC: ESP: 0x12FFC4-->0x47A1E8-->0x47A208) 【1640】【0906】看此時的堆棧

      ZC: pushad/popad 各個寄存器的順序是什么?

    【1755】【09:45】ZC: 反匯編窗口-->某條指令處-->右鍵-->斷點--> 可以設置各種斷點 (注意 其中有一個 硬件執行斷點)。ZC: 當有時候 F2/F4 都沒有效果的時候,可以使用這里的設置斷點的方式。

      ZC: 有時,上面的設置斷點的方式也不行... 我的情況就是這樣,弄來弄去 感覺像是在單步執行 而且還會跳到系統代碼空間去執行... 很無奈...

      ZC: 我這里找到另一種方式,可以行的通:

      ZC:  "dd 指令所在地址"-->在 數據窗口中設置 硬件執行斷點--> (Shift)F9 (或者直接設置硬件執行斷點 "he 指令所在地址")

5、第5課 (用9中方法來脫殼)

  基礎脫殼教程5:手脫PECompact2.X的殼
  PECompact 2.x -> Jeremy Collake

  1、單步
  2、ESP定律

【578】【03:12】介紹幾種 比較特殊的方式,問我為什么要這么做,我也沒法告訴大家...

  ZC: 我的理解,下面的幾種 bp api的方式,肯定是研究過 這個殼的源碼,知道這個殼用了這幾個api 。


  3、BP VirtualFree  【568】【03:38】
    SHIFT+F9,取消斷點
    ALT+F9     (這個快捷鍵是 OD-->調試-->返回到用戶代碼(U))
    查找 push 8000(特征碼)  【750】【04:10】push?8000 這個 特征碼,我們記住,可以以后脫強殼的時候 我們還會用到 【815】【04:30】在反匯編窗口 直接搜索"push 8000"
    運行到這
    單步跟
  4、BP VirtualFree  【915】【05:05】
    兩次SHIFT+F9?
    中斷后取消斷點,Alt+F9返回
    單步走。
  5、【1100】【06:06】

    0040A86D > B8 74DE4500 mov eax,qqspirit.0045DE74
    bp 0045de74

    【1260】【06:59】這里,如果我們單步的話,程序走到"retn",程序就跑起來了,∴ 我們在"retn"的下一行設置斷點?(ZC: 這個說法有點扯淡吧?單步走程序就會跑飛,而F2+Shift&F9+F2 就不會跑飛?在OD里面,直接運行到所選位置,不是一條一條匯編指令執行的?有什么特殊?是OD的問題 還是 程序里面對單步調試做了處理?)(ZC: 根據 “【2330】【12:55】”處的現象,這里使用 類似F4的方式 純粹是 經過N次測試后的結論,而非理論分析的結果,∵ "retn"后面的指令 完全有可能不會執行,從這里看 沒有十足的證據能夠證明程序一定會執行"retn"下面的指令)
  6、【1420】【07:52】

    bp VirtualAlloc SHIFT+F9運行  【1515】【08:25】
    取消斷點
    ALT+F9
    向下拉,看到JMP。運行到這


  7、最后一次異常法;  【1685】【09:20】
    取消所有異常。
    2次跑飛。
    找SE句柄

    轉到SE xxxx處 (ZC: 或者 堆棧窗口"SE處理程序"處-->右鍵-->反匯編窗口中跟隨)

    F2 --> Shift+F9 --> F2

      【2015】【11:11】Ctrl+G "0045DE74",來到的地址就是 “【1260】【06:59】”處
  8、兩次內存  【2255】【12:30】ZC: 這里有".rsrc"節

    【2325】【12:53】第2次在0x00401000處設置斷點,然后來到的地址也是 “【1260】【06:59】”處

      【2330】【12:55】然后我們單步跟 (ZC: 這里又 單步跟 了...然后 轉了幾下 程序跑飛了...)

    【2480】【13:45】ZC: 這里,可以看到,2次內存斷點 就隔了幾個指令的位置... 而且 也就是“【1260】【06:59】”處

    ZC: 2次內存鏡像法,每次斷下來的指令地址 值得研究一下,看看是否符合 我的理解... (經測試查看 這里斷下來 實際上效果就相當于內存訪問斷點被斷下來)
  9、at GetVersion  【2855】【15:50】

    ZC: 利用的是 被加殼程序是 VC++程序,里面 一般會調用?GetVersion

6、

7、

8、

?

轉載于:https://www.cnblogs.com/debugskill/p/5576511.html

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

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

相關文章

android 函數式編程_Android開發人員的函數式編程-第1部分

android 函數式編程by Anup Cowkur通過安納普考庫(Anup Cowkur) Android開發人員的函數式編程-第1部分 (Functional Programming for Android Developers — Part 1) Lately, I’ve been spending a lot of time learning Elixir, an awesome functional programming language…

java編程 內存_Java編程技術之淺析JVM內存

JVMJVM->Java Virtual Machine:Java虛擬機,是一種用于計算設備的規范&#xff0c;它是一個虛構出來的計算機&#xff0c;是通過在實際的計算機上仿真模擬各種計算機功能來實現的。基本認知&#xff1a;1.JVM是用于運行Java代碼的假象計算機&#xff0c;主要有一套字節碼指令…

bzoj1116: [POI2008]CLO

傳送門&#xff1a;http://www.lydsy.com/JudgeOnline/problem.php?id1116 題目大意&#xff1a;Byteotia城市有n個 towns m條雙向roads. 每條 road 連接 兩個不同的 towns ,沒有重復的road. 你要把其中一些road變成單向邊使得&#xff1a;每個town都有且只有一個入度 題解&am…

java排序算法大全_各種排序算法的分析及java實現

排序一直以來都是讓我很頭疼的事&#xff0c;以前上《數據結構》打醬油去了&#xff0c;整個學期下來才勉強能寫出個冒泡排序。由于要找工作了&#xff0c;也知道排序算法的重要性(據說是面試必問的知識點)&#xff0c;所以又花了點時間重新研究了一下。排序大的分類可以分為兩…

Cocos2d-x 3.0 簡捷的物理引擎

Cocos2d-x 3.0 開發&#xff08;九&#xff09;使用Physicals取代Box2D和chipmunk http://www.cocos2d-x.org/docs/manual/framework/native/physics/physics-integration/zh -- 官網Demo 水墨魚的專欄 http://www.cocos2d-x.org/docs/catalog/zh --- 官方 搭“server” 須要哪…

google i/o_Google I / O 2017最有希望的突破

google i/oby Aravind Putrevu通過Aravind Putrevu Google I / O 2017最有希望的突破 (The most promising breakthroughs from Google I/O 2017) Google I/O is one of the biggest developer conferences. This year was particularly exciting. There were two keynotes: o…

java clex 中的 IloLPMatrix

最近看 cplex 在 java 的 callback&#xff0c;發現它給的 callback 例子中&#xff0c;都是用 IloLPMatrix 這個類放約束條件&#xff0c;在 IloLPMatrix 中&#xff0c; 每個約束條件存儲在 IloRange 中。 使用 IloLPMatrix 的好處是&#xff0c;這個類可以方便查看模型中的求…

6/12 Sprint2 看板和燃盡圖

轉載于:https://www.cnblogs.com/queenjuan/p/5578551.html

mailto 附帶附件_我和我的朋友如何將附帶項目發展為每月$ 17,000的業務

mailto 附帶附件In 2014, my friends and I set out to build the best possible web design tools. We built UI kits, Admin Dashboards, Templates, and Plugins. We’ve always tried to create products that are helpful in the development process, and that we oursel…

轉:PHP應用性能優化指南

程序員都喜歡最新的PHP 7&#xff0c;因為它使PHP成為執行最快的腳本語言之一&#xff08;參考PHP 7 vs HHVM 比較&#xff09;。但是保持最佳性能不僅需要快速執行代碼&#xff0c;更需要我們知道影響性能的問題點&#xff0c;以及這些問題的解決方案。本文涵蓋了保障PHP應用平…

java 運行異常處理_Java編程異常處理和I/O流

重點&#xff1a;  1&#xff0e;在編寫程序時&#xff0c;要正確地使用捕獲例外和聲明拋出異常的兩種例外處理的方法。2&#xff0e;遇到實際問題時&#xff0c;要根據需要正確使用各種輸入&#xff0f;輸出流&#xff0c;特別是對中文使用適當的字符輸入流。3&#xff0e;正…

反射練習

1.反射 一種計算機處理方式。是程序可以訪問、檢測和修改它本身狀態或行為的一種能力。 新建一個Person類&#xff1a; public class Person { private int age; private String name; public int getAge() { return age; } public void setAge(int age) { this.age age; } pu…

開源 物聯網接入_我們剛剛推出了開源產品。 那么接下來會發生什么呢?

開源 物聯網接入by Victor F. Santos由Victor F.Santos 我們剛剛推出了開源產品。 那么接下來會發生什么呢&#xff1f; (We just launched an open source product. So what happens next?) Last month me and the ninja god Pedro launched GitShowcase, a plug-and-play p…

Class? getClass()

getClass()方法屬于Object的一部分,它將產生對象的類,并且在打印該類時,可以看到該類類型的編碼字符串,前導"["表示這是一個后滿緊隨的類型的數組,而緊隨的"I"表示基本類型int, //: initialization/OptionalTrailingArgrments.java package object;import …

log4j使用說明

1.log4j代碼中修改輸出級別&#xff1a;如&#xff1a; protected final Logger logger LoggerFactory.getLogger(Test.class); 將其轉成實現類&#xff0c;修改輸出級別即可System.out.println(logger.isDebugEnabled()?"debug is true":"debug is false&quo…

java list集合增刪改_Java中集合類list的增刪改查

今天給大家帶來的是Java中list類的使用&#xff0c;java.util 包提供了list類來對線性數據操作List接口是Collection接口的子接口&#xff0c;List有一個重要的實現類--ArrayList類&#xff0c;List中的元素是有序排列的而且可重復&#xff0c;所以被稱為是序列List可以精確的控…

IIS6、IIS7和IIS8各版本的差別

一、寫在前面 目前市面上所用的IIS版本估計都是>6.0的.所以我們主要以下面三個版本進行講解 服務器版本IIS默認版本server20036.0server20087.0server20128.0二、IIS6的請求過程 由圖可知,所有的請求會被服務器中的http.sys組件監聽到,它會根據IIS中的 Metabase 查看基于該 …

Android Studio 插件的使用

1、GsonFormat https://github.com/zzz40500/GsonFormat 2、Android SelectorChapek http://blog.csdn.net/weifei554287925/article/details/41727541

函數式編程基礎_在收件箱中免費學習函數式編程的基礎

函數式編程基礎by Preethi Kasireddy通過Preethi Kasireddy 在收件箱中免費學習函數式編程的基礎 (Learn the fundamentals of functional programming — for free, in your inbox) If you’re a software developer, you’ve probably noticed a growing trend: software ap…

安卓Java虛擬機大小_虛擬機為安卓流暢度背鍋,是因為關系數十萬程序員飯碗?...

導讀&#xff1a;虛擬機相當于應用程序在不同運行環境中的翻譯。說起谷歌安卓系統的“虛擬機”&#xff0c;很多人愛拿它和蘋果iOS做比較&#xff0c;結果&#xff0c;安卓的很多短腿兒都讓虛擬機背了鍋&#xff0c;比如安卓手機運存容量是iPhone的兩到三倍&#xff0c;流暢度卻…