逆向破解基礎系列(第二篇)

作者: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宣布不再破解單機遊戲?
軟體程序破解的難度和原理你懂多少?

TAG:逆向思维 | 数据分析 | 破解 |