逆向破解基礎系列(第二篇)
02-03
作者:SnowMzn
序言
本文是160個CrackMe逆向題的第二題和第三題的逆向分析,第三題是第二題的加強版,就放到一起做比較容易理解。
- 這個程序沒有Nag,只有Name/Serial。查殼,是VB的程序。
- 放到OD里運行,在調用rtcMsgBox函數處下斷點,隨便輸入Name和Serial,運行後程序斷下來。
- 將代碼往上翻,可以看到寫敏感東西,斷定這個函數就是關鍵函數。
- 在這個函數開始的地方下斷點,再次運行程序單步調試後就會發現Serial的演算法。
- 主要演算法就是,將Name的長度,乘上0x17CFB,再加上Name首字母的十進位ASCII碼,加上固定的頭AKA-。
- python腳本:
name = raw_input("Please enter your name:") print AKA- + str(len(name) * 0x17CFB + ord(name[0]))n
第三題
- 這道題是第二題的加強版,程序加了個Nag,演算法也做了更改。
- 首先查殼,VB,沒有殼。
- 在去除Nag的時候還是遇到了點麻煩,畢竟不熟悉VB的程序。將程序放入OD里研究了許久,無果。。。。無奈查了下有關去除VB程序Nag窗口的資料,還是有捷徑的。
1、去除Nag
第一種方法
- 這種方法被稱為「4C法」,用於去除VB程序的NAG很有效。
- VB程序在入口處總有一個push指令
- 可以看到這裡push的是0x4067D4,在數據窗口跟進這個地址。(從這裡也可以看到這是VB程序)
- 然後開始「4C法」,在數據窗口跟進push的地址加上0x4C,也就是0x4067D4 + 0x4c
- 這個地方存放的是0x00406868,繼續跟進,可以看到這是兩塊內容非常相似,每塊佔80個位元組的長度。
- 兩塊內容只有一處不同,上面的是00,下面的是01。該標誌指定了每塊代碼出現的順序,先載入00,再載入01。根據程序運行的結果可以知道,上面的內容是NAG窗口的,下面的內容是主窗口。所以這裡需要將兩個標誌的值顛倒一下就可以將NAG去除了。
第二種方法
- 這種方法有點「曲線救國」的意思。
- 首先將程序放入VBExplorer.exe中,查看窗口的Timer1屬性
- 可以看到有個Interval欄位,值是7000,16進位表示為0x1B58。這個值就是nag窗口顯示的時長。
- 將程序放入UE中,查找581B(小端存儲)
- 在0x1B58前面可以看到Timer1字樣,所以可以斷定這裡就是nag窗口的時間,將這裡修改為0x001,就可以變相的去除nag窗口了。
2、Name/Serial
- 去除煩人的Nag,可以安心的找Name/Serial了。和上面一樣,在rtcMsgBox處下斷點,運行程序。
- 這裡有個問題,就是總彈出這個東西,剛開始以為這就是輸入錯誤驗證碼的提示,研究了半天才發現,Serial只能是數字,輸入字母就會彈出這個錯誤。。。。很坑啊。。。
- 繼續說rtcMsgBox,在serial處輸入任意的數字後,程序斷在rtcMsgBox處。向上翻代碼會看到這樣的東西。同樣在這個函數開始的地方下斷點。
- 同樣從這個開始的地方單步調試,很容易發現關鍵演算法。
- 這裡的演算法也是比較簡單的,附上簡單的python腳這裡的演算法也是比較簡單的,附上簡單的python腳本:
name = raw_input("Please enter your name:")nprint (0x15B38 * len(name) + ord(name[0])) * 3 + 19n
推薦閱讀:
※手機維修店是怎麼破解安卓鎖屏的?
※黑科技:佳能相機可直接拍攝DNG格式照片
※如何看待3DM宣布不再破解單機遊戲?
※軟體程序破解的難度和原理你懂多少?