首页
社区
课程
招聘
小学生,学SMC
发表于: 2005-6-13 00:58 4802

小学生,学SMC

2005-6-13 00:58
4802
1.察看源代码找到 EnableMenuItem 要害

4011E3

004011E3      6A 01         PUSH 1                  ; |uEnable
004011E5   .  68 459C0000   PUSH 9C45               ; |ItemID = 9C45 (40005.)
004011EA   .  50            PUSH EAX                ; |hMenu
004011EB   .  FF15 9C404000 CALL EnableMenuItem     ; \EnableMenuItem

模型
EnableMenuItem(HMENU hMenu,UINT uIDEnableMenuItem,UNIT uEnable)
uMenu 菜单句柄
uIDMenuItem 菜单句柄的标识符
uEnable 控制标志
0 允许
1 灰色,禁用
2 有色,禁用uEnable 控制标志

注意由此发现。汇编代码中出现的内容恰好与模型中出现的内容顺序相反.

2.破解方法

已知

004011E3      6A 01         PUSH 1                  ; |uEnable
uEnable=1
uEnable 控制标志
0 允许
1 灰色,禁用
2 有色,禁用


PUSH 1 改成 PUSH 0 即可

3.破解

i. 爆破 4011e3 PUSH 0 复制到可执行文件保存即可.

ii.SMC
1.UPX JMP OEP SMC 法

JMP OEP

0040BCCE    61              POPAD
0040BCCF  - E9 3C55FFFF     JMP UPX加壳.00401210     ; OEP
0040BCD4    0000            ADD BYTE PTR DS:[EAX],AL

改成
0040BCCF   /EB 00           JMP SHORT UPX+OEP_.0040BCD1
0040BCD1   \66:C705 E311400>MOV WORD PTR DS:[4011E3],6A  ; 4011e3 处写上(字) 006a ~SMC补丁的核心代码
0040BCDA  - E9 3155FFFF     JMP UPX+OEP_.00401210        ; 恢复 OEP
0040BCDF    90              NOP
0040BCE0    0000            ADD BYTE PTR DS:[EAX],AL

2.UPX 解码中断法
4011e3 内存访问短点
F9 注意当 断点显示 4011e3 内存中断是住手.
F8 一下
Ctrl+G 4011e3
OK 代码刚好还原
双击 寄存器 EIP 返回我们中断的代码行

0040BC41    8907            MOV DWORD PTR DS:[EDI],EAX  ; 断点显示 4011e3 内存中断
0040BC43    83C7 04         ADD EDI,4                   ; F8 一下
0040BC46    83E9 04         SUB ECX,4
0040BC49  ^ 77 F1           JA SHORT UPX加壳.0040BC3C
0040BC4B    01CF            ADD EDI,ECX
0040BC4D  ^ E9 4CFFFFFF     JMP UPX加壳.0040BB9E
0040BC52    5E              POP ESI

Ctrl+G 4011e3

004011DD    FF15 98404000   CALL DWORD PTR DS:[404098]
004011E3    6A 01           PUSH 1                  ; OK 代码刚好还原
004011E5    68 11000000     PUSH 11

我看重
0040BC4D  ^ E9 4CFFFFFF     JMP UPX加壳.0040BB9E

让它跳到   0040BCD4

变成
0040BC4D  ^ E9 4CFFFFFF     JMP UPX加壳.0040BCD4

下面是SMC补丁代码
0040BCD4    66:C705 E311400>MOV WORD PTR DS:[4011E3],6A
最后返回
0040BCDD  ^ E9 BCFEFFFF     JMP UPX加壳.0040BB9E
让它正常解码

保存  EXE

我还有一个方法是
再我们让 UPX 解码段在解密
X 段时 SMC
X 段为 给4011e3 解码的代码段
不过比较复杂,本人善在理论的实际实现阶段,成功是成功了,可惜我记不起来了,我又得再研究一下,成熟后公布.

ASPack

没想到我居然...
6.9日以前我为高考奋斗...
没想到我居然 手动跟踪  ASPack 壳都不会了,14次跟丢,实在是丢人啊~

好我们手动跟踪

0040A3AF    61              POPAD
0040A3B0    75 08           JNZ SHORT eq.0040A3BA
0040A3B2    B8 01000000     MOV EAX,1
0040A3B7    C2 0C00         RETN 0C
0040A3BA    68 10124000     PUSH eq.00401210  ; 肯定和 OEP 有关西啦,到时改成 SMC地址吧~
0040A3BF    C3              RETN
手动跟踪不难发现 ASpack 返回 OEP 不是象UPX通过 一个  JMp 完成的,是通过一个 retn 返回实现的,其实我感决都已样拉,不知那位汇编语言深厚 的大侠来指点 Retn 和 JMP 有什么不同啦~

