首页
论坛
课程
招聘
[原创][MSLRH]0.31脱壳法
2005-2-23 17:43 9168

[原创][MSLRH]0.31脱壳法

2005-2-23 17:43
9168
[工具]: Ollydbg,lordpe,imprec
[介绍]:(from jingulong)
1.它主要的手段是用RDTSC(时间差)来Anti trace
2.OutputDebugStringA+ZwQueryInformationProcess+IsDebuggerPresent
3.修改文件头anti dump
4.CreateFileA 独占方式打开文件anti ImportREC
5.CRC
[起初办法]:
1、运行mslrh 0.31
2、close mslrh file handle
用一些进程管理器:http://www.sysinternals.com/files/procexpnt.zip这个选择mslrh进程,然后查看handle,把mslrh.exe的handle给关闭掉。
3、ollydbg attach
4、find oep   ***根据api查找的***
5、dump & iat
其中第四步是靠经验猜的

[真正快速脱壳方法](比较另类,逃避RDTSC跟踪):
RDTSC anti trace穿插在代码中,用ollydbg跟踪实在是麻烦、头痛。
1、ollydbg载入
2、查找68????????c3 (push ???????? retn),把retn的c3 改成int3(cc)
3、保存修改,关闭ollydbg
4、运行mslrh.exe,发生异常,ollydbg调试
5、把int3改成retn,F8
6、查找 61e9,来到了popad jmp ??????
7、f4到jmp处,F8
8、dump & imprec fix iat

[过程]:
ollydbg载入[mslrh].exe

00456000 > $ 60 PUSHAD ;***POEP****
00456001 . D1CB ROR EBX,1
00456003 . 0FCA BSWAP EDX
00456005 . C1CA E0 ROR EDX,0E0
00456008 . D1CA ROR EDX,1
0045600A . 0FC8 BSWAP EAX
0045600C . EB 01 JMP SHORT [MSLRH].0045600F
0045600E . F1 INT1
0045600F > 0FC0C9 XADD CL,CL

查找二进制: 68????????c3,修改retn成int3

0046207E . 68 ADE29F00 PUSH 9FE2AD
00462083 . C3 RETN ;**** 改成int3 (cc)
00462084 33 DB 33 ; CHAR '3'
00462085 C9 DB C9
00462086 E8 DB E8
00462087 00 DB 00
00462088 00 DB 00
00462089 00 DB 00
0046208A 00 DB 00
0046208B 5F DB 5F ; CHAR '_'
0046208C 81 DB 81


保存修改,关闭ollydbg
运行mslrh.exe,发生异常,ollydbg调试

00462083 CC INT3 ; 停在这里,改成retn
00462084 33C9 XOR ECX,ECX
00462086 E8 00000000 CALL [MSLRH].0046208B
0046208B 5F POP EDI
0046208C 81C7 C5090000 ADD EDI,9C5
00462092 33D2 XOR EDX,EDX
00462094 83C2 15 ADD EDX,15


把int3改成retn,F8
查找 61e9,来到了popad jmp...

00452A12 61 POPAD
00452A13 ^E9 3E13FCFF JMP [MSLRH].00413D56
00452A18 0000 ADD BYTE PTR DS:[EAX],AL
00452A1A 0000 ADD BYTE PTR DS:[EAX],AL
00452A1C 0000 ADD BYTE PTR DS:[EAX],AL
00452A1E 0000 ADD BYTE PTR DS:[EAX],AL

把光标放置到452a13处,F4
F8,看看我们来到了哪里?哈哈

00413D56 6A 00 PUSH 0 ; yeah,OEP
00413D58 E8 F10F0000 CALL [MSLRH].00414D4E ; JMP to kernel32.GetModuleHandleA
00413D5D A3 A08F4100 MOV DWORD PTR DS:[418FA0],EAX
00413D62 E8 6B100000 CALL [MSLRH].00414DD2 ; JMP to comctl32.InitCommonControls
00413D67 6A 00 PUSH 0
00413D69 68 843D4100 PUSH [MSLRH].00413D84
00413D6E 6A 00 PUSH 0
00413D70 6A 65 PUSH 65
00413D72 FF35 A08F4100 PUSH DWORD PTR DS:[418FA0]
00413D78 E8 0D100000 CALL [MSLRH].00414D8A ; JMP to USER32.DialogBoxParamA
00413D7D 6A 00 PUSH 0
00413D7F E8 BE0F0000 CALL [MSLRH].00414D42 ; JMP to kernel32.ExitProcess
00413D84 55 PUSH EBP
00413D85 8BEC MOV EBP,ESP
00413D87 8B45 0C MOV EAX,DWORD PTR SS:[EBP+C]
00413D8A 3D 10010000 CMP EAX,110
00413D8F 0F85 3D030000 JNZ [MSLRH].004140D2
00413D95 6A 01 PUSH 1
00413D97 FF35 A08F4100 PUSH DWORD PTR DS:[418FA0]
00413D9D E8 00100000 CALL [MSLRH].00414DA2 ; JMP to USER32.LoadBitmapA
00413DA2 A3 C8934100 MOV DWORD PTR DS:[4193C8],EAX
00413DA7 50 PUSH EAX



