160 - 41 defiler.1.exe

環境:
Windows xp sp3

工具:
Ollydbg
stud_PE
LoadPE

先分析一下。
這次的程序要求更改了,變成了這個:

defiler's reversme no.1
-----------------------The task of this little, lame reverseme is to add some code to it.
The code you have to add will be triggered by the 'Exit' menu and should
look like this:A messagebox should appear asking the user "Do you fickbirne really want to quit?".
Its buttons should be 'Yes' and 'No'. If the user clicks 'Yes', simply exit the
program in a clean way, if the user clicks 'No' just do NOT exit the program
(it's up to you what will happen when the user clicks 'No').Valid solutions are solutions with a tutorial explaining what you did,
explaining the code you added and the modified binaries.Mail your solution to defiler@immortaldescendants.org
Valid solutions will be published on http://immortaldescendants.org,
the first solution will be on http://defiler.cjb.netthats it.. i hope i didn't forget any more unimportant stuff ;)best regards,defiler

其實就是程序的菜單欄的Exit選項沒有功能,讓我們把加個messagebox下去,實現這個Exit選項。

OD載入,直接運行,點擊菜單欄,選About選項,彈出messagebox,F12站廳,Alt+F9,點擊確定。斷下來到這里:

0043CCE2  |.  64:FF31       push dword ptr fs:[ecx]
0043CCE5  |.  64:8921       mov dword ptr fs:[ecx],esp
0043CCE8  |.  53            push ebx                                 ; /Style
0043CCE9  |.  57            push edi                                 ; |Title
0043CCEA  |.  56            push esi                                 ; |Text
0043CCEB  |.  8B45 FC       mov eax,[local.1]                        ; |
0043CCEE  |.  8B40 24       mov eax,dword ptr ds:[eax+0x24]          ; |  這個是messageBox所屬的hwnd
0043CCF1  |.  50            push eax                                 ; |hOwner
0043CCF2  |.  E8 C998FCFF   call <jmp.&user32.MessageBoxA>           ; \MessageBoxA
0043CCF7  |.  8945 F8       mov [local.2],eax                        ;程序暫停后的位置

單步F8往下走:

00430528  /$  53            push ebx
00430529  |.  33DB          xor ebx,ebx
0043052B  |.  0FB7D2        movzx edx,dx
0043052E  |.  33C9          xor ecx,ecx
00430530  |.  E8 53FFFFFF   call defiler_.00430488                   ;  獲取點擊后的位置
00430535  |.  85C0          test eax,eax                             ;  確認點擊的是哪個東西
00430537  |.  74 07         je Xdefiler_.00430540                    ;  
00430539  |.  8B10          mov edx,dword ptr ds:[eax]               ;  
0043053B  |.  FF52 40       call dword ptr ds:[edx+0x40]
0043053E  |.  B3 01         mov bl,0x1
00430540  |>  8BC3          mov eax,ebx
00430542  |.  5B            pop ebx
00430543  \.  C3            retn

在00430535下斷點,重新運行程序,點擊菜單欄,選About,程序斷下。觀察EAX的值:

數據窗口跟隨:
顯示方式改為:長型 -> 地址

可以猜測上一個call是用來確定菜單欄的選項的。
讓程序重新運行,這次點Exit

看出這兩個的值是不同的,于是可以用eax的值來判斷點擊的內容。

現在可以開始添加代碼了。
首先先用LoadPE刪除重定位信息。
打開LOadPE后用PE編輯器加載程序。

設置為0

然后就保存

再用stud_PE打開,添加section

大小設置為0x1000,用NULL填充

點擊Add添加,完成后雙擊新建的section

設置一下Characteristics flags為0xE00000E0
順便記一下VirtualOff:4E000
save一下。

OD載入這個修改過的程序,跳轉到44E000處,然后就可以開始添加代碼了。

思路是這樣的:
在00430530處的call后獲取了點擊的內容,然后就直接跳轉到44E000處進行判斷,根據內容來確定接下來的程序。如果是“About”的值就直接返回去源代碼處,否則就是exit的值了,就可以彈出消息框,根據用戶點擊來確定點擊內容從而判斷接下來的行為。

0044E000    85C0            test eax,eax
0044E002  - 0F84 3825FEFF   je 復件_def.00430540                     ;這里就和原代碼相同,如果為空就跳過
0044E008    60              pushad
0044E009    8B0D D0FB4300   mov ecx,dword ptr ds:[0x43FBD0]          ; 復件_def.004407C8
0044E00F    8B09            mov ecx,dword ptr ds:[ecx]
0044E011    90              nop
0044E012    90              nop
0044E013    90              nop
0044E014    81C1 04230000   add ecx,0x2304                            ;這個值會有所改變,在xp上是0x2304,在Win8.1的話則是0x22A0,具體原因能力有限
0044E01A    3BC1            cmp eax,ecx                               ;這里就判斷eax的值是"ABout"還是"Exit"的
0044E01C    61              popad
0044E01D    8B10            mov edx,dword ptr ds:[eax]
0044E01F    75 05           jnz X復件_def.0044E026
0044E021  - E9 1525FEFF     jmp 復件_def.0043053B
0044E026    A1 D0FB4300     mov eax,dword ptr ds:[0x43FBD0]
0044E02B    8B00            mov eax,dword ptr ds:[eax]
0044E02D    83C0 24         add eax,0x24                               ;這里是獲取handle,具體的原因可以看一開始程序斷下時的messagebox
0044E030    6A 24           push 0x24
0044E032    68 58E04400     push 復件_def.0044E058                     ; ASCII "Quit"
0044E037    68 60E04400     push 復件_def.0044E060                     ; ASCII "Are you sure quit?"
0044E03C    FF30            push dword ptr ds:[eax]
0044E03E    E8 7D85FBFF     call <jmp.&user32.MessageBoxA>
0044E043    83F8 06         cmp eax,0x6                                ;0x6為“Yes”,0x7為“No”
0044E046    74 05           je X復件_def.0044E04D
0044E048  - E9 F124FEFF     jmp 復件_def.0043053E                       ;如果是“No”就跳回去原來的位置
0044E04D    6A 00           push 0x0
0044E04F    E8 D831FBFF     call <jmp.&kernel32.ExitProcess>
0044E054    0000            add byte ptr ds:[eax],al
0044E056    0000            add byte ptr ds:[eax],al
0044E058    51              push ecx                                    ;這里開始往下就是字符串的值了
0044E059    75 69           jnz X復件_def.0044E0C4
0044E05B    74 00           je X復件_def.0044E05D
0044E05D    0000            add byte ptr ds:[eax],al
0044E05F    0041 72         add byte ptr ds:[ecx+0x72],al
0044E062    65:2079 6F      and byte ptr gs:[ecx+0x6F],bh
0044E066    75 20           jnz X復件_def.0044E088
0044E068    73 75           jnb X復件_def.0044E0DF
0044E06A    72 65           jb X復件_def.0044E0D1
0044E06C    2071 75         and byte ptr ds:[ecx+0x75],dh
0044E06F    69743F 00 00000>imul esi,dword ptr ds:[edi+edi],0x0

修改完44E000的代碼后,再修改一下 00430530后面的內容

0043052B   .  0FB7D2        movzx edx,dx
0043052E   .  33C9          xor ecx,ecx
00430530   .  E8 53FFFFFF   call 復件_def.00430488
00430535   .- E9 C6DA0100   jmp 復件_def.0044E000                      ;  改了這里
0043053A      90            nop
0043053B   .  FF52 40       call dword ptr ds:[edx+0x40]
0043053E   .  B3 01         mov bl,0x1

修改完后保存一下就好了

完成 O(∩_∩)O

參考:
https://www.52pojie.cn/thread-654237-1-1.html

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

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

相關文章

HDU-2112 HDU Today

http://acm.hdu.edu.cn/showproblem.php?pid2112 怎樣把具體的字母的地點轉換為數字的函數為題目的重點。 HDU Today Time Limit: 15000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 11385 Accepted Submission(s): 2663 P…

AndEngine引擎之SmoothCamera 平滑攝像機

SmoothCamera:就相當于現實世界的攝像機&#xff0c;要想照到一個物體&#xff0c;要么是攝像機移動&#xff0c;要么是物體移動到攝像頭的范圍內&#xff0c;想要放大或縮小一個物體&#xff0c;要么是物體向前或向后移動&#xff0c;要么是攝像頭變焦 這里討論的就是攝像頭的…

160 - 44 defiler.1.exe

環境&#xff1a; Windows xp sp3 工具&#xff1a; 1.ollydbg 2.exeinfope 0x00 查殼 無殼就下一步 0x01 分析 隨便輸入個錯的&#xff0c;出現了不知道哪國的語言。有個6&#xff0c;應該就是name的長度要大于6吧 OD載入&#xff0c;搜字符串。 00421BD7 |. 807D…

時間與日期處理

主要有以下類&#xff1a; NSDate -- 表示一個絕對的時間點NSTimeZone -- 時區信息NSLocale -- 本地化信息NSDateComponents -- 一個封裝了具體年月日、時秒分、周、季度等的類NSCalendar -- 日歷類&#xff0c;它提供了大部分的日期計算接口&#xff0c;并且允許您在NSDate和N…

C++ new/new operator、operator new、placement new初識

簡要釋義 1.operator new是內存分配函數&#xff08;同malloc&#xff09;&#xff0c;C&#xff0b;&#xff0b;在全局作用域(global scope)內提供了3份默認的operator new實現&#xff0c;并且用戶可以重載operator new。 1 void* operator new(std::size_t) throw(std::bad…

160 - 45 Dope2112.2

環境&#xff1a; Windows xp sp3 工具 1.ollydbg 2.exeinfope 0x00 查殼 還是無殼的Delphi程序 0x01 分析 這次繼續OD載入搜字符串&#xff0c;但是沒找到錯誤信息的字符串。 又因為是Delphi程序&#xff0c;所以可以試一下這樣&#xff1a; OD載入后還是搜字符串&…

編輯技巧 word

怎樣給word中的文檔加上水印 轉載于:https://www.cnblogs.com/dqxu/p/4208372.html

NAT地址轉換原理全攻略

NAT轉換方式及原理 在NAT的應用中&#xff0c;可以僅需要轉換內部地址&#xff08;就是“內部本地址”轉換成“內部全局地址”&#xff09;&#xff0c;這是最典型的應用&#xff0c;如內部網絡用戶通過NAT轉換共享上網&#xff1b;也可以是僅需要轉換外部地址&#xff08;就是…

通過setTimeout來取消因大量計算造成的網頁卡頓

js是單線程的&#xff0c;所以有些大量計算的操作會占用線程資源&#xff0c;導致頁面卡住。 今天遇到這樣一個場景&#xff0c;選擇一個下拉框之后&#xff0c;對數據進行篩選&#xff0c;這個過程中有大量計算&#xff0c;點了selecte的option之后&#xff0c;option不隱藏&a…

160 - 47 DueList.2

環境&#xff1a; Windows xp sp3 工具&#xff1a; Ollydbg exeinfope 0x00 查殼 無殼的程序 0x01 分析 運行后說需要keyfile&#xff0c;那就創建一個。 OD載入找找看需要的keyfile叫什么名字 00401000 > $ 6A 00 push 0x0 …

如何解決Visual Studio2012 與此版本的Windows不兼容

解決方案&#xff1a; http://www.microsoft.com/zh-CN/download/details.aspx?id36020 下載更新轉載于:https://www.cnblogs.com/awodefeng/p/3373343.html

160 - 48 DueList.3

環境&#xff1a; Windows xp sp3 工具&#xff1a; Ollydbg exeinfope 0x00 查殼 無殼的程序 0x01 分析 應該就是選上某個或多個框后點Check就能成功的&#xff0c;那應該就是不同框對應不同的值咯。旁邊還有個提示&#xff1a;建議使用資源編輯器。 直接OD載入&#x…

為什么django+mongo在windows上session能夠獲取到,同樣的程序在linux上就會報session的變量錯誤,keyerror?...

settings&#xff1a;SESSION_ENGINE django.contrib.sessions.backends.cache 其它地方&#xff1a;正常存取值。request.session["mm"]“MM” 轉載于:https://www.cnblogs.com/angelfeeling/p/4211261.html

圖片上傳 關于壓縮的問題

圖片上傳 關于壓縮的問題 如果不壓縮&#xff0c;圖片的數據量非常大&#xff0c;很影響上傳速度 http://blog.csdn.net/jinglijun/article/details/8751269 http://blog.csdn.net/jinglijun/article/details/8751220轉載于:https://www.cnblogs.com/kevingod/p/3375507.html

160 - 49 DueList.4

環境&#xff1a; Windows xp sp3 工具&#xff1a; ollydbg exeinfope 0x00 查殼 無殼的程序 0x01 分析 運行后隨便輸入點東西&#xff0c; OD載入&#xff1a; 00401127 > /6A 00 push 0x0 ; /lParam 0 00401129 …

java中的codereview

&#xfeff;&#xfeff;關于codereview&#xff0c;在平時的開發中&#xff0c;經常忽略的環節&#xff0c;參照目前介紹寫好代碼的幾本書和之前掉進的坑&#xff0c;做了一個總結&#xff0c;分享出來。 為什么要做 通過review規避一些代碼層面的問題提升可讀性&#xff0c;…

linux下開機啟動腳本的方法

1.準備好要隨機啟動的程序&#xff0c;例如 /root/test.sh 。確保其可執行。 2.在目錄 /etc/init.d/ 下編寫控制腳本 test 。 #!/bin/sh ### BEGIN INIT INFO # Provides: test # Required-Start: $remote_fs # Required-Stop: $remote_fs # Default-Start: …

理解i-node

原文鏈接:http://www.ruanyifeng.com/blog/2011/12/inode.html 感覺講得挺好,便做個記錄.轉載于:https://www.cnblogs.com/malware/p/3377616.html

MD5算法詳解

0x00 前言 MD5是一種哈希算法&#xff0c;用來保證信息的完整性。 就一段信息對應一個哈希值&#xff0c;且不能通過哈希值推出這段信息&#xff0c;而且還需要保證不存在任意兩段不相同的信息對應同一個哈希值。不過MD5算法算出來的值也就16個字節&#xff08;16*8128&#x…

我的2015年讀書計劃,每兩周讀完一本書!

近日看到一篇文章&#xff0c;說Facebook CEO 馬克扎克伯格給自己的2015年定下了一個新的挑戰&#xff0c;每兩周就要讀完一本書&#xff08;傳送門&#xff1a;戳這里&#xff09;。想了一下&#xff0c;我自己也很久沒看書了&#xff0c;所以今年要改變一下&#xff0c;給自己…