日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

160个Crackme041之无源码修改Delphi程序

發布時間:2025/3/21 编程问答 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 160个Crackme041之无源码修改Delphi程序 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 前言
    • 軟件概況
    • 分析程序
    • 棧回溯分析About點擊事件
    • 獲取必要的API
    • 添加區段
      • 配置區段
      • 添加區段數據
    • 植入代碼
    • 修改目標函數
    • 校驗結果

【軟件名稱】:defiler.1.exe

【軟件大小】:287KB

【下載地址】:自行搜索下載

【加殼方式】:無殼

【保護方式】:無保護

【編譯語言】:Delphi

【調試環境】:W7 32

【使用工具】:OD + IDA + Darkde

【破解日期】:2019年5月15日

【破解目的】:純屬興趣

前言

本文參考自吾愛破解論壇zbnysjwsnd8的文章:https://www.52pojie.cn/thread-654237-1-1.html

軟件概況

這個Crackme的要求大概是要我們往Exit菜單中添加代碼,讓程序在點擊Exit菜單時彈出MessageBox框。這個屬于軟件重構的范圍了。

分析程序

使用DarkDe分析程序,這兩個菜單中,只有about是有點擊事件的,Exit菜單是沒有點擊事件。那么我們先從about菜單事件開始分析

棧回溯分析About點擊事件

直接找到About的點擊事件的RVA,在OD中下斷點

about的點擊事件中調用了一個MessageBox,然后直接Ctrl+F9返回

然后找到IDA中對應的代碼

這里就是菜單的響應事件了,然后再次按Ctrl+F9返回

這里是DispatchCommand函數,再往上回溯就是消息循環了,我們直接在0043053B的菜單點擊事件下斷點,點擊About按鈕,F7進入函數

此時ebx的值為about控件的結構體,有about控件相關的字符串

然后再次點擊Exit菜單,F7進入函數

此時ebx的值為Exit控件的結構體,有Exit控件相關的字符串。

那么我們可以根據ebx的不同,植入一段代碼,判斷此時ebx值的情況,如果ebx值有Exit字符串的話,就說明Exit按鈕被點擊,然后執行我們自己的函數,否則繼續執行原有函數。相當于是變相給菜單添加了點擊事件

獲取必要的API

首先需要拿到MessBox和ExitProcess的函數地址,查看導入表

這個程序的導入表已經有這兩個API,那么就不需要手工添加了

添加區段

由于植入的代碼量較多,所以需要添加一個區段。

配置區段

打開LoadPE,加載目標程序,點擊右鍵->添加區段

然后編輯新添加的區段,輸入名稱和虛擬大小以及物理大小即可,點擊保存

添加完成之后如圖,記下新區段的RVA是4E000

添加區段數據

區段雖然添加好了,但真正重要的區段數據還需要插入到文件中,以擴充文件的大小. 因為區段只是一個相當于目錄的存在,如果只有目錄而沒有內容,就會造成一個無效的PE文件.

用010Edit打開目標文件,拉到文件末尾的位置,點擊編輯->插入->插入字節

輸入起始地址和大小,點擊確定 然后保存即可

添加區段后如果文件能正常運行,說明添加成功

植入代碼

接著將程序載入到OD,直接用RVA來到新區段地址處,我這里是4E000,

然后添加如下代碼

