首页
社区
课程
招聘
[求助]如何脱这个dos中com文件未知壳?
发表于: 2009-4-12 21:33 2493

[求助]如何脱这个dos中com文件未知壳?

2009-4-12 21:33
2493
很多高手,都说dos中com文件很好脱。不知道是我不得此法还是什么...
本人就遇到一个国人写的程序,是一个硬盘网络对拷工具demo版。
工具如何,不是这里重点!工具不能在ms-dos上进入程序界面。
要用dos的网卡驱动,才能进入程序界面不过不影响脱壳...
这个是未知壳,或叫未知编码吧?
我按照本人翻译的debug 脱壳法,不行。
再参考飞刀浪子的UCDOS 7.0的KNL.COM程序脱壳还是不行...

以下是一些高手总结:

THE UNDERTAKER -=BANDA=-
Com文件在内存映像中没有可位定的项目。只有合适区分标志器(SS,ES,DS = CS)。

Com文件大小在64k之间。
最大可变偏移量在0000 - FFFF

当它执行之时,Com文件是比较Exe文件更苗条更快速(打赌你也不知道它这点)。

Com文件不像Exe文件有,header(文件头) checksum(校验和)。

Com文件开始在100h范围,紧接在上述的PSP=Personal Software Process(为软件人员进行软件开发提
供了一个规范的个人过程框架=可编程序的信号处理机 )。

在这时加载com文件。ES,DS,SS,CS(标志器)指针向PSP。然后SP(栈指针)再指向
同样可能存在高级的内存中,负数2 bytes (SP = FFFE)。
事实上MS-DOS压入一个零的word(双字节)在这个stack(堆栈)之后的入口处。

飞刀浪子
脱这些壳,重要的就是要严密监视SI、DI、ES、CX,其他的要看情况

忘记是哪两位:
com:
ax=cx=dx=0000
If CS=DS=ES=SS,SP=FFFE,the we reach the OEP of a .COM
文件长度在bx
高位在cx
把100开始,bx长的东东写入文件  bx=4480
W cs:ip dx test.com
一般就是g 100

本人跟踪过程:

tr netcopy.com

刚载入:
AX=0000  BX=0000  CX=0000  DX=2BB4  SP=FFFE  BP=0000  SI=0100  DI=0000
DS=2BB4  ES=2BB4  SS=2BB4  CS=2BB4  IP=0100  o d I S z a p c t
2BB4:0000  CD 20 00 9F 00 9A F0 FE-1D F0 75 85 F2 0B 6D 01  ?.?氿?饀咈.m.
2BB4:0010  11 0A 78 01 11 0A 11 0A-01 01 01 00 02 FF FF FF  ..x..........
2BB4:00FC  0000            ADD       [BX+SI],AL
2BB4:00FE  0000            ADD       [BX+SI],AL
2BB4:0100  E9BFA8          JMP       A9C2
2BB4:0103  FF01            INC       [WORD DI+BX]
2BB4:0105  FF03            INC       [WORD BP+DI]
2BB4:0107  FF07            INC       [WORD BX]
2BB4:0109  FF0F            DEC       [WORD BX]
2BB4:010B  FF1F            CALL FAR  [WORD BX]
2BB4:010D  FF3F            INVALID   [WORD BX]
2BB4:010F  FF7FFF          INVALID   [WORD BX-01]
2BB4:0112  FF00            INC       [WORD BX+SI]
2BB4:0114  55              PUSH      BP
2BB4:0115  8BEC            MOV       BP,SP
2BB4:0117  83C4E8          ADD       SP,-18
2BB4:011A  6660            PUSHAD
2BB4:011C  1E              PUSH      DS

