|
論壇說明 |
歡迎您來到『史萊姆論壇』 ^___^ 您目前正以訪客的身份瀏覽本論壇,訪客所擁有的權限將受到限制,您可以瀏覽本論壇大部份的版區與文章,但您將無法參與任何討論或是使用私人訊息與其他會員交流。若您希望擁有完整的使用權限,請註冊成為我們的一份子,註冊的程序十分簡單、快速,而且最重要的是--註冊是完全免費的! 請點擊這裡:『註冊成為我們的一份子!』 |
|
主題工具 | 顯示模式 |
2006-05-28, 05:10 PM | #1 |
榮譽會員
|
軟體 - 基礎學手動脫殼
基礎學手動脫殼
大家都知道現在殼的破解方法有很多種,隨著殼的增多,出現很多的破殼的工具,然而,對現在的新手來說手動脫殼的很少,我教大家手動脫殼—教大家手動脫UPX的殼。 今天我做實驗的是一個加了;UPX殼的記事本。好我們開始吧,廢話說了這麼多,大家著急了吧? 首先我給大家解釋一下殼的概念,其實殼就相當於一個保護的東西,它可以防止我們進行防編譯和修其中的內容,因為給軟件加了殼就好像給一些現實的動植物的殼差不多所以呢,在我們的軟件裡把在軟件裡面加的許多防止自己的軟件被非法修改和破壞的一些程式就叫做殼了, 首先給大家介紹一個工具PeID v0.92 它的作用就是檢測殼的類型,和檢測軟件是用什麼語言編寫的, 第一步:用PeID v0.92檢測一下殼的類型是upx的。UPX 0.89.6 - 1.02 / 1.05 - 1.24 -> Markus & Laszlo 第二步:手動脫殼,拿出我的工具Ollydbg v1.10 來進行脫殼。Ollydbg v1.10是一個功能非常強大的工具,在脫殼和除錯軟件時經常用到它,首先我們用Ollydbg v1.10載入加了upx殼的記事本,OK 040EF20 >PUSHAD ; 這裡是UPX殼的入口 一般UPX的入口都是PUSHAD 之所以把這個告訴大家 為了在大家遇到 多重殼的時候 做準備 0040EF21 MOV ESI,NOTEPAD.0040C015 0040EF26 LEA EDI,DWORD PTR DS:[ESI+FFFF4> 0040EF2C PUSH EDI 0040EF2D OR EBP,FFFFFFFF 0040EF30 JMP SHORT NOTEPAD.0040EF42 ; 跳40EF42 0040EF32 NOP 0040EF33 NOP 0040EF34 NOP 0040EF35 NOP 0040EF36 NOP 0040EF37 NOP 0040EF38 MOV AL,BYTE PTR DS:[ESI] 0040EF3A INC ESI 0040EF3B MOV BYTE PTR DS:[EDI],AL 0040EF3D INC EDI 0040EF3E ADD EBX,EBX 0040EF40 JNZ SHORT NOTEPAD.0040EF49 0040EF42 MOV EBX,DWORD PTR DS:[ESI] ; 跳到這裡 0040EF44 SUB ESI,-4 0040EF47 ADC EBX,EBX 0040EF49 JB SHORT NOTEPAD.0040EF38 ; 往回跳 不能跳 0040EF4B MOV EAX,1 ; 點這F4 0040EF50 ADD EBX,EBX 0040EF52 JNZ SHORT NOTEPAD.0040EF5B ; 跳到40EF5B 0040EF54 MOV EBX,DWORD PTR DS:[ESI] 0040EF56 SUB ESI,-4 0040EF59 ADC EBX,EBX 0040EF5B ADC EAX,EAX ; 來到這裡,繼續走 0040EF5D ADD EBX,EBX 0040EF5F JNB SHORT NOTEPAD.0040EF50 0040EF61 JNZ SHORT NOTEPAD.0040EF6C ; 繼續跳到40EF6C 0040EF63 MOV EBX,DWORD PTR DS:[ESI] 0040EF65 SUB ESI,-4 0040EF68 ADC EBX,EBX 0040EF6A JNB SHORT NOTEPAD.0040EF50 0040EF6C XOR ECX,ECX ; 跳到這了,繼續 0040EF6E SUB EAX,3 0040EF71 JB SHORT NOTEPAD.0040EF80 ; 繼續跳40EF80 0040EF73 SHL EAX,8 0040EF76 MOV AL,BYTE PTR DS:[ESI] 0040EF78 INC ESI 0040EF79 XOR EAX,FFFFFFFF 0040EF7C JE SHORT NOTEPAD.0040EFF2 0040EF7E MOV EBP,EAX 0040EF80 ADD EBX,EBX ; 到這了,繼續 0040EF82 JNZ SHORT NOTEPAD.0040EF8B ; 繼續跳40EF8B 0040EF84 MOV EBX,DWORD PTR DS:[ESI] 0040EF86 SUB ESI,-4 0040EF89 ADC EBX,EBX 0040EF8B ADC ECX,ECX ; 到這,繼續 0040EF8D ADD EBX,EBX 0040EF8F JNZ SHORT NOTEPAD.0040EF98 ; 跳40EF98 0040EF91 MOV EBX,DWORD PTR DS:[ESI] 0040EF93 SUB ESI,-4 0040EF96 ADC EBX,EBX 0040EF98 ADC ECX,ECX ; 到這裡 0040EF9A JNZ SHORT NOTEPAD.0040EFBC ; 跳40EFBC 0040EF9C INC ECX 0040EF9D ADD EBX,EBX 0040EF9F JNZ SHORT NOTEPAD.0040EFA8 0040EFA1 MOV EBX,DWORD PTR DS:[ESI] 0040EFA3 SUB ESI,-4 0040EFA6 ADC EBX,EBX 0040EFA8 ADC ECX,ECX 0040EFAA ADD EBX,EBX 0040EFAC JNB SHORT NOTEPAD.0040EF9D 0040EFAE JNZ SHORT NOTEPAD.0040EFB9 0040EFB0 MOV EBX,DWORD PTR DS:[ESI] 0040EFB2 SUB ESI,-4 0040EFB5 ADC EBX,EBX 0040EFB7 JNB SHORT NOTEPAD.0040EF9D 0040EFB9 ADD ECX,2 0040EFBC CMP EBP,-0D00 ; 到這裡 0040EFC2 ADC ECX,1 0040EFC5 LEA EDX,DWORD PTR DS:[EDI+EBP] 0040EFC8 CMP EBP,-4 0040EFCB JBE SHORT NOTEPAD.0040EFDC 0040EFCD MOV AL,BYTE PTR DS:[EDX] 0040EFCF INC EDX 0040EFD0 MOV BYTE PTR DS:[EDI],AL 0040EFD2 INC EDI 0040EFD3 DEC ECX 0040EFD4 JNZ SHORT NOTEPAD.0040EFCD ; 這個是往回跳 不能跳 0040EFD6 JMP NOTEPAD.0040EF3E ; 這個也往會跳,也不能跳 0040EFDB NOP 0040EFDC MOV EAX,DWORD PTR DS:[EDX] ; 點這裡F4 0040EFDE ADD EDX,4 0040EFE1 MOV DWORD PTR DS:[EDI],EAX 0040EFE3 ADD EDI,4 0040EFE6 SUB ECX,4 0040EFE9 JA SHORT NOTEPAD.0040EFDC 0040EFEB ADD EDI,ECX 0040EFED JMP NOTEPAD.0040EF3E ; 往會跳 不跳 0040EFF2 POP ESI ; 點這裡F4 0040EFF3 MOV EDI,ESI 0040EFF5 MOV ECX,0DD 0040EFFA MOV AL,BYTE PTR DS:[EDI] 0040EFFC INC EDI 0040EFFD SUB AL,0E8 0040EFFF CMP AL,1 0040F001 JA SHORT NOTEPAD.0040EFFA ; 往會跳 不跳 0040F003 CMP BYTE PTR DS:[EDI],0 0040F006 JNZ SHORT NOTEPAD.0040EFFA ; 這裡也往回跳 0040F008 MOV EAX,DWORD PTR DS:[EDI] ; 直接點這裡F4 0040F00A MOV BL,BYTE PTR DS:[EDI+4] 0040F00D SHR AX,8 0040F011 ROL EAX,10 0040F014 XCHG AH,AL 0040F016 SUB EAX,EDI 0040F018 SUB BL,0E8 0040F01B ADD EAX,ESI 0040F01D MOV DWORD PTR DS:[EDI],EAX 0040F01F ADD EDI,5 0040F022 MOV EAX,EBX 0040F024 LOOPD SHORT NOTEPAD.0040EFFF ; 這是一個循環,跳出它 0040F026 LEA EDI,DWORD PTR DS:[ESI+C000] ; 點這裡F4 0040F02C MOV EAX,DWORD PTR DS:[EDI] 0040F02E OR EAX,EAX 0040F030 JE SHORT NOTEPAD.0040F06E 0040F032 MOV EBX,DWORD PTR DS:[EDI+4] 0040F035 LEA EAX,DWORD PTR DS:[EAX+ESI+1> 0040F03C ADD EBX,ESI 0040F03E PUSH EAX 0040F03F ADD EDI,8 0040F042 CALL DWORD PTR DS:[ESI+12448] 0040F048 XCHG EAX,EBP 0040F049 MOV AL,BYTE PTR DS:[EDI] 0040F04B INC EDI 0040F04C OR AL,AL 0040F04E JE SHORT NOTEPAD.0040F02C 0040F050 MOV ECX,EDI 0040F052 PUSH EDI 0040F053 DEC EAX 0040F054 REPNE SCAS BYTE PTR ES:[EDI] 0040F056 PUSH EBP 0040F057 CALL DWORD PTR DS:[ESI+1244C] 0040F05D OR EAX,EAX 0040F05F JE SHORT NOTEPAD.0040F068 0040F061 MOV DWORD PTR DS:[EBX],EAX 0040F063 ADD EBX,4 0040F066 JMP SHORT NOTEPAD.0040F049 ; 不能跳 0040F068 CALL DWORD PTR DS:[ESI+12450] 0040F06E POPAD ; 關鍵點 對應 PUSHAD 入口就在附近 F4點這裡 0040F06F JMP NOTEPAD.004010CC ; 跳到入口點 地址大跨度跳躍 40FXXX跳到了401XXX => 004010CC PUSH EBP ; 入口點OEP 程式加殼段地址一直在0040FXXX突然跳轉到00401XXX段 跨段跳躍時,一般都是在記憶體中脫殼完畢, 準備執行程式,手動脫殼就是要在入口將程式Dump出來。 轉到入口時一般都有Popad語句和開始的PUSHAD對應。 入口點OEP:4010CC好我們在這裡呢 前往4010草草然後點擊滑鼠右鍵點脫殼在當前的工作行程就脫殼成功了。 第三步:我們用ImportREC這個工具對脫殼的記事本修復一下。保證程式能正常執行。 第四步:我們用LordPE v1.4對原文件進行減肥。 第五步:再次檢查是否有殼。 |
送花文章: 3,
|
2006-05-28, 05:11 PM | #2 (permalink) |
榮譽會員
|
軟件破解常用彙編指令
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) 不懂不要緊,一定要先牢記,以後慢慢的理解。 |
送花文章: 3,
|