今天我們就掌握一下怎麼去除自校驗,軟體是乙個網咖註冊工具,看了下只要修改一處自校驗就可以讓程式正常執行,所以拿出來做例項,有些厲害的自校驗強度又大而且有多重不同自校驗,以前有個乙個crackme,
居然有10
處自校驗,夠**的。
一: 例項問題解決之去除自校驗
(檔案大小自校驗)(實現未實現的跳)
看操作吧。
當然進行下面的而操作前提是你的先脫殼並修復,執行後沒反應。
1. 對比法。
①:源程式和脫後的進行跟蹤比較,找到不同的條件跳。
原程式除錯到oep
,和脫殼後的程式載入
od,然後慢慢向下跟蹤除錯,檢查條件跳轉是否跳轉
(如:cmp eax,1117004
語句)。
其中eax
中存放的是程式自身的大小,
eax小於
1117004
則跳。那麼我們可以檢視脫後檔案的大小(以位元組為單位),將
1117004
該為脫後大小
+n(以滿足條件跳,小於則跳),注意修改前後要保持位數一致,多的去掉後面的。彙編後儲存即可。
②:可以手動實現為實現的跳,及該條件跳轉為無條件跳cmp
如:該cmp
下的jle
為jmp
儲存即可
2. 找exitprocess函式
f9執行程式,讓程式跑飛。在堆疊視窗到到
exitprocess
得下面第乙個返回,右鍵在反彙編視窗中跟隨,這樣就直接來到了要修改大小的下面附近,然後用方法一改大小即可。用這種方法的好處就在於不用對比得到校驗大小的地方,但此法僅限於檔案大小自校驗。
原理分析:
1: 005e5d4d . e8 663df5ff call unpack_.00539ab8
2: 005e5d52 . 3d 00171100 cmp eax,111700
3: 005e5d57 . 7e 05 jle short unpack_.005e5d5e
4: 005e5d59 . e8 52f3e1ff call unpack_.004050b0
5: 005e5d5e > 8d55 e4 lea edx,dword ptr ss:[ebp-1c]
6: 005e5d61 . a1 00f75e00 mov eax,dword ptr ds:[5ef700]
f9執行後跑飛後會執行到程式設計的如果校驗失敗則呼叫的函式中(
call unpack_.004050b0
),一般在該函式中會呼叫
exitproces
函式退出程式。
簡單delphi自校驗
很簡單的一種 類似getfilesize 原理是對比程式最後修改時間,因為如果你不動他的話,那個時間是不會變的 這裡用的是findfirstfile 查詢檔案,這個api會填充乙個win32 find data資料,裡面遍有lastwritetime,這個是filetime,轉成systemtinm...
逆向 自校驗繞過 1
對於有些程式,如果脫殼後執行時無效,則應該考慮是否存在程式的自校驗。比較常用的自校驗技巧是用getfilesize 函式對檔案的前後大小做比較。因為脫殼後一般檔案大小會比脫殼前的大很多。所以通過getfilesize api 的對檔案大小的取值進行判斷,可以判斷檔案是否被脫殼。如果被脫殼,則直接退出...
mysql 去除列的自增長 mysql自增長列
自增長列必須是索引列,否則無法建立成功表,對myisma和innodb都一樣 localhost testdb root create table test5 id int auto increment,name varchar 10 engine innodb error 1075 42000 l...