感觉这段进行解码或解壳:
AX=0000  BX=0000  CX=0000  DX=2BB4  SP=FFFE  BP=0000  SI=0100  DI=0000
DS=2BB4  ES=2BB4  SS=2BB4  CS=2BB4  IP=A9C2  o d I S z a p c t
2BB4:0000  CD 20 00 9F 00 9A F0 FE-1D F0 75 85 F2 0B 6D 01  ?.?氿?饀咈.m.
2BB4:0010  11 0A 78 01 11 0A 11 0A-01 01 01 00 02 FF FF FF  ..x..........
2BB4:A9C2  6660            PUSHAD
2BB4:A9C4  1E              PUSH      DS
2BB4:A9C5  06              PUSH      ES
2BB4:A9C6  8CC8            MOV       AX,CS
2BB4:A9C8  8ED8            MOV       DS,AX
2BB4:A9CA  8EC0            MOV       ES,AX
2BB4:A9CC  8CC8            MOV       AX,CS
2BB4:A9CE  050010          ADD       AX,1000
2BB4:A9D1  33FF            XOR       DI,DI
2BB4:A9D3  8CCB            MOV       BX,CS
2BB4:A9D5  BE9A02          MOV       SI,029A
2BB4:A9D8  8CC9            MOV       CX,CS
2BB4:A9DA  81C10050        ADD       CX,5000
2BB4:A9DE  8CCA            MOV       DX,CS
2BB4:A9E0  81C20060        ADD       DX,6000
2BB4:A9E4  E82D57          CALL      0114
2BB4:A9E7  8CC8            MOV       AX,CS
2BB4:A9E9  050030          ADD       AX,3000
2BB4:A9EC  33FF            XOR       DI,DI
2BB4:A9EE  8CCB            MOV       BX,CS
2BB4:A9F0  BE1020          MOV       SI,2010
2BB4:A9F3  8CC9            MOV       CX,CS
2BB4:A9F5  81C10050        ADD       CX,5000
2BB4:A9F9  8CCA            MOV       DX,CS
2BB4:A9FB  81C20060        ADD       DX,6000
2BB4:A9FF  E81257          CALL      0114
2BB4:AA02  8CC8            MOV       AX,CS
2BB4:AA04  050040          ADD       AX,4000
2BB4:AA07  A39602          MOV       [0296],AX
2BB4:AA0A  C70698020000    MOV       [WORD 0298],0000
2BB4:AA10  33FF            XOR       DI,DI
2BB4:AA12  8CCB            MOV       BX,CS
2BB4:AA14  BE7042          MOV       SI,4270
2BB4:AA17  8CC9            MOV       CX,CS
2BB4:AA19  81C10050        ADD       CX,5000
2BB4:AA1D  8CCA            MOV       DX,CS
2BB4:AA1F  81C20060        ADD       DX,6000
2BB4:AA23  E8EE56          CALL      0114
2BB4:AA26  8CC8            MOV       AX,CS
2BB4:AA28  050010          ADD       AX,1000
2BB4:AA2B  50              PUSH      AX
2BB4:AA2C  33C0            XOR       AX,AX
2BB4:AA2E  50              PUSH      AX
AX=6BB4  BX=2BB4  CX=7BB4  DX=0000  SP=FFD6  BP=0000  SI=4270  DI=0000
DS=2BB4  ES=2BB4  SS=2BB4  CS=2BB4  IP=AA36  o d I s Z a P c t
2BB4:0000  CD 20 00 9F 00 9A F0 FE-1D F0 75 85 F2 0B 6D 01  ?.?氿?饀咈.m.
2BB4:0010  11 0A 78 01 11 0A 11 0A-01 01 01 00 02 FF FF FF  ..x..........
2BB4:AA2F  A19602          MOV       AX,[0296]
2BB4:AA32  8B169802        MOV       DX,[0298]
2BB4:AA36  CB              RETF

又一个长跳:
AX=6BB4  BX=2BB4  CX=7BB4  DX=0000  SP=FFDA  BP=0000  SI=4270  DI=0000
DS=2BB4  ES=2BB4  SS=2BB4  CS=3BB4  IP=0000  o d I s Z a P c t
2BB4:0000  CD 20 00 9F 00 9A F0 FE-1D F0 75 85 F2 0B 6D 01  ?.?氿?饀咈.m.
2BB4:0010  11 0A 78 01 11 0A 11 0A-01 01 01 00 02 FF FF FF  ..x..........
3BB4:0000  E9E222          JMP       22E5

也许已经是解壳完成:
AX=6BB4  BX=2BB4  CX=7BB4  DX=0000  SP=FFDA  BP=0000  SI=4270  DI=0000
DS=2BB4  ES=2BB4  SS=2BB4  CS=3BB4  IP=22E5  o d I s Z a P c t
2BB4:0000  CD 20 00 9F 00 9A F0 FE-1D F0 75 85 F2 0B 6D 01  ?.?氿?饀咈.m.
2BB4:0010  11 0A 78 01 11 0A 11 0A-01 01 01 00 02 FF FF FF  ..x..........
3BB4:22E5  2EA32301        MOV       [CS:0123],AX               (3BB4:0123=0000)
3BB4:22E9  2E89162101      MOV       [CS:0121],DX
3BB4:22EE  6660            PUSHAD
3BB4:22F0  1E              PUSH      DS
3BB4:22F1  06              PUSH      ES
3BB4:22F2  8CCB            MOV       BX,CS
3BB4:22F4  8EDB            MOV       DS,BX
3BB4:22F6  8EC3            MOV       ES,BX
3BB4:22F8  E8D3E2          CALL      05CE
3BB4:22FB  0F82DD05        JB        28DC
3BB4:22FF  8B3E2501        MOV       DI,[0125]
3BB4:2303  C7051400        MOV       [WORD DI],0014
3BB4:2307  E84BFC          CALL      1F55    ---------->Initializing packet driver........
3BB4:230A  8B3E2501        MOV       DI,[0125]
3BB4:230E  C7051500        MOV       [WORD DI],0015
3BB4:2312  E840FC          CALL      1F55    ---------->Searching sender........
3BB4:2315  E8BCE3          CALL      06D4
3BB4:2318  730C            JAE       2326
3BB4:231A  E870FF          CALL      228D
3BB4:231D  0BC0            OR        AX,AX
3BB4:231F  740A            JE        232B     ---------->这是校正有否网卡驱动

