※ 引述《chengcti (版主請投我一票!)》之銘言:
: 花個 30min 做點逆向工程 tracking code
: 1. Delphi 7 + Quickreport + Access 無壓縮, 無加殼
: 2. 本來我以為寫的多麼的厲害, tracking 到授權程式部分
: 搞了很長的時間 一直陷在裡面 本來打算重寫好了
: 後來發現那段授權程式 "是垃圾"
: 原本他在每個功能會增加授權機制, 就是可以讓多使用者使用
: 依據不同的使用者 可以開啟不同的function (新增 刪除 修改)
: 這段碼是去存取另外一個 table
: 我原本計畫重建這個授權的 table (Basicpp)
: 結果發現 "這段是垃圾"
: 因為他根本就沒有 call 這段碼
: 他只做一個
: 當你去選擇 menuitem 上面的功能時 會 check 可不可以進去
: if bAccess then dosomething else ShowMessage('授權逾期')
: cmp [$0048648], 00 ;if bAccess
: jz exit ;jump ShowMessage
: call [$0058304] ;next function
0053F1FC . 803D 2D7E5400>cmp byte ptr ds:[547E2D],0 ;檢查授權值是否為假
0053F203 . 74 49 je short 0053F24E ;可NOP此行即可
0053F205 . 8B0D 243A5400 mov ecx,dword ptr ds:[543A24] ;
0053F20B . 8B09 mov ecx,dword ptr ds:[ecx]
0053F20D . B2 01 mov dl,1
0053F20F . A1 20225200 mov eax,dword ptr ds:[522220]
0053F214 . E8 3792F3FF call 00478450
0053F219 . 8B15 083E5400 mov edx,dword ptr ds:[543E08] ;
0053F21F . 8902 mov dword ptr ds:[edx],eax
0053F221 . A1 083E5400 mov eax,dword ptr ds:[543E08]
0053F226 . 8B00 mov eax,dword ptr ds:[eax]
0053F228 . 8B15 98325400 mov edx,dword ptr ds:[543298] ;
0053F22E . 8902 mov dword ptr ds:[edx],eax
0053F230 . A1 083E5400 mov eax,dword ptr ds:[543E08]
0053F235 . 8B00 mov eax,dword ptr ds:[eax]
0053F237 . BA 64F25300 mov edx,0053F264
0053F23C . E8 1B00F2FF call 0045F25C
0053F241 . A1 083E5400 mov eax,dword ptr ds:[543E08]
0053F246 . 8B00 mov eax,dword ptr ds:[eax]
0053F248 . E8 5BD5F3FF call 0047C7A8
0053F24D . C3 retn
0053F24E > B8 94F25300 mov eax,0053F294
0053F253 . E8 D494EFFF call 0043872C
0053F258 . C3 retn
: 3. 本來我想改所 bAccess 把所有的 bAccess remake 掉 (塞 nop)
: 結果又發現 這是初學者寫的 所以
: 他在 FormCreate 做了一件事情 (default value)
: bool bAccess := false;
: mov [$0048648], 00 ; bAccess := 0;
: 然後檢查日期
: if LeftStr(NowDate) < '2009/xx' then bAccess := true;
: 結果我發現... 我直接把最前面的 default 為 true 就行了
: bool bAccess := true;
: mov [$0048648], 01
: 只改一個 byte
: 30min (price: free)
我是這樣弄,授權日是寫死在exe裡
0053EBCC . BA 90EC5300 mov edx,0053EC90 ; ASCII
0053EBD1 . E8 9657ECFF call 0040436C
0053EBD6 . C605 2D7E5400>mov byte ptr ds:[547E2D],0 ; 將授權值預設為假
0053EBDD . E8 D2C3ECFF call 0040AFB4
0053EBE2 . 83C4 F8 add esp,-8
0053EBE5 . DD1C24 fstp qword ptr ss:[esp]
0053EBE8 . 9B wait
0053EBE9 . 8D85 00FFFFFF lea eax,dword ptr ss:[ebp-100]
0053EBEF . 50 push eax
0053EBF0 . E8 FB10FBFF call 004EFCF0
0053EBF5 . 8D85 00FFFFFF lea eax,dword ptr ss:[ebp-100]
0053EBFB . BA 98EC5300 mov edx,0053EC98 ; ASCII 08,"20091031"
0053EC00 . E8 AB40ECFF call 00402CB0 ; 檢查當前日期
0053EC05 . 77 07 ja short 0053EC0E ;如上方CALL返回大於跳
0053EC07 . C605 2D7E5400>mov byte ptr ds:[547E2D],1 ;標記授權為真(小於)
0053EC0E > 33C0 xor eax,eax ;到此行
0053EC10 . 5A pop edx
0053EC11 . 59 pop ecx
0053EC12 . 59 pop ecx
0053EC13 . 64:8910 mov dword ptr fs:[eax],edx
0053EC16 . 68 23EC5300 push 0053EC23
0053EC1B > C3 retn ; RET 用
直接修改 asciiaddr 改為2099年即可,以防原作者在其他地方做檢查