指令碼實現三次記憶體斷點法快速搞定Telock0.96+Aspack兩層殼
標 題:指令碼實現三次記憶體斷點法快速搞定Telock0.96+Aspack兩層殼
發信人:David
時 間:2004-12-28,13:43
詳細資訊:
【脫文標題】 三次記憶體斷點法快速搞定Telock0.96+Aspack兩層殼
【脫文作者】 weiyi75[Dfcg]
【作者郵箱】 weiyi75@sohu.com
【作者主頁】 Dfcg官方大本營
【使用工具】 Peid,Ollydbg,LoadPe,Imprec1.42,Freeres
【破解平臺】 Win2000/XP
【軟體名稱】 系統管家 V2.71
【下載地址】 http://www.skycn.com/soft/11570.html
【軟體簡介】 系統管家是一款強大的作業系統設定軟體。個性化的設定滿足初學者及設定高手們的需求。系統管家不但為您提供從桌面、個性、安全、網路、最佳化等方面的設定,它還包攬了系統登錄檔的清理、維護、備份及還原,系統垃圾檔案、軟體、ActiveX無效元件的清理及維護等工作。您是否還在為系統需要同時安裝多種設定、維護軟體互補而煩惱?系統管家可以為您的Windows98/2000/ME/XP/2003作業系統提供全方位的服務!系統管家內建的系統資訊檢測可顯示作業系統及硬體裝置的的大量資訊,並且集合了程式管理、記憶體整理工具軟體。目前系統管家提供了桌面設定、開始選單、工作列、輸入法、視窗介面、系統資訊、OEM資訊、個性資料夾、安全設定、多使用者、密碼策略、控制皮膚、安全視窗、登錄檔備份/還原、磁碟隱藏、偽裝檔案、隱藏特殊專案、自動執行、系統啟動、檔案系統、儲存系統、程式加速、多媒體、網路加速、IE瀏覽器、後臺服務、登錄檔清理、磁碟清理、軟體清理、元件清理等功能設定。
【軟體大小】 1852 KB
【加殼方式】 Telock0.96+Aspack
【脫殼宣告】 我是一隻小菜鳥,偶得一點心得,願與大家分享:)
--------------------------------------------------------------------------------
【脫殼內容】
首先Peid查殼,tElock 0.96 -> tE!,然後用OD載入程式,Alt+M檢視區段,發現裡層還有一層Aspack。
Telock0.98我們在進階篇看過,比較麻煩,斷點不能亂下,如普通Int3斷點,硬體斷點都不能下。但還是可以透過記憶體斷點中斷的,Telock0.96較Telock0.98較弱。
OD載入程式,不忽略無效指令異常和記憶體異常。
首先火力探測Telock有一次記憶體異常和2次無效指令異常然後程式執行。
重新載入程式。
0053CBA2 >^\E9 59E4FFFF JMP NSSetWin.0053B000 //外殼入口
0053CBA7 0000 ADD BYTE PTR DS:[EAX],AL
0053CBA9 0000 ADD BYTE PTR DS:[EAX],AL
0053CBAB 0000 ADD BYTE PTR DS:[EAX],AL
0053CBAD 00D3 ADD BL,DL
0053CBAF 2BA3 0FEECB13 SUB ESP,DWORD PTR DS:[EBX+13CBEE0F]
0053CBB5 0000 ADD BYTE PTR DS:[EAX],AL
0053CBB7 0000 ADD BYTE PTR DS:[EAX],AL
0053CBB9 0000 ADD BYTE PTR DS:[EAX],AL
0053CBBB 0000 ADD BYTE PTR DS:[EAX],AL
0053CBBD 000E ADD BYTE PTR DS:[ESI],CL
0053CBBF CC INT3
....................................................................
無效指令異常,必須Shift+F9過
0053B6A8 8DC0 LEA EAX,EAX ; 非法使用暫存器
0053B6AA 74 03 JE SHORT NSSetWin.0053B6AF
0053B6AC CD 20 INT 20
0053B6AE 64:67:8F06 0000 POP DWORD PTR FS:[0]
0053B6B4 EB 02 JMP SHORT NSSetWin.0053B6B8
0053B6B6 CD 20 INT 20
0053B6B8 59 POP ECX
0053B6B9 61 POPAD
0053B6BA F5 CMC
0053B6BB 8D7415 00 LEA ESI,DWORD PTR SS:[EBP+EDX]
0053B6BF 83C2 22 ADD EDX,22
0053B6C2 8BFE MOV EDI,ESI
0053B6C4 B9 80120000 MOV ECX,1280
0053B6C9 2ADB SUB BL,BL
0053B6CB AC LODS BYTE PTR DS:[ESI]
0053B6CC 32C3 XOR AL,BL
0053B6CE FEC0 INC AL
....................................................................
記憶體異常,Shift+F9
0053BBA6 CD 68 INT 68
0053BBA8 66:05 7B0C ADD AX,0C7B
0053BBAC 66:48 DEC AX
0053BBAE 74 55 JE SHORT NSSetWin.0053BC05
0053BBB0 8D85 450B0000 LEA EAX,DWORD PTR SS:[EBP+B45]
0053BBB6 894424 04 MOV DWORD PTR SS:[ESP+4],EAX
0053BBBA 64:67:8926 0000 MOV DWORD PTR FS:[0],ESP
0053BBC0 EB 1F JMP SHORT NSSetWin.0053BBE1
0053BBC2 CD 20 INT 20
0053BBC4 8B6424 08 MOV ESP,DWORD PTR SS:[ESP+8]
0053BBC8 8B6C24 08 MOV EBP,DWORD PTR SS:[ESP+8]
0053BBCC 8D85 7A0B0000 LEA EAX,DWORD PTR SS:[EBP+B7A]
0053BBD2 50 PUSH EAX
0053BBD3 EB 01 JMP SHORT NSSetWin.0053BBD6
0053BBD5 E8 81AD291C CALL 1C7D695B
0053BBDA 0000 ADD BYTE PTR DS:[EAX],AL
0053BBDC E7 25 OUT 25,EAX ; I/O 命令
0053BBDE A9 FEC3EB01 TEST EAX,1EBC3FE
0053BBE3 EB 33 JMP SHORT NSSetWin.0053BC18
....................................................................
無效指令異常
0053C6BD 8DC0 LEA EAX,EAX ; 非法使用暫存器
0053C6BF EB 01 JMP SHORT NSSetWin.0053C6C2
0053C6C1 EB 68 JMP SHORT NSSetWin.0053C72B
0053C6C3 33C0 XOR EAX,EAX
0053C6C5 - EB FE JMP SHORT NSSetWin.0053C6C5
0053C6C7 FFE4 JMP ESP
0053C6C9 CD 20 INT 20
0053C6CB 8B6424 08 MOV ESP,DWORD PTR SS:[ESP+8]
0053C6CF 33C0 XOR EAX,EAX
0053C6D1 FF6424 08 JMP DWORD PTR SS:[ESP+8]
0053C6D5 - E9 58508304 JMP 04D71732
0053C6DA 24 37 AND AL,37
0053C6DC FFE0 JMP EAX
0053C6DE CD 20 INT 20
0053C6E0 64:8F00 POP DWORD PTR FS:[EAX]
0053C6E3 58 POP EAX
0053C6E4 EB 02 JMP SHORT NSSetWin.0053C6E8
....................................................................
繼續Shift+F9就略過第二層殼Aspack執行了。
Alt+M開啟記憶體映象。
記憶體映象
地址 大小 Owner 區段 包含 型別 訪問 初始訪問 對映為
00400000 00001000 NSSetWin PE header Imag RW RWE
00401000 00001000 NSSetWin .text code Imag RW RWE
00402000 00001000 NSSetWin .rdata data Imag RW RWE
00403000 00133000 NSSetWin .ecode Imag RW RWE
00536000 00002000 NSSetWin .rsrc resources Imag RW RWE
00538000 00002000 NSSetWin .aspack Imag RW RWE //直接去Aspack必經之路下記憶體訪問斷點,Shift+F9執行立即中斷。
0053A000 00001000 NSSetWin .adata Imag RW RWE
0053B000 00004000 NSSetWin SFX,imports, Imag RW RWE
當前位置0053C6E4還在0053B000Telock外殼段內,我們知道組合殼或單層殼的解壓順序是由下往上執行的。
00538001 60 PUSHAD //進入第二層殼Aspack入口
00538002 E8 03000000 CALL NSSetWin.0053800A 可以到這裡後用esp定律到Aspack出口。
00538007 - E9 EB045D45 JMP 45B084F7
0053800C 55 PUSH EBP
0053800D C3 RETN
0053800E E8 01000000 CALL NSSetWin.00538014
00538013 EB 5D JMP SHORT NSSetWin.00538072
00538015 BB EDFFFFFF MOV EBX,-13
0053801A 03DD ADD EBX,EBP
0053801C 81EB 00801300 SUB EBX,138000
00538022 83BD 22040000 0>CMP DWORD PTR SS:[EBP+422],0
00538029 899D 22040000 MOV DWORD PTR SS:[EBP+422],EBX
0053802F 0F85 65030000 JNZ NSSetWin.0053839A
00538035 8D85 2E040000 LEA EAX,DWORD PTR SS:[EBP+42E]
0053803B 50 PUSH EAX
0053803C FF95 4D0F0000 CALL DWORD PTR SS:[EBP+F4D]
..................................................................
再次
Alt+M開啟記憶體映象。
記憶體映象
地址 大小 Owner 區段 包含 型別 訪問 初始訪問 對映為
00400000 00001000 NSSetWin PE header Imag RW RWE
00401000 00001000 NSSetWin .text code Imag RW RWE
00402000 00001000 NSSetWin .rdata data Imag RW RWE //先在data過渡段下記憶體訪問斷點,F9執行。
00403000 00133000 NSSetWin .ecode Imag RW RWE
00536000 00002000 NSSetWin .rsrc resources Imag RW RWE
00538000 00002000 NSSetWin .aspack Imag RW RWE
0053A000 00001000 NSSetWin .adata Imag RW RWE
0053B000 00004000 NSSetWin SFX,imports, Imag RW RWE
..................................................................
0053875F 8A18 MOV BL,BYTE PTR DS:[EAX] //記憶體訪問中斷。
00538761 40 INC EAX
00538762 885C24 0C MOV BYTE PTR SS:[ESP+C],BL
00538766 8902 MOV DWORD PTR DS:[EDX],EAX
00538768 8B42 08 MOV EAX,DWORD PTR DS:[EDX+8]
0053876B 8B7C24 0C MOV EDI,DWORD PTR SS:[ESP+C]
0053876F C1E0 08 SHL EAX,8
00538772 81E7 FF000000 AND EDI,0FF
00538778 0BC7 OR EAX,EDI
0053877A 8B7A 04 MOV EDI,DWORD PTR DS:[EDX+4]
0053877D 03FE ADD EDI,ESI
0053877F 8942 08 MOV DWORD PTR DS:[EDX+8],EAX
00538782 8BC7 MOV EAX,EDI
00538784 897A 04 MOV DWORD PTR DS:[EDX+4],EDI
00538787 3BC1 CMP EAX,ECX
00538789 ^ 73 D2 JNB SHORT NSSetWin.0053875D
..................................................................
再次
Alt+M開啟記憶體映象。
記憶體映象
地址 大小 Owner 區段 包含 型別 訪問 初始訪問 對映為
00400000 00001000 NSSetWin PE header Imag RW RWE
00401000 00001000 NSSetWin .text code Imag RW RWE //對401000 Code段下記憶體訪問斷點,F9執行。
00402000 00001000 NSSetWin .rdata data Imag RW RWE
00403000 00133000 NSSetWin .ecode Imag RW RWE
00536000 00002000 NSSetWin .rsrc resources Imag RW RWE
00538000 00002000 NSSetWin .aspack Imag RW RWE
0053A000 00001000 NSSetWin .adata Imag RW RWE
0053B000 00004000 NSSetWin SFX,imports, Imag RW RWE
..................................................................
00401000 E8 DB E8 //到達這裡,右鍵-分析-分析程式碼還原彙編指令。
00401001 06 DB 06
00401002 00 DB 00
00401003 00 DB 00
00401004 00 DB 00
00401005 50 DB 50 ; CHAR 'P'
00401006 E8 DB E8
00401007 A1 DB A1
00401008 01 DB 01
00401009 00 DB 00
0040100A 00 DB 00
0040100B 55 DB 55 ; CHAR 'U'
0040100C 8B DB 8B
0040100D EC DB EC
0040100E 81 DB 81
0040100F C4 DB C4
00401010 F0 DB F0
00401011 FE DB FE
..................................................................
00401000 . E8 06000000 CALL NSSetWin.0040100B //又是易語言,和系統風雲一樣的。
00401005 . 50 PUSH EAX ; /ExitCode
00401006 . E8 A1010000 CALL NSSetWin.004011AC ; \ExitProcess
0040100B /$ 55 PUSH EBP //可以在401000脫殼,但我喜歡F7到這裡然後用Loadpe脫殼,標準一些。
0040100C |. 8BEC MOV EBP,ESP
0040100E |. 81C4 F0FEFFFF ADD ESP,-110
00401014 |. EB 6D JMP SHORT NSSetWin.00401083
00401016 |. 6B 72 6E 6C 6>ASCII "krnln.fnr",0
00401020 |. 6B 72 6E 6C 6>ASCII "krnln.fne",0
0040102A |. 47 65 74 4E 6>ASCII "GetNewSock",0
00401035 |. 53 6F 66 74 7>ASCII "Software\FlySky\"
00401045 |. 45 5C 49 6E 7>ASCII "E\Install",0
0040104F |. 50 61 74 68 0>ASCII "Path",0
..................................................................
執行ImprotREC,選中程式程式,OEP處填入00100B,點自動搜尋,然後點“獲取輸入表”,看見尾部被Telock填充了一個垃圾指標,Telock喜歡填垃圾指標,這個是無法修復的,直接用剪刀剪掉。
然後Loadpe編輯脫殼檔案,刪除aspack,adata 兩個Aspack的垃圾區段,殼都脫了,還要它們幹什麼?重建Pe正常執行。
然後用Freeres載入脫殼程式提示資源被壓縮,真煩人,和Upx一樣,資源脫殼後沒有釋放,於是Freeres釋放資源,仍然正常執行。
--------------------------------------------------------------------------------
【版權宣告】 本文純屬技術交流, 轉載請註明作者並保持文章的完整, 謝謝!
我以二哥的三次記憶體斷點法快速搞定Telock0.96+Aspack兩層殼作範文
目的是用指令碼使任意區段設記憶體訪問斷點
首先還是要寫指令碼你必須會手動脫這個殼。
要知道你想哪些區段的記憶體斷點,如區段1,區段4,區段2等
這個程式依次是
記憶體映象,專案 16 區段5
地址=00538000
大小=00002000 (8192.)
Owner=NSSetWin 00400000
區段=.aspack
型別=Imag 01001002
訪問=R
初始訪問=RWE
記憶體映象,專案 13 區段2
地址=00402000
大小=00001000 (4096.)
Owner=NSSetWin 00400000
區段=.rdata
包含=data
型別=Imag 01001002
訪問=R
初始訪問=RWE
記憶體映象,專案 12 區段1
地址=00401000
大小=00001000 (4096.)
Owner=NSSetWin 00400000
區段=.text
包含=code
型別=Imag 01001002
訪問=R
初始訪問=RWE
記憶體斷點引數,主要是兩個
區段虛擬地址
區段大小
在指令碼中實現主要用這個模組形式
gmi eip,MODULEBASE //模組基地址400000
mov imgbase,$RESULT
mov k,imgbase
add k,3C
mov k,[k]
add k,imgbase
add k,f8 //第一區段名
add k,28 //第二區段名
add k,28 //第三區段名
add k,28 //第四區段名
add k,28 //第五區段名
對語法而言,舉個例子,隨便在某語句後面插入
log k
pause 類似int3
ret 類似int3
檢視記錄,然後命令列 d xxxxx
簡單分析一下,所有需要的東西都可以計算出來,這個沒有紮實的理論基礎光看不實際操作根本無法明白的。
004001A8 2E 74 65 78 74 00 00 00 .text...
004001B0 00 10 00 00 00 10 00 00 ......
004001B8 00 02 00 00 00 04 00 00 ......
004001C0 00 00 00 00 00 00 00 00 ........
004001C8 00 00 00 00 40 00 00 C0 ....@..
004001D0 2E 72 64 61 74 61 00 00 .rdata.. 其中區段名,區段大小,虛擬地址盡在其中。
004001D8 00 10 00 00 00 20 00 00 .... ..
004001E0 00 02 00 00 00 06 00 00 ......
004001E8 00 00 00 00 00 00 00 00 ........
004001F0 00 00 00 00 40 00 00 C0 ....@..
004001F8 2E 65 63 6F 64 65 00 00 .ecode..
00400200 00 30 13 00 00 30 00 00 .0..0..
00400208 00 0E 04 00 00 08 00 00 .....
00400210 00 00 00 00 00 00 00 00 ........
00400218 00 00 00 00 40 00 00 C0 ....@..
00400220 2E 72 73 72 63 00 00 00 .rsrc...
00400228 00 20 00 00 00 60 13 00 . ...`.
00400230 00 02 00 00 00 16 04 00 .....
00400238 00 00 00 00 00 00 00 00 ........
00400240 00 00 00 00 40 00 00 C0 ....@..
00400248 2E 61 73 70 61 63 6B 00 .aspack.
00400250 00 20 00 00 00 80 13 00 . ....
00400258 00 0C 00 00 00 18 04 00 ......
00400260 00 00 00 00 00 00 00 00 ........
00400268 00 00 00 00 40 00 00 C0 ....@..
00400270 2E 61 64 61 74 61 00 00 .adata..
00400278 00 10 00 00 00 A0 13 00 ....?.
00400280 00 00 00 00 00 00 00 00 ........
00400288 00 00 00 00 00 00 00 00 ........
00400290 00 00 00 00 40 00 00 C0 ....@..
以下就是指令碼
// 三次記憶體斷點法指令碼製作演示
// 作者: Mr.David
// 主頁: www.chinadfcg.com
msg "請設定OD異常設定不忽略錯誤的或有特權的指令,其它全部忽略,然後從選單處繼續執行指令碼"
//pause
var cbase
gmi eip, CODEBASE
mov cbase, $RESULT
log cbase //記錄程式碼段基地址,一般是401000
var k1
var k1s
var k2
var k2s
var k5
var k5s
var imgbase
gmi eip,MODULEBASE //模組基地址400000
mov imgbase,$RESULT
mov k1,imgbase
add k1,3C
mov k1,[k1]
add k1,imgbase
add k1,f8 //第一區段名
mov k2,k1
add k1,8 //地址加8位元組的偏移就是區段大小
mov k1,[k1] //第一區段大小
log k1
add k2,28 //第二區段名
mov k5,k2
log k2
mov k2s,k2
add k2s,4
mov k2s,[k2s]
add k2s,imgbase //第二區段虛擬地址
add k2,8 //地址加8位元組的偏移就是區段大小
mov k2,[k2] //第二區段大小
log k2
add k5,28
add k5,28
add k5,28 //第五區段名
log k5
add k5,8 //地址加8位元組的偏移就是區段大小
mov k5s,k5
add k5s,4
mov k5s,[k5s]
add k5s,imgbase //第五區段虛擬地址
log k5
mov k5,[k5] //第五區段大小
log k5
eoe seh
esto
retn:
bprm k5s, k5 //一次記憶體斷點
esto
bprm k2s, k2 //二次記憶體斷點
run
bprm cbase, k1 //三次記憶體斷點
run
bpmc
an eip
ret
seh: //異常處理
coe
esto
jmp retn //處理完畢
相關文章
- 兩步快速脫yoda's
cryptor 1.2殼--esp定律和記憶體斷點完美組合應用2004-07-26記憶體斷點
- 輕鬆+愉快
esp定律+記憶體斷點快速脫老王的EncryptPE1.0加殼的記事本2004-08-04記憶體斷點
- 記憶體檢查指令碼2022-02-21記憶體指令碼
- 記憶體管理兩部曲之實體記憶體管理2021-05-22記憶體
- 如何編碼實現記憶體洩露2013-04-26記憶體洩露
- 如何編碼實現記憶體溢位2013-04-26記憶體溢位
- Objective-C----記憶體管理--點語法2017-04-14Object記憶體
- 【原創】記憶體斷點快速定位分析CCProxy6.0字串加密演算法2015-11-15記憶體斷點字串加密演算法
- C語言-記憶體管理之二[記憶體指令]2010-11-08C語言記憶體
- nagios-建立記憶體監控指令碼2014-11-05iOS記憶體指令碼
- 實現共享記憶體的又一方法 (轉)2008-05-29記憶體
- 實體記憶體充足卻無法增加SGA2016-01-14記憶體
- shell指令碼實現---Zabbix5.0快速部署2020-11-11指令碼
- C++記憶體管理:簡易記憶體池的實現2021-12-13C++記憶體
- 記憶體虛擬化技術,具體的實現方法有哪兩種?2017-10-23記憶體
- java記憶體模型的實現2019-06-22Java記憶體模型
- Java 嵌入指令碼快速解析多層 json2020-06-19Java指令碼JSON
- 記憶體管理兩部曲之虛擬記憶體管理2021-05-31記憶體
- leveldb原始碼分析(1)--arena記憶體池的實現2019-05-13原始碼記憶體
- LRU工程實現原始碼(一):Redis 記憶體淘汰策略2021-07-12原始碼Redis記憶體
- 簡單分配和釋放記憶體指令碼[更新]2004-10-20記憶體指令碼
- 記一次 rr 和硬體斷點解決記憶體踩踏問題2023-03-26斷點記憶體
- [轉載]快速判斷Armadillo殼版本2004-08-24
- 壹次脫殼法――Armadillo 雙程式標準殼 快速脫殼2015-11-15
- 實體記憶體和虛擬記憶體2007-03-05記憶體
- MJiOS底層筆記--記憶體管理2019-02-23iOS筆記記憶體
- 7.7 實現程式記憶體讀寫2023-09-25記憶體
- 持久記憶體指令(PMDK)簡介2020-09-11記憶體
- iOS底層原理(一):OC物件實際佔用記憶體與開闢記憶體關係2018-10-29iOS物件記憶體
- [轉]指令碼獲取資源記憶體和硬碟大小2017-11-09指令碼記憶體硬碟
- Linux檢視佔用記憶體的程式指令碼2013-10-12Linux記憶體指令碼
- 記憶體管理篇——實體記憶體的管理2022-02-23記憶體
- 虛擬記憶體到實體記憶體(32位)2015-01-07記憶體
- 【Java基礎】實體記憶體&虛擬記憶體2024-10-19Java記憶體
- 記憶體管理:判斷物件是否存活2023-04-03記憶體物件
- java程式碼實現檢視Tomcat記憶體使用情況2020-10-11JavaTomcat記憶體
- Java 常見記憶體溢位異常與程式碼實現2016-10-11Java記憶體溢位
- Redis的記憶體和實現機制2020-06-12Redis記憶體