第一章 基礎知識---1.4Crack小實驗--復現

0x01 程序及其編譯環境

程序如下,功能:我們必須輸入正確的密碼1234567才能得到密碼驗證的確認,跳出循環。否則程序提示密碼錯誤再次輸入。

#include <stdio.h>#define PASSWORD "1234567"int verify_password(char* password)
{int authenticated;authenticated = strcmp(password, PASSWORD);return authenticated;
}int main(void)
{int valid_flag = 0;char password[1024];while (1){printf("please input password: ");scanf("%s", password);valid_flag = verify_password(password);if (valid_flag){printf("incorrect password!\n\n");}else{printf("Congratulation! You have passed the verification!\n");break;}}
}

程序編譯環境:

操作系統:win xp
編譯器:VC++6.0
build版本:release版本

對于產生release版本,我們可以在編譯時,選擇下圖內容
在這里插入圖片描述
如果沒上面的界面,我們可以右鍵空白區域,然后選擇組建,就可以出現上面的界面。
在這里插入圖片描述
程序的運行結果效果圖如下:
在這里插入圖片描述

0x02 分析程序

找到工程的文件夾,我們使用release編譯時,會生成一個Release文件夾,在這個文件夾中,我們找到.exe文件
在這里插入圖片描述

將exe文件直接拖到IDA中,IDA就會把二進制文件翻譯成質量上乘的反匯編代碼。默認情況下,IDA會自動識別main函數。
在這里插入圖片描述

按F12會自動繪制出更加專業和詳細的函數流程圖。
在這里插入圖片描述
用鼠標選擇程序分支點,按空格鍵切換到匯編代碼
在這里插入圖片描述
這條指令就是我們要找的if分支,內存地址VA:40106E.
用OD打開文件,Ctrl+G,跳轉到這個地址。
在這里插入圖片描述
OD默認情況下將程序中斷在PE裝載器開始處,而不是main函數的開始。
我們在這個地址打上斷點
在這里插入圖片描述
密碼驗證函數的返回值存放在EAX中,if語句通過以下兩條指令實現。

test eax,eax
JE XXXX

現在我們將je改成jne,現在當我們輸入正確密碼就會提示錯誤,輸入錯誤密碼就會正確

在這里插入圖片描述
改過之后,原本JE對應的機器指令為74,改成jnz之后變為75,運行程序,單步執行就可以看到執行了正確密碼才應該得到的指令。
在這里插入圖片描述

0x03 破解程序

方法1

右鍵----復制到可執行文件-----所有修改
在這里插入圖片描述
選擇全部復制
在這里插入圖片描述
右鍵----保存文件,就可以了
在這里插入圖片描述
運行程序,當我們輸入1234567,會讓我們繼續輸入,輸入其他會立即退出

在這里插入圖片描述

方法2

這里我們要認識幾個名詞:

  • 文本偏移地址(File Offset):數據在PE文件中的地址叫文件偏移地址,這是文件在磁盤上存放時相對于文件開頭的偏移。
  • 裝入基址(Image Base):PE裝入內存時的基地址。默認情況下,EXE文件在內存中的基地址是0x00400000,DLL文件時0x10000000.
  • 虛擬內存地址(VA):PE文件中的指令被裝入內存后的地址
  • 相對虛擬地址:內存地址相對于映射基址的偏移量
  • 節偏移:存儲單位差異引起的節基址差
    文件偏移地址=VA-裝入基址-節偏移
    節偏移=.text段的虛擬內存地址-文件偏移地址

文件數據在磁盤和內存中的存放:

  1. 磁盤:以0x200字節為基本單位進行存放。當一個數據節不足0x200字節時,不足的地方將被0x00填充;當一個數據節超過0x200,下一個0x200將分配給這個節使用。
  2. 內存:以0x1000字節為基本單位進行組織。類似的,不足將被補全,如果超出將分配下一個節為其所用。

