160個CrackMe(4)
這次寫的是160個CrackMe系列裡的Andrénalin系列的第四個,前面三個還是比較容易的,總的說來這個系列的演算法都是將使用者輸入的字串經過一系列的運算後與一個註冊碼比較,如果一樣則註冊成功,所以這個系列直接爆破的話就很容易,直接找到關鍵字串—註冊成功的語句,然後再合適的位置將判斷跳轉的語句(je,jne等)nop掉就可以了。
一·目標軟體:Andrénalin.4.exe
執行介面:(未註冊)
註冊後:
二·分析:
首先,我們發現這個軟體沒有確定鍵,只有0123456789*#和一個刪除鍵,那麼這個軟體很有可能輸入之後靠Timer控制元件來自動進行判斷的(不排除隱藏按鍵的可能)。
查殼:
VB編寫的,沒有加殼。。。
檢視事件:
果然有Timer,還不止一個,看來判斷的地方不止一個。
OD中跟蹤分析:
- 先檢視字串,看有沒有什麼可以利用的:
居然有這麼多的已註冊(REGISTRIERT)和一堆看似一樣卻有微小差別的字串,我們隨便進入到一個字串所在的位置研究一下:
有一個VB裡面的標準比較函式:vbVarTstEq ,那麼這個字串很有可能就是最終用來比較的字串了(當然不一定是這個字串,因為還有很多個與這個字串相像的字串)
- 跟蹤演算法:
先不要下斷點,隨便輸入一個資料(我輸的147258)後再在Timer1_404650的位置下斷點,因為這是第一個Timer的位置,也剛好在那個字串的上方,這裡開始跟蹤演算法比較容易跟蹤
我們發現,在00404982的位置的call函式取了字串裡的第一位字元,然後再00404994的位置上通過rtcAnsiValueBstr函式將字元轉化為Unicode,相當與python裡ord(a[i]);
然後通過0040499A到004049C8地址的指令將16進位制的Unicode轉換為10進位制的,然後加上一個常數(暫時不知道這個數怎麼來的)得到的值再轉換為16進位制,比如字元‘8’:
‘8’à 0x38 à 56 à 56+常數=Yà Y轉換為16進製得到一個數
所以總的演算法就是這樣把每一個字元轉換為一個16進位制的字串,而且在字串前面還加了一個‘0’;
我們分析了那些相似的字串,只有這一組全部是16進位制數:
0817E747D7A7D7C7F82836D74747A7F7E7B7C7D826D817E7B7C
所以這組應該才是對的比較碼
尋找常數產生的演算法:
我們分析發現,這個常數是在取字串裡每一位的上面產生的,就是這個call esi裡,經過多次輸入和單步跟蹤發現,這個常數取的是字串的前兩位,比如輸入的是‘12345’,那麼常數就是12,如果輸入的是‘*#1234’,那麼常數就是0;
三·寫序號產生器:
知道了驗證碼後,就可以倒推出key了;
先通過驗證碼的開頭兩個字元(除去‘0’)0x81,算出常數是74,那麼key的開頭兩個數字就是74,算出常數後就可以倒退出key了;
算常數的程式碼:
for i in range(0,10):
a=ord(str(i))
for j in range(0,10):
if(a+i*10+j==0x81):
num=i*10+j
print(num)
break
算key的程式碼:
key="817E747D7A7D7C7F82836D74747A7F7E7B7C7D826D817E7B7C"
Key=""
id="0123456789*#"
keylen=len(key)
for ecx in range(0,keylen-1):
eax=key[ecx]+key[ecx+1]
ebx=int(eax,16)
for i in id:
a=ord(i)
if(a+num==ebx):
Key=Key+i
eax=""
break
print("Key: %s"%Key)
相關文章
- 160個crackme(6)
- 160個CrackMe之108 mfc程式 尋找按鈕事件,程式碼還原(上)C程式事件
- 160個CrackMe之108 mfc程式 尋找按鈕事件,程式碼還原(下)C程式事件
- 2021虎符ctf(Re)-CrackMe
- 破解練習-CRACKME001
- NPD:2020年4月北美主機銷量同比增長160%
- 精讀《用160行js程式碼實現一個React》JSReact
- 2018年以來,Facebook刪除了近160億個假帳戶
- MU5IN160 – Parallel ProgrammingParallel
- BUUCTF-Misc(151-160)
- PostgreSQL DBA(160) - pgAdmin(prepare transaction)SQL
- ASE160N08-ASEMI低壓N溝道MOS管ASE160N08
- Leetcode 160. Intersection of Two Linked ListsLeetCode
- CNG:2020年4月移動遊戲市場實際銷售收入接近160億元遊戲
- 圖表控制元件LightningChart 新版本,160 億個實時資料點!控制元件GC
- 每日leetcode——160. 相交連結串列LeetCode
- 車用晶片TPS2H160BQPWPRQ1(TPS2H160)雙通道智慧高側開關晶片
- 福州廈門160家遊戲公司盤點遊戲
- webscraper 4個SitemapWeb
- 社招——4個offer
- (資料科學學習手札160)使用miniforge代替miniconda資料科學
- 4 月 COPR 中的 4 個新酷專案
- abc160E 吃蘋果能得到的最大美味度蘋果
- 三年入賬160億,Airbnb還能躺贏多久?AI
- 想要面試BATJ,先做完這160道Java面試題~BATJava面試題
- 寫一個函式,輸入一個4位數字,要求輸出這4個數字字元函式字元
- 科技愛好者週刊(第 160 期):中年碼農的困境
- NRF:2019年美國人父親節支出達160億美元
- 微服務架構實戰160講-楊波-極客時間微服務架構
- 住宅代理的4個優勢
- 個人部落格入門4
- JavaScript實現線上MD5、SHA、AES、Rabit 、RC4、TripleDES Ripemd160 加密解密工具-toolfk程式設計師線上工具網JavaScript加密解密程式設計師
- 三維座標要建一個4*4的矩陣?矩陣
- 160_技巧_Power BI 新函式-計算工作日天數函式
- PostgreSQL 原始碼解讀(160)- 查詢#80(如何實現表示式解析)SQL原始碼
- 本週4個Github有趣專案Github
- 譯 10 個 Flutter 元件推薦 – 4Flutter元件
- 4個非常有用的 Flutter 技巧Flutter