查看單個文章
舊 2005-12-18, 07:48 PM   #8 (permalink)
psac
榮譽會員
 
psac 的頭像
榮譽勳章
UID - 3662
在線等級: 級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時級別:30 | 在線時長:1048小時 | 升級還需:37小時
註冊日期: 2002-12-07
住址: 木柵市立動物園
文章: 17381
現金: 5253 金幣
資產: 33853 金幣
預設

初學破解人的口訣和指令
軟體破解常用彙編指令
cmp a,b // 比較a與b
mov a,b // 把b值送給a值,使a=b
ret // 返回主程序
nop // 無作用,英文(no operation)簡寫,意思「do nothing」(機器碼90)
(ultraedit開啟編輯exe文件看到90相當彙編語句的nop)
call // 使用子程序,子程序以ret結尾
je或jz // 相等則跳(機器碼是74或84)
jne或jnz // 不相等則跳(機器碼是75或85)
jmp // 無條件跳(機器碼是EB)
jb // 若小於則跳
ja // 若大於則跳
jg // 若大於則跳
jge // 若大於等於則跳
jl // 若小於則跳
pop xxx // xxx出棧
push xxx // xxx壓棧
爆破無敵口訣
一條(跳)就死,九筒(90)就胡
(對應上面的2--修改為nop)
一條(跳)就胡,一餅(EB)伺候
(對應上面的1--修改為jmp)
(74) 變(75)
(84) 變 (85)
大家不懂不要緊,一定要先牢記,以後慢慢的理解。
寫給新手 - 淺談脫殼方法
[轉]寫給新手 - 淺談脫殼方法
【標  題】寫給新手 - 淺談脫殼方法
【作  者】xIkUg[CCG][BCG][DFCG][DCM][CZG][D.4s]
【日  期】2004-12-18
【使用工具】OllyDBG, ImportREC
【主  頁】http://bbs.xp-program.com
【平  台】WinXP sp1
【目標程序】輕輕鬆鬆學開車 6.6
【下載位址】http://www.sharebank.com.cn/soft/soft_view.php?id=10506
【作者宣告】只是感興趣,沒有其他目的。失誤之處敬請諸位大俠賜教!
【正 文】
我很少寫破文, 最近看到一些新手常問查殼工具查不出是什麼殼,末知殼如何脫...我這裡就簡單的用一個示例程序談談脫殼
方法. 算是給新手打打氣.
一般這種沒有公開的殼不會太猛(除了hying, vcasm, jingulong等這些圈內人的殼哈), 大多是自己土製的殼, 有的還偽裝一
下, 致使查殼工具查不出或查出什麼Aspack, UPX的殼. 碰到這種殼不用太怕, 認真跟蹤分析一下一般都沒多大問題.
一般加殼後的程序執行時大多是用各種方法AntiDebugger, 其中夾雜很多花指令和LJ指令, 然後解碼,
又是一堆AntiDebugger, 可能又解碼, 恢復IAT, 又是一堆AntiDebugger...最後再跳到程序真正的OEP處, 對付這種殼一般的方
法是先找到OEP, 再修復IAT
在殼跳到OEP的時候一般是個跨段跳轉, 跳轉方法有很多, 如JMP XXXXXXXX, JMP [XXXXXXXX], JE [XXXXXXXX],
PUSH XXXXXXXX RET, CALL XXXXXXXXX, CALL [XXXXXXXX], CALL EAX...還有的是在SEH中直接指定EIP等等, 找到這個跳轉位址,
然後在相應位址上設上斷點, F9執行, 就到達OEP處了, 此時就是最好的Dump時機
修復IAT一般用ImportREC, 填寫好OEP的RVA, 先點IATAutoSearch, 再點GetImport, 如果找到的API全部有效就可以點
Fix Dump了, 如果有無效的就需要修復, 先點Show Invalid, 再對這些無效的API點右鍵, 共有3個修復等級, 分別是Disasm,
HOOK, Trap Flag, 可以一個一個試, 全部API有效或只有一兩個API無效時就可以點Fix Dump了, 如果修復不了就只有用手動式
修復了.
手動式修復IAT的方法是, 一般殼在執行的時候會恢復IAT或破壞IAT, 你可以在恢復IAT後或破壞IAT之前DUMP出完好的IAT,
再用16進制編輯器, 把完整的IAT複製到Dump出來的文件中, 多做做練習就不難了
還是看看目標程序"輕輕鬆鬆學開車 6.6", 用PEiD查一下, ASPack 2.12 -> Alexey Solodovnikov
用OD載入, 提示入口點在程式碼外部(以後別再問如何判斷程序是否加殼了, 用OD載入如果有這個提示就表示程序是加了殼的),
點確定, 問是否分析, 點否, 來到入口處
006AF001 D> 60 pushad ; 殼程式碼入口
006AF002 E8 03000000 call DrvStudy.006AF00A ; 有花指令, F7跟進
006AF007 - E9 EB045D45 jmp 45C7F4F7
006AF00C 55 push ebp
006AF00D C3 retn
006AF00E E8 01000000 call DrvStudy.006AF014
006AF013 EB 5D jmp short DrvStudy.006AF072
在006AF002處call DrvStudy.006AF00A, 程式碼中沒有006AF00A, 是因為花指令讓OD錯誤的分析了程式碼, 用F7跟進就能來到
006AF00A處, 像這種近距離的Call, 其實是變形的Jmp, 都要用F7跟進, 如果F8跳過的話可以會碰到裡面的陷阱
006AF00A 5D pop ebp ; DrvStudy.006AF007, 跳到這裡
006AF00B 45 inc ebp ; ebp + 1
006AF00C 55 push ebp ; 變形跳轉到ebp的位址處
006AF00D C3 retn
來到
006AF008 /EB 04 jmp short DrvStudy.006AF00E ; 來到這裡
006AF00A |5D pop ebp
006AF00B |45 inc ebp ; ebp + 1
006AF00C |55 push ebp ; 變形跳轉到ebp的位址處
006AF00D |C3 retn
006AF00E \E8 01000000 call DrvStudy.006AF014 ; 變形跳轉, F7跟進
006AF014 5D pop ebp
006AF015 BB EDFFFFFF mov ebx,-13
006AF01A 03DD add ebx,ebp
006AF01C 81EB 00F02A00 sub ebx,2AF000 ; 程式碼重定位
006AF022 83BD 22040000 00 cmp dword ptr ss:[ebp+422],0 ; 變數ebp+422是存放的基址
006AF029 899D 22040000 mov dword ptr ss:[ebp+422],ebx
006AF02F /0F85 65030000 jnz DrvStudy.006AF39A ; 這裡不跳
006AF035 |8D85 2E040000 lea eax,dword ptr ss:[ebp+42E] ; "kernel32.dll"
006AF03B |50 push eax ; 參數入棧
006AF03C |FF95 4D0F0000 call dword ptr ss:[ebp+F4D] ; kernel32.GetModuleHandleA
006AF042 |8985 26040000 mov dword ptr ss:[ebp+426],eax ; kernel32.dll的關鍵句存入ebp+426處
006AF048 8BF8 mov edi,eax ; kernel32.77E40000
006AF04A 8D5D 5E lea ebx,dword ptr ss:[ebp+5E] ; "VirtualAlloc"
006AF04D 53 push ebx
006AF04E 50 push eax ; Kernel32.dll關鍵句
006AF04F FF95 490F0000 call dword ptr ss:[ebp+F49] ; GetProcAddress
006AF055 8985 4D050000 mov dword ptr ss:[ebp+54D],eax ; 把VirtualAlloc的函數位址存入ebp+54D處
006AF05B 8D5D 6B lea ebx,dword ptr ss:[ebp+6B] ; "VirtualFree"
006AF05E 53 push ebx
006AF05F 57 push edi ; Kernel32.dll關鍵句入棧
006AF060 FF95 490F0000 call dword ptr ss:[ebp+F49] ; GetProcAddress
006AF066 8985 51050000 mov dword ptr ss:[ebp+551],eax ; 把VirtualFree的函數位址存入ebp+511處
006AF06C 8D45 77 lea eax,dword ptr ss:[ebp+77] ; 跳轉位址載入eax
006AF06F FFE0 jmp eax ; 跳到eax指向的地方
006AF08A 8B9D 31050000 mov ebx,dword ptr ss:[ebp+531] ; 來到這裡, ebx=0
__________________
http://bbsimg.qianlong.com/upload/01/08/29/68/1082968_1136014649812.gif
psac 目前離線  
送花文章: 3, 收花文章: 1631 篇, 收花: 3205 次
向 psac 送花的會員:
jayen (2010-10-27)
感謝您發表一篇好文章