0044E000 60 pushad 0044E001 90 nop 0044E002 FF73 08 push dword ptr [ebx+0x8] 0044E005 68 87E04400 push 0044E087 ; ASCII "Exit1" 0044E00A E8 28000000 call 0044E037 0044E00F 85C0 test eax, eax 0044E011 74 1B je short 0044E02E 0044E013 FF73 24 push dword ptr [ebx+0x24] 0044E016 68 8DE04400 push 0044E08D ; ASCII "&Exit" 0044E01B E8 17000000 call 0044E037 0044E020 85C0 test eax, eax 0044E022 74 0A je short 0044E02E 0044E024 C783 80000000 9>mov dword ptr [ebx+0x80], 0044E093 ; 新函數的地址 0044E02E 90 nop 0044E02F 61 popad 0044E030 68 E4E04400 push 0044E0E4 ; UNICODE "犖芻" 0044E035 C3 retn 0044E036 90 nop 0044E037 FF7424 04 push dword ptr [esp+0x4] ; 字符串比較 0044E03B E8 33000000 call 0044E073 0044E040 50 push eax 0044E041 FF7424 08 push dword ptr [esp+0x8] 0044E045 E8 29000000 call 0044E073 0044E04A 8BD0 mov edx, eax 0044E04C 58 pop eax 0044E04D 3BC2 cmp eax, edx 0044E04F 75 1D jnz short 0044E06E 0044E051 33C9 xor ecx, ecx 0044E053 8B7424 04 mov esi, dword ptr [esp+0x4] 0044E057 8B7C24 08 mov edi, dword ptr [esp+0x8] 0044E05B 8A1431 mov dl, byte ptr [ecx+esi] 0044E05E 3A1439 cmp dl, byte ptr [ecx+edi] 0044E061 75 0B jnz short 0044E06E 0044E063 41 inc ecx 0044E064 3BC8 cmp ecx, eax 0044E066 ^ 75 F3 jnz short 0044E05B 0044E068 33C0 xor eax, eax 0044E06A 40 inc eax 0044E06B C2 0800 retn 0x8 0044E06E 33C0 xor eax, eax 0044E070 C2 0800 retn 0x8 0044E073 33C9 xor ecx, ecx ; 取字符串長度 0044E075 8B4424 04 mov eax, dword ptr [esp+0x4] 0044E079 803C08 00 cmp byte ptr [eax+ecx], 0x0 0044E07D 74 03 je short 0044E082 0044E07F 41 inc ecx 0044E080 ^ EB F7 jmp short 0044E079 0044E082 8BC1 mov eax, ecx 0044E084 C2 0400 retn 0x4 0044E087 45 inc ebp 0044E088 78 69 js short 0044E0F3 0044E08A 74 31 je short 0044E0BD 0044E08C 0026 add byte ptr [esi], ah 0044E08E 45 inc ebp 0044E08F 78 69 js short 0044E0FA 0044E091 74 00 je short 0044E093 0044E093 6A 24 push 0x24 ; MB_YESNO | MB_ICONQUESTION 0044E095 68 DCE04400 push 0044E0DC ; ASCII "_KaQqi" 0044E09A 68 B6E04400 push 0044E0B6 ; ASCII "Do you fickbirne really want to quit?" 0044E09F 6A 00 push 0x0 0044E0A1 FF15 A4114400 call dword ptr [<&user32.MessageBoxA>] ; user32.MessageBoxA 0044E0A7 83F8 06 cmp eax, 0x6 0044E0AA 75 09 jnz short 0044E0B5 0044E0AC 6A 00 push 0x0 0044E0AE 2E:FF15 6411440>call dword ptr cs:[<&kernel32.ExitProcess>] ; kernel32.ExitProcess 0044E0B5 C3 retn 0044E0B6 44 inc esp ; 提示信息和標題 0044E0B7 6f outs dx, dword ptr [esi] 0044E0B8 2079 6F and byte ptr [ecx+0x6F], bh 0044E0BB 75 20 jnz short 0044E0DD 0044E0BD 66:6963 6B 6269 imul sp, word ptr [ebx+0x6B], 0x6962 0044E0C3 72 6E jb short 0044E133 0044E0C5 65:2072 65 and byte ptr gs:[edx+0x65], dh 0044E0C9 61 popad 0044E0CA 6c ins byte ptr [edi], dx 0044E0CB 6c ins byte ptr [edi], dx 0044E0CC 79 20 jns short 0044E0EE 0044E0CE 77 61 ja short 0044E131 0044E0D0 6e outs dx, byte ptr [esi] 0044E0D1 74 20 je short 0044E0F3 0044E0D3 74 6F je short 0044E144 0044E0D5 2071 75 and byte ptr [ecx+0x75], dh 0044E0D8 69743F 00 5F4B6>imul esi, dword ptr [edi+edi], 0x51614B5F 0044E0E0 71 69 jno short 0044E14B 0044E0E2 0000 add byte ptr [eax], al 0044E0E4 66:83BB 8200000>cmp word ptr [ebx+0x82], 0x0 ; 轉移 0044E0EC - E9 2D13FEFF jmp 0042F41E 0044E0F1 90 nop 0044E0F2 0000 add byte ptr [eax], al

十六進制代碼如圖

60 90 FF 73 08 68 87 E0 44 00 E8 28 00 00 00 85 C0 74 1B FF 73 24 68 8D E0 44 00 E8 17 00 00 00 85 C0 74 0A C7 83 80 00 00 00 93 E0 44 00 90 61 68 E4 E0 44 00 C3 90 FF 74 24 04 E8 33 00 00 00 50 FF 74 24 08 E8 29 00 00 00 8B D0 58 3B C2 75 1D 33 C9 8B 74 24 04 8B 7C 24 08 8A 14 31 3A 14 39 75 0B 41 3B C8 75 F3 33 C0 40 C2 08 00 33 C0 C2 08 00 33 C9 8B 44 24 04 80 3C 08 00 74 03 41 EB F7 8B C1 C2 04 00 45 78 69 74 31 00 26 45 78 69 74 00 6A 24 68 DC E0 44 00 68 B6 E0 44 00 6A 00 FF 15 A4 11 44 00 83 F8 06 75 09 6A 00 2E FF 15 64 11 44 00 C3 44 6F 20 79 6F 75 20 66 69 63 6B 62 69 72 6E 65 20 72 65 61 6C 6C 79 20 77 61 6E 74 20 74 6F 20 71 75 69 74 3F 00 5F 4B 61 51 71 69 00 00 66 83 BB 82 00 00 00 00 E9 2D 13 FE FF 90 00 00

直接復制,右鍵->二進制->二進制粘貼即可

修改完成之后保存

修改目標函數

接下來我們要修改關鍵函數,讓目標程序點擊菜單時,跳轉到自己的新添加的區段,直接來到0x0042F216處,

修改為如下代碼:

0042F416 68 00E04400 push 0044E000 0042F41B C3 retn 0042F41C 90 nop 0042F41D 90 nop

對應的十六進制為

68 00 E0 44 00 C3 90 90

校驗結果

修改完成之后來檢驗一下結果,點擊Exit菜單,彈出對話框

點擊是,退出程序。Patch完成!

最后,需要相關文件可以到我的Github下載:https://github.com/TonyChen56/160-Crackme

總結

以上是生活随笔為你收集整理的160个Crackme041之无源码修改Delphi程序的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。