[逆向工程]160個CrackMe入門實戰之Afkayas.1.Exe解析(二)

[逆向工程]160個CrackMe入門實戰之Afkayas.1.Exe解析(二)

一、前言

在逆向工程的學習路徑上,CrackMe程序是初學者最好的練手材料。今天我們要分析的是160個CrackMe系列的第二題——Afkayas.1.Exe。這個程序由Afkayas編寫,難度為★(初級),包含了典型的驗證機制。通過本實戰,你將學會:

  • 使用x32dbg進行動態調試
  • 爆破方法
  • 分析算法邏輯并編寫注冊機
  • 掌握基本的匯編指令分析技巧

二、環境與工具準備

在開始逆向之前,我們需要準備以下環境:

  • 操作系統:Windows 10
  • 調試工具:x32dbg
  • 目標程序:Afkayas.1.Exe
  • 輔助工具:ExeinfoPe(查殼工具,雖然本程序無殼)

三、程序初步分析

3.1 查殼分析

無殼32位vb語言

在這里插入圖片描述

3.2 運行Afkayas.1.Exe

功能:驗證用戶輸入的用戶名(Name)與序列號(Serial)是否匹配

目的:跳過賬號序列號匹配驗證

四、逆向破解實戰

4.1 驗證爆破

此部分需要同時輸入用戶名和序列號。

4.1.1 爆破方法
  1. 定位錯誤提示

    x32dbg打開程序,F9運行,搜索字符串“You Get Wrong” 找到關鍵跳轉,直接爆破

在這里插入圖片描述

將紅色箭頭處代碼直接nop填充,打補丁另存程序

在這里插入圖片描述

2.結果驗證

在這里插入圖片描述

4.1.2 算法分析與注冊機編寫

通過動態調試,我們可以發現序列號的生成規律:

1.序列號生成算法

