[原創]多層殼與Anti-ImportREC
[原創]多層殼與Anti-ImportREC
作者:lordor
軟體:字模III V2.52
說明:
很長時間沒破東西了,更別說寫破文了,對於PE檔案格式都忘記得差不多了,趁手裡的刀還未生鏽,寫了這一篇文章,如果任何錯誤或建議請
讓我知道。
這個軟體是加了ASpack的殼,為了防止aspack的自動脫殼機,所以又加了一個老羅的Crypto V1.0(EXE檔案加密碼的工具)所帶的殼,很奇怪
,沒有看到Crypto的輸入密碼框,可能是作者遮蔽掉了。
ZimoIII.<>MOV EAX,DWORD PTR SS:[ESP] ==>載入程式停在這
006208F4 AND EAX,FFFF0000
006208F9 CMP DWORD PTR DS:[EAX],905A4D
006208FF JE SHORT ZimoIII.00620908
00620901 SUB EAX,1000
00620906 JMP SHORT ZimoIII.006208F9
00620908 PUSH EBP
00620909 PUSH EBX
0062090A PUSH ESI
0062090B PUSH EDI
0062090C MOV EBP,EAX
0062090E ADD EAX,DWORD PTR DS:[EAX+3C]
老羅這個外殼極短,往下找找,
00620CD0 OR EAX,EAX
00620CD2 JNZ SHORT ZimoIII.00620CE7
00620CD4 MOV EAX,ZimoIII.006208D1
00620CD9 PUSH EAX
00620CDA PUSH EAX
00620CDB CALL DWORD PTR DS:[620420]
00620CE1 CALL DWORD PTR DS:[620424]
00620CE7 JMP SHORT ZimoIII.00620CA9
00620CE9 PUSH DWORD PTR DS:[620004]
00620CEF CALL DWORD PTR DS:[620410]
00620CF5 PUSH DWORD PTR DS:[620000]
00620CFB CALL DWORD PTR DS:[620410]
00620D01 CMP BYTE PTR DS:[62089C],0
00620D08 JE SHORT ZimoIII.00620D11
00620D0A MOV EAX,ZimoIII.0061D001
00620D0F JMP EAX ==>這裡跳往下一層殼了
也可以用tc eip<00620000走到下一層殼。
來到這
0061D001 PUSHAD ==>來到這
0061D002 CALL ZimoIII.0061D00A
0061D007 JMP 45BED4F7
0061D00C PUSH EBP
0061D00D RETN
0061D00E CALL ZimoIII.0061D014
在上面的pushad後,運用esp定律,可以快速到達OEP處
00401000 JMP SHORT ZimoIII.00401012 ==>OEP入口
00401002 BOUND DI,DWORD PTR DS:[EDX]
00401005 INC EBX
00401006 SUB EBP,DWORD PTR DS:[EBX]
00401008 DEC EAX
00401009 DEC EDI
0040100A DEC EDI
0040100B DEC EBX
0040100C NOP
0040100D JMP 0092F64A
00401012 MOV EAX,DWORD PTR DS:[52E62B]
00401017 SHL EAX,2
0040101A MOV DWORD PTR DS:[52E62F],EAX
0040101F PUSH EDX
00401020 PUSH 0
00401022 CALL ZimoIII.0052C92C ; JMP to kernel32.GetModuleHandleA
00401027 MOV EDX,EAX
00401029 CALL ZimoIII.00508FB0
0040102E POP EDX
0040102F CALL ZimoIII.00508F14
到了上面OEP後,可以dump程式了。
上面的步驟都很簡單,然後來到修復iat了,這裡費了我不少時間。
執行ImportREC1.42+,填入oep,查詢iat,然後fixdump,執行一下修復後的程式,會看到顯示程式初始化失敗云云。
嘿嘿,不知這是ImportREC的bug,還是anti所致。
用ollydbg載入程式,來到oep後,我們得看看iat表,看有什麼不當的地方。
找到呼叫api的地方,如
00401000 JMP SHORT ZimoIII.00401012
00401002 BOUND DI,DWORD PTR DS:[EDX]
00401005 INC EBX
00401006 SUB EBP,DWORD PTR DS:[EBX]
00401008 DEC EAX
00401009 DEC EDI
0040100A DEC EDI
0040100B DEC EBX
0040100C NOP
0040100D JMP 0092F64A
00401012 MOV EAX,DWORD PTR DS:[52E62B]
00401017 SHL EAX,2
0040101A MOV DWORD PTR DS:[52E62F],EAX
0040101F PUSH EDX
00401020 PUSH 0
00401022 CALL ZimoIII.0052C92C ; JMP to kernel32.GetModuleHandleA
00401027 MOV EDX,EAX
00401029 CALL ZimoIII.00508FB0
我們在00401022處雙擊,進入iat表所在的呼叫位置,找到
0052C6B8 JMP DWORD PTR DS:[5471D0] ; dllmatri.@Matrix@$bctr$qxpucxulxuixui
0052C6BE JMP DWORD PTR DS:[5471D4] ; dllmatri.@Matrix@$bdtr$qv
0052C6C4 JMP DWORD PTR DS:[5471D8] ; dllmatri.@Matrix@Compress$qv
0052C6CA JMP DWORD PTR DS:[5471DC] ; dllmatri.@Matrix@CreativeOutData$qv
0052C6D0 JMP DWORD PTR DS:[5471E0] ; dllmatri.@Matrix@DoColorMode$quc
0052C6D6 JMP DWORD PTR DS:[5471E4] ; dllmatri.@Matrix@DoColorMode$qv
0052C6DC JMP DWORD PTR DS:[5471E8] ; dllmatri.@Matrix@GetBuffPoint$xqv
0052C6E2 JMP DWORD PTR DS:[5471EC] ; dllmatri.@Matrix@GetBuffSize$xqv
0052C6E8 JMP DWORD PTR DS:[5471F0] ; dllmatri.@Matrix@GetColorBuffSize$xqv
0052C6EE JMP DWORD PTR DS:[5471F4] ; dllmatri.@Matrix@GetCompressBuffPoint$xqv
0052C6F4 JMP DWORD PTR DS:[5471F8] ; dllmatri.@Matrix@GetCompressBuffSize$xqv
0052C6FA JMP DWORD PTR DS:[5471FC] ; dllmatri.@Matrix@GetPalletBuffPoint$xqv
0052C700 JMP DWORD PTR DS:[547200] ; dllmatri.@Matrix@GetPalletBuffSize$xqv
0052C706 JMP DWORD PTR DS:[547204] ; dllmatri.@Matrix@SetOperation$qucucucpv
0052C70C JMP DWORD PTR DS:[547208] ; dllmatri.@Matrix@GetColorBuffPoint$xqv
0052C712 INT3
0052C713 INT3
0052C714 JMP DWORD PTR DS:[547268] ; bmpchgdl.@PicChg@$bctr$qpuculuiuiuc
0052C71A JMP DWORD PTR DS:[54726C] ; bmpchgdl.@PicChg@$bdtr$qv
0052C720 JMP DWORD PTR DS:[547270] ; bmpchgdl.@PicChg@$brlsh$qxuc
0052C726 JMP DWORD PTR DS:[547274] ; bmpchgdl.@PicChg@$brrsh$qxuc
0052C72C JMP DWORD PTR DS:[547278] ; bmpchgdl.@PicChg@DeleteAllSpace$qv
0052C732 JMP DWORD PTR DS:[54727C] ; bmpchgdl.@PicChg@ExtendToDown$quc
0052C738 JMP DWORD PTR DS:[547280] ; bmpchgdl.@PicChg@ExtendToRight$quc
0052C73E JMP DWORD PTR DS:[547284] ; bmpchgdl.@PicChg@GetHeight$xqv
可以看到這中間存在int3,不知是不是因為這些int3引起ImportREC自動查詢到的iat不正常?
還是手動填入iat的rva吧:
iat rva:5471d0-40000=1471d0,長度可以選用1000,然後點getimport,把無效的全部cut掉。再fixdump即可以修復成功。
總結:
很簡單的東西,有時脫東西,不要總是相信工具軟體。多有大腦思考。
by lordor
04.11.15
相關文章
- 【原創】一個dex脫殼指令碼2017-01-03指令碼
- Alex-protect外殼完全分析【原創】2004-12-07
- [原創]heXer老兄的telock0.98脫殼機原理2004-06-16
- [原創]帶殼分析共享軟體 (9千字)2015-11-15
- 【原創】探索容器底層知識之Namespace2020-08-29namespace
- 【原創】多專案控制的困惑2019-04-30
- 【原創】簡單嘗試脫“愛加密”官網加固的DEX殼2017-01-03加密
- 【原創】探索雲端計算容器底層之Cgroup2020-08-30
- 【原創】ORACLE 分割槽與索引2013-01-12Oracle索引
- 魔術情書
6.55 破解過程+不脫殼打破解補丁【原創】2004-12-07
- 原創:oracle DML介紹與使用2020-04-06Oracle
- [原創] Linux 中的 nohup 與 &2018-11-29Linux
- [原創] sql mode與 enum 型別2008-07-02SQL型別
- mysql多層元資訊與查詢實踐2017-07-18MySql
- 【原創】Oracle ASM發展與實踐2013-12-29OracleASM
- 【原創】Oracle RAC故障分析與處理2013-07-18Oracle
- 位運算解決多標籤問題【原創】2019-05-19
- 脫2層未知變形殼 ―― philips.exe2015-11-15
- 【原創】一層Nginx反向代理K8S化部署實踐2020-09-22NginxK8S
- 【原創】Oracle 事務探索與例項(二)2013-05-31Oracle
- 【原創】 Oracle 事務探索與例項(一)2013-05-24Oracle
- 【原創】Oracle 並行原理與示例總結2013-01-25Oracle並行
- 蛋殼研究院:2019年基層醫療創新實踐報告(附下載)2019-10-12
- [原創]C#編寫的多生產者多消費者同步問題2004-09-29C#
- 【原創】Oracle execute plan 原理分析與例項分享2012-12-13Oracle
- iOS逆向工程之Clutch砸殼(圖文多)2017-12-20iOS
- Nginx多層代理配置2017-11-07Nginx
- Java (原創) (轉)2008-01-11Java
- 原創文章檢測工具,檢測原創文章,過不了原創賬號的原因在這2020-06-29
- [原創][連載]nim與python的異同12019-02-16Python
- 【原創】InnoDB 和TokuDB的讀寫分析與比較2021-09-09
- [原創]軟體企業過程改進開展--之高層管理者支援2019-04-09
- 與低層次互動活動相比,深層次互動活動的參與頻率更高(附原資料表) 2021-01-25
- 【原創】Java多執行緒初學者指南(5):join方法的使用2009-03-12Java執行緒
- Python裝飾器:套層殼我變得更強了!2022-04-20Python
- 【原創】Oracle 變數繫結與變數窺視合集2016-11-03Oracle變數
- 【原創】REDIS與MYSQL實現標籤的對比薦2015-12-16RedisMySql
- Python貓 2021 文章小結,翻譯竟比原創多!2022-01-04Python