OllyDBG反匯編快速找到程序入口一點分析

出處:http://hi.baidu.com/0soul/blog/item/b62f8f08c2c3c42c6b60fbbe.html

先聲明下:這個和脫殼沒關系,不是找殼里面的程序入口哦,只是程序本身的入口,個別朋友不要誤會哈。

其實這個應該是基礎,但我經常找入口的時候翻半天......所以還是記錄下來,萬一時間久了又犯迷糊的時候可以查閱,呵呵。

一般用OllyDBG打開程序的時候,并不是直接定位到程序入口,而是還要先進行一系列的初始化工作,但做這些工作的反匯編代碼我們是不需要的,所以我們要快速跳過,直接到程序入口。

我先把方法寫出來,然后再簡單分析一下初始化的時候都干了什么。

1.一路F8下去,分別步過下列兩個函數
call dword ptr ds:[<&KERNEL32.GetVersion>]???????????? ;
kernel32.GetVersion
call dword ptr ds:[<&KERNEL32.GetCommandLineA>]??????? ;
kernel32.GetCommandLineA

2.GetCommandLineA下面會有好幾個Call,第1個Call完了后隔一行以后會有連續的3個Call,連續的3個Call完了后再往下遇到的一個Call就是程序入口的Call了。
也就是,
從GetCommandLineA往下數(不包括GetCommandLineA本身),第5個Call一般就是程序入口點的Call,F7進去就可以了。

PS:如果是用IDA5反匯編的話,我們點一下“_main proc near”處,然后 Run to cursor(F4)一下基本會直接定位到入口處。

方法很簡單,那來看看在進入程序入口之前,都干了些什么吧。
下面這個是剛用OllyDBG打開程序的截圖。

?

可以看到,第一個Call就是GetVersion,很好理解,就是獲得Windows版本號。

繼續往下。

?

看看我選定的部分,其中有5個Call,最后一個就是我們前面所找的入口處,前面的四個Call的函數分別是:
__crtGetEnvironmentStringsA
_setargv()
_setenvp()
_cinit()

需要注意的是,很多反匯編代碼里面,后面的這三個函數名都不會被直接顯示出來,而是顯示的函數地址。

__crtGetEnvironmentStringsA我猜是GetEnvironmentStringsA()的宏定義名稱(如果有錯還請指出)。
GetEnvironmentStringsA()的作用是返回環境變量。
http://msdn.microsoft.com/en-us/library/ms683187(VS.85).aspx

_setargv()通過函數名就可以看出,是用來處理命令行參數的。
_setenvp()同樣是處理環境變量的。
這兩個函數的作用效果是把參數和環境變量保存到附近的可用“堆(heap)”里面,方便使用。

_cinit()的作用就是當檢測到我們的參數覆蓋了返回地址,能造成緩沖區溢出的時候報錯并退出程序。平時我們遇到的討厭的“遇到問題需要關閉”貌似就是這玩意搞的。
http://msdn.microsoft.com/en-us/library/ms924298.aspx
下面這個是用的微軟官方測試代碼的效果截圖。


Author:zerosoul(零魂)

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

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

相關文章

簡單的Twitter:Heroku上的Play框架,AJAX,CRUD

因此&#xff0c;重大的公告發布了– Heroku開始為Play Framework應用程序提供本機支持&#xff01; 如果您還沒有聽說過&#xff0c;請在Heroku的博客上查看Jesper Joergensen的帖子 。 因此&#xff0c;對于演示&#xff0c;我將建立一個非常基本的Twitter副本&#xff1b; 它…

Cron表達式

CronTrigger CronTriggers往往比SimpleTrigger更有用&#xff0c;如果您需要基于日歷的概念&#xff0c;而非SimpleTrigger完全指定的時間間隔&#xff0c;復發的發射工作的時間表。CronTrigger&#xff0c;你可以指定觸發的時間表如“每星期五中午”&#xff0c;或“每個工作日…

深入理解JavaScript學習筆記(3)_全面解析Module模式

簡介 Module模式是JavaScript編程中一個非常通用的模式&#xff0c;一般情況下&#xff0c;大家都知道基本用法&#xff0c;本文嘗試著給大家更多該模式的高級使用方式。 首先我們來看看Module模式的基本特征&#xff1a; 模塊化&#xff0c;可重用封裝了變量和function&#x…

匯編----乘指令: MUL、IMUL

MUL: 無符號乘 ;影響 OF、CF 標志位;指令格式:;MUL r/m ;參數是乘數;如果參數是 r8/m8, 將把 AL 做乘數, 結果放在 AX;如果參數是 r16/m16, 將把 AX 做乘數, 結果放在 EAX;如果參數是 r32/m32, 將把 EAX 做乘數, 結果放在 EDX:EAX IMUL: 有符號乘 ;影響 OF、CF 標志位;…

Google App Engine Java功能和命名空間API

功能API 使用Capabilities API&#xff0c;您的應用程序可以檢測特定API功能的停機和計劃停機時間。 您可以使用此API來檢測應用程序何時不可用&#xff0c;然后繞過它來減少應用程序的停機時間。 我們該如何處理&#xff0c;這是個折衷方案&#xff1f; 1.優雅&#xff1a;創…

