一个简单而又奇怪的CM,求详细分析,CB奖励
这个CM是很多年前一个大牛随手甩给我的,本来应该很简单的,可能我功底太差,用了各种常规的方法还是没什么头绪。看起来是没壳的,但是区段有点奇怪,有个.upx0区段。
我用过了暂停法、按钮事件法、堆栈回溯法进行分析,得到的代码总是乱的,EIP经常到处跳。真心希望求大牛指点指点。不胜感激。
成功图(成功是因为我知道密码,我自己的能力并不足以分析出来):
如果能说明详细的分析过程(是否加壳、是否加密、如何爆破和追码),我将在悬赏区以88CB奉上。先谢谢各位大佬~
附件如下:
其实从易语言核心库入手还是有用的
易语言程序 用E-Debug2.0分析一下
/**********************************************************************/
/* ->开始分析<- */ 分析地址:0x400000 内存大小:0xC2000
/**********************************************************************/
419FD0 -> 设置窗口组件内容
419FB0 -> 获取窗口组件内容
41A070 -> 内存申请
41A1A0 -> 内存释放
419C60 -> 核心库命令调用
419C20 -> 三方库命令调用
419BE0 -> 数据表初始化
41A0C0 -> 结束
419C10 -> Api调用
41A0E0 -> 内存分配
419F90 -> 运行出错回调
/*====================================================================*/
/*=====支持库调用命令分析=============================================*/
/*====================================================================*/
----系统核心支持库 (d09f2340818511d396f6aaf844c7e325)
004011D0 --> 4011D0 (到整数)
004013D0 --> 4013D0 (信息框)
/*====================================================================*/
/*======Api命令分析===================================================*/
/*====================================================================*/
/**********************************************************************/
/* ->结束分析<- */
/**********************************************************************/
可以从这几个地方切入
00401158 /FF25 289B4600 jmp dword ptr ds: ; <upx.核心库命令调用>
0040115E |FF25 3C9B4600 jmp dword ptr ds: ; <upx.内存释放>
00401164 |FF25 2C9B4600 jmp dword ptr ds: ; <upx.获取窗口组件内容>
程序流程大概如下:1. 获取编辑框文本内容2. 到整数3. 释放文本内容的内存4. 运算比较5. 信息框从释放内存之后进行跟踪.如画眉前辈所说,是老版本的vmp,可以直接用zdhysd前辈的vmp分析插件来分析伪指令.从004BB7EF开始分析,分析出来的伪指令有上万行.在释放内存返回后,从堆栈里找到整数型的key,下硬件访问断点,中断在vReadMemSs4.
004BC917|.46vReadMemSs4
004BC916|.68vFild4
可以看到,从堆栈获取key后紧接着一个fild.易语言中几乎所有算数运算都是浮点数运算,接下来可以尝试直接找浮点数运算相关的handler.
004BC916|.68vFild4
004BC8DE|.D2vFstp8
004BC6CE|.20vFld8
004BC585|.32vFmul8
004BC2CB|.43vFstp8
004BC0D3|.7CvFld8
004BBFDB|.5EvFsub8
004BBF03|.3AvFstp8
004BBAB7|.A7vFld8
004BBA4C|.5EvFsub8
004BBA48|.A5vFtst
004C0BB3|.C1vFstsw
004BA4D5|.02vFchs
004BA1C2|.3FvFcomp8
004B9DAC|.C1vFstsw
对比伪指,来看看一个易语言中标准的浮点数比较是什么样的. fld operand1
fsub operand2
ftst
fstsw ax
test ah, const
je short @f
fchs
@@:
fcomp 9.999999999999998e-08
fstsw ax
test ah, const
je somewhere ; key jump
在handler上下断点,可以得到参数.
004BC585|.32vFmul8 // key*4
004BBFDB|.5EvFsub8 // key*4-1
004BBA4C|.5EvFsub8 // key*4-1-3157824491
反向推算一下,(3157824491+1)/4=789456123. 看起来是没壳的,但是区段有点奇怪,有个.upx0区段。
强烈的直觉是VMP的VM。 {:301_1005:}坐等大佬出手,小白能力不足,前排围观 本帖最后由 cqr2287 于 2017-6-14 18:14 编辑
.vmp0
.vmp1
.upx0
确实有点像
前排膜拜bazzi 本帖最后由 凉游浅笔深画眉 于 2017-5-21 11:02 编辑
老版本的VM
只会爆破,方法太low,坐等大牛贴VM分析思路。 关键处的代码全都看不懂了{:1_923:} 围观大神搞CM key: 789456123
是vmp加壳 只是虚拟化了代码 没有打包外壳而已 _BaZzi 发表于 2017-5-21 11:18
key: 789456123
是vmp加壳 只是虚拟化了代码 没有打包外壳而已
日常膜拜把子牛 _BaZzi 发表于 2017-5-21 11:18
key: 789456123
是vmp加壳 只是虚拟化了代码 没有打包外壳而已
日了狗那么厉害膜拜牛人
页:
[1]
2