1. 程式人生 > >一道簡單的逆向題的解法 baby_crack

一道簡單的逆向題的解法 baby_crack

剛開始接觸逆向的題目師傅就給啦一道題目


連結:https://pan.baidu.com/s/13cR9WUr1rydFjjbM2meyug  密碼:jg3j    題目和wp都在裡面

下面開始記錄

首先ida大法好~一個美麗姑娘的頭像

接著f5大法好~


題目本身比較簡單,就先看一下第一個sub_4006DF函式


這裡的邏輯也是很清楚並沒有什麼拐彎的就是當i分別滿足其中的條件後對v8這個陣列進行賦值,之前第一個不懂的就是(i+a1)之後知道了表示的是陣列,咱們還是再看看最後一個的判斷條件是啥,這是最後一個if語句中的函式判斷語句


也就是說將byte_601460中的陣列與v8分別對比貼出陣列


也就是隻需要在三個函式(剩下的兩個函式sub_400662和sub_400616)變化後s 的值等於這個數組裡的數值就可以了,接下來貼

出其他函式的圖



這些的邏輯都比較簡單就直接貼出逆向的程式碼了

# A6 4E 05 A2 B6 08 A2 CE  8C EE 20 C2 98 A0 D0 CD
# 23 A6 6A 82   
# -*- coding: utf8 -*-
dict=[0x11,0xBF,0xBA,0x0F,0xD5,0xCC,0xBC,0x1E,0x19,0x01,0x87,0x1B,0x96,0xC3,0x86,0x1A,0x7E,0x6B,0x5A,0x8D,0xFB,0xC2,0x8B,0xB3,0xB1,0xDD,0xEF,0x0A,0x4B,0xF8,0x55,0x26,0x76,0xAB,0xC1,0x64,0x17,0xC9,0xAF,0x61,0x67,0x4A,0xCA,0x12,0x24,0xE1,0xAE,0x50,0x3A,0x70,0x37,0xED,0xE0,0x77,0xB7,0x2E,0xA1,0x2D,0x32,0x7B,0x89,0xCF,0xF0,0x94,0x21,0x65,0x0B,0x3F,0x7D,0x29,0x3B,0x05,0x51,0xE7,0x81,0x6E,0x33,0xC6,0xD7,0xAC,0x3C,0x9A,0x22,0xDC,0x7A,0x08,0x6A,0x97,0xF1,0x5F,0x8E,0x62,0x6F,0x13,0x8A,0x82,0x8C,0x2A,0x49,0x39,0x18,0x68,0xD0,0x83,0xB4,0x42,0x36,0x71,0x0C,0x57,0x10,0xF3,0x28,0xD4,0x34,0x0E,0xE4,0xFF,0x06,0xAD,0x5C,0xFC,0xDB,0xDE,0xDA,0x9F,0xEA,0x35,0x5E,0x78,0x52,0xD9,0x4F,0x6D,0xBB,0xA8,0xB0,0x15,0x43,0x90,0x25,0xA6,0x54,0xFE,0x0D,0xEB,0xA9,0xFD,0xE9,0x5D,0x16,0xCB,0x2F,0x4E,0xBD,0xC5,0x09,0x46,0xF7,0xC0,0x1F,0x59,0xD3,0x02,0x23,0x9D,0x60,0x04,0x84,0xF6,0xA4,0x1D,0x31,0x4C,0xC8,0x9B,0xC7,0xDF,0x66,0x2C,0xEC,0x79,0x73,0x30,0x69,0x63,0x95,0xD6,0xBE,0x44,0xE8,0xA5,0xF2,0x99,0xD8,0x38,0xA0,0xE3,0x8F,0xD2,0x53,0x3D,0x56,0x92,0x72,0xFA,0xB8,0xA7,0xCD,0xEE,0x93,0x85,0x6C,0x7F,0xAA,0xB2,0x47,0xCE,0x80,0x20,0x1C,0x7C,0x07,0xE2,0xB9,0x91,0x45,0x74,0x98,0xF5,0x3E,0x03,0xC4,0x00,0x41,0x00,0x2B,0x48,0x27,0xE6,0x5B,0xF4,0x9C,0x88,0x75,0xA2,0xB6,0x14,0xD1,0xE5,0x4D,0x40,0xF9,0x9E,0x58,0xA3]
base=[0xA6,0x4E,0x05,0xA2,0xB6,0x08,0xA2,0xCE,0x8C,0xEE,0x20,0xC2,0x98,0xA0,0xD0,0xCD,0x23,0xA6,0x6A,0x82]
v3=[0,1,3,6,10] 
v4=[1,3,6,10,15]
def main():
temp=sub_400616()
temp=sub_400662(temp)
print temp
flag=[]
for i in range(len(temp)):
for j in range(255):
if sub_4006DF_burp(j,i)==temp[i]:
flag.append(chr(j))
break
print "".join(flag)
def sub_400616():
result=[]
for i in range(len(base)):
result.append(dict.index(base[i]))
return result
def sub_400662(result):
for i in range(len(v4)-1,-1,-1):
temp=result[v3[i]]
result[v3[i]]=result[v4[i]]
result[v4[i]]=temp
return result
def sub_4006DF_burp(ch,pos):
if pos%4==0:
result=2*ch | (ch>>7)
if pos%4==1:
result=4*ch | (ch>>6)
if pos%4==2:
result=16*ch | (ch>>4)
if pos%4==3:
result=ch>>2 | (ch<<6)
return result%256
def sub_4006DF(input):
result=[]
for i in range(len(input)):
if i%4==0:
result.append(2*input[i] | (input[i]>>7))
if i%4==1:
result.append(4*input[i] | (input[i]>>6))
if i%4==2:
result.append(16*input[i] | (input[i]>>4))
if i%4==3:
result.append(input[i] | (input[i]<<6))
return result
if __name__=="__main__":

