Mountain climbing WP
生活随笔
收集整理的這篇文章主要介紹了
Mountain climbing WP
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
PE查殼,發現有殼
利用UPX靜態脫殼機脫殼
?打開exe文件,得到關鍵語句
?ida打開,shift+F12找到關鍵語句,F5反編譯
有隨機數組產生,而且是二維的
?編寫代碼得的隨機數列
#include <stdio.h> #include <stdlib.h> #include <string.h>int main() {int i, j;srand(0xCu);for (i = 1; i <= 20; i++){for (j = 1; j <= i; j++){printf("%7d ", rand() % 100000);}printf("\n");}return 0; }?下面就是走迷宮
if ( j_strlen(Str) == 19 ){sub_41114F(Str);v4 = 0;j = 1;i = 1;dword_423D78 += dword_41A138[101];while ( v4 < 19 ){if ( Str[v4] == 'L' ){dword_423D78 += dword_41A138[100 * ++i + j];}else{if ( Str[v4] != 'R' ){((void (__cdecl *)(const char *, char))sub_41134D)("error\n", v3);system("pause");goto LABEL_18;}dword_423D78 += dword_41A138[100 * ++i + ++j];}++v4;}sub_41134D("your operation can get %d points\n", dword_423D78);?'L'是向下走一步,'R'是向右下走一步,可以走19步,從77開始選擇走'L'或者是走'R',選擇最大值走。手動扒去的步法為:RRRRRLLRRRLRLRRRLRL
輸入發現是錯誤的,證明是對步法進行了改變。對我們輸入的str進行跟蹤,看到了sub_41114F函數,選擇OD動態調試。
在函數sub_41114F上下斷點,讓程序運行到這里
對EAX寄存器進行數據窗口下跟隨,看我們的值進行了怎么的變化,F8單步步過,看到我們的值發送了變化
?重新執行程序,看看我的值具體的變化
?F7單步步入,F4運行到00411949 ? ?E8 57F7FFFF ? ? call ConsoleA.004110A5? 然后再F7步入,來到改變函數。
?F4運行到0041181B,F7跳轉到0041194E,F8單步執行,期間注意窗口值的變化,執行到00411992,發現我們的第二個值R變成了V
?查看發現,原來是對值進行與4的異或,還是偶數項進行異或。重新異或得到flag:RVRVRHLVRVLVLVRVLVL
?
?
?
?
總結
以上是生活随笔為你收集整理的Mountain climbing WP的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LeetCode70. Climbing
- 下一篇: 英语年份有日期的读法