1;int __cdecl main(int argc, const char **ar**, const char **envp)
2_main proc near34
buf= byte ptr -114h
5var_110= dword ptr -110h
6var_10c= dword ptr -10ch
7var_108= dword ptr -108h
8filename= byte ptr -104h
9 argc= dword ptr 4
10 ar**= dword ptr 8
11envp= dword ptr 0ch
1213
subesp, 114h
14push
ebx15
push
esi16
push
edi17
push offset format ;
"歡迎各位來到52pojie,歡迎各位來嘗試我的"...
18call
_printf
19push offset auzscqt ;
"最近重新再學一遍c語言,就寫了這個,就當練"...
20call
_printf
21push offset abytk2012513 ;
"by tk 2012-5-13\n"
22call
_printf
23push offset asc_4090a0 ;
"\n\n"
24call
_printf
25add
esp, 10h
26lea
eax, [esp+120h+filename]
27push 104h ;
nsize,裝載到緩衝區lpfilename的最大值,這裡為260,在程式設計中為max_path
28push eax ;
lpfilename,乙個指標,這裡是存放獲取到程式目錄所在的位置的位址
29push0;
hmodule,例項的控制代碼,這裡為本例項的控制代碼
30call
ds:getmodulefilenamea
31lea
ecx, [esp+120h+filename]
32push'\
';ch33
push ecx ;
str34
call _strrchr ;
查詢乙個字元c在另乙個字串str中末次出現的位置
35mov byte ptr [eax], 0
36mov edi, offset anot_key_dat ;
"\\not_key.dat"
37or
ecx, 0ffffffffh
38xor
eax, eax
39repne
scasb
40not
ecx41
subedi, ecx
42lea
edx, [esp+128h+filename]
43mov
esi, edi
44mov
ebx, ecx
45mov
edi, edx
46or
ecx, 0ffffffffh
47repne
scasb
48mov
ecx, ebx
49dec
edi50
shr ecx, 2
51rep
movsd
52mov
ecx, ebx
53lea
eax, [esp+128h+filename]
54and ecx, 3
55push offset mode ;
"r"56
repmovsb
57push eax ;
filename
58call _fopen ;
讀取乙個檔案,檔名在引數中,讀取方式也在引數中
59mov edi, eax ;
讀取結果放入eax,然後又複製到edi中
60add
esp, 10h
61test
edi, edi
62jnz short loc_4010aa
總的來說,這段程式的目的就是開啟keyfile檔案,如果開啟失敗,就跳轉到失敗提示的地方。(這樣,我們就在程式當前的目錄下新建乙個keyfile檔案,檔名為not_key.dat)
如果要爆破這個程式,先要把這裡改為jmp或nop掉。
如果開啟檔案成功,則繼續判斷。
通過ida的f5功能,一些修改,變成了下面這樣:
1 fp = fopen(&filename, "r");
2 fp_same = fp;
3if ( fp )417
else
1821 printf("
\n\n
");22 return system("
pause
");
通過開啟檔案,讀取檔案的16個位元組,然後與hello world進行對比。
總結:這個程式的思路是很清晰的,讀取keyfile,如果連keyfile都沒有,那就不可能註冊了。
如果存在keyfile的話,那麼從keyfile中讀取16個位元組,看它是否為我們所對應的key,如果正確,則提示正確
如果不正確,那就顯示不正確唄。
我對這個程式做了爆破測試,結果發現會出現異常,那麼是什麼原因呢?一,檔案沒有讀取成功,而我們使用fgets函式,二,檔案沒有開啟,也就是fopen沒有返回
而我們又呼叫了fclose,所以爆破的時候要記得把這兩個函式nop掉。
我的部落格只為自己而寫
畢業兩年,工作快3年,前一段時間又沒有忍住,裸辭。之後的兩個月前前後後面試了有7 8家公司,中途也有好多面試都沒有參加,原因還是自己太懶。雖然自己在家也每天也進行著面試總結,但是每一次都會遇到新的問題,在此過程中有兩家感覺面試過程還ok,不過最後卻沒有收到offer,自己也想了一下把,本身自己不夠優...
獻上福利 我自己寫的ffmpeg幫助類
using system using system.collections.generic using system.diagnostics using system.io using system.linq using system.text namespace winmediaplayer pu...
C語言寫 貪吃蛇,這個不是我自己寫的
include include include include includechar gamemap 20 40 遊戲地圖大小 20 40 int score 0 當前分數 記錄蛇的結點 int x 800 每個結點的行編號 int y 800 每個結點的列編號 int len 0 蛇的長度 記錄...