call dword ptr ds:[eax+A0]
cmp eax,edi
jge afkayas.1.4023D2
push A0
push afkayas.1.401B5C
push ebx
push eax
call dword ptr ds:[<__vbaHresultCheckObj>]
push esi
call dword ptr ss:[ebp-C4]
lea edx,dword ptr ss:[ebp-28]
push eax
push edx
call dword ptr ds:[<__vbaObjSet>]
mov ebx,eax
lea ecx,dword ptr ss:[ebp-1C]
push ecx
push ebx
mov eax,dword ptr ds:[ebx]
call dword ptr ds:[eax+A0]        
cmp eax,edi
jge afkayas.1.402409
push A0
push afkayas.1.401B5C
push ebx
push eax
call dword ptr ds:[<__vbaHresultCheckObj>]
mov edx,dword ptr ss:[ebp-B0]
mov eax,dword ptr ss:[ebp-1C]
push eax
mov ebx,dword ptr ds:[edx]
call dword ptr ds:[<__vbaLenBstr>]
mov edi,eax
mov ecx,dword ptr ss:[ebp-18]
imul edi,edi,17CFB      ;賬號長度乘以0x17cfb
push ecx
jo afkayas.1.4026BE
call dword ptr ds:[<Ordinal#516>]  ;獲取輸入賬號字符串首字符ASCII值
movsx edx,ax
add edi,edx       ;相加生成字符串 比如 390173
jo afkayas.1.4026BE
push edi
call dword ptr ds:[<__vbaStrI4>]
mov edx,eax
lea ecx,dword ptr ss:[ebp-20]
call dword ptr ds:[<__vbaStrMove>]

在這里插入圖片描述

vbastrcat函數將AKA-和后邊字符串例如390173拼接在一起從而得到序列號:

AKA-390173

以上序列號是輸入賬號1111得到的,至此算法破解

在這里插入圖片描述

2.注冊機實現

#include <stdio.h>
#include <stdlib.h>
#include <string.h>int main()
{char username[50] = {0};char serial[100] = {0};printf("Enter Username: ");scanf("%s", username);//賬號長度自由發揮if(strlen(username) < 4) {printf("Error: Username must be at least 4 characters!\n");// 添加暫停printf("Press Enter to exit...");getchar(); // 清除輸入緩沖區殘留的換行符getchar(); // 等待用戶按鍵return 1;}int firstChar = username[0];int serialNum =  strlen(username) * 0x17CFB + firstChar; //算法賬號長度*固定數+首字符ASCIIsprintf(serial, "AKA-%d", serialNum);printf("Your Serial: %s\n", serial);// 添加暫停printf("Press Enter to exit...");getchar(); // 清除輸入緩沖區殘留的換行符getchar(); // 等待用戶按鍵return 0;
}
//gcc -0 cm.exe cm.c

3.驗證注冊機

在這里插入圖片描述

如果你覺得本教程對你有幫助,請點贊??、收藏?、關注支持!歡迎在評論區留言交流技術細節!

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

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

相關文章

本地電腦安裝Dify|內網穿透到公網

1.安裝Docker Docker: Accelerated Container Application Development 2.添加 PATH 3.安裝Dify https://github.com/langgenius/dify.git 把.env.example文件名改為.env 4.更換鏡像源 {"builder": {"gc": {"defaultKeepStorage": "20G…

數據結構自學Day6 棧與隊列

1. 棧其實棧與隊列仍然屬于線性表&#xff08;有n個元素構成的集合&#xff0c;邏輯結構呈現線形&#xff09;線形表&#xff1a;順序表&#xff0c;鏈表&#xff0c;棧&#xff0c;隊列&#xff0c;串&#xff08;字符串&#xff09;棧&#xff08;Stack&#xff09;是一種線性…

Java 異常處理詳解:從基礎語法到最佳實踐,打造健壯的 Java 應用

作為一名 Java 開發工程師&#xff0c;你一定遇到過運行時錯誤、空指針異常、文件找不到等問題。Java 提供了強大的異常處理機制&#xff0c;幫助我們優雅地捕獲和處理這些錯誤。本文將帶你全面掌握&#xff1a;Java 異常體系結構try-catch-finally 的使用throw 與 throws 的區…

Fiddler弱網測試實戰指南

Fiddler是一個常用的網絡抓包工具&#xff0c;它也可以用來模擬弱網環境進行測試。 在測試時需要用到弱網測試&#xff0c;也就是在信號差、網絡慢的情況下進行測試。比如&#xff0c;用戶在地鐵、電梯、地下車庫等場景經常會遇到會話中斷、超時等情況&#xff0c;這種就屬于弱…

解決Vue頁面黑底紅字遮罩層報錯:Unknown promise rejection reason (webpack-internal)

vue前端頁面彈出黑底紅色報錯遮罩層報錯&#xff1a;具體報錯信息&#xff1a;Uncaught runtime errors: ERROR Unknown promise rejection reasonat handleError (webpack-internal:///./node_modules/webpack-dev-server/client/overlay.js:299:58)at eval (webpack-internal…

構建 Go 可執行文件鏡像 | 探索輕量級 Docker 基礎鏡像(我應該選擇哪個 Docker 鏡像?)

文章目錄構建 Go 可執行文件鏡像典型用途探索輕量級 Docker 基礎鏡像構建 Go 可執行文件鏡像 golang:1.23.0-bullseye 是官方 Go 鏡像的一個 “build-stage” 版,用來構建 Go 可執行文件&#xff0c;而不是把它當成最終運行鏡像。 dockerhub官方&#xff1a;https://hub.dock…

鏈表算法之【回文鏈表】

目錄 LeetCode-234題 LeetCode-234題 給定一個單鏈表的頭節點head&#xff0c;判斷該鏈表是否為回文鏈表&#xff0c;是返回true&#xff0c;否則返回false class Solution {/*** 這里的解題思路為&#xff1a;* (1)、找中間節點* (2)、反轉鏈表* (3)、遍歷比較節點值是否相…

Playwright Python 教程:網頁自動化

1. 常用工具簡介及對比主流網頁自動化工具對比工具支持語言瀏覽器支持特點適用場景PlaywrightPython, JS, .NETChromium, Firefox, WebKit跨瀏覽器、速度快、API簡潔自動化測試、爬蟲、網頁操作Selenium多語言所有主流瀏覽器歷史悠久、社區大傳統自動化測試、兼容性測試Puppete…

動態數組:ArrayList的實現原理

動態數組&#xff1a;ArrayList的實現原理 大家好&#xff01;今天我們來聊聊Java集合框架中一個非常重要的數據結構——ArrayList。就像我們日常生活中使用的伸縮收納盒一樣&#xff0c;ArrayList可以根據需要自動調整大小&#xff0c;既方便又高效。那么它是如何實現這種&quo…

MIPI DSI(五) DBI 和 DPI 格式

關于 DBI 和 DPI 這兩種格式的詳細協議內容&#xff0c;請參考《MIPI Alliance Standard for Display Bus Interface&#xff08;V2.0&#xff09; .pdf》和《MIPI Alliance Standard for Display Pixel Interface&#xff08;DPI- 2&#xff09; .pdf》這兩份文檔。首先先了解…

FRP Ubuntu 服務端 + MacOS 客戶端配置

一、服務端配置 1、下載frp并解壓 # 創建目錄并進入 mkdir -p /opt/frp && cd /opt/frp # 下載最新版&#xff08;替換URL為GitHub發布頁最新版本&#xff09; wget https://github.com/fatedier/frp/releases/download/v0.59.0/frp_0.59.0_linux_amd64.tar.gz # 解壓 …

Video Python(Pyav)解碼二

在 PyAV 中&#xff0c;input_container.decode() 和 input_container.demux() 是兩種處理視頻流數據的不同方法&#xff0c;它們分別適用于不同的場景。下面通過代碼示例和對比來詳細說明它們的用法和區別。1. input_container.decode()功能直接解碼&#xff1a;從容器中讀取數…

閑庭信步使用圖像驗證平臺加速FPGA的開發:第十六課——圖像五行緩存的FPGA實現

&#xff08;本系列只需要modelsim即可完成數字圖像的處理&#xff0c;每個工程都搭建了全自動化的仿真環境&#xff0c;只需要雙擊top_tb.bat文件就可以完成整個的仿真&#xff0c;大大降低了初學者的門檻&#xff01;&#xff01;&#xff01;&#xff01;如需要該系列的工程…

頭文件與源文件及區別

使用場景上的區別頭文件&#xff1a;變量的聲明&#xff0c;函數的聲明&#xff0c;宏的定義&#xff0c;類的定義等。 源文件&#xff1a;變量的定義。函數的定義實現&#xff0c;類成員函數的定義實現等。這樣方便于我們去管理、規劃&#xff0c;更重要的是避免了重定義的問題…

圖機器學習(4)——圖機器學習與嵌入算法

圖機器學習&#xff08;4&#xff09;——圖機器學習與嵌入算法0. 前言1. 圖機器學習1.1 機器學習基本原理1.2 圖機器學習的獨特優勢2. 廣義圖嵌入問題3. 圖嵌入算法分類小結0. 前言 機器學習是人工智能的一個重要分支&#xff0c;它致力于讓系統能夠從數據中自主學習并持續優…

網絡基礎10--ACL與包過濾

一、ACL 定義與核心功能ACL&#xff08;訪問控制列表&#xff09;是通過規則匹配實現數據包過濾或分類的核心技術&#xff0c;廣泛應用于包過濾、NAT、QoS、路由策略等場景。其核心由規則條目組成&#xff0c;每條規則包含匹配條件&#xff08;如源 / 目 IP、端口、協議&#x…

Web安全 - 基于 SM2/SM4 的前后端國產加解密方案詳解

文章目錄概述一、背景與法規要求二、算法選型三、核心流程四、前端實現要點&#xff08;偽代碼&#xff09;五、后端實現要點(偽代碼)六、公鑰存儲策略七、全流程示例圖八、總結與最佳實踐推薦概述 隨著信息安全法規日益嚴格&#xff0c;如《網絡安全法》《數據安全法》和等保…

ACL動態路由實驗全攻略:配置與安全實戰

實驗拓撲圖 實驗需求 步驟1.按照圖示配置IP地址2.按照圖示區域劃分配置對應的動態路由協議3.在R7上配置dhcp服務器&#xff0c;能夠讓pc可以獲取IP地址4.將所有環回宣告進ospf中&#xff0c;將環回17宣告進rip中&#xff0c;將rip路由引rospf中&#xff0c;ospf路由引.rip中5.要…

電動汽車制動系統及其工作原理

制動系統是實現車輛減速、停車功能的重要系統。電動汽車的制動系統按照制動實現方式分為機械制動和電機再生制動&#xff0c;機械制動根據制動力實現方式不同又可分為液壓機械制動系統、氣壓機械制動系統和電子機械制動系統。目前&#xff0c;電動汽車的制動系統實現一般為協調…

CentOS 7 Linux 離線安裝 docker-compose

CentOS 7 Linux 離線安裝 docker-compose 1. docker-compose 簡介 1.1. docker-compose 是什么&#xff1f; docker-compose 是 Docker 官方提供的工具&#xff0c;用于定義和運行多容器 Docker 應用程序。通過一個 YAML 文件&#xff08;通常為 docker-compose.yml&#xf…