首页
社区
课程
招聘
[原创]某壳的代码膨胀
发表于: 2016-7-9 19:03 14297

[原创]某壳的代码膨胀

2016-7-9 19:03
14297

源代码如下
push fbb5f5
add esp, 04h
push        40b
pushf
push 103bcd4
add esp, 04h
push 103bcde
add esp, 04h
lea esp, dword ptr ss:[esp-04h]
xchg dword ptr ss:[esp], eax
not eax
and eax, eax
push 103bd12
add esp, 04h
push 103bd1c
add esp, 04h
lea esp, dword ptr ss:[esp-04h]
xchg dword ptr ss:[esp], eax
xchg dword ptr ss:[esp], eax
push 103bd56
add esp, 04h
lea esp, dword ptr ss:[esp+04h]
push 103bd7c
push 103bd81
add esp, 04h
add dword ptr ss:[esp], 49h
push 103bda7
add esp, 04h
ret
第一次压缩
push imm
add esp, 04h
清理以后
mov [esp-4],fbb5f5
push        40b
pushf
mov [esp-4],103bcd4
mov [esp-4],103bcde
lea esp, dword ptr ss:[esp-04h]
xchg dword ptr ss:[esp], eax
not eax
and eax, eax
mov [esp-4],103bd12
mov [esp-4],103bd1c
lea esp, dword ptr ss:[esp-04h]
xchg dword ptr ss:[esp], eax
xchg dword ptr ss:[esp], eax
mov [esp-4],103bd56
lea esp, dword ptr ss:[esp+04h]
push 103bd7c
mov [esp-4],103bd81
add dword ptr ss:[esp], 49h
mov [esp-4],103bda7
ret
第二次压缩清理重复指令
push        40b
pushf
mov [esp-4],103bcde
lea esp, dword ptr ss:[esp-04h]
xchg dword ptr ss:[esp], eax
not eax
and eax, eax
mov [esp-4],103bd1c
lea esp, dword ptr ss:[esp-04h]
mov [esp-4],103bd56
lea esp, dword ptr ss:[esp+04h]
push 103bd7c
add dword ptr ss:[esp], 49h
mov [esp-4],103bda7
ret
第三次压缩
mov [esp-4],imm
lea esp, dword ptr ss:[esp-04h]
==》push imm
push        40b
pushf
push 103bcde
xchg dword ptr ss:[esp], eax
not eax
and eax, eax
push 103bd1c
mov [esp-4],103bd56
lea esp, dword ptr ss:[esp+04h]
push 103bd7c
add dword ptr ss:[esp], 49h
mov [esp-4],103bda7
ret
第四次清理xchg这种不好识别的指令
push        40b
pushf
push eax
mov eax,103bcde
not eax
and eax, eax
push 103bd1c
mov [esp-4],103bd56
lea esp, dword ptr ss:[esp+04h]
push 103bd7c
add dword ptr ss:[esp], 49h
mov [esp-4],103bda7
ret
第五步清理逻辑运算
(not a) and (not a)
==》not a
push        40b
pushf
push eax
mov eax,FEFC4321
push 103bd1c
mov [esp-4],103bd56
lea esp, dword ptr ss:[esp+04h]
push 103bd7c
add dword ptr ss:[esp], 49h
mov [esp-4],103bda7
ret
第六步
lea esp, dword ptr ss:[esp+04h]
push imm
==》mov [esp],imm
整理后
push        40b
pushf
push eax
mov eax,FEFC4321
push 103bd1c
mov [esp-4],103bd56
mov [esp],103bd7c
add dword ptr ss:[esp], 49h
mov [esp-4],103bda7
ret
第七步 清理重复指令并且消去数学计算
push        40b
pushf
push eax
mov eax,FEFC4321
push 103bd1c
mov [esp],103BDC5
mov [esp-4],103bda7
ret
第八步
push imm1
mov [esp],imm2
==》push imm2
整理后
push        40b
pushf
push eax
mov eax,FEFC4321
push 103BDC5 //ret的返回地址
mov [esp-4],103bda7
ret
基本是完成了第一次清洗
这里计算ret的返回地址也比价简单。只需要模拟not和and以及add指令即可,经过计算是103BDC5,而且根据后面ret的返回地址来看。后面的代码仍然使用xchg和eax来计算ret返回地址。所以判定eax应该是在后面作为一个temp变量来使用,可以称作key,会由壳自动维护这个值,那么这清洗出来的7句代码中,有用的只有前三句,后面的用来参与程序逻辑
push        40b
pushf         
push eax //basethreadinitthunk


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 3
支持
分享
最新回复 (11)
雪    币: 23
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
是某壳啊?????
没头没尾的感觉
2016-7-9 20:28
0
雪    币: 12502
活跃值: (3058)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
VP。。。。
2016-7-9 20:44
0
雪    币: 0
活跃值: (954)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
4
没必要这么复杂,感觉多余了,膨胀的代码完全可以跟下去。栈线程返回直接能到进入前的EIP
2016-7-12 13:47
0
雪    币: 12502
活跃值: (3058)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
主要是看了zv的博客,有种写x86指令虚拟机的冲动
2016-7-12 20:46
0
雪    币: 107
活跃值: (409)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
冲动是魔鬼..忍住...............
2016-7-13 12:45
0
雪    币: 12502
活跃值: (3058)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
7
兄弟有兴趣搞吗?我现在框架写好了,正在慢慢补充
2016-7-13 14:25
0
雪    币: 152
活跃值: (92)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
8
好搞不?
2016-7-14 20:03
0
雪    币: 325
活跃值: (196)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
原理好明白,就是作为工程来说要的是恒心
2016-7-14 21:32
0
雪    币: 101
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
楼主搞得如何
2016-10-11 14:58
0
雪    币: 12502
活跃值: (3058)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
11
有了黑科技了。但是无奈电脑坏了。。。。。。。
2016-10-11 15:57
0
雪    币: 101
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
加个好友呗 最近也研究这个
2016-10-13 16:12
0
游客
登录 | 注册 方可回帖
返回
//