節偏移就是這些基本單位造成的,也就是0x00填充的地方

用LordPE打開exe文件
在這里插入圖片描述
我們可以看到.text的虛擬內存地址(Voffset)=0x1000,文件偏移地址(Roffset)也是這個。所以節偏移=0
40106E.這個地址的指令在PE文件中的文件偏移地址=40106E-400000-節偏移=0x106E

用編譯器打開exe文件,這里我使用010Editor,Ctrl+G,輸入0x106E直接跳轉到JE指令的機器代碼處,將74改成75
在這里插入圖片描述
保存后執行,結果和方法1一樣。

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

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

相關文章

.net中調用exchange服務器發郵件

普通的郵件, 用System.Net.Mail 類 或 System.Web.Mail 類 處理即可, 但是Exchange Server 環境下, 這兩個類起不了作用-------至少目前我看到的情況如此. 整個過程如下: 1. 先添加COM 引用 "Microsoft CDO for Windows 2000 Library" .2. 發送郵件的代碼: CDO.Messa…

Java Double類doubleToLongBits()方法與示例

Double類doubleToLongBits()方法 (Double class doubleToLongBits() method) doubleToLongBits() method is available in java.lang package. doubleToLongBits()方法在java.lang包中可用。 doubleToLongBits() method follows IEEE 754 double floating-point standards and …

Firefox(火狐瀏覽器)彩蛋

①在地址欄上輸入&#xff1a; about:mozilla ②在地址欄上輸入&#xff1a; about:robots ③在地址欄上輸入&#xff1a; www.figma.com/404/ ④地址欄上輸入&#xff1a; chrome://global/content/alerts/alert.xul

jquery.history插件在ie中失效的問題

hash標志中不能有? ff中不存在這個問題。 轉載于:https://www.cnblogs.com/xyun/archive/2008/12/01/1345188.html

Java——反射(Class.forName()讀取配置文件舉例).

榨汁機(Juicer)榨汁機的案例&#xff1a; 分別有水果(Fruit),蘋果(Apple)&#xff0c;香蕉(Bananal)&#xff0c;橘子(Orange),榨汁(squeeze) 要求&#xff1a; 榨出不同的水果汁來喝 //一般方法求解 package com.testl;public class Text1 {public static void main(Strin…

java 根據類名示例化類_Java類類getEnclosingClass()方法及示例

java 根據類名示例化類類的類getEnclosingClass()方法 (Class class getEnclosingClass() method) getEnclosingClass() method is available in java.lang package. getEnclosingClass()方法在java.lang包中可用。 getEnclosingClass() method is used to return recent or im…

C++:cin.getline

轉&#xff1a;百度百科 http://baike.baidu.com/view/2383876.htm cin.getline 此函數是按行讀取,其語法為:cin.getline(字符指針,字符個數N,結束符); 功能是&#xff1a;一次讀取多個字符(包括空白字符&#xff09;&#xff0c;直到讀滿N-1個&#xff0c;或者遇到指定的結束符…

端口復用和重映射--STM32F103

什么是端口復用&#xff1f; STM32中有很多內置外設&#xff0c;這些外設的引腳都是與GPIO復用的&#xff0c;什么時候復用呢&#xff1f;就是當一個GPIO作為內置外設引腳使用時&#xff0c;就叫做復用。比如串口1的發送接收引腳是PA9&#xff0c;PA10&#xff0c;當PA9&#…

考研數學

眼前儼然一副冬的氣象&#xff0c;伴隨氣溫的驟降&#xff0c;考研復習也進入異常緊張的階段。在考試前這兩個月里&#xff0c;考生如何復習數學&#xff0c;成績還可以有所提高。萬學?海文數學教研組針對沖刺階段數學復習歸納總結以下復習經驗和建議&#xff0c;供大家參考。…

一個很好的自學網站~推薦一下

http://www.51zxw.net/study.asp?vip15746908