破解key file時經常用到的幾個API函數及其用法

CreateFile函數 ================================================================================== CreateFile: Creates or opens a file or I/O device. The most commonly used I/O devices are as follows: file, file stream, directory, physical disk, volume, …

PHP計劃任務之關閉瀏覽器后仍然繼續執行的函數

函數名稱&#xff1a;ignore_user_abort 本函數配置或取得使用端連接中斷后&#xff0c;PHP 程序是否仍繼續執行。默認值為中斷連接后就停止執行。在 PHP 配置文件中 (php3.ini/php.ini) 的 ignore_user_abort 選項就是配置處。本功能在 PHP 3.0.7 版之后才開始提供。 官方說明…

node--更新數據庫問題

昨天測試blog的comment功能&#xff0c;在新增comment相關的代碼之后&#xff0c;重啟應用&#xff0c;出現Cannot call method forEach of undefined 。反復核對代碼&#xff0c;都沒發現異常&#xff0c;最后將數據庫文件刪除之后&#xff0c;再重啟數據庫&#xff0c;一切正…

U盤做完啟動盤,如何恢復原始容量

&#xff08;1&#xff09;右擊“我的電腦”&#xff0c;選擇“管理”選項&#xff0c;之后選擇“磁盤管理”&#xff0c;查看自己U盤的索引&#xff0c;如&#xff1a;Disk 1&#xff08;2&#xff09;在運行窗口&#xff0c;輸入cmd&#xff0c;回車&#xff0c;出現Dos運行環…

GWT Spring和Hibernate進入數據網格世界

利用Infinispan數據網格的功能最大化Hibernate性能。 一個GWT &#xff0c; Spring &#xff0c; JPA &#xff0c; Hibernate &#xff0c; Infinispan集成教程。 在本教程中&#xff0c;我們將討論如何將Infinispan用作Hibernate二級緩存提供程序。 Infinispan是JBoss緩存的…

記對一個key file crackme的破解

crackme下載地址: http://kssd.pediy.com/tutorial/exercise/section04/chap6-1-4-03.zip ------------------------------------------------------------------------------------------------------------------------------- ----------------------------------------…

第八章 CTE 遞歸 及 分組匯總 高級部分(多維數據集)

UNION 等集合操作符&#xff1a;UNION 等以第一個 SELECT 的 列明 作為 整個結果集的列明&#xff0c;整個結果集 唯一認可的 唯一邏輯處理階段 是 ORDER BY 這個意思是說 只有 ORDER BY 是對整個結果集作用的&#xff0c;其它都操作都作用在 UINON 兩側的 子集合中。EXCEPT 操…

Java Code Geeks Andygene Web原型

大家好&#xff0c; 我們很高興地宣布&#xff0c;一組Maven原型的第一個版本已經發布&#xff01;&#xff01;&#xff01; 該集合的目的是提供可以滿足各種開發需求的項目模板。 您可以在本文末尾找到JCG路線圖。 該第一個發行版旨在提供項目模板-Web應用程序的體系結構。 …

關于如何用od反匯編win32 控制臺程序

*********************************************************** 如何用od反匯編win32 控制臺程序(類似dos程序&#xff09;呢&#xff1f;*********************************************************** 注&#xff1a;od是用來調試win32程序的 1.反編譯win32 控制臺程序&…

Chrome/Chromium HTML5 video 視頻播放硬件加速

Chromium站點上有個大致的框圖。描寫敘述了Chromium的video在各個平臺 - 包含Android - 上是怎樣使用硬件資源來做視頻編解碼加速的&#xff1a; 而依據Android Kitkat上的Chromium代碼分析&#xff0c;HTML5 video播放硬件加速&#xff0c;終于是使用MediaCodec.java來利用本地…

.net mvc結合微軟提供的FormsAuthenticationTicket登陸

一、Web.config <system.web><compilation debug"true" targetFramework"4.5" /><httpRuntime targetFramework"4.5" /><authentication mode"Forms"><forms loginUrl"/Sign/SignIn" defaultUrl…

vc6.o--fatal error C1010錯誤的解決

當編譯c文件時&#xff0c;出錯信息為&#xff1a;fatal error C1010: unexpected end of file while looking for precompiled header directive 解決方案&#xff1a; 1、如果發生錯誤的文件是由其他的C代碼文件添加進入當前工程而引起的&#xff0c;則AltF7進入當前工程的…

具有Java 7中自動資源管理功能的GC

這篇文章簡要概述了Java 7中引入的稱為自動資源管理或ARM的新功能。 文章探討了ARM如何減少開發人員為有效釋放分配的資源的JVM堆而必須編寫的代碼。 Java編程語言中編程的最甜蜜之處之一是對象取消分配的自動處理。 在Java世界中&#xff0c;這通常被稱為垃圾收集。 基本上&am…

PHP學習筆記(六)

《Wordpress 50個過濾鉤子》 1-10 過濾鉤子是一類函數&#xff0c;wordpress執行傳遞和處理數據的過程中&#xff0c;在針對這些數據做出某些動作之前的特定點執行。本質上&#xff0c;就是在wordpress輸出之前&#xff0c;將對瀏覽數據做出反應。 添加過濾鉤子&#xff1a; ad…