bugku-逆向-7、love

大灬白發表於2020-09-26

首先下載reverse_3.exe,再用PEiD查殼:
在這裡插入圖片描述

無殼,是用C++寫的控制檯程式。再用IDA開啟,F5反編譯檢視原始碼:
在這裡插入圖片描述

我們發現程式碼的主要邏輯就是輸入一串flag字串Str,Str經過sub_4110BE函式,返回給v1一個字串,v1再複製給Dest字元陣列,Dest陣列經過一個for迴圈的逐個加運算,最後將得到的Dest字元陣列和Str2字串’e3nifIH9b_C@n@dH’比較是否相等,相等則輸出rigth flag!
點開sub_4110BE函式:
在這裡插入圖片描述

剛開始覺得這個函式怎麼這麼複雜,後來看到下面的aAbcdefghijklmn[]陣列,結合函式的作用是將三個字元一組轉化成四個字元,才發現它就是Base64編碼:
在這裡插入圖片描述

所以,我們要獲得flag就要先按for迴圈的逐個減運算,然後Base64解碼即可。
Python程式碼如下:

# py -3
# -*- coding: utf-8 -*-

import base64

Str2 = "e3nifIH9b_C@n@dH"
length = len(Str2)
str1 = ""
for i in range(0,length,1):
    str1 += chr(ord(Str2[i]) - i)
# e2lfbDB2ZV95b3V9
print(str1)
result = str(base64.b64decode(str1), "utf-8")
# {i_l0ve_you}
print(result)

得到flag:{i_l0ve_you}