//--------------没有就退出
AX=4CB4  BX=2BB4  CX=7BB4  DX=0000  SP=FFDA  BP=0000  SI=4270  DI=0000
DS=2BB4  ES=2BB4  SS=2BB4  CS=3BB4  IP=28E2  o d I s z a p c t
2BB4:0000  CD 20 00 9F 00 9A F0 FE-1D F0 75 85 F2 0B 6D 01  ?.?氿?饀咈.m.
2BB4:0010  11 0A 78 01 11 0A 11 0A-01 01 01 00 02 FF FF FF  ..x..........

3BB4:28DC  07           -> POP       ES
3BB4:28DD  1F              POP       DS
3BB4:28DE  6661            POPAD
3BB4:28E0  B44C            MOV       AH,4C
3BB4:28E2  CD21            INT       21 Terminate Process with Return Code

//--------------有就开始进入程序界面
AX=0001  BX=3BB4  CX=7BB4  DX=0000  SP=FFB6  BP=0000  SI=4270  DI=7361
DS=3BB4  ES=3BB4  SS=2BB4  CS=3BB4  IP=232B  o d I s Z a p c t
2BB4:0000  CD 20 00 9F 00 9A F0 FE-1D F0 75 85 F2 0B 6D 01  ?.?氿?饀咈.m.
2BB4:0010  11 0A 78 01 11 0A 11 0A-01 01 01 00 02 FF FF FF  ..x..........
2BB4:0000  CD 20 00 9F 00 9A F0 FE-1D F0 75 85 F2 0B 6D 01  ?.?氿?饀咈.m.
2BB4:0010  11 0A 78 01 11 0A 11 0A-01 01 01 00 02 FF FF FF  ..x..........
3BB4:2326  C6063B0100      MOV       [BYTE 013B],00
3BB4:232B  E8A6E3          CALL      06D4
3BB4:232E  0F82AA05        JB        28DC
3BB4:2332  E8F8E3          CALL      072D
3BB4:2335  0F82A305        JB        28DC
------->是否有退出过?这个程序退出一次,就不能再进入程序所以这里必须要跳.
3BB4:2339  8B3E2501        MOV       DI,[0125]
3BB4:233D  C7051200        MOV       [WORD DI],0012
3BB4:2341  E811FC          CALL      1F55 -------->这里就是进入程序界面
3BB4:2344  E816DD          CALL      005D
3BB4:2347  E884FD          CALL      20CE
3BB4:234A  8B3E2501        MOV       DI,[0125]
3BB4:234E  C7050000        MOV       [WORD DI],0000
3BB4:2352  E800FC          CALL      1F55
3BB4:2355  3DFF00          CMP       AX,00FF
3BB4:2358  7503            JNE       235D
3BB4:235A  E96A05          JMP       28C7

3BB4:22E5  2EA32301        MOV       [CS:0123],AX               (3BB4:0123=0000)
不过在我这里用S命令居然
Initializing packet driver........
Searching sender........
如:
s 0000 l ffff 'Searching'
搜索不到这样字串?

进行com脱守回写:
R BX 0
R CX 2BB4
N CRKNET.COM
W CS:100
脱出来居然比原来的小很多,而且不能运行。0F82A305中的机器码,同样找到证明脱壳失败。
我也试过用exetools网站的工具进行脱壳后,还是找到0F82A305与以上字串而且与未脱壳的
时大小没有变化。用16进制工具打开对比,差点晕倒内容是一样。证明工具可能认为程序无壳
所以实现copy功能。tr 的万能脱壳法,跟工具一样失败。
不知道高手前辈们可否指教一下。

[培训]《安卓高级研修班(网课)》月薪三万计划,掌握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