[轉]Ubuntu遠程桌面登陸

原文地址&#xff1a;http://www.cnblogs.com/xdzone/archive/2011/03/10/1979644.html 1.xp下默認的遠程桌面協議是rdp&#xff0c;默認端口3389&#xff0c;而ubuntu用的時vnc&#xff1a;默認端口5900 2.首先被訪問的主機&#xff08;windows/linux&#xff09;都要設置為允…

NVIC中斷管理---STM32

NVIC&#xff1a;嵌套向量中斷控制器 在了解中斷之前&#xff0c;我們先了解搶占優先級和響應優先級 搶占優先級和響應優先級 搶占優先級決定能不能打斷&#xff0c;高優先級的搶占可以中斷低優先級的搶占響應優先級在搶占優先級相同時&#xff0c;高響應優先級先執行&#x…

Java BigDecimal stripTrailingZeros()方法與示例

BigDecimal類stripTrailingZeros()方法 (BigDecimal Class stripTrailingZeros() method) stripTrailingZeros() method is available in java.math package. stripTrailingZeros()方法在java.math包中可用。 stripTrailingZeros() method is used to get a BigDecimal that is…

外部中斷---STM32F1

外部中斷概述 STM32的中斷控制器支持19個外部中斷/事件請求&#xff1a; 線0-15&#xff1a;對應外部IO口的輸入中斷線16&#xff1a;連接到PVD輸出線17&#xff1a;連接到RTC鬧鐘事件線18&#xff1a;連接到USB喚醒事件 STM32每個IO口都有可以作為外部中斷輸入&#xff0c;…

轉:點9圖

關于”點九” 轉&#xff1a;http://mux.baidu.com/?p1506“點九”是andriod平臺的應用軟件開發里的一種特殊的圖片形式&#xff0c;文件擴展名為&#xff1a;.9.png 智能手機中有自動橫屏的功能,同一幅界面會在隨著手機(或平板電腦)中的方向傳感器的參數不同而改變顯示的方向…

Python HTMLCalendar類| 帶實例的formatyear()方法

Python HTMLCalendar.formatyear()方法 (Python HTMLCalendar.formatyear() Method) formatyear() method is an inbuilt method of the HTMLCalendar class of calendar module in Python. It works on HTMLCalendar class object and returns an HTML table consisting of th…

2009中國企業家新春聯誼會

2009中國企業家新春聯誼會——把握當前機遇&#xff0c;笑對經濟危機&#xff0c;暢飲將帥美酒尊敬的嘉賓&#xff1a;當前&#xff0c;國際形勢正在發生深刻而復雜的變化&#xff0c;由美國次貸危機引發的全球經濟危機已經愈演愈烈&#xff0c;美國前五大投資銀行有3家宣告破產…

串口通信的基本原理----STM32

串口通信基本原理 1. 處理器與外部設置通信的基本方式 并行通信&#xff1a;數據各個位同時傳輸串行通信&#xff1a;數據按位順序傳輸 在串行通信中&#xff0c;按照數據的傳輸方向&#xff0c;又分為&#xff1a; 單工&#xff1a;數據傳輸只支持在一個方向傳輸半雙工&am…

java獲取vm運行參數_如何獲取在Java中運行Java VM的版本?

java獲取vm運行參數To get the version of running VM (Virtual Machine) in Java, we use the getProperties() method, which is defined in System class, while calling the method, we need to pass the property name to get the version of running Java VM. 要獲取Java…

Spring MVC+Ant+Tomcat+Eclipse最簡單的demo

第一步是Java的Web環境搭建&#xff0c;下載Eclipse&#xff08;或者更好的但收費的IDE-IntelliJ Idea&#xff0c;和Resharper一家公司出的&#xff09;&#xff0c;下載Tomcat&#xff0c;下載JDK&#xff0c;下載Spring&#xff0c;注意安裝Tomcat的時候配置一下管理員賬號和…