自此我们玩个花样
topo 增加一个64字节的区段(我得在404425这)

现把 SMC 写好

00404425    66:C705 E311400>MOV WORD PTR DS:[4011E3],6A ; 修改 4011e3 push 1 (016a) 为 push 0 (006a)
0040442E  - E9 DDCDFFFF     JMP add-ASPA.00401210       ; 返回 OEP
00404433    90              NOP

今天太晚了,我先停笔了~
明天待续~

附件:smc.rar

[课程]FART 脱壳王!加量不加价!FART作者讲授!

收藏
免费 0
支持
分享
最新回复 (11)
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
比起天书还是这个好看啊!谢谢楼主
2005-6-13 02:33
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
楼主太棒了,收藏学习
2005-6-13 08:20
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
4
UPX/AsPack的SMC直接在跳OEP前修改就行了
不需要再进行跟踪定位何处可以SMC

另外:MOV WORD PTR DS:[4011E3],6A
可以是:mov byte ptr ds:[4011E4],0
2005-6-13 09:54
0
雪    币: 109
活跃值: (438)
能力值: ( LV12,RANK:220 )
在线值:
发帖
回帖
粉丝
5
最初由 fly 发布
UPX/AsPack的SMC直接在跳OEP前修改就行了
不需要再进行跟踪定位何处可以SMC

另外:MOV WORD PTR DS:[4011E3],6A
可以是:mov byte ptr ds:[4011E4],0


哦~修改单个字节,我没想到~

对了,我只是在研究 UPX 压缩和解压过程时突然想起要学 SMC 的所以才写个我学SMC 的心得啦~
2005-6-13 10:23
0
雪    币: 223
活跃值: (70)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
6
0040A3AF    61              POPAD
0040A3B0    75 08           JNZ SHORT eq.0040A3BA
直接改这里就可以的
2005-6-13 11:33
0
雪    币: 109
活跃值: (438)
能力值: ( LV12,RANK:220 )
在线值:
发帖
回帖
粉丝
7
谢谢~
指点~
吸收中~
2005-6-13 12:46
0
雪    币: 211
活跃值: (40)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
那么X-P呢?
2005-6-13 18:25
0
雪    币: 159
活跃值: (339)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
9
我有个问题:
在“2.UPX 解码中断法”,你断在了壳对代码解压的地方。我感觉这是多此一举。
1.如果你要写代码
“下面是SMC补丁代码
0040BCD4    66:C705 E311400>MOV WORD PTR DS:[4011E3],6A
最后返回
0040BCDD  ^ E9 BCFEFFFF     JMP UPX加壳.0040BB9E
让它正常解码”
这样写代码,还不如我直接,用OD修改这个push 1来得简单
2.如果你的意思想让他每次执行的时候都自动进行SMC,但是很遗憾,我从你的代码中没看到这个功能。而且我觉得实现起来也是不那么简单的。

还请楼主不吝赐教。
2005-6-13 19:30
0
雪    币: 109
活跃值: (438)
能力值: ( LV12,RANK:220 )
在线值:
发帖
回帖
粉丝
10
哈哈! 谢谢了! 好开心受到这么多朋友的指点!  为了高考,我已经放弃了一年的Crack的学习了,今日我又开始了学习,虽然技术是生熟了,那也无所谓了,反正也是菜鸟啦!今日来到看雪,一见如故,我决定20号开始我ADSL包月!  尽情学习了!  人心未老,鬓先白,枯木丛中寻白芷,未斯了!  人肩过,思量处,暮然回首,竟是旧相识!  物事人非 桃花依旧
2005-6-13 20:58
0
雪    币: 214
活跃值: (15)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
11
最初由 fly 发布
UPX/AsPack的SMC直接在跳OEP前修改就行了
不需要再进行跟踪定位何处可以SMC

另外:MOV WORD PTR DS:[4011E3],6A
可以是:mov byte ptr ds:[4011E4],0

fly老大:其它的壳SMC也可以直接在跳OEP前修改就行了
不需要再进行跟踪定位何处可以SMC吗?
2005-6-13 22:36
0
雪    币: 898
活跃值: (4039)
能力值: ( LV9,RANK:3410 )
在线值:
发帖
回帖
粉丝
12
具体情况具体分析
许多保护壳进行多层解码、校验,SMC需要几层修补
2005-6-13 22:45
0
游客
登录 | 注册 方可回帖
返回
//