首页
社区
课程
招聘
[求助]变形或混淆的代码应该怎么去分析?
发表于: 2016-3-25 02:59 10085

[求助]变形或混淆的代码应该怎么去分析?

2016-3-25 02:59
10085
假设有如下代码:
mov  eax, 00401588h
push  eax
push  eax
push  edi


可以写成这样:

push  00401588h
xchg  eax, [esp]
mov  eax, [esp]
mov  eax, [esp]
push  esi
pushf
mov  [esp+4], eax
popf
mov  eax, [esp]
mov  [esp+4], eax
lea  esp, [esp-4]
pushf
mov  [esp+4], edi
mov  [esp], eax
pop  edi
mov  edi, [esp]


当然还可以写得更加复杂; 如果纯人工分析,根本不切实际, 因为如果 1KB 代码经过大量的混淆,或者可以多次多重混淆,1KB 的代码量, 可以变成 5MB, 10MB 甚至上百MB!!!

我很想知道, 有什么方便快捷的方法能够还原? 就是自动化, 当然不求还原到原来最精练的样式,但至少不会那么晦涩; 比如,什么工具,什么脚本,什么插件, 或者构建什么环境如何去做, 可以对付这种情况?

真心求指点, 哪怕只是提个关键字;

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

收藏
免费 0
支持
分享
最新回复 (10)
雪    币: 81
活跃值: (100)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
2
本以为楼主是来技术讨论,原来只是来伸手要工具,浪费时间精力
2016-3-25 10:30
0
雪    币: 5
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
其实我觉得吧,没必要分析那么清楚,直接看堆栈,F8运行后,看堆栈+xxx,就可以确定有好多个参数了。然后再去找有用的参数啊 什么的,主要不是去还原vm,没必要去搞懂所有的混淆代码撒
2016-3-25 10:38
0
雪    币: 576
活跃值: (1163)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
4
敲代码搞
2016-3-25 14:50
0
雪    币: 36
活跃值: (212)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
我一开始也是这样想、也是这样做的;但我越往前越发现它的混淆规则多达上百种之多,并且还会在原来的混淆基础上再混淆, 我的去混淆程序越来越臃肿,并且由于自己的能力不够,去混淆不能做到智能一点,比如, 1 5 8 6 9 可以认识, 下次碰上 1 5 8 6 0 9 就识别不了了; 当然,有阿尔法人工智能那样的东西的话,去这种混淆根本不是问题;  还是那句话, 对于这种规则之多、混淆再混淆的东西,自己没有能力写这种去混淆的脚本或程序,只能做到片面, 得不偿失;
2016-3-25 18:31
0
雪    币: 36
活跃值: (212)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
这个我也试过,但是耗费的时间实在太大; 有一个例程, 两万行的汇编代码, 我分析了整整两天两夜,最后自己写代码, 发现只有一百多行的C代码, 你说这个是什么比例 ...   我不知道这是什么工具混淆的。 并且, 如果不去混淆,就直接调试分析的话, 很容易乱的,有些几万行的, 搞着搞着就找不到边了,。。。。
2016-3-25 18:41
0
雪    币: 36
活跃值: (212)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
我想,这种混淆(加密)方式原理就是这么简单,不像虚拟机那种东西那么复杂,市面上肯定已经有了对付这种混淆的工具或脚本或者插件之类的,而我不知道;   当然不求免费, 价格在可承受范围内的话,肯定要去买, 这种东西太折磨人了。。。。
2016-3-25 18:47
0
雪    币: 81
活跃值: (100)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
8
你以为写混淆程序的那人是怎么写的?你多去看点资料吧,你反混淆的手段太单纯了,还是说你只是想伸手,让别人给你个程序,会自动搞定一切。就像一开始说的那样,不存在。你要是觉得得不偿失,就证明了一句话:破解成本大于本身的价值,就成功保护了程序,你的逆向失败了
2016-3-26 07:46
0
雪    币: 1022
活跃值: (31)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
一般分析分两种:
1、指令流分析方法
2、数据流分析方法

对于指令流分析,一般是先将混淆后的代码转换成中间代码,然后再优化,最后重新输出汇编。
对于数据流分析,一般只能手工分析不太复杂的算法。如果是分析一个程序的功能可以从API入手,或者借助API监控工具。
2016-3-26 21:21
0
雪    币: 153
活跃值: (181)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
10
他这个混淆都是对栈的操作嘛,你自己写个栈来模拟不就行了。
2017-6-7 14:51
0
雪    币: 1176
活跃值: (1264)
能力值: ( LV12,RANK:380 )
在线值:
发帖
回帖
粉丝
11
楼上  感觉很厉害啊    拿VMP3.+做例子  让我们学习吧2333333333 
2017-6-7 15:14
0
游客
登录 | 注册 方可回帖
返回
//