lordpe,imprec上场,完工。

[2022冬季班]《安卓高级研修班(网课)》月薪两万班招生中~

收藏
点赞0
打赏
分享
最新回复 (16)
雪    币: 215
活跃值: 活跃值 (15)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
lordor 活跃值 6 2005-2-23 18:54
2
0
不错啊
通过即时调试器,跳过反跟踪,这处妙
雪    币: 60
活跃值: 活跃值 (123)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
fly 活跃值 85 2005-2-23 18:57
3
0
不错
雪    币: 203
活跃值: 活跃值 (10)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
clide2000 活跃值 7 2005-2-23 19:09
4
0
支持随
便请教一个问题。关于OD的Attach上其他里程后。我在OD中f9运行后,其相应的进程却仍处于无法响应状态,这是为什么呢,不知楼主当时在Attach上mslrh 0.31时,有没有遇到这种情况
雪    币: 155
活跃值: 活跃值 (452)
能力值: ( LV12,RANK:980 )
在线值:
发帖
回帖
粉丝
csjwaman 活跃值 24 2005-2-23 19:16
5
0
太妙了!!!
雪    币: 201
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
q3 watcher 活跃值 2005-2-23 19:40
6
0
反单步的花太单调了,会被捕获规律的。不加密IAT,anti dump、anti ImportREC有局限性,可以直接绕过去。偷代码不敢多演,特征码的静态模糊分析即可。
雪    币: 197
活跃值: 活跃值 (17)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
peaceclub 活跃值 6 2005-2-23 20:30
7
0
最初由 clide2000 发布
支持随
便请教一个问题。关于OD的Attach上其他里程后。我在OD中f9运行后,其相应的进程却仍处于无法响应状态,这是为什么呢,不知楼主当时在Attach上mslrh 0.31时,有没有遇到这种情况

已经在运行了.Ctrl+g: 401000看看
雪    币: 45969
活跃值: 活跃值 (168323)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
linhanshi 活跃值 2005-2-23 20:38
8
0
Authorship.I support.
雪    币: 19
活跃值: 活跃值 (10)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
pendan2001 活跃值 4 2005-2-23 22:23
9
0
支持支持!
雪    币: 203
活跃值: 活跃值 (10)
能力值: ( LV9,RANK:290 )
在线值:
发帖
回帖
粉丝
clide2000 活跃值 7 2005-2-23 23:29
10
0
最初由 peaceclub 发布

已经在运行了.Ctrl+g: 401000看看


我后来发现用procexp.exe里的,debug功能,自动调用OD,Attach上其进程就没有这种情况,而当我手动启动OD,通过OD里的Attach命令来实现时,就出现被Attach程序没有响应的问题了.还没有找到原因
雪    币: 118
活跃值: 活跃值 (191)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
Lenus 活跃值 3 2005-2-24 01:37
11
0
脱法清新脱俗,耳目一新...
雪    币: 1906
活跃值: 活跃值 (15)
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
Feisu 活跃值 2005-2-24 20:47
12
0
试了下,脱了个出来。huh
雪    币: 200
活跃值: 活跃值 (15)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
ljy3282393 活跃值 1 2005-2-24 23:36
13
0
多谢!学习中
雪    币: 231
活跃值: 活跃值 (142)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
liuyilin 活跃值 2005-2-27 12:40
14
0
最初由 peaceclub 发布
[工具]: Ollydbg,lordpe,imprec
[介绍]:(from jingulong)
1.它主要的手段是用RDTSC(时间差)来Anti trace
2.OutputDebugStringA+ZwQueryInformationProcess+IsDebuggerPresent
3.修改文件头anti dump
........

请教:
是基于什么原理决定“68????????c3 (push ???????? retn)”处下手,与RDTSC的特性有关系吗?
多谢
雪    币: 143
活跃值: 活跃值 (22)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
采臣·宁 活跃值 1 2005-2-27 13:31
15
0
呵呵,不错。方法另类,要的就是这个异想天开,褒义哦
雪    币: 231
活跃值: 活跃值 (142)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
liuyilin 活跃值 2005-2-27 16:02
16
0
引用:
--------------------------------------------------------------------------------
最初由 peaceclub 发布
[工具]: Ollydbg,lordpe,imprec
[介绍]:(from jingulong)
1.它主要的手段是用RDTSC(时间差)来Anti trace
2.OutputDebugStringA+ZwQueryInformationProcess+IsDebuggerPresent
3.修改文件头anti dump
........
--------------------------------------------------------------------------------

请教:
是基于什么原理决定“68????????c3 (push ???????? retn)”处下手,与RDTSC的特性有关系吗?
多谢
雪    币: 197
活跃值: 活跃值 (17)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
peaceclub 活跃值 6 2005-2-27 16:21
17
0
没多少原理,根据一点经验.
一般壳都会有long jump
比如upx的
popad
jmp .....
等,
那比较变形的形式有:
push oep
retn
所以我就搜索了68????????c3,果然碰上了.
一般利用rdtsc指令来反跟踪,与cpuid想结合,如果开始有pushad,后面都会有popad,中间有时间片检查,比如cmp eax,0ffffh等.
游客
登录 | 注册 方可回帖
返回