上传的附件:
收藏
免费 0
支持
分享
最新回复 (7)
雪    币: 8026
活跃值: (2511)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
PSP=Personal Software Process?
晕,看过dos没?
2009-4-12 22:28
0
雪    币: 335
活跃值: (263)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
请指导一下,哪里不对了?是w命令吗?对com,脱还是头一次尝试。不知道是否太简单?网上没有找到几个教程。
2009-4-13 00:09
0
雪    币: 335
活跃值: (263)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
楼上朋友可以再指导一下?
是本人找到的入口点不对,还是回写地址不对了?现在我也不能确定开始与结束地址是什么?我是按照飞刀浪子的回写方法!
2009-4-13 13:39
0
雪    币: 2393
活跃值: (1387)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
1. 它不是外加的殼, 而是自己把每個副程序事先編碼, 然後在運行時解密到另一塊區域.

2. 想找到你說的那字串. 進 debug 後下 g aa26 指令. 然後它在 cs+4000:379B 處.


3. 你可以在這裡 CS:AA26 存盤, 做成 EXE.
上传的附件:
2009-4-13 18:19
0
雪    币: 2393
活跃值: (1387)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
用我剛說的那方法, 解開的部份給你先看看.
這個程序, 不能算是 COM 的殼, 也有一點難度. 不適合新手練習.
上传的附件:
2009-4-13 18:49
0
雪    币: 335
活跃值: (263)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
zenix果然是dos高手,我也觉得这个不一般壳!真得是字符串编码加密。
zenix有空可以以它写一下跟踪过程,不知道你是什么虚拟机?vpc或是vmware还是别的?只要相告虚拟机的网卡型号!如果我有收集到dos驱动我再上载!
这个也算比较特别,可以帮你们台湾的softbug高手补充一下教程!
或可以相告一下脱com的壳,主要观察哪些寄存器?我只知道刚载入com文件时bx存放文件长度!
我在逆向脱壳法或叫内存定位法,就是从破解点入手如:
3BB4:231F  740A            JE        232B     ---------->这是校正有否网卡驱动
bmpb 3BB4:231F
g
可以找到解码段
本论坛有一篇softice for dos 在没有脱壳情况下直接修kv300改机器码以达到破解效果。
他是d es:edi 找有否像740A机器码,我也参照了就没有到有740A的机器码。
我很机知道为什么他是d es:edi而不是别的?难道com是固定了某些寄存器?我看了网上很多com结构分析教程!
也没有详细介绍相关的寄存器,比较详细算是这篇了!
http://net.csai.cn/Secure_Virus/200707101050341400.htm
在exetools看到zenix准备开始启动dos模块,我十分支持!
还有
-D 4bbf:379b
这个4bbf=0bbf+400
379b是如何计算得出?
2009-4-14 10:28
0
雪    币: 2393
活跃值: (1387)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
zenix果然是dos高手,我也觉得这个不一般壳!真得是字符串编码加密。

唉, 我只是初級會員

zenix有空可以以它写一下跟踪过程,

過程的話, 上面那個 debug 的圖就是了.
相信你也追也很多次. 不必再重複了.
你哪裡有疑問的, 提出來, 我直接回答重點

不知道你是什么虚拟机?vpc或是vmware还是别的?只要相告虚拟机的网卡型号!如果有收集到dos驱动我再上载!

我是用 vmware 和 virtual box. 有時是直接用 XP 的 DOS 或是開機直接進 DOS.

或可以相告一下脱com的壳,主要观察哪些寄存器?

1. 這個程序本身不是 com 的殼.
2. 一般 com 的殼, 就看這兩點來判斷是否為進入點.
   (1). CS=DS=ES=SS
   (2). IP=100

我只知道刚载入com文件时bx存放文件长度!
我在逆向脱壳法或叫内存定位法,就是从破解点入手如:
3BB4:231F 740A JE 232B ---------->这是校正有否网卡驱动
bmpb 3BB4:231F
g
可以找到解码段
本论坛有一篇softice for dos 在没有脱壳情况下直接修kv300改机器码以达到破解效果。
他是d es:edi 找有否像740A机器码,我也参照了就没有到有740A的机器码。

我給你那份解碼後的, 裡面有 74 0A 吧?



我很机知道为什么他是d es:edi而不是别的?难道com是固定了某些寄存器?

他是剛好在那個點, 剛好是 es:di.
不是每個程序都通用的

在exetools看到zenix准备开始启动dos模块,我十分支持!

謝謝.


还有
-D 4bbf:379b
这个4bbf=0bbf+400
379b是如何计算得出?


運行到這裡 IP=580 處, 看 DS:SI
它是用 INT 10h, 來一個一個顯示字元的.

上传的附件:
2009-4-14 14:35
0
游客
登录 | 注册 方可回帖
返回
//