main()

堅持就是勝利✌️(感謝師傅)

相關推薦

一道簡單

9*9 cst pac name urn 參考 方案 turn 組成 題目描述 輸入一個四個數字組成的整數 n,你的任務是數一數有多少種方法,恰好修改一個數字,把它 變成一個完全平方數(不能把首位修改成 0)。比如 n=7844,有兩種方法:3844=622 和 7744=

27. 一道簡單揹包 程式設計練習

Description 龍神有很多揹包,每一個揹包都有一個容積。但是這些揹包的容積都恰好是一個數字 #include "stdio.h" long long p; long long dp[4005]; int main() { int n, v; dp[0] = 1;

漢諾塔 + 一道簡單貪心

漢諾塔 移動n層塔至少需要多少次 1層 1次 2層 3次 3層 7次 4層 15次 . . . . 沒錯,就是2n+1的規律 int han(int n) { if(n==1) return 1; else r

一道簡單逆向解法 baby_crack

剛開始接觸逆向的題目師傅就給啦一道題目連結:https://pan.baidu.com/s/13cR9WUr1rydFjjbM2meyug  密碼:jg3j    題目和wp都在裡面下面開始記錄首先ida大法好~一個美麗姑娘的頭像接著f5大法好~題目本身比較簡單,就先看一下第

【Luogu】 P3928 SAC E#1 - 一道簡單 Sequence2

lap sed fin bit amp lowbit pac first main 【題目】洛谷10月月賽R1 提高組 【算法】遞推DP+樹狀數組 【題解】列出DP遞推方程,然後用樹狀數組維護前後綴和。 #include<cstdio> #include&l

一道簡單的演算法:不借助第三變數來交換兩個變數的值

今天做筆試碰到一道簡單的演算法題:不借助第三變數來交換兩個變數的值,記錄一下。 交換兩個變數的值的普遍做法都是藉助第三變數,這樣具有較高的可讀性。 a = 3 b = 5 t = a a = b b = t 但是,如果記憶體有限,只允許用2個變數呢? 強大的CS當然有辦法解決

一道簡單區分String,StringBuffer類,及其簡單應用

我感覺java離我越來越遠了,嗚嗚嗚嗚,剛開始對String類 與StringBuffer類(據說StringBuilder更好),對多種類之間的方法糅合在一起應用,這很重要,下面以一道題為例子(c,java均有): 幾個基本方法: 1.char charAt(int index)返回字

一道簡單的演算法--整數反轉的一些記錄

首先是題幹 給出一個 32 位的有符號整數,你需要將這個整數中每位上的數字進行反轉。 假設我們的環境只能儲存得下 32 位的有符號整數,則其數值範圍為 [−231, 231 − 1]。請根據這個假設,如果反轉後整數溢位那麼就返回 0。 我首先想到的就是字串的相關操作,於是頭也不回地寫

一道簡單的字元

題目:輸入一個整數(含負數),輸出3個數據: 1.位數 2.拆分輸出,空格隔開,其中 “-” 號與第一個數字一起輸出 3.輸出反轉數 例: 輸入: -12345 輸出: 5 -1 2 3 4 5 -54321 程式碼: 1 #include <iostream> 2 #include <

沒做出來的一道逆向

在網上找了很多題  但是每一道成功做出來的 這裡就記錄一道題的大概過程吧 其實其他題我都是這樣想 這道題 我不得不說臺日款了  居然還有背景音樂 讓人熱血沸騰嗎 ? 都嚇尿了。。 下載下來是這樣  然後開啟執行 的時候 似乎自動下載了一首音樂 並且還 能自動執行播

bugkuCTF平臺逆向一道Easy_vb題解

題目地址: http://123.206.31.85/files/6d5c35762f3e316cde9647c14fd0b56d/easy_vb.exe 下載後執行截圖 查殼 無殼 直接載入OD

南郵CTF逆向一道Hello,RE!解題思路

首先可以看到提示如下 我還是查了一下 無殼 提示用IDA 那我們就載入 shift+f12查詢字串 雙擊進入 在右側視窗接著雙擊 然後f5看到了虛擬碼 於是點選字串全按R即可 我再用OD試一下 段首F2下斷 F9執行 段下來後接著單步 走到這個call

遞迴的一道簡單

題目描述 把M個同樣的蘋果放在N個同樣的盤子裡,允許有的盤子空著不放,問共有多少種不同的分法?(用K表示)5,1,1和1,5,1 是同一種分法。 遞迴,有時會有效率問題,自上而下時間複雜度很大,自下而上會更好一些;有時自上而下解決問題效果很好,不得不用; 動態規劃中遞

一道簡單的入門pwn

這是一道入門的pwn題 拿到題先用file命令檢視一下檔案資訊 可以看到是32-bit 的elf檔案,用32位的IDA開啟。 首先進入main函式,F5反編譯後分析程式碼 定位到輸入的引數&s,可以看到引數s分配的空間。這一題通過覆蓋

一道簡單的染色(需要排序)

簡單的 targe 一道 clas getc char bit sort bool https://www.luogu.org/problemnew/show/P2919 #include <bits/stdc++.h> #define read read()

一道看似簡單(刪除List中的元素)

一道看似簡單的題目,我卻掉坑裡了。第一眼看到這題,沒考慮太多,就直接寫了size=0,結果答案當然就是錯了,當時還想不通。編個程式來除錯一下,終於弄懂了。 題目:下面程式碼結束後,list的內容是什麼? List list = new ArrayList(); f

CSU Problem 1785 又一道簡單——湖南省第十一屆大學生計算機程式設計競賽

此文章可以使用目錄功能喲↑(點選上方[+])  CSU Problem 1785 又一道簡單題 Accept: 0    Submit: 0 Time Limit: 5 Sec    Memory

一道簡單的SQL注入

這是我真正意義上來說做的第一道SQL題目,感覺從這個題目裡還是能學到好多東西的,這裡記錄一下這個題目的writeup和在其中學到的東西 link:https://www.ichunqiu.com/battalion Web分類下的SQL 嘗試SQL注入 進入這個模擬環境之後,會得到一個提示為flag在資料庫

POJ 2545+2591+2247+1338簡單

變形 humble long 列數 最簡 能夠 poj string num 【題意簡述】:就是有這種一個序列。就拿當p1 = 2,p2 = 3, p3 = 5,來舉例。由這三個數為基準組成的序列是: 2,3,4,5,6,8,9,10,12……如今給你這個序列數組的下標

前端面試的一道算法

txt 獲得 on() 位數組 cimage 說了 pack -c new (使用canvas解答) 下面說一個跟前端有點相關並且有點趣的一道算法題。 題目: 平面上有若幹個不特定的形狀,如下圖所示。請寫程序求出物體的個數,以及每個不同物體的面積。 分析 想要知道