首页
社区
课程
招聘
[讨论]某壳的代码膨胀清理,借助大家的力量
发表于: 2016-8-17 19:43 4307

[讨论]某壳的代码膨胀清理,借助大家的力量

2016-8-17 19:43
4307
上次发了个帖子。关于某壳代码膨胀的,自己手撸的,这次用了点黑科技,获取到了更多代码。各位大大闲暇之余,希望也来参与清理。不是什么技术贴,希望大家讨论讨论。retaddr就是ret指令,只不过已经有了返回地址,也就是下一句代码。
cmp eax, eax
push fbb5f5
add esp, 04h
push 40b
pushfd
push 103bcd4
add esp, 04h
push 103bcde
add esp, 04h
lea esp, dword ptr [esp-04h]
xchg dword ptr [esp], eax
not eax
and eax, eax
cmp eax, eax
push 103bd12
add esp, 04h
push 103bd1c
add esp, 04h
lea esp, dword ptr [esp-04h]
xchg dword ptr [esp], eax
test eax, eax
xchg dword ptr [esp], eax
push 103bd56
add esp, 04h
lea esp, dword ptr [esp+04h]
push 103bd7c
push 103bd81
add esp, 04h
add dword ptr [esp], 49h
push 103bda7
add esp, 04h
retaddr: 103bdc5
xchg dword ptr [esp], eax
push 103bdd7
add esp, 04h
lea esp, dword ptr [esp+04h]
push 103bdfd
add dword ptr [esp], 29h
push 103be06
add esp, 04h
retaddr: 103be26
popfd
pushad
pushfd
push 103be2e
add esp, 04h
push 103be38
add esp, 04h
lea esp, dword ptr [esp-04h]
xchg dword ptr [esp], eax
not eax
and eax, eax
cmp eax, eax
push 103be6c
add esp, 04h
push 103be76
add esp, 04h
lea esp, dword ptr [esp-04h]
xchg dword ptr [esp], eax
test eax, eax
xchg dword ptr [esp], eax
push 103beb0
add esp, 04h
lea esp, dword ptr [esp+04h]
push 103bed6
push 103bedb
add esp, 04h
add dword ptr [esp], 49h
push 103bf01
add esp, 04h
retaddr: 103bf1f
xchg dword ptr [esp], eax
push 103bf31
add esp, 04h
lea esp, dword ptr [esp+04h]
push 103bf57
add dword ptr [esp], 29h
push 103bf60
add esp, 04h
retaddr: 103bf80
push 103bf85
push 103bb63
xchg dword ptr [esp], eax

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (4)
雪    币: 293
活跃值: (287)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
这个想想能不能自动化,首先第一步把
68 ????????    push xxxxxxxx
83C4 04      add esp, 0x4
全部nop掉,然后再接下去看能不能多找一些代码对比
lea esp, dword ptr [esp-0x4]
。。。
lea esp, dword ptr [esp+0x4]
证明这两条指令中间的代码是不是都是费代码,或者更长的代码,如果能证明继续nop,不能就找其它,基本能确定是费代码的清理干净先
2016-8-18 09:26
0
雪    币: 12504
活跃值: (3093)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
[QUOTE=瀚海云烟;1441502]这个想想能不能自动化,首先第一步把
68 ????????    push xxxxxxxx
83C4 04      add esp, 0x4
全部nop掉,然后再接下去看能不能多找一些代码对比
lea esp, dword ptr [esp-0x4]
。。。
lea esp, dword ptr...[/QUOTE]

清理出来以后,代码少的吓人,基本就几个add和push。
2016-8-18 11:03
0
雪    币: 81
活跃值: (115)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
自动化解决方案:
1.用python调用反汇编库读指令
2.编写删除规则函数和化简规则函数(观察总结膨胀规律)
3.对代码段循环调用删除和化简规则函数直至无法化简为止
4.化简后指令大大减少,重排代码(一些转跳膨胀会把代码打散),填写回EXE

关于第二部,大体上可以分为
1.寄存器相关膨胀
2.堆栈相关膨胀
3.跳转指令相关膨胀
前2者都可以通过模拟运行,通过数据流是否被使用,删除所有无关指令,
注意处理循环体的情况,模拟时把循环体跑上2轮
第3种形式相对较为固定push + ret之类的,直接编写规则替换,像VM这种复杂的转跳也可以通过前2者模拟时得到的堆栈上数据得到转跳地址

我个人实践下来,如果恢复出来的代码只是用来阅读,还是很方便的。如果要恢复出能直接运行的代码,还得花很多功夫处理一些细节
2016-8-18 15:07
0
雪    币: 12504
活跃值: (3093)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
5
是,python在这方面真的是不二选择,现在是用正则表达式来匹配,没有用反汇编引擎。至于那些跳转把代码打乱,不是问题,我这里已经是获取了连续的代码,剔除了无用的jcc、jmp和ret了,ret的地址也都是自动计算的,即使有自修改代码也不是问题,大部分情况可以模拟的出来。。
2016-8-18 15:46
0
游客
登录 | 注册